From f8512ea2cb3915f08237dcdbf354d3461abb2f94 Mon Sep 17 00:00:00 2001 From: aooiuu Date: Sat, 1 Jun 2024 18:36:56 +0800 Subject: [PATCH] chore: deploy vsx --- .github/workflows/electron.yml | 64 --------- .github/workflows/release.yml | 95 +++++++++++++ .github/workflows/vsx-release.yml | 48 +++++++ Dockerfile | 2 +- package.json | 11 +- packages/shared/src/api.ts | 18 ++- packages/vscode/.yarnrc | 1 - packages/vscode/package.json | 31 +++-- packages/vscode/scripts/publish.cjs | 14 ++ packages/vscode/src/test/runTest.ts | 23 ---- .../vscode/src/test/suite/extension.test.ts | 15 -- packages/vscode/src/test/suite/index.ts | 38 ------ packages/vscode/tsconfig.json | 2 +- packages/web/package.json | 1 + packages/web/src/pages/pc/rules/index.vue | 70 ++++------ pnpm-lock.yaml | 128 +++++++++++++++--- 16 files changed, 328 insertions(+), 233 deletions(-) delete mode 100644 .github/workflows/electron.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/vsx-release.yml delete mode 100644 packages/vscode/.yarnrc create mode 100644 packages/vscode/scripts/publish.cjs delete mode 100644 packages/vscode/src/test/runTest.ts delete mode 100644 packages/vscode/src/test/suite/extension.test.ts delete mode 100644 packages/vscode/src/test/suite/index.ts diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml deleted file mode 100644 index 6f812c20..00000000 --- a/.github/workflows/electron.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: Electron - -on: - push: - tags: - - "*" - -jobs: - release: - name: build and release electron app - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - os: [windows-latest] - # os: [windows-latest, macos-latest, ubuntu-latest] - - steps: - - name: Check out git repository - uses: actions/checkout@v4.1.1 - - - uses: pnpm/action-setup@v3 - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: pnpm - - - name: Install dependencies - run: pnpm install # or pnpm install / yarn install / bun install - - - name: Build Libs - run: pnpm run build - - - name: Build Electron App - run: pnpm electron:build - # env: - # GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} - - - name: Cleanup Artifacts for Windows - if: matrix.os == 'windows-latest' - run: | - npx rimraf "packages/web/dist/electron/!(*.exe)" - - - name: Cleanup Artifacts for MacOS - if: matrix.os == 'macos-latest' - run: | - npx rimraf "packages/web/dist/electron/!(*.dmg)" - - - name: upload artifacts - uses: actions/upload-artifact@v3.0.0 - with: - name: ${{ matrix.os }} - path: packages/web/dist/electron - - - name: release - uses: softprops/action-gh-release@v2.0.4 - if: startsWith(github.ref, 'refs/tags/') - with: - files: "packages/web/dist/electron/**" - # prerelease: true - env: - GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..2d2b236c --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,95 @@ +name: Release + +on: + push: + tags: + - "*" + +jobs: + release: + name: release + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: [windows-latest] + # os: [windows-latest, macos-latest, ubuntu-latest] + + steps: + - name: Check out git repository + uses: actions/checkout@v4.1.1 + + - uses: pnpm/action-setup@v3 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + + - name: pnpm install + run: pnpm install + + - name: build core + run: pnpm run core:build + + - name: build shared + run: pnpm run shared:build + + - name: build vscode template + run: pnpm run vscode:build-tpl + + - name: rename vscode vsx + # working-directory 用于指定在哪个目录下执行命令 + working-directory: ./packages/vscode + run: pnpm run build:rename + + # https://github.com/HaaLeo/publish-vscode-extension + - name: build vscode vsx + uses: HaaLeo/publish-vscode-extension@v1 + id: publishVSX + with: + packagePath: ./packages/vscode + pat: ${{ secrets.VSCODE_TOKEN }} + # 不发布 + dryRun: true + skipDuplicate: true + registryUrl: https://marketplace.visualstudio.com + yarn: false + + - name: Build Electron App + run: pnpm electron:build + # env: + # GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} + + - name: Cleanup Artifacts for Windows + if: matrix.os == 'windows-latest' + run: | + npx rimraf "packages/web/dist/electron/!(*.exe)" + + # - name: Cleanup Artifacts for MacOS + # if: matrix.os == 'macos-latest' + # run: | + # npx rimraf "packages/web/dist/electron/!(*.dmg)" + + # https://github.com/actions/upload-artifact + - name: upload artifacts + uses: actions/upload-artifact@v3.0.0 + with: + name: ${{ matrix.os }} + path: | + ${{ steps.publishVSX.outputs.vsixPath }} + packages/web/dist/electron + + # https://github.com/softprops/action-gh-release + - name: release + uses: softprops/action-gh-release@v2.0.4 + if: startsWith(github.ref, 'refs/tags/') + with: + # draft: true + files: | + packages/web/dist/electron/** + packages/vscode/*.vsix + # prerelease: true + env: + GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} diff --git a/.github/workflows/vsx-release.yml b/.github/workflows/vsx-release.yml new file mode 100644 index 00000000..bea4d4c4 --- /dev/null +++ b/.github/workflows/vsx-release.yml @@ -0,0 +1,48 @@ +name: VSX Release + +on: + push: + branches: + - "vscode/**" + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Check out git repository + uses: actions/checkout@v4.1.1 + + - uses: pnpm/action-setup@v3 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + + - name: pnpm install + run: pnpm install + + - name: build core + run: pnpm run core:build + + - name: build shared + run: pnpm run shared:build + + - name: build vscode template + run: pnpm run vscode:build-tpl + + - name: rename vscode vsx + working-directory: ./packages/vscode + run: pnpm run build:rename + + # https://github.com/HaaLeo/publish-vscode-extension + - name: build vscode vsx + uses: HaaLeo/publish-vscode-extension@v1 + id: publishVSX + with: + packagePath: ./packages/vscode + pat: ${{ secrets.VSCODE_TOKEN }} + skipDuplicate: true + registryUrl: https://marketplace.visualstudio.com + yarn: false diff --git a/Dockerfile b/Dockerfile index 4e7b5ad8..4746161e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ COPY --parents packages/*/package.json /app/ RUN pnpm install COPY . /app -RUN pnpm build:core && pnpm build:shared +RUN pnpm core:build && pnpm shared:build EXPOSE 8899 CMD ["pnpm", "web:dev"] diff --git a/package.json b/package.json index daa540b7..3f1271f6 100644 --- a/package.json +++ b/package.json @@ -25,15 +25,15 @@ ], "scripts": { "run:core": "npm -C packages/core run start", - "build:core": "npm -C packages/core run build", - "build:shared": "npm -C packages/shared run build", + "core:build": "npm -C packages/core run build", + "shared:build": "npm -C packages/shared run build", + "build": "npm-run-all core:build shared:build build:web", "build:web": "npm -C packages/web run build", "build:web-w": "npm -C packages/web run build:w", - "run:vsc": "npm-run-all build:core build:web-w", + "run:vsc": "npm-run-all core:build build:web-w", "docs": "npm -C docs run docs:dev", "build:docs": "npm -C docs run docs:build", "server": "npm -C packages/server run dev", - "build": "npm-run-all build:core build:shared build:web", "run:server": "run-p server run:web", "test": "jest", "coveralls": "jest --coverage", @@ -44,7 +44,8 @@ "electron:server": "npm -C packages/web run electron:dev", "electron:build": "npm -C packages/web run electron:build", "vscode:server": "npm -C packages/web run vscode:dev", - "vscode:dev": "npm-run-all build:core build:shared --parallel vscode:server server", + "vscode:dev": "npm-run-all core:build shared:build --parallel vscode:server server", + "vscode:build-tpl": "npm -C packages/web run vscode:build", "vscode:build": "npm -C packages/vscode run build", "server:build": "npm -C packages/server run build", "cli:build-tpl": "npm -C packages/web run cli:build", diff --git a/packages/shared/src/api.ts b/packages/shared/src/api.ts index 5856992f..0fdd5925 100644 --- a/packages/shared/src/api.ts +++ b/packages/shared/src/api.ts @@ -241,8 +241,13 @@ export function useApi(register: any, { CONFIG_PATH, bookDir }: any) { // 记录接口调用情况 if (typeof log === 'object' && log.ruleId && log.check) { - const isOk = log.check(result) - ruleExtraManager.updateApiStatus(log.ruleId(...arg), isOk ? `${apiPath}.ok` : `${apiPath}.fail`) + const ruleId = log.ruleId(...arg) + + // 不记录没有规则ID的接口 + if (ruleId) { + const isOk = log.check(result) + ruleExtraManager.updateApiStatus(ruleId, isOk ? `${apiPath}.ok` : `${apiPath}.fail`) + } } // 返回数据 @@ -255,6 +260,11 @@ export function useApi(register: any, { CONFIG_PATH, bookDir }: any) { check: (v: any[]) => Array.isArray(v) && v.length > 0, } + const contentLog = { + ruleId: (data: any) => data.ruleId, + check: (v: any) => v?.content?.length > 0, + } + // 注册接口 registerApi('get@discoverMap', async ({ ruleId = '' } = {}) => await discoverMap(ruleId), discoverLog) registerApi('post@discover', async (data: any) => await discover(data), discoverLog) @@ -268,8 +278,8 @@ export function useApi(register: any, { CONFIG_PATH, bookDir }: any) { registerApi('post@createRule', async (data: any) => await createRule(data)) registerApi('post@updateRule', async (data: any) => await updateRule(data)) registerApi('post@searchByRuleId', async (data: any) => await searchByRuleId(data), discoverLog) - registerApi('post@content', async (data: any) => await content(data)) - registerApi('post@getChapter', async (data: any) => await getChapter(data)) + registerApi('post@content', async (data: any) => await content(data), contentLog) + registerApi('post@getChapter', async (data: any) => await getChapter(data), discoverLog) registerApi('get@readConfig', async () => await readConfig(CONFIG_PATH)) registerApi('post@updateConfig', async (data: any) => await updateConfig(CONFIG_PATH, data)) registerApi('get@getRuleExtras', async () => await getRuleExtras()) diff --git a/packages/vscode/.yarnrc b/packages/vscode/.yarnrc deleted file mode 100644 index f757a6ac..00000000 --- a/packages/vscode/.yarnrc +++ /dev/null @@ -1 +0,0 @@ ---ignore-engines true \ No newline at end of file diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 3aa35a37..d499c2ab 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -1,9 +1,9 @@ { - "name": "any-reader", + "name": "@any-reader/vscode", "displayName": "any-reader", "description": "摸鱼,自定义规则多站点聚合搜索阅读小说、漫画。包含JS规则解析库和VSCode插件。支持本地小说 TXT、EPUB", "icon": "resources/icon.png", - "version": "1.3.3", + "version": "1.3.5", "publisher": "aooiu", "qna": "https://github.com/aooiuu/any-reader/issues", "bugs": { @@ -43,14 +43,16 @@ ], "main": "./dist/extension.js", "scripts": { - "build": "vsce package --no-dependencies", - "vscode:prepublish": "yarn run package", + "build:rename": "esno ./scripts/publish.cjs", + "build:vsce": "vsce package --no-dependencies", + "build": "npm-run-all build:rename build:vsce", + "vscode:prepublish": "pnpm run package", "compile": "webpack", "watch": "webpack --watch", "package": "webpack --mode production --devtool hidden-source-map", "compile-tests": "tsc -p . --outDir out", "watch-tests": "tsc -p . -w --outDir out", - "pretest": "yarn run compile-tests && yarn run compile && yarn run lint", + "pretest": "pnpm run compile-tests && pnpm run compile && pnpm run lint", "lint": "eslint src --ext ts", "test": "node ./out/test/runTest.js" }, @@ -208,6 +210,8 @@ } }, "devDependencies": { + "@any-reader/core": "workspace:*", + "@any-reader/shared": "workspace:*", "@types/fs-extra": "^11.0.4", "@types/glob": "^7.2.0", "@types/mocha": "^9.1.1", @@ -216,24 +220,23 @@ "@typescript-eslint/eslint-plugin": "^5.30.0", "@typescript-eslint/parser": "^5.30.0", "@vscode/test-electron": "^2.1.5", + "bufferutil": "^4.0.8", + "easy-post-message": "^0.1.0", "eslint": "^8.18.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.2.1", + "execa": "^8.0.1", + "explorer-opener": "^1.0.1", + "fs-extra": "^11.1.1", "glob": "^8.0.3", "mocha": "^10.0.0", "prettier": "^2.7.1", + "qs": "^6.12.1", "ts-loader": "^9.3.1", "typescript": "^4.7.4", + "utf-8-validate": "^6.0.4", + "uuid": "^9.0.1", "webpack": "^5.73.0", "webpack-cli": "^4.10.0" - }, - "dependencies": { - "@any-reader/core": "workspace:*", - "@any-reader/shared": "workspace:*", - "easy-post-message": "^0.1.0", - "explorer-opener": "^1.0.1", - "fs-extra": "^11.1.1", - "qs": "^6.12.1", - "uuid": "^9.0.1" } } diff --git a/packages/vscode/scripts/publish.cjs b/packages/vscode/scripts/publish.cjs new file mode 100644 index 00000000..f31ed097 --- /dev/null +++ b/packages/vscode/scripts/publish.cjs @@ -0,0 +1,14 @@ +const { dirname, join } = require('path'); +const fs = require('fs-extra'); + +const root = dirname(__dirname); + +async function publish() { + const pkgPath = join(root, 'package.json'); + const rawJSON = await fs.readFile(pkgPath, 'utf-8'); + const pkg = JSON.parse(rawJSON); + pkg.name = 'any-reader'; + await fs.writeJSON(pkgPath, pkg, { spaces: 2 }); +} + +publish(); diff --git a/packages/vscode/src/test/runTest.ts b/packages/vscode/src/test/runTest.ts deleted file mode 100644 index 014c3a28..00000000 --- a/packages/vscode/src/test/runTest.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as path from 'path'; - -import { runTests } from '@vscode/test-electron'; - -async function main() { - try { - // The folder containing the Extension Manifest package.json - // Passed to `--extensionDevelopmentPath` - const extensionDevelopmentPath = path.resolve(__dirname, '../../'); - - // The path to test runner - // Passed to --extensionTestsPath - const extensionTestsPath = path.resolve(__dirname, './suite/index'); - - // Download VS Code, unzip it and run the integration test - await runTests({ extensionDevelopmentPath, extensionTestsPath }); - } catch (err) { - console.error('Failed to run tests'); - process.exit(1); - } -} - -main(); diff --git a/packages/vscode/src/test/suite/extension.test.ts b/packages/vscode/src/test/suite/extension.test.ts deleted file mode 100644 index 17e2eab2..00000000 --- a/packages/vscode/src/test/suite/extension.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as assert from 'assert'; - -// You can import and use all API from the 'vscode' module -// as well as import your extension to test it -import * as vscode from 'vscode'; -// import * as myExtension from '../../extension'; - -suite('Extension Test Suite', () => { - vscode.window.showInformationMessage('Start all tests.'); - - test('Sample test', () => { - assert.strictEqual(-1, [1, 2, 3].indexOf(5)); - assert.strictEqual(-1, [1, 2, 3].indexOf(0)); - }); -}); diff --git a/packages/vscode/src/test/suite/index.ts b/packages/vscode/src/test/suite/index.ts deleted file mode 100644 index f584ab03..00000000 --- a/packages/vscode/src/test/suite/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import * as path from 'path'; -import * as Mocha from 'mocha'; -import * as glob from 'glob'; - -export function run(): Promise { - // Create the mocha test - const mocha = new Mocha({ - ui: 'tdd', - color: true - }); - - const testsRoot = path.resolve(__dirname, '..'); - - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } - - // Add files to the test suite - files.forEach((f) => mocha.addFile(path.resolve(testsRoot, f))); - - try { - // Run the mocha test - mocha.run((failures) => { - if (failures > 0) { - e(new Error(`${failures} tests failed.`)); - } else { - c(); - } - }); - } catch (err) { - console.error(err); - e(err); - } - }); - }); -} diff --git a/packages/vscode/tsconfig.json b/packages/vscode/tsconfig.json index 182161da..019fa1f4 100644 --- a/packages/vscode/tsconfig.json +++ b/packages/vscode/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "forceConsistentCasingInFileNames": true, "module": "commonjs", - "target": "ES2020", + "target": "ES2018", "lib": ["ES2020"], "sourceMap": true, "rootDir": "src", diff --git a/packages/web/package.json b/packages/web/package.json index 43d56043..ebfa4693 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -18,6 +18,7 @@ "electron:build-app": "electron-builder", "electron:build": "npm-run-all electron:build-tpl electron:build-app", "vscode:dev": "cross-env VITE_APP_PLATFORM=vscode vite", + "vscode:build": "cross-env VITE_APP_PLATFORM=vscode run-p type-check \"build-only {@}\" --", "cli:build": "cross-env VITE_APP_PLATFORM=browser outDir=../cli/public VITE_APP_BASE_URL=/ vite build", "postinstall": "electron-builder install-app-deps" }, diff --git a/packages/web/src/pages/pc/rules/index.vue b/packages/web/src/pages/pc/rules/index.vue index aacad126..e1511f52 100644 --- a/packages/web/src/pages/pc/rules/index.vue +++ b/packages/web/src/pages/pc/rules/index.vue @@ -108,6 +108,14 @@ function sortableValue(obj, path) { return _.get(obj, path) || Number.MAX_SAFE_INTEGER; } +const LOG_CONFIG = [ + { url: 'post@searchByRuleId', title: '搜索' }, + { url: 'get@discoverMap', title: '发现分类' }, + { url: 'post@discover', title: '发现列表' }, + { url: 'post@getChapter', title: '章节列表' }, + { url: 'post@content', title: '内容' } +]; + const tableColumns = ref([ { title: '名称', @@ -241,57 +249,29 @@ const tableColumns = ref([ width: 120, align: 'center', filterable: { - filters: [ - { - text: '搜索失败>3且成功=0', - value: 1 - }, - { - text: '发现分类失败>3且成功=0', - value: 2 - }, - { - text: '发现列表失败>3且成功=0', - value: 3 - } - ], + filters: LOG_CONFIG.map((log) => ({ + text: log.title + '失败>3且成功=0', + value: log.url + })), filter: (value, record) => { - if (value.includes(1)) { - const ok = _.get(record, 'extra.post@searchByRuleId.ok', 0); - const fail = _.get(record, 'extra.post@searchByRuleId.fail', 0); - return ok === 0 && fail > 3; - } - if (value.includes(2)) { - const ok = _.get(record, 'extra.get@discoverMap.ok', 0); - const fail = _.get(record, 'extra.get@discoverMap.fail', 0); - return ok === 0 && fail > 3; - } - if (value.includes(2)) { - const ok = _.get(record, 'extra.post@discover.ok', 0); - const fail = _.get(record, 'extra.post@discover.fail', 0); - return ok === 0 && fail > 3; - } - return true; + if (value.length !== 1) return true; + const url = value[0]; + + const ok = _.get(record, `extra.${url}.ok`, 0); + const fail = _.get(record, `extra.${url}.fail`, 0); + return ok === 0 && fail > 3; }, multiple: false }, render: ({ record }) => (
-
- 搜索 - {_.get(record, 'extra.post@searchByRuleId.ok', 0)}/ - {_.get(record, 'extra.post@searchByRuleId.fail', 0)} -
-
- 发现分类 - {_.get(record, 'extra.get@discoverMap.ok', 0)}/ - {_.get(record, 'extra.get@discoverMap.fail', 0)} -
-
- 发现列表 - {_.get(record, 'extra.post@discover.ok', 0)}/ - {_.get(record, 'extra.post@discover.fail', 0)} -
+ {LOG_CONFIG.map((log) => ( +
+ {log.title} + {_.get(record, `extra.${log.url}.ok`, 0)}/ + {_.get(record, `extra.${log.url}.fail`, 0)} +
+ ))}
) }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 656131a7..2415984d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -274,29 +274,13 @@ importers: version: 5.3.3 packages/vscode: - dependencies: + devDependencies: '@any-reader/core': specifier: workspace:* version: link:../core '@any-reader/shared': specifier: workspace:* version: link:../shared - easy-post-message: - specifier: ^0.1.0 - version: 0.1.0 - explorer-opener: - specifier: ^1.0.1 - version: 1.0.1 - fs-extra: - specifier: ^11.1.1 - version: 11.1.1 - qs: - specifier: ^6.12.1 - version: 6.12.1 - uuid: - specifier: ^9.0.1 - version: 9.0.1 - devDependencies: '@types/fs-extra': specifier: ^11.0.4 version: 11.0.4 @@ -321,6 +305,12 @@ importers: '@vscode/test-electron': specifier: ^2.1.5 version: 2.1.5 + bufferutil: + specifier: ^4.0.8 + version: 4.0.8 + easy-post-message: + specifier: ^0.1.0 + version: 0.1.0 eslint: specifier: ^8.18.0 version: 8.44.0 @@ -330,6 +320,15 @@ importers: eslint-plugin-prettier: specifier: ^4.2.1 version: 4.2.1(eslint-config-prettier@8.5.0)(eslint@8.44.0)(prettier@2.7.1) + execa: + specifier: ^8.0.1 + version: 8.0.1 + explorer-opener: + specifier: ^1.0.1 + version: 1.0.1 + fs-extra: + specifier: ^11.1.1 + version: 11.1.1 glob: specifier: ^8.0.3 version: 8.0.3 @@ -339,12 +338,21 @@ importers: prettier: specifier: ^2.7.1 version: 2.7.1 + qs: + specifier: ^6.12.1 + version: 6.12.1 ts-loader: specifier: ^9.3.1 version: 9.3.1(typescript@4.7.4)(webpack@5.73.0) typescript: specifier: ^4.7.4 version: 4.7.4 + utf-8-validate: + specifier: ^6.0.4 + version: 6.0.4 + uuid: + specifier: ^9.0.1 + version: 9.0.1 webpack: specifier: ^5.73.0 version: 5.73.0(webpack-cli@4.10.0) @@ -5984,6 +5992,14 @@ packages: engines: {node: '>=0.2.0'} dev: true + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.1 + dev: true + /builder-util-runtime@9.2.4: resolution: {integrity: sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==} engines: {node: '>=12.0.0'} @@ -6998,7 +7014,6 @@ packages: resolution: {integrity: sha512-6if64nGERA22fzfhXBLe4oPLCy0PzJen3nhN/X1PnZDMdc3KRyWtLZbgsN9GBjA485HQKmDfiwUC0JJ8/UIPZQ==} dependencies: mitt: 3.0.1 - dev: false /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -8459,6 +8474,21 @@ packages: strip-final-newline: 2.0.0 dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /exenv-es6@1.1.1: resolution: {integrity: sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==} dev: false @@ -8481,7 +8511,7 @@ packages: /explorer-opener@1.0.1: resolution: {integrity: sha512-UimYX294uh2ltmyMkjb6hZwkLZvfa8Pu9SXHpAQrrtS5KWEQ5LfNpLYQwT8U/lLILpR0fJd6m5TfPK2UvU5HoA==} - dev: false + dev: true /extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} @@ -8717,7 +8747,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: false /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} @@ -8826,6 +8855,11 @@ packages: engines: {node: '>=10'} dev: true + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -9223,6 +9257,11 @@ packages: engines: {node: '>=10.17.0'} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /husky@8.0.0: resolution: {integrity: sha512-4qbE/5dzNDNxFEkX9MNRPKl5+omTXQzdILCUWiqG/lWIAioiM5vln265/l6I2Zx8gpW8l1ukZwGQeCFbBZ6+6w==} engines: {node: '>=14'} @@ -9552,6 +9591,11 @@ packages: engines: {node: '>=8'} dev: true + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -10651,6 +10695,11 @@ packages: engines: {node: '>=6'} dev: true + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} @@ -10930,6 +10979,11 @@ packages: whatwg-url: 5.0.0 dev: false + /node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + dev: true + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true @@ -10980,6 +11034,13 @@ packages: path-key: 3.1.1 dev: true + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + /nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} dev: false @@ -11046,6 +11107,13 @@ packages: mimic-fn: 2.1.0 dev: true + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /only@0.0.2: resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} dev: false @@ -11257,6 +11325,11 @@ packages: engines: {node: '>=8'} dev: true + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true @@ -11563,7 +11636,6 @@ packages: engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 - dev: false /queue-microtask@1.2.2: resolution: {integrity: sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==} @@ -12439,6 +12511,11 @@ packages: engines: {node: '>=6'} dev: true + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -13132,6 +13209,14 @@ packages: resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} dev: false + /utf-8-validate@6.0.4: + resolution: {integrity: sha512-xu9GQDeFp+eZ6LnCywXN/zBancWvOpUMzgjLPSjy4BRHSmTelvn2E0DG0o1sTiw5hkCKBHo8rwSKncfRfv2EEQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.1 + dev: true + /utf8-byte-length@1.0.5: resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} dev: true @@ -13147,7 +13232,6 @@ packages: /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true - dev: false /v8-to-istanbul@9.2.0: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==}