diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 995c51e..eeb65fb 100755 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ on: workflow_dispatch: jobs: - test: + lint: timeout-minutes: 30 runs-on: ubuntu-latest steps: @@ -28,13 +28,10 @@ jobs: - name: Run ESLint on source run: yarn lint - - name: Run tests - run: yarn test:unit - build-publish: if: github.ref == 'refs/heads/master' timeout-minutes: 30 - needs: test + needs: lint permissions: contents: write strategy: @@ -71,7 +68,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tagName: ncgmgr-v__VERSION__ + tagName: v__VERSION__ releaseName: "NCGMGR v__VERSION__" releaseDraft: true prerelease: false diff --git a/README.md b/README.md index 4c2b0d8..846ba44 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,6 @@ NodeCG ManaGeR, built with [Tauri](https://tauri.app/) and Vue.js. ## Commands -- `yarn test:unit` - Run tests -- `yarn test:update` - Run tests and update snapshots - `yarn lint` - Run linter to check for errors in JS - `yarn lint:fix` - Fix automatically fixable linter errors - `yarn tauri build` - Build and bundle the application diff --git a/docs/development.md b/docs/development.md index 0dccf86..2e41deb 100644 --- a/docs/development.md +++ b/docs/development.md @@ -21,13 +21,6 @@ On macOS, the build will create a DMG package in the `src-tauri/target/release/b During development, use the `yarn tauri:serve` command to take advantage of hot-reloading and faster build times. -## Tests - -NCGMGR has a suite of frontend tests running on the Jest framework. - -To run frontend tests, run `yarn test:unit`. -To run tests while updating snapshots, run `yarn test:update`. - ## Code style NCGMGR uses ESLint to automatically enforce a consistent code style. ESLint is run automatically by GitHub Actions diff --git a/docs/img/bundle-management.jpg b/docs/img/bundle-management.jpg deleted file mode 100644 index ce5aff5..0000000 Binary files a/docs/img/bundle-management.jpg and /dev/null differ diff --git a/docs/img/first-install.png b/docs/img/first-install.png new file mode 100644 index 0000000..7ec0e7e Binary files /dev/null and b/docs/img/first-install.png differ diff --git a/docs/img/main-view.png b/docs/img/main-view.png new file mode 100644 index 0000000..500e6d2 Binary files /dev/null and b/docs/img/main-view.png differ diff --git a/docs/img/missing-nodejs-warning.png b/docs/img/missing-nodejs-warning.png index 470018f..f087aa8 100644 Binary files a/docs/img/missing-nodejs-warning.png and b/docs/img/missing-nodejs-warning.png differ diff --git a/docs/img/select-install-directory.png b/docs/img/select-install-directory.png deleted file mode 100644 index 51ea1b0..0000000 Binary files a/docs/img/select-install-directory.png and /dev/null differ diff --git a/docs/img/settings.png b/docs/img/settings.png new file mode 100644 index 0000000..5e1fc60 Binary files /dev/null and b/docs/img/settings.png differ diff --git a/docs/requirements.txt b/docs/requirements.txt index 2a06bf4..6e42e57 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,2 @@ mkdocs==1.3.0 -jinja2==3.0.0 +jinja2==3.1.3 diff --git a/docs/users-guide.md b/docs/users-guide.md index 8ffe378..2c97548 100644 --- a/docs/users-guide.md +++ b/docs/users-guide.md @@ -29,34 +29,45 @@ NCGMGR needs Node.js to be installed to function. It will check for a Node.js in When a Node.js installation is not found, an alert will be displayed to the user. To download Node.js, visit its [website.](https://nodejs.dev/) The LTS version of Node.js is sufficient for the majority of users. -### Installing a new copy of NodeCG +## Installing a new copy of NodeCG -![Message displayed when prompted to select an install directory](img/select-install-directory.png) +![The application after it is first started](img/first-install.png) -When a Node.js installation is found, you will be prompted to choose a directory to install NodeCG in. -Click "Select folder" and pick a directory. In order to install NodeCG from scratch, select an empty directory. -After selecting a suitable directory, click "Install" to start the installation process. +When a Node.js installation is found, NCGMGR can either automatically select a directory and install NodeCG into it, +install NodeCG into a custom user directory or manage an existing installation of NodeCG. -### Using an existing installation of NodeCG - -To use an existing installation of NodeCG, click "Select folder" and select the directory NodeCG was installed in. -NCGMGR will automatically look for a NodeCG installation when a new install directory is selected. - -### Starting NodeCG - -After setting up a NodeCG installation, click on "Start" to start NodeCG. A log window will appear, showing any messages -that appear while NodeCG is running. While NodeCG is running, click "Open dashboard" to open the NodeCG dashboard in a -web browser. NodeCG may be stopped by clicking on the "Stop" button. - -## Managing bundles +## Managing bundles and using NodeCG +After NodeCG has been installed, the interface will display options to start and stop NodeCG and manage bundles. A *bundle* in NodeCG contains graphics, dashboard panels and Node.js code (Extensions). -![The bundle management interface](img/bundle-management.jpg) +![The main application interface](img/main-view.png) ### Installing bundles -Bundles can be installed from the following sources: +Bundles can be installed by selecting "Add Bundle" in the main application window and typing one of the following as the +repository path: - A GitHub username/repository name pair (`inkfarer/ipl-overlay-controls`) - A git repository URL (`https://github.com/inkfarer/ipl-overlay-controls.git`) + +## Settings + +![The application settings window](img/settings.png) + +Click the settings wrench along the top of the application window to access the settings page. + +### NodeCG status + +From the settings page, the currently selected NodeCG installation directory can be viewed. +Select "Change Install Folder" to return to the first-time setup page and select a different NodeCG installation or +install NodeCG again. + +### Dependency status + +The settings page displays the detected version of Node.js. + +### Error log + +The error log, when enabled, displays a list of errors that have occurred while the application is running. It can be +used to diagnose technical issues with NCGMGR itself. diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 5be021e..0000000 --- a/jest.config.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'jsdom', - testEnvironmentOptions: { - customExportConditions: ['node', 'node-addons'] - }, - transformIgnorePatterns: ['/node_modules/(?!@tauri-apps)'], - transform: { - '^.+\\.(ts|tsx)?$': 'ts-jest', - '.*\\.(vue)$': '@vue/vue3-jest' - }, - moduleNameMapper: { - '@/(.*)$': '/src/$1' - }, - resetMocks: true, - setupFilesAfterEnv: ['./src/__mocks__/tauri.ts'], - reporters: [['github-actions', { silent: false }], 'summary'] -} diff --git a/package.json b/package.json index 13ba48c..571e108 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,10 @@ { "name": "ncgmgr", - "version": "0.6.0", + "version": "0.7.0", "private": true, "scripts": { "dev": "vite", "build": "vite build", - "test:unit": "jest", - "test:update": "jest -u", "tauri": "tauri", "lint": "eslint --ext .js,.vue,.ts ./src", "lint:fix": "eslint --fix --ext .js,.vue,.ts ./src" @@ -16,37 +14,32 @@ "@fortawesome/free-solid-svg-icons": "^5.15.4", "@fortawesome/vue-fontawesome": "^3.0.0-5", "@iplsplatoon/vue-components": "3.2.0", - "@tauri-apps/api": "^1.5.3", - "@tauri-apps/cli": "^1.5.11", + "@tauri-apps/api": "2.0.0-beta.7", + "@tauri-apps/cli": "2.0.0-beta.12", + "@tauri-apps/plugin-dialog": "2.0.0-beta.2", + "@tauri-apps/plugin-fs": "2.0.0-beta.2", + "@tauri-apps/plugin-os": "2.0.0-beta.2", + "@tauri-apps/plugin-shell": "2.0.0-beta.2", + "@tauri-apps/plugin-store": "^2.0.0-beta.2", "anser": "^2.1.0", "lodash": "^4.17.21", - "node-gyp": "^10.1.0", - "pinia": "^2.0.11", - "vue": "^3.2.47" + "pinia": "^2.1.7", + "vue": "^3.4.21" }, "devDependencies": { - "@pinia/testing": "^0.1.3", - "@types/hosted-git-info": "2.7.0", - "@types/jest": "^29.5.12", "@types/lodash": "^4.14.178", "@types/node": "^20.11.30", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", "@vitejs/plugin-vue": "^5.0.4", - "@vue/compiler-sfc": "^3.0.0", - "@vue/test-utils": "^2.4.5", - "@vue/vue3-jest": "^29.2.6", + "@vue/compiler-sfc": "^3.4.21", "eslint": "^8.57.0", "eslint-plugin-vue": "^9.24.0", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", "sass": "^1.45.1", - "ts-jest": "^29.1.2", "tslib": "^2.6.2", "typescript": "~5.4.3", "vite": "^5.2.6", - "vite-tsconfig-paths": "^4.3.2", - "vue-jest": "^5.0.0-0" + "vite-tsconfig-paths": "^4.3.2" }, "packageManager": "yarn@3.2.0" } diff --git a/src-tauri/.gitignore b/src-tauri/.gitignore index c123704..4b93dd6 100644 --- a/src-tauri/.gitignore +++ b/src-tauri/.gitignore @@ -2,3 +2,4 @@ # will have compiled files and executables /target/ WixTools +/gen/schemas diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 4704c9c..29c680b 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -63,33 +63,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" [[package]] -name = "arboard" -version = "3.3.2" +name = "ashpd" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2041f1943049c7978768d84e6d0fd95de98b76d6c4727b09e78ec253d29fa58" +checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093" dependencies = [ - "clipboard-win", - "core-graphics 0.23.1", - "image", - "log", - "objc", - "objc-foundation", - "objc_id", - "parking_lot", - "thiserror", - "windows-sys 0.48.0", - "wl-clipboard-rs", - "x11rb", + "enumflags2", + "futures-channel", + "futures-util", + "rand 0.8.5", + "serde", + "serde_repr", + "tokio", + "url", + "zbus", ] [[package]] name = "async-broadcast" -version = "0.5.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +checksum = "258b52a1aa741b9f09783b2d86cf0aeeb617bbf847f6933340a39644227acbdb" dependencies = [ - "event-listener 2.5.3", + "event-listener 5.2.0", + "event-listener-strategy 0.5.0", "futures-core", + "pin-project-lite", ] [[package]] @@ -105,52 +104,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "async-executor" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" -dependencies = [ - "async-lock 3.3.0", - "async-task", - "concurrent-queue", - "fastrand 2.0.2", - "futures-lite 2.3.0", - "slab", -] - -[[package]] -name = "async-fs" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "blocking", - "futures-lite 1.13.0", -] - -[[package]] -name = "async-io" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" -dependencies = [ - "async-lock 2.8.0", - "autocfg", - "cfg-if", - "concurrent-queue", - "futures-lite 1.13.0", - "log", - "parking", - "polling 2.8.0", - "rustix 0.37.27", - "slab", - "socket2 0.4.10", - "waker-fn", -] - [[package]] name = "async-io" version = "2.3.2" @@ -161,10 +114,10 @@ dependencies = [ "cfg-if", "concurrent-queue", "futures-io", - "futures-lite 2.3.0", + "futures-lite", "parking", - "polling 3.6.0", - "rustix 0.38.32", + "polling", + "rustix", "slab", "tracing", "windows-sys 0.52.0", @@ -192,19 +145,22 @@ dependencies = [ [[package]] name = "async-process" -version = "1.8.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +checksum = "d999d925640d51b662b7b4e404224dd81de70f4aa4a199383c2c5e5b86885fa3" dependencies = [ - "async-io 1.13.0", - "async-lock 2.8.0", + "async-channel", + "async-io", + "async-lock 3.3.0", "async-signal", + "async-task", "blocking", "cfg-if", - "event-listener 3.1.0", - "futures-lite 1.13.0", - "rustix 0.38.32", - "windows-sys 0.48.0", + "event-listener 5.2.0", + "futures-lite", + "rustix", + "tracing", + "windows-sys 0.52.0", ] [[package]] @@ -224,13 +180,13 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" dependencies = [ - "async-io 2.3.2", + "async-io", "async-lock 2.8.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.32", + "rustix", "signal-hook-registry", "slab", "windows-sys 0.48.0", @@ -255,26 +211,25 @@ dependencies = [ [[package]] name = "atk" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" dependencies = [ "atk-sys", - "bitflags 1.3.2", - "glib", + "glib 0.18.5", "libc", ] [[package]] name = "atk-sys" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps 6.2.2", + "system-deps", ] [[package]] @@ -306,15 +261,15 @@ dependencies = [ [[package]] name = "base64" -version = "0.13.1" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" -version = "0.21.7" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51" [[package]] name = "bitflags" @@ -327,6 +282,9 @@ name = "bitflags" version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] [[package]] name = "block" @@ -352,9 +310,9 @@ dependencies = [ "async-channel", "async-lock 3.3.0", "async-task", - "fastrand 2.0.2", + "fastrand", "futures-io", - "futures-lite 2.3.0", + "futures-lite", "piper", "tracing", ] @@ -380,16 +338,6 @@ dependencies = [ "alloc-stdlib", ] -[[package]] -name = "bstr" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "bumpalo" version = "3.15.4" @@ -419,36 +367,69 @@ dependencies = [ [[package]] name = "cairo-rs" -version = "0.15.12" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "cairo-sys-rs", - "glib", + "glib 0.18.5", "libc", + "once_cell", "thiserror", ] [[package]] name = "cairo-sys-rs" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ - "glib-sys", + "glib-sys 0.18.1", "libc", - "system-deps 6.2.2", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", ] [[package]] name = "cargo_toml" -version = "0.15.3" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" +checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", - "toml 0.7.8", + "toml 0.8.12", ] [[package]] @@ -478,15 +459,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "cfg-expr" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" -dependencies = [ - "smallvec", -] - [[package]] name = "cfg-expr" version = "0.15.7" @@ -509,6 +481,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +[[package]] +name = "cfg_aliases" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77e53693616d3075149f4ead59bdeecd204ac6b8192d8969757601b74bddf00f" + [[package]] name = "chrono" version = "0.4.37" @@ -522,27 +500,18 @@ dependencies = [ "windows-targets 0.52.4", ] -[[package]] -name = "clipboard-win" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d517d4b86184dbb111d3556a10f1c8a04da7428d2987bf1081602bf11c3aa9ee" -dependencies = [ - "error-code", -] - [[package]] name = "cocoa" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" dependencies = [ "bitflags 1.3.2", "block", "cocoa-foundation", "core-foundation", - "core-graphics 0.22.3", - "foreign-types 0.3.2", + "core-graphics", + "foreign-types 0.5.0", "libc", "objc", ] @@ -561,12 +530,6 @@ dependencies = [ "objc", ] -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - [[package]] name = "combine" version = "4.6.6" @@ -608,19 +571,6 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", - "foreign-types 0.3.2", - "libc", -] - [[package]] name = "core-graphics" version = "0.23.1" @@ -779,6 +729,12 @@ dependencies = [ "syn 2.0.55", ] +[[package]] +name = "data-url" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" + [[package]] name = "deranged" version = "0.3.11" @@ -800,17 +756,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "derive-new" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.55", -] - [[package]] name = "derive_more" version = "0.99.17" @@ -867,14 +812,40 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading", + "libloading 0.8.3", ] [[package]] -name = "downcast-rs" -version = "1.2.0" +name = "dlopen2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.55", +] + +[[package]] +name = "dpi" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +dependencies = [ + "serde", +] [[package]] name = "dtoa" @@ -897,6 +868,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + [[package]] name = "either" version = "1.10.0" @@ -932,6 +909,12 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "endi" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" + [[package]] name = "enumflags2" version = "0.7.9" @@ -969,29 +952,12 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "error-code" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0474425d51df81997e2f90a21591180b38eccf27292d755f3e30750225c175b" - [[package]] name = "event-listener" version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - [[package]] name = "event-listener" version = "4.0.3" @@ -1034,15 +1000,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - [[package]] name = "fastrand" version = "2.0.2" @@ -1064,7 +1021,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" dependencies = [ - "memoffset 0.9.1", + "memoffset", "rustc_version", ] @@ -1089,12 +1046,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "flate2" version = "1.0.28" @@ -1204,28 +1155,13 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" -[[package]] -name = "futures-lite" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" -dependencies = [ - "fastrand 1.9.0", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - [[package]] name = "futures-lite" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 2.0.2", + "fastrand", "futures-core", "futures-io", "parking", @@ -1283,87 +1219,100 @@ dependencies = [ [[package]] name = "gdk" -version = "0.15.4" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" dependencies = [ - "bitflags 1.3.2", "cairo-rs", "gdk-pixbuf", "gdk-sys", "gio", - "glib", + "glib 0.18.5", "libc", "pango", ] [[package]] name = "gdk-pixbuf" -version = "0.15.11" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" dependencies = [ - "bitflags 1.3.2", "gdk-pixbuf-sys", "gio", - "glib", + "glib 0.18.5", "libc", + "once_cell", ] [[package]] name = "gdk-pixbuf-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps 6.2.2", + "system-deps", ] [[package]] name = "gdk-sys" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", "pango-sys", "pkg-config", - "system-deps 6.2.2", + "system-deps", ] [[package]] name = "gdkwayland-sys" -version = "0.15.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2" +checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a" dependencies = [ "gdk-sys", - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", "pkg-config", - "system-deps 6.2.2", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib 0.18.5", + "libc", + "x11", ] [[package]] name = "gdkx11-sys" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" dependencies = [ "gdk-sys", - "glib-sys", + "glib-sys 0.18.1", "libc", - "system-deps 6.2.2", + "system-deps", "x11", ] @@ -1430,41 +1379,56 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "gio" -version = "0.15.12" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" dependencies = [ - "bitflags 1.3.2", "futures-channel", "futures-core", "futures-io", - "gio-sys", - "glib", + "futures-util", + "gio-sys 0.18.1", + "glib 0.18.5", "libc", "once_cell", + "pin-project-lite", + "smallvec", "thiserror", ] [[package]] name = "gio-sys" -version = "0.15.10" +version = "0.16.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229" +dependencies = [ + "glib-sys 0.16.3", + "gobject-sys 0.16.3", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps 6.2.2", + "system-deps", "winapi", ] [[package]] name = "git2" -version = "0.14.4" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c" +checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "libc", "libgit2-sys", "log", @@ -1475,47 +1439,96 @@ dependencies = [ [[package]] name = "glib" -version = "0.15.12" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +checksum = "16aa2475c9debed5a32832cb5ff2af5a3f9e1ab9e69df58eaadc1ab2004d6eba" dependencies = [ "bitflags 1.3.2", "futures-channel", "futures-core", "futures-executor", "futures-task", - "glib-macros", - "glib-sys", - "gobject-sys", + "futures-util", + "gio-sys 0.16.3", + "glib-macros 0.16.8", + "glib-sys 0.16.3", + "gobject-sys 0.16.3", "libc", "once_cell", "smallvec", "thiserror", ] +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.5.0", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys 0.18.1", + "glib-macros 0.18.5", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror", +] + [[package]] name = "glib-macros" -version = "0.15.13" +version = "0.16.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" +checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b" dependencies = [ "anyhow", "heck 0.4.1", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2", "quote", "syn 1.0.109", ] +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.0", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.55", +] + [[package]] name = "glib-sys" -version = "0.15.10" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65" dependencies = [ "libc", - "system-deps 6.2.2", + "system-deps", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", ] [[package]] @@ -1525,96 +1538,91 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] -name = "globset" -version = "0.4.14" +name = "gobject-sys" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1" dependencies = [ - "aho-corasick", - "bstr", - "log", - "regex-automata 0.4.6", - "regex-syntax 0.8.3", + "glib-sys 0.16.3", + "libc", + "system-deps", ] [[package]] name = "gobject-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ - "glib-sys", + "glib-sys 0.18.1", "libc", - "system-deps 6.2.2", + "system-deps", ] [[package]] name = "gtk" -version = "0.15.5" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" dependencies = [ "atk", - "bitflags 1.3.2", "cairo-rs", "field-offset", "futures-channel", "gdk", "gdk-pixbuf", "gio", - "glib", + "glib 0.18.5", "gtk-sys", "gtk3-macros", "libc", - "once_cell", "pango", "pkg-config", ] [[package]] name = "gtk-sys" -version = "0.15.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" dependencies = [ "atk-sys", "cairo-sys-rs", "gdk-pixbuf-sys", "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", "pango-sys", - "system-deps 6.2.2", + "system-deps", ] [[package]] name = "gtk3-macros" -version = "0.15.6" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" dependencies = [ - "anyhow", - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.55", ] [[package]] name = "h2" -version = "0.3.25" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.12", "indexmap 2.2.6", "slab", "tokio", @@ -1634,15 +1642,6 @@ version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" -[[package]] -name = "heck" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] - [[package]] name = "heck" version = "0.4.1" @@ -1667,15 +1666,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "home" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" -dependencies = [ - "windows-sys 0.52.0", -] - [[package]] name = "html5ever" version = "0.26.0" @@ -1701,6 +1691,17 @@ dependencies = [ "itoa 1.0.11", ] +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa 1.0.11", +] + [[package]] name = "http-body" version = "0.4.6" @@ -1708,15 +1709,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", "pin-project-lite", ] [[package]] -name = "http-range" -version = "0.1.5" +name = "http-body" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +dependencies = [ + "bytes", + "futures-core", + "http 1.1.0", + "http-body 1.0.0", + "pin-project-lite", +] [[package]] name = "httparse" @@ -1741,19 +1759,38 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", - "http-body", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa 1.0.11", "pin-project-lite", - "socket2 0.5.6", + "socket2", "tokio", "tower-service", "tracing", "want", ] +[[package]] +name = "hyper" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "httparse", + "itoa 1.0.11", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -1761,12 +1798,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper", + "hyper 0.14.28", "native-tls", "tokio", "tokio-native-tls", ] +[[package]] +name = "hyper-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "hyper 1.2.0", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -1816,36 +1873,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "ignore" -version = "0.4.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" -dependencies = [ - "crossbeam-deque", - "globset", - "log", - "memchr", - "regex-automata 0.4.6", - "same-file", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-traits", - "png", - "tiff", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -1870,9 +1897,9 @@ dependencies = [ [[package]] name = "infer" -version = "0.13.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" +checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" dependencies = [ "cfb", ] @@ -1887,27 +1914,35 @@ dependencies = [ ] [[package]] -name = "io-lifetimes" -version = "1.0.11" +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + +[[package]] +name = "is-docker" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.48.0", + "once_cell", ] [[package]] -name = "ipnet" -version = "2.9.0" +name = "is-wsl" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] [[package]] name = "itertools" -version = "0.10.5" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] @@ -1926,39 +1961,41 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "javascriptcore-rs" -version = "0.16.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" dependencies = [ "bitflags 1.3.2", - "glib", + "glib 0.18.5", "javascriptcore-rs-sys", ] [[package]] name = "javascriptcore-rs-sys" -version = "0.4.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps 5.0.0", + "system-deps", ] [[package]] name = "jni" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ "cesu8", + "cfg-if", "combine", "jni-sys", "log", "thiserror", "walkdir", + "windows-sys 0.45.0", ] [[package]] @@ -1976,12 +2013,6 @@ dependencies = [ "libc", ] -[[package]] -name = "jpeg-decoder" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" - [[package]] name = "js-sys" version = "0.3.69" @@ -2003,6 +2034,17 @@ dependencies = [ "treediff", ] +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.5.0", + "serde", + "unicode-segmentation", +] + [[package]] name = "kuchikiki" version = "0.8.2" @@ -2022,6 +2064,30 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib 0.18.5", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading 0.7.4", + "once_cell", +] + [[package]] name = "libc" version = "0.2.153" @@ -2030,9 +2096,9 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libgit2-sys" -version = "0.13.5+1.4.5" +version = "0.16.2+1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e5ea06c26926f1002dd553fded6cfcdc9784c1f60feeb58368b4d9b07b6dba" +checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8" dependencies = [ "cc", "libc", @@ -2042,6 +2108,16 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + [[package]] name = "libloading" version = "0.8.3" @@ -2065,9 +2141,9 @@ dependencies = [ [[package]] name = "libssh2-sys" -version = "0.2.23" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b094a36eb4b8b8c8a7b4b8ae43b2944502be3e59cd87687595cf6b0a71b3f4ca" +checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" dependencies = [ "cc", "libc", @@ -2095,12 +2171,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e" -[[package]] -name = "linux-raw-sys" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" - [[package]] name = "linux-raw-sys" version = "0.4.13" @@ -2144,19 +2214,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" -[[package]] -name = "mac-notification-sys" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51fca4d74ff9dbaac16a01b924bc3693fa2bba0862c2c633abc73f9a8ea21f64" -dependencies = [ - "cc", - "dirs-next", - "objc-foundation", - "objc_id", - "time", -] - [[package]] name = "malloc_buf" version = "0.0.6" @@ -2201,15 +2258,6 @@ version = "2.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.9.1" @@ -2225,12 +2273,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.7.2" @@ -2252,6 +2294,25 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "muda" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f428b4e9db3d17e2f809dfb1ff9ddfbbf16c71790d1656d10aee320877e1392f" +dependencies = [ + "cocoa", + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + [[package]] name = "native-tls" version = "0.2.11" @@ -2272,7 +2333,7 @@ dependencies = [ [[package]] name = "ncgmgr" -version = "0.6.0" +version = "0.7.0" dependencies = [ "fix-path-env", "flate2", @@ -2280,6 +2341,7 @@ dependencies = [ "git2", "itertools", "openssl", + "reqwest 0.11.27", "rm_rf", "semver-parser", "serde", @@ -2288,19 +2350,27 @@ dependencies = [ "tar", "tauri", "tauri-build", + "tauri-plugin-dialog", + "tauri-plugin-fs", + "tauri-plugin-http", + "tauri-plugin-os", + "tauri-plugin-shell", + "tauri-plugin-store", + "thiserror", "unwrap_or", ] [[package]] name = "ndk" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ "bitflags 1.3.2", "jni-sys", "ndk-sys", "num_enum", + "raw-window-handle 0.5.2", "thiserror", ] @@ -2312,9 +2382,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.3.0" +version = "0.4.1+23.1.7779620" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" dependencies = [ "jni-sys", ] @@ -2325,18 +2395,6 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.7.1", -] - [[package]] name = "nix" version = "0.28.0" @@ -2345,8 +2403,9 @@ checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" dependencies = [ "bitflags 2.5.0", "cfg-if", - "cfg_aliases", + "cfg_aliases 0.1.1", "libc", + "memoffset", ] [[package]] @@ -2355,29 +2414,6 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "notify-rust" -version = "4.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "827c5edfa80235ded4ab3fe8e9dc619b4f866ef16fe9b1c6b8a7f8692c0f2226" -dependencies = [ - "log", - "mac-notification-sys", - "serde", - "tauri-winrt-notification", - "zbus", -] - [[package]] name = "ntapi" version = "0.4.1" @@ -2437,7 +2473,7 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 1.3.1", "proc-macro2", "quote", "syn 1.0.109", @@ -2499,12 +2535,13 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "open" -version = "3.2.0" +version = "5.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" +checksum = "449f0ff855d85ddbf1edd5b646d65249ead3f5e422aaa86b7d2d0b049b103e32" dependencies = [ + "is-wsl", + "libc", "pathdiff", - "windows-sys 0.42.0", ] [[package]] @@ -2600,12 +2637,12 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pango" -version = "0.15.10" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ - "bitflags 1.3.2", - "glib", + "gio", + "glib 0.18.5", "libc", "once_cell", "pango-sys", @@ -2613,14 +2650,14 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps 6.2.2", + "system-deps", ] [[package]] @@ -2675,16 +2712,6 @@ dependencies = [ "ucd-trie", ] -[[package]] -name = "petgraph" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" -dependencies = [ - "fixedbitset", - "indexmap 2.2.6", -] - [[package]] name = "phf" version = "0.8.0" @@ -2819,6 +2846,26 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.55", +] + [[package]] name = "pin-project-lite" version = "0.2.13" @@ -2838,7 +2885,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" dependencies = [ "atomic-waker", - "fastrand 2.0.2", + "fastrand", "futures-io", ] @@ -2857,7 +2904,7 @@ dependencies = [ "base64 0.21.7", "indexmap 2.2.6", "line-wrap", - "quick-xml 0.31.0", + "quick-xml", "serde", "time", ] @@ -2875,22 +2922,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "polling" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" -dependencies = [ - "autocfg", - "bitflags 1.3.2", - "cfg-if", - "concurrent-queue", - "libc", - "log", - "pin-project-lite", - "windows-sys 0.48.0", -] - [[package]] name = "polling" version = "3.6.0" @@ -2901,7 +2932,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 0.38.32", + "rustix", "tracing", "windows-sys 0.52.0", ] @@ -2934,6 +2965,24 @@ dependencies = [ "toml_edit 0.19.15", ] +[[package]] +name = "proc-macro-crate" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +dependencies = [ + "toml_edit 0.20.7", +] + +[[package]] +name = "proc-macro-crate" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" +dependencies = [ + "toml_edit 0.21.1", +] + [[package]] name = "proc-macro-error" version = "1.0.4" @@ -2982,15 +3031,6 @@ dependencies = [ "cc", ] -[[package]] -name = "quick-xml" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" -dependencies = [ - "memchr", -] - [[package]] name = "quick-xml" version = "0.31.0" @@ -3096,6 +3136,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +[[package]] +name = "raw-window-handle" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" + [[package]] name = "rayon" version = "1.10.0" @@ -3192,9 +3238,9 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", - "http-body", - "hyper", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.28", "hyper-tls", "ipnet", "js-sys", @@ -3212,6 +3258,41 @@ dependencies = [ "system-configuration", "tokio", "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg 0.50.0", +] + +[[package]] +name = "reqwest" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d66674f2b6fb864665eea7a3c1ac4e3dfacd2fda83cf6f935a612e01b0e3338" +dependencies = [ + "base64 0.21.7", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "http-body-util", + "hyper 1.2.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", "tokio-util", "tower-service", "url", @@ -3224,26 +3305,26 @@ dependencies = [ [[package]] name = "rfd" -version = "0.10.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea" +checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251" dependencies = [ + "ashpd", "block", "dispatch", - "glib-sys", - "gobject-sys", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "gtk-sys", "js-sys", - "lazy_static", "log", "objc", "objc-foundation", "objc_id", - "raw-window-handle", + "raw-window-handle 0.6.0", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "windows 0.37.0", + "windows-sys 0.48.0", ] [[package]] @@ -3270,20 +3351,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rustix" -version = "0.37.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" -dependencies = [ - "bitflags 1.3.2", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys 0.3.8", - "windows-sys 0.48.0", -] - [[package]] name = "rustix" version = "0.38.32" @@ -3293,7 +3360,7 @@ dependencies = [ "bitflags 2.5.0", "errno", "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys", "windows-sys 0.52.0", ] @@ -3336,6 +3403,32 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "schemars" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "schemars_derive" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 1.0.109", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -3350,9 +3443,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.9.2" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -3363,9 +3456,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "41f3cc463c0ef97e11c3461a9d3787412d30e8e7eb907c79180c4a57bf7c04ef" dependencies = [ "core-foundation-sys", "libc", @@ -3429,13 +3522,23 @@ dependencies = [ "syn 2.0.55", ] +[[package]] +name = "serde_derive_internals" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "serde_json" version = "1.0.115" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd" dependencies = [ - "indexmap 2.2.6", "itoa 1.0.11", "ryu", "serde", @@ -3614,50 +3717,60 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.4.10" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" dependencies = [ "libc", - "winapi", + "windows-sys 0.52.0", ] [[package]] -name = "socket2" -version = "0.5.6" +name = "softbuffer" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +checksum = "071916a85d1db274b4ed57af3a14afb66bd836ae7f82ebb6f1fd3455107830d9" dependencies = [ - "libc", + "bytemuck", + "cfg_aliases 0.2.0", + "cocoa", + "core-graphics", + "foreign-types 0.5.0", + "js-sys", + "log", + "objc", + "raw-window-handle 0.6.0", + "redox_syscall", + "wasm-bindgen", + "wayland-sys", + "web-sys", "windows-sys 0.52.0", ] [[package]] -name = "soup2" -version = "0.2.1" +name = "soup3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" dependencies = [ - "bitflags 1.3.2", + "futures-channel", "gio", - "glib", + "glib 0.18.5", "libc", - "once_cell", - "soup2-sys", + "soup3-sys", ] [[package]] -name = "soup2-sys" -version = "0.2.0" +name = "soup3-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" dependencies = [ - "bitflags 1.3.2", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "libc", - "system-deps 5.0.0", + "system-deps", ] [[package]] @@ -3681,9 +3794,9 @@ dependencies = [ [[package]] name = "state" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" +checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" dependencies = [ "loom", ] @@ -3735,6 +3848,17 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "swift-rs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + [[package]] name = "syn" version = "1.0.109" @@ -3765,15 +3889,11 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] name = "sys-locale" -version = "0.2.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a11bd9c338fdba09f7881ab41551932ad42e405f61d01e8406baea71c07aee" +checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0" dependencies = [ - "js-sys", "libc", - "wasm-bindgen", - "web-sys", - "windows-sys 0.45.0", ] [[package]] @@ -3812,56 +3932,36 @@ dependencies = [ "libc", ] -[[package]] -name = "system-deps" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" -dependencies = [ - "cfg-expr 0.9.1", - "heck 0.3.3", - "pkg-config", - "toml 0.5.11", - "version-compare 0.0.11", -] - [[package]] name = "system-deps" version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ - "cfg-expr 0.15.7", + "cfg-expr", "heck 0.5.0", "pkg-config", "toml 0.8.12", - "version-compare 0.2.0", + "version-compare", ] [[package]] name = "tao" -version = "0.16.8" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26a794e476ce829420b58059f4ac23c2b991dab2ee552be740f931aea95ae9c8" +checksum = "bd5b6ec2c43abd15155f040c765001098f50f425414b679225d471a1cd782753" dependencies = [ "bitflags 1.3.2", - "cairo-rs", - "cc", "cocoa", "core-foundation", - "core-graphics 0.22.3", + "core-graphics", "crossbeam-channel", "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", + "dlopen2", + "dpi", "gdkwayland-sys", "gdkx11-sys", - "gio", - "glib", - "glib-sys", "gtk", - "image", "instant", "jni", "lazy_static", @@ -3873,15 +3973,13 @@ dependencies = [ "objc", "once_cell", "parking_lot", - "png", - "raw-window-handle", + "raw-window-handle 0.6.0", "scopeguard", - "serde", "tao-macros", "unicode-segmentation", - "uuid", - "windows 0.39.0", - "windows-implement", + "url", + "windows 0.54.0", + "windows-version", "x11-dl", ] @@ -3915,88 +4013,81 @@ checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" [[package]] name = "tauri" -version = "1.6.1" +version = "2.0.0-beta.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f078117725e36d55d29fafcbb4b1e909073807ca328ae8deb8c0b3843aac0fed" +checksum = "a50fb0bdb687486415224f8be47c78993e9f3ea575ee0d5177c90d0c71842f4a" dependencies = [ "anyhow", "bytes", "cocoa", "dirs-next", - "dunce", "embed_plist", - "encoding_rs", - "flate2", "futures-util", - "glib", + "getrandom 0.2.12", "glob", "gtk", "heck 0.4.1", - "http", - "ignore", - "indexmap 1.9.3", - "nix 0.26.4", - "notify-rust", + "http 1.1.0", + "jni", + "libc", + "log", + "mime", + "muda", "objc", - "once_cell", - "open", - "os_info", - "os_pipe", "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "regex", - "reqwest", - "rfd", - "semver", + "raw-window-handle 0.6.0", + "reqwest 0.12.2", "serde", "serde_json", "serde_repr", "serialize-to-javascript", - "shared_child", "state", - "sys-locale", - "tar", + "swift-rs", + "tauri-build", "tauri-macros", "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "tempfile", "thiserror", "tokio", + "tray-icon", "url", - "uuid", + "urlpattern", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "window-vibrancy", + "windows 0.54.0", ] [[package]] name = "tauri-build" -version = "1.5.1" +version = "2.0.0-beta.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9914a4715e0b75d9f387a285c7e26b5bbfeb1249ad9f842675a82481565c532" +checksum = "82a46303cc4bce0b17ad95965cbd8326e3511b9d2cb6fb13a4a4c98a11b0dcaf" dependencies = [ "anyhow", "cargo_toml", "dirs-next", + "glob", "heck 0.4.1", "json-patch", + "schemars", "semver", "serde", "serde_json", "tauri-utils", "tauri-winres", + "toml 0.8.12", "walkdir", ] [[package]] name = "tauri-codegen" -version = "1.4.2" +version = "2.0.0-beta.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1554c5857f65dbc377cefb6b97c8ac77b1cb2a90d30d3448114d5d6b48a77fc" +checksum = "f1665f6a986842061a67cb9dcbe2fa27076c1a616f6525fc06de9d6d52838d63" dependencies = [ - "base64 0.21.7", + "base64 0.22.0", "brotli", "ico", "json-patch", @@ -4004,81 +4095,211 @@ dependencies = [ "png", "proc-macro2", "quote", - "regex", "semver", "serde", "serde_json", "sha2", + "syn 2.0.55", "tauri-utils", "thiserror", "time", + "url", "uuid", "walkdir", ] [[package]] name = "tauri-macros" -version = "1.4.3" +version = "2.0.0-beta.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "277abf361a3a6993ec16bcbb179de0d6518009b851090a01adfea12ac89fa875" +checksum = "b0c1558fc42cc2a1735cfd5edb2954c735d4516f8ba31c58b7180ba8a2bc18de" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.55", "tauri-codegen", "tauri-utils", ] +[[package]] +name = "tauri-plugin" +version = "2.0.0-beta.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ab1ac6122bf2ca5fc4ebb8aadff619f3b172477d2baf8134cf1d7f0e249a12" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars", + "serde", + "serde_json", + "tauri-utils", + "toml 0.8.12", + "walkdir", +] + +[[package]] +name = "tauri-plugin-dialog" +version = "2.0.0-beta.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e734642af7b5b2d107212a3c087480990d9d995290a67e4fdfd4815abf603969" +dependencies = [ + "glib 0.16.9", + "log", + "raw-window-handle 0.6.0", + "rfd", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror", +] + +[[package]] +name = "tauri-plugin-fs" +version = "2.0.0-beta.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7718012d8e2ec7070aab9dbf1747c1575dca1ec00fb4fc6fb59e8d70eee5b3b3" +dependencies = [ + "anyhow", + "glob", + "schemars", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "thiserror", + "url", + "uuid", +] + +[[package]] +name = "tauri-plugin-http" +version = "2.0.0-beta.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f7f516a45d008e21ead191fa24f50ec38e9719caa7ab7758dcada1ad08aa887" +dependencies = [ + "data-url", + "http 0.2.12", + "regex", + "reqwest 0.11.27", + "schemars", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror", + "url", + "urlpattern", +] + +[[package]] +name = "tauri-plugin-os" +version = "2.0.0-beta.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c02dc0a2037ef113d9d9db85edceab6f95f83ae111e4d989d6bc1df79c8ab4cf" +dependencies = [ + "gethostname", + "log", + "os_info", + "serde", + "serde_json", + "serialize-to-javascript", + "sys-locale", + "tauri", + "tauri-plugin", + "thiserror", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.0.0-beta.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5624537650f627707f3bd9c6562efe2116c7fb043fcfc2e3d10f802d7870a1cd" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror", +] + +[[package]] +name = "tauri-plugin-store" +version = "2.0.0-beta.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0142026264556b634203155a0751474e2e1aeed0c38707dd6ce2abe435160ff8" +dependencies = [ + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror", +] + [[package]] name = "tauri-runtime" -version = "0.14.2" +version = "2.0.0-beta.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2d0652aa2891ff3e9caa2401405257ea29ab8372cce01f186a5825f1bd0e76" +checksum = "612e05de1382575b32b5220b546861256f630f37ac64c29cab252592861b9bd4" dependencies = [ + "dpi", "gtk", - "http", - "http-range", - "rand 0.8.5", - "raw-window-handle", + "http 1.1.0", + "jni", + "raw-window-handle 0.6.0", "serde", "serde_json", "tauri-utils", "thiserror", "url", - "uuid", - "webview2-com", - "windows 0.39.0", + "windows 0.54.0", ] [[package]] name = "tauri-runtime-wry" -version = "0.14.5" +version = "2.0.0-beta.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "067c56fc153b3caf406d7cd6de4486c80d1d66c0f414f39e94cb2f5543f6445f" +checksum = "2f73672897b5396cb05c2f21b12b66ecfd4b51fae619dd35387467660d6c00fb" dependencies = [ - "arboard", "cocoa", "gtk", + "http 1.1.0", + "jni", + "log", "percent-encoding", - "rand 0.8.5", - "raw-window-handle", + "raw-window-handle 0.6.0", + "softbuffer", + "tao", "tauri-runtime", "tauri-utils", - "uuid", + "url", "webkit2gtk", "webview2-com", - "windows 0.39.0", + "windows 0.54.0", "wry", ] [[package]] name = "tauri-utils" -version = "1.5.3" +version = "2.0.0-beta.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ad0bbb31fccd1f4c56275d0a5c3abdf1f59999f72cb4ef8b79b4ed42082a21" +checksum = "0a148adf8077e1891c8b7d1c2be90c1c8eb8c7a071c35bb8edbdfe7cd9d8e23c" dependencies = [ "brotli", + "cargo_metadata", "ctor", "dunce", "glob", @@ -4092,14 +4313,18 @@ dependencies = [ "phf 0.11.2", "proc-macro2", "quote", + "regex", + "schemars", "semver", "serde", "serde_json", "serde_with", + "swift-rs", "thiserror", + "toml 0.8.12", "url", + "urlpattern", "walkdir", - "windows-version", ] [[package]] @@ -4112,16 +4337,6 @@ dependencies = [ "toml 0.7.8", ] -[[package]] -name = "tauri-winrt-notification" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006851c9ccefa3c38a7646b8cec804bb429def3da10497bfa977179869c3e8e2" -dependencies = [ - "quick-xml 0.30.0", - "windows 0.51.1", -] - [[package]] name = "tempfile" version = "3.10.1" @@ -4129,8 +4344,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", - "fastrand 2.0.2", - "rustix 0.38.32", + "fastrand", + "rustix", "windows-sys 0.52.0", ] @@ -4181,17 +4396,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "tiff" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" -dependencies = [ - "flate2", - "jpeg-decoder", - "weezl", -] - [[package]] name = "time" version = "0.3.34" @@ -4250,7 +4454,9 @@ dependencies = [ "mio", "num_cpus", "pin-project-lite", - "socket2 0.5.6", + "signal-hook-registry", + "socket2", + "tracing", "windows-sys 0.48.0", ] @@ -4278,15 +4484,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - [[package]] name = "toml" version = "0.7.8" @@ -4333,6 +4530,28 @@ dependencies = [ "winnow 0.5.40", ] +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" +dependencies = [ + "indexmap 2.2.6", + "toml_datetime", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.22.9" @@ -4346,6 +4565,28 @@ dependencies = [ "winnow 0.6.5", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -4358,6 +4599,7 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ + "log", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -4414,17 +4656,23 @@ dependencies = [ ] [[package]] -name = "tree_magic_mini" -version = "3.1.4" +name = "tray-icon" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ee137597cdb361b55a4746983e4ac1b35ab6024396a419944ad473bb915265" +checksum = "da36482ee1dbcedfddb038b3a0f6d27f04d9470dc99dabfa90b8d7cdc8b5f3d6" dependencies = [ - "fnv", - "home", - "memchr", - "nom", + "cocoa", + "core-graphics", + "crossbeam-channel", + "dirs-next", + "libappindicator", + "muda", + "objc", "once_cell", - "petgraph", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", ] [[package]] @@ -4460,11 +4708,52 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ - "memoffset 0.9.1", + "memoffset", "tempfile", "winapi", ] +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + [[package]] name = "unicode-bidi" version = "0.3.15" @@ -4510,6 +4799,19 @@ dependencies = [ "serde", ] +[[package]] +name = "urlpattern" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9bd5ff03aea02fa45b13a7980151fe45009af1980ba69f651ec367121a31609" +dependencies = [ + "derive_more", + "regex", + "serde", + "unic-ucd-ident", + "url", +] + [[package]] name = "utf-8" version = "0.7.6" @@ -4543,12 +4845,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "version-compare" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" - [[package]] name = "version-compare" version = "0.2.0" @@ -4601,12 +4897,6 @@ dependencies = [ "quote", ] -[[package]] -name = "waker-fn" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" - [[package]] name = "walkdir" version = "2.5.0" @@ -4717,68 +5007,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wayland-backend" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" -dependencies = [ - "cc", - "downcast-rs", - "rustix 0.38.32", - "scoped-tls", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-client" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" -dependencies = [ - "bitflags 2.5.0", - "rustix 0.38.32", - "wayland-backend", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols" -version = "0.31.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" -dependencies = [ - "bitflags 2.5.0", - "wayland-backend", - "wayland-client", - "wayland-scanner", -] - -[[package]] -name = "wayland-protocols-wlr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" -dependencies = [ - "bitflags 2.5.0", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283" -dependencies = [ - "proc-macro2", - "quick-xml 0.31.0", - "quote", -] - [[package]] name = "wayland-sys" version = "0.31.1" @@ -4802,95 +5030,84 @@ dependencies = [ [[package]] name = "webkit2gtk" -version = "0.18.2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" dependencies = [ "bitflags 1.3.2", "cairo-rs", "gdk", "gdk-sys", "gio", - "gio-sys", - "glib", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib 0.18.5", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "gtk", "gtk-sys", "javascriptcore-rs", "libc", "once_cell", - "soup2", + "soup3", "webkit2gtk-sys", ] [[package]] name = "webkit2gtk-sys" -version = "0.18.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" dependencies = [ - "atk-sys", "bitflags 1.3.2", "cairo-sys-rs", - "gdk-pixbuf-sys", "gdk-sys", - "gio-sys", - "glib-sys", - "gobject-sys", + "gio-sys 0.18.1", + "glib-sys 0.18.1", + "gobject-sys 0.18.0", "gtk-sys", "javascriptcore-rs-sys", "libc", - "pango-sys", "pkg-config", - "soup2-sys", - "system-deps 6.2.2", + "soup3-sys", + "system-deps", ] [[package]] name = "webview2-com" -version = "0.19.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" +checksum = "38d5949fc3f537e90240c3e4f78dda2fa0431b671d50845a2f582173ef8a1201" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.39.0", + "windows 0.54.0", + "windows-core 0.54.0", "windows-implement", + "windows-interface", ] [[package]] name = "webview2-com-macros" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.55", ] [[package]] name = "webview2-com-sys" -version = "0.19.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" +checksum = "cd1eaa1be63d6fdcadf893c40d7d53c889a6342b3a94930d34e6964d5bb7e8db" dependencies = [ - "regex", - "serde", - "serde_json", "thiserror", - "windows 0.39.0", - "windows-bindgen", - "windows-metadata", + "windows 0.54.0", + "windows-core 0.54.0", ] -[[package]] -name = "weezl" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" - [[package]] name = "winapi" version = "0.3.9" @@ -4923,30 +5140,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" -dependencies = [ - "windows_aarch64_msvc 0.37.0", - "windows_i686_gnu 0.37.0", - "windows_i686_msvc 0.37.0", - "windows_x86_64_gnu 0.37.0", - "windows_x86_64_msvc 0.37.0", -] - -[[package]] -name = "windows" -version = "0.39.0" +name = "window-vibrancy" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" +checksum = "33082acd404763b315866e14a0d5193f3422c81086657583937a750cdd3ec340" dependencies = [ - "windows-implement", - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", + "cocoa", + "objc", + "raw-window-handle 0.6.0", + "windows-sys 0.52.0", + "windows-version", ] [[package]] @@ -4958,16 +5161,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows" -version = "0.51.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" -dependencies = [ - "windows-core 0.51.1", - "windows-targets 0.48.5", -] - [[package]] name = "windows" version = "0.52.0" @@ -4979,62 +5172,65 @@ dependencies = [ ] [[package]] -name = "windows-bindgen" -version = "0.39.0" +name = "windows" +version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" +checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" dependencies = [ - "windows-metadata", - "windows-tokens", + "windows-core 0.54.0", + "windows-implement", + "windows-interface", + "windows-targets 0.52.4", ] [[package]] name = "windows-core" -version = "0.51.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.52.4", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.54.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65" dependencies = [ + "windows-result", "windows-targets 0.52.4", ] [[package]] name = "windows-implement" -version = "0.39.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" +checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd" dependencies = [ - "syn 1.0.109", - "windows-tokens", + "proc-macro2", + "quote", + "syn 2.0.55", ] [[package]] -name = "windows-metadata" -version = "0.39.0" +name = "windows-interface" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" +checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.55", +] [[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-result" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "cd19df78e5168dfb0aedc343d1d1b8d422ab2db6756d2dc3fef75035402a3f64" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.52.4", ] [[package]] @@ -5109,12 +5305,6 @@ dependencies = [ "windows_x86_64_msvc 0.52.4", ] -[[package]] -name = "windows-tokens" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" - [[package]] name = "windows-version" version = "0.1.0" @@ -5142,18 +5332,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" -[[package]] -name = "windows_aarch64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" - [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -5172,18 +5350,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" -[[package]] -name = "windows_i686_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" - -[[package]] -name = "windows_i686_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" - [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -5202,18 +5368,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" -[[package]] -name = "windows_i686_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" - -[[package]] -name = "windows_i686_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" - [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -5232,18 +5386,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" -[[package]] -name = "windows_x86_64_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" - [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -5280,18 +5422,6 @@ version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" -[[package]] -name = "windows_x86_64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" - [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -5348,62 +5478,46 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "wl-clipboard-rs" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b41773911497b18ca8553c3daaf8ec9fe9819caf93d451d3055f69de028adb" -dependencies = [ - "derive-new", - "libc", - "log", - "nix 0.28.0", - "os_pipe", - "tempfile", - "thiserror", - "tree_magic_mini", - "wayland-backend", - "wayland-client", - "wayland-protocols", - "wayland-protocols-wlr", -] - [[package]] name = "wry" -version = "0.24.7" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad85d0e067359e409fcb88903c3eac817c392e5d638258abfb3da5ad8ba6fc4" +checksum = "4eca9d50437c04fc67e82c196ddd31d8e35794150713ae2d647f3a58c7f45d1a" dependencies = [ - "base64 0.13.1", + "base64 0.21.7", "block", + "cfg_aliases 0.1.1", "cocoa", - "core-graphics 0.22.3", + "core-graphics", "crossbeam-channel", + "dpi", "dunce", - "gdk", - "gio", - "glib", + "gdkx11", "gtk", "html5ever", - "http", + "http 1.1.0", + "javascriptcore-rs", + "jni", "kuchikiki", "libc", - "log", + "ndk", + "ndk-context", + "ndk-sys", "objc", "objc_id", "once_cell", - "serde", - "serde_json", + "percent-encoding", + "raw-window-handle 0.6.0", "sha2", - "soup2", - "tao", + "soup3", + "tao-macros", "thiserror", - "url", "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.39.0", - "windows-implement", + "windows 0.54.0", + "windows-version", + "x11-dl", ] [[package]] @@ -5427,23 +5541,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "x11rb" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a" -dependencies = [ - "gethostname", - "rustix 0.38.32", - "x11rb-protocol", -] - -[[package]] -name = "x11rb-protocol" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e63e71c4b8bd9ffec2c963173a4dc4cbde9ee96961d4fcb4429db9929b606c34" - [[package]] name = "xattr" version = "1.3.1" @@ -5451,8 +5548,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", - "linux-raw-sys 0.4.13", - "rustix 0.38.32", + "linux-raw-sys", + "rustix", ] [[package]] @@ -5467,39 +5564,32 @@ dependencies = [ [[package]] name = "zbus" -version = "3.15.2" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" +checksum = "c9ff46f2a25abd690ed072054733e0bc3157e3d4c45f41bd183dce09c2ff8ab9" dependencies = [ "async-broadcast", - "async-executor", - "async-fs", - "async-io 1.13.0", - "async-lock 2.8.0", "async-process", "async-recursion", - "async-task", "async-trait", - "blocking", - "byteorder", "derivative", "enumflags2", - "event-listener 2.5.3", + "event-listener 5.2.0", "futures-core", "futures-sink", "futures-util", "hex", - "nix 0.26.4", - "once_cell", + "nix", "ordered-stream", "rand 0.8.5", "serde", "serde_repr", "sha1", "static_assertions", + "tokio", "tracing", "uds_windows", - "winapi", + "windows-sys 0.52.0", "xdg-home", "zbus_macros", "zbus_names", @@ -5508,11 +5598,11 @@ dependencies = [ [[package]] name = "zbus_macros" -version = "3.15.2" +version = "4.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" +checksum = "4e0e3852c93dcdb49c9462afe67a2a468f7bd464150d866e861eaf06208633e0" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "regex", @@ -5522,9 +5612,9 @@ dependencies = [ [[package]] name = "zbus_names" -version = "2.6.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" +checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c" dependencies = [ "serde", "static_assertions", @@ -5533,25 +5623,25 @@ dependencies = [ [[package]] name = "zvariant" -version = "3.15.2" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" +checksum = "2c1b3ca6db667bfada0f1ebfc94b2b1759ba25472ee5373d4551bb892616389a" dependencies = [ - "byteorder", + "endi", "enumflags2", - "libc", "serde", "static_assertions", + "url", "zvariant_derive", ] [[package]] name = "zvariant_derive" -version = "3.15.2" +version = "4.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" +checksum = "b7a4b236063316163b69039f77ce3117accb41a09567fd24c168e43491e521bc" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 1.0.109", @@ -5560,9 +5650,9 @@ dependencies = [ [[package]] name = "zvariant_utils" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +checksum = "00bedb16a193cc12451873fee2a1bc6550225acece0e36f333e68326c73c8172" dependencies = [ "proc-macro2", "quote", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 4df3c17..f9e0b18 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ncgmgr" -version = "0.6.0" +version = "0.7.0" description = "Helps manage NodeCG installations." authors = [ "inkfarer" ] license = "" @@ -10,26 +10,36 @@ edition = "2018" build = "src/build.rs" [build-dependencies] -tauri-build = { version = "1.5.1", features = [] } +tauri-build = { version = "2.0.0-beta.11", features = [] } [dependencies] serde_json = "1.0.80" serde = { version = "1.0.137", features = [ "derive" ] } -git2 = "0.14.2" +git2 = "0.18.3" semver-parser = "0.10.2" -itertools = "0.10.3" +itertools = "0.12.1" unwrap_or = "1.0.0" sysinfo = "0.30.8" rm_rf = "0.6.1" futures-util = "0.3.30" flate2 = "1.0.28" tar = "0.4.40" -openssl = { version = "0.10", features = ["vendored"] } fix-path-env = { git = "https://github.com/tauri-apps/fix-path-env-rs" } +thiserror = "1.0.58" +reqwest = { version = "^0.11", features = ["json"] } +tauri-plugin-dialog = "2.0.0-beta.4" +tauri-plugin-fs = "2.0.0-beta.4" +tauri-plugin-os = "2.0.0-beta.3" +tauri-plugin-shell = "2.0.0-beta.3" +tauri-plugin-http = "2.0.0-beta.4" +tauri-plugin-store = "2.0.0-beta.4" + +[target.'cfg(macos)'.dependencies] +openssl = { version = "0.10", features = ["vendored"] } [dependencies.tauri] -version = "1.6.1" -features = ["api-all", "macos-private-api", "process-command-api", "http-api"] +version = "2.0.0-beta" +features = [ "macos-private-api"] [features] default = [ "custom-protocol" ] diff --git a/src-tauri/capabilities/main.json b/src-tauri/capabilities/main.json new file mode 100644 index 0000000..330be96 --- /dev/null +++ b/src-tauri/capabilities/main.json @@ -0,0 +1,36 @@ +{ + "identifier": "main-capability", + "local": true, + "windows": [ + "main" + ], + "permissions": [ + "path:default", + "event:default", + "window:default", + "app:default", + "resources:default", + "menu:default", + "tray:default", + "fs:default", + "fs:allow-home-read-recursive", + "fs:allow-home-write-recursive", + "os:allow-os-type", + "dialog:allow-open", + "shell:allow-open", + { + "identifier": "shell:allow-execute", + "allow": [ + { + "name": "node-version", + "cmd": "node", + "args": [ + "-v" + ], + "sidecar": false + } + ] + }, + "store:allow-get" + ] +} diff --git a/src-tauri/src/bundles.rs b/src-tauri/src/bundles.rs index a78bedd..357b1ee 100644 --- a/src-tauri/src/bundles.rs +++ b/src-tauri/src/bundles.rs @@ -1,200 +1,203 @@ -use std::path::Path; -use std::{fs}; use git2::{AutotagOption, FetchOptions, Repository}; -use unwrap_or::unwrap_ok_or; +use std::fs; +use std::path::Path; +use tauri_plugin_shell::ShellExt; -use crate::git; -use crate::{format_error, log_npm_install, npm}; -use crate::error::MgrError; +use crate::error::Error; use crate::git::{get_tag_name_at_head, try_open_repository}; use crate::log::LogEmitter; +use crate::{config, git}; +use crate::{log_npm_install, npm}; #[derive(PartialEq, Debug)] struct ParsedBundleUrl { - bundle_name: String, - bundle_url: String + bundle_name: String, + bundle_url: String, } -fn parse_bundle_url(url: String) -> Result { - let split_url = url.split("/").collect::>(); - if split_url.len() <= 1 { - Err(MgrError::new("Invalid bundle URL provided.")) +fn parse_bundle_url(url: String) -> Result { + let split_url = url.split("/").collect::>(); + if split_url.len() <= 1 { + Err(Error::InvalidBundleURL) + } else { + let bundle_name = split_url.last().unwrap().replace(".git", ""); + let normalized_bundle_url = if !url.ends_with(".git") { + format!("https://github.com/{}.git", url) } else { - let bundle_name = split_url.last().unwrap().replace(".git", ""); - let normalized_bundle_url = if !url.ends_with(".git") { - format!("https://github.com/{}.git", url) - } else { - url - }; - - Ok(ParsedBundleUrl { - bundle_name: bundle_name.to_string(), - bundle_url: normalized_bundle_url - }) - } -} - -#[tauri::command(async)] -pub fn install_bundle(handle: tauri::AppHandle, bundle_url: String, nodecg_path: String) -> Result<(), String> { - let logger = LogEmitter::with_progress(handle, "install-bundle", 5); - let parsed_url = match parse_bundle_url(bundle_url) { - Ok(url) => url, - Err(e) => { - return Err(e.description); - } + url }; - logger.emit(&format!("Installing {}...", parsed_url.bundle_name)); - - let dir_bundles = format!("{}/bundles", nodecg_path); - if !Path::new(&dir_bundles).exists() { - logger.emit("Creating missing bundles directory"); - unwrap_ok_or!(fs::create_dir(dir_bundles), e, { return format_error("Failed to create bundles directory", e) }); - } - logger.emit_progress(1); - - logger.emit("Fetching version list..."); - let versions = unwrap_ok_or!(git::fetch_versions_for_url(&parsed_url.bundle_url), e, { return format_error("Failed to get version list", e) }); - logger.emit_progress(2); - - logger.emit("Cloning repository..."); - let bundle_path = format!("{}/bundles/{}", nodecg_path, parsed_url.bundle_name); - match Repository::clone(&parsed_url.bundle_url, bundle_path.clone()) { - Ok(repo) => { - logger.emit_progress(3); - if versions.len() > 1 { - let latest_version = versions.first().unwrap(); - logger.emit(&format!("Checking out version {}...", latest_version)); - - unwrap_ok_or!(git::checkout_version(&repo, latest_version.to_string()), e, { return format_error("Failed to check out latest version", e) }) - } - }, - Err(e) => return format_error(&format!("Failed to clone bundle '{}'", parsed_url.bundle_name), e) - } - logger.emit_progress(4); - - match npm::install_npm_dependencies(&bundle_path).and_then(|child| { - log_npm_install(logger, child); - Ok(()) - }) { - Err(e) => format_error("Failed to install bundle", e), - Ok(_) => Ok(()) - } + Ok(ParsedBundleUrl { + bundle_name: bundle_name.to_string(), + bundle_url: normalized_bundle_url, + }) + } } #[tauri::command(async)] -pub fn fetch_bundle_versions(bundle_name: String, nodecg_path: String) -> Result, String> { - let bundle_dir = format!("{}/bundles/{}", nodecg_path, bundle_name); - let path = Path::new(&bundle_dir); - - if !path.exists() { - return Err(format!("Bundle '{}' is not installed.", bundle_name)) - } - - let repo = unwrap_ok_or!(try_open_repository(path), e, { return format_error("Failed to open repository", e) }); +pub fn install_bundle(handle: tauri::AppHandle, bundle_url: String) -> Result<(), Error> { + let logger = LogEmitter::with_progress(&handle, "install-bundle", 5); + let parsed_url = parse_bundle_url(bundle_url)?; + + logger.emit(&format!("Installing {}...", parsed_url.bundle_name)); + + let install_dir = config::with_config(handle.clone(), |c| Ok(c.nodecg_install_dir))? + .ok_or(Error::MissingInstallDir)?; + let dir_bundles = format!("{}/bundles", install_dir); + if !Path::new(&dir_bundles).exists() { + logger.emit("Creating missing bundles directory"); + fs::create_dir(dir_bundles)?; + } + logger.emit_progress(1); + + logger.emit("Fetching version list..."); + let versions = git::fetch_versions_for_url(&parsed_url.bundle_url)?; + logger.emit_progress(2); + + logger.emit("Cloning repository..."); + let bundle_path = format!("{}/bundles/{}", install_dir, parsed_url.bundle_name); + let repo = Repository::clone(&parsed_url.bundle_url, bundle_path.clone())?; + logger.emit_progress(3); + if versions.len() > 1 { + let latest_version = versions.first().unwrap(); + logger.emit(&format!("Checking out version {}...", latest_version)); + + git::checkout_version(&repo, latest_version.to_string())?; + } + logger.emit_progress(4); + + let shell = handle.shell(); + let child = npm::install_npm_dependencies(shell, &bundle_path)?; + log_npm_install(logger, child); + Ok(()) +} - if repo.is_none() { - return Ok(Vec::new()) - } else { - let unwrapped_repo = repo.unwrap(); - let remote = unwrap_ok_or!(git::get_remote(&unwrapped_repo), e, { return format_error("Failed to get remote info", e) }); - - match git::fetch_versions(remote) { - Ok(versions) => Ok(versions), - Err(e) => format_error("Failed to get version list", e) - } - } +#[tauri::command(async)] +pub fn fetch_bundle_versions( + handle: tauri::AppHandle, + bundle_name: String, +) -> Result, Error> { + let install_dir = config::with_config(handle.clone(), |c| Ok(c.nodecg_install_dir))? + .ok_or(Error::MissingInstallDir)?; + let bundle_dir = format!("{}/bundles/{}", install_dir, bundle_name); + let path = Path::new(&bundle_dir); + + if !path.exists() { + return Err(Error::MissingBundle(bundle_name)); + } + + let repo = try_open_repository(path)?; + + if repo.is_none() { + return Ok(Vec::new()); + } else { + let unwrapped_repo = repo.unwrap(); + let remote = git::get_remote(&unwrapped_repo)?; + + Ok(git::fetch_versions(remote)?) + } } #[tauri::command(async)] -pub fn set_bundle_version(handle: tauri::AppHandle, bundle_name: String, version: String, nodecg_path: String) -> Result<(), String> { - let logger = LogEmitter::with_progress(handle, "change-bundle-version", 4); - let bundle_dir = format!("{}/bundles/{}", nodecg_path, bundle_name); - let path = Path::new(&bundle_dir); - - if !path.exists() { - return Err(format!("Bundle '{}' is not installed.", bundle_name)) - } - - logger.emit_progress(1); - logger.emit(&format!("Installing {} {}...", bundle_name, version)); - match Repository::open(path) { - Ok(repo) => { - logger.emit_progress(2); - let mut remote = unwrap_ok_or!(git::get_remote(&repo), e, { return format_error("Failed to get remote repository", e) }); - unwrap_ok_or!(remote.fetch(&[""], Some(FetchOptions::new().download_tags(AutotagOption::All)), None), e, return format_error("Failed to fetch version data", e)); - unwrap_ok_or!(git::checkout_version(&repo, version.clone()), e, { return format_error(&format!("Failed to checkout version {}", version), e) }); - logger.emit_progress(3); - }, - Err(e) => return format_error(&format!("Failed to open git repository for bundle '{}'", bundle_name), e) - } - - match npm::install_npm_dependencies(&bundle_dir).and_then(|child| { - log_npm_install(logger, child); - Ok(()) - }) { - Err(e) => format_error("Failed to set bundle version", e), - Ok(_) => Ok(()) - } +pub fn set_bundle_version( + handle: tauri::AppHandle, + bundle_name: String, + version: String, +) -> Result<(), Error> { + let install_dir = config::with_config(handle.clone(), |c| Ok(c.nodecg_install_dir))? + .ok_or(Error::MissingInstallDir)?; + let logger = LogEmitter::with_progress(&handle, "change-bundle-version", 4); + let bundle_dir = format!("{}/bundles/{}", install_dir, bundle_name); + let path = Path::new(&bundle_dir); + + if !path.exists() { + return Err(Error::MissingBundle(bundle_name)); + } + + logger.emit_progress(1); + logger.emit(&format!("Installing {} {}...", bundle_name, version)); + let repo = Repository::open(path)?; + logger.emit_progress(2); + let mut remote = git::get_remote(&repo)?; + remote.fetch( + &[""], + Some(FetchOptions::new().download_tags(AutotagOption::All)), + None, + )?; + git::checkout_version(&repo, version.clone())?; + logger.emit_progress(3); + + let shell = handle.shell(); + let child = npm::install_npm_dependencies(shell, &bundle_dir)?; + log_npm_install(logger, child); + Ok(()) } #[tauri::command(async)] -pub fn uninstall_bundle(bundle_name: String, nodecg_path: String) -> Result { - match rm_rf::remove(format!("{}/bundles/{}", nodecg_path, bundle_name)) { - Ok(_) => Ok("OK".to_string()), - Err(e) => Err(format!("Uninstalling bundle {} failed: {}", bundle_name, e.to_string())) - } +pub fn uninstall_bundle(handle: tauri::AppHandle, bundle_name: String) -> Result<(), Error> { + let install_dir = config::with_config(handle.clone(), |c| Ok(c.nodecg_install_dir))? + .ok_or(Error::MissingInstallDir)?; + + rm_rf::remove(format!("{}/bundles/{}", install_dir, bundle_name)) + .map_err(|e| Error::BundleUninstall(bundle_name, e.to_string()))?; + Ok(()) } #[tauri::command(async)] -pub fn get_bundle_git_tag(bundle_name: String, nodecg_path: String) -> Result, String> { - let bundle_dir = format!("{}/bundles/{}", nodecg_path, bundle_name); - let path = Path::new(&bundle_dir); - - if !path.exists() { - return Err(format!("Bundle '{}' is not installed.", bundle_name)) - } - - match try_open_repository(path) { - Ok(repo) => { - if repo.is_some() { - match get_tag_name_at_head(&repo.unwrap()) { - Ok(result) => Ok(result), - Err(e) => return format_error(&format!("Failed to get version for bundle '{}'", bundle_name), e) - } - } else { - Ok(None) - } - }, - Err(e) => return format_error(&format!("Failed to open git repository for bundle '{}'", bundle_name), e) - } +pub fn get_bundle_git_tag( + handle: tauri::AppHandle, + bundle_name: String, +) -> Result, Error> { + let install_dir = config::with_config(handle.clone(), |c| Ok(c.nodecg_install_dir))? + .ok_or(Error::MissingInstallDir)?; + let bundle_dir = format!("{}/bundles/{}", install_dir, bundle_name); + let path = Path::new(&bundle_dir); + + if !path.exists() { + return Err(Error::MissingBundle(bundle_name)); + } + + let repo = try_open_repository(path)?; + match repo { + Some(repo) => get_tag_name_at_head(&repo).map_err(|e| Error::Git(e)), + None => Ok(None), + } } #[cfg(test)] mod tests { - use super::*; - - #[test] - fn parse_bundle_url_name_repo_pair() { - assert_eq!(ParsedBundleUrl { - bundle_name: "test-bundle".to_string(), - bundle_url: "https://github.com/test-user/test-bundle.git".to_string() - }, parse_bundle_url("test-user/test-bundle".to_string()).unwrap()); - } - - #[test] - fn parse_bundle_url_https() { - assert_eq!(ParsedBundleUrl { - bundle_name: "NCGMGR".to_string(), - bundle_url: "https://github.com/IPLSplatoon/NCGMGR.git".to_string() - }, parse_bundle_url("https://github.com/IPLSplatoon/NCGMGR.git".to_string()).unwrap()); - } - - #[test] - fn parse_bundle_url_ssh() { - assert_eq!(ParsedBundleUrl { - bundle_name: "repo".to_string(), - bundle_url: "git@github.com:user/repo.git".to_string() - }, parse_bundle_url("git@github.com:user/repo.git".to_string()).unwrap()); - } + use super::*; + + #[test] + fn parse_bundle_url_name_repo_pair() { + assert_eq!( + ParsedBundleUrl { + bundle_name: "test-bundle".to_string(), + bundle_url: "https://github.com/test-user/test-bundle.git".to_string() + }, + parse_bundle_url("test-user/test-bundle".to_string()).unwrap() + ); + } + + #[test] + fn parse_bundle_url_https() { + assert_eq!( + ParsedBundleUrl { + bundle_name: "NCGMGR".to_string(), + bundle_url: "https://github.com/IPLSplatoon/NCGMGR.git".to_string() + }, + parse_bundle_url("https://github.com/IPLSplatoon/NCGMGR.git".to_string()).unwrap() + ); + } + + #[test] + fn parse_bundle_url_ssh() { + assert_eq!( + ParsedBundleUrl { + bundle_name: "repo".to_string(), + bundle_url: "git@github.com:user/repo.git".to_string() + }, + parse_bundle_url("git@github.com:user/repo.git".to_string()).unwrap() + ); + } } diff --git a/src-tauri/src/config.rs b/src-tauri/src/config.rs new file mode 100644 index 0000000..37ebeef --- /dev/null +++ b/src-tauri/src/config.rs @@ -0,0 +1,78 @@ +use tauri::{AppHandle, Manager, Runtime}; +use tauri_plugin_store::{with_store, Store, StoreCollection}; + +use crate::error::Error; + +static STORE_CONFIG_KEY: &str = "config"; + +#[derive(serde::Deserialize, serde::Serialize)] +#[serde(rename_all = "camelCase")] +pub struct UserConfig { + pub nodecg_install_dir: Option, + pub enable_error_log: bool, +} + +impl Default for UserConfig { + fn default() -> Self { + UserConfig { + nodecg_install_dir: None, + enable_error_log: false, + } + } +} + +fn with_config_store) -> tauri_plugin_store::Result>( + app: AppHandle, + f: F, +) -> Result { + let stores = app.state::>(); + let path = app.path().app_config_dir()?.join("config.json"); + with_store(app.clone(), stores, path, f).map_err(|e| Error::TauriStore(e)) +} + +pub fn check_config(app: AppHandle) -> Result<(), Error> { + with_config_store(app, |store| { + if let Some(config_value) = store.get(STORE_CONFIG_KEY) { + if let Err(e) = serde_json::from_value::(config_value.clone()) { + println!("Error reading application config: {:?}", e); + store.insert( + STORE_CONFIG_KEY.to_string(), + serde_json::to_value(UserConfig::default())?, + )?; + store.save()?; + } + } + + Ok(()) + }) +} + +pub fn with_config tauri_plugin_store::Result>( + app: AppHandle, + f: F, +) -> Result { + with_config_store(app, |store| { + let config_value = store.get(STORE_CONFIG_KEY); + let config = config_value.map_or_else( + || Ok(UserConfig::default()), + |c| serde_json::from_value::(c.clone()), + )?; + + f(config) + }) +} + +pub fn update_install_dir(app: AppHandle, install_dir: String) -> Result<(), Error> { + let mut config = with_config(app.clone(), |c| Ok(c))?; + config.nodecg_install_dir = Some(install_dir); + update_config(app, config) +} + +#[tauri::command] +pub fn update_config(app: AppHandle, config: UserConfig) -> Result<(), Error> { + with_config_store(app, |store| { + store.insert(STORE_CONFIG_KEY.to_string(), serde_json::to_value(config)?)?; + store.save()?; + Ok(()) + }) +} diff --git a/src-tauri/src/dependencies.rs b/src-tauri/src/dependencies.rs index 5aba4e3..efd57ae 100644 --- a/src-tauri/src/dependencies.rs +++ b/src-tauri/src/dependencies.rs @@ -1,11 +1,17 @@ -use tauri::api::process::Command; +use tauri_plugin_shell::ShellExt; -#[tauri::command(async)] -pub fn get_nodejs_version() -> Option { - let output = Command::new("node").args(["-v"]).output(); +#[tauri::command] +pub async fn get_nodejs_version(app: tauri::AppHandle) -> Option { + let shell = app.shell(); + let output = shell.command("node").args(["-v"]).output().await; - return match output { - Ok(output) => Some(output.stdout.trim().to_string()), - Err(_) => None - } + return match output { + Ok(output) => Some( + String::from_utf8(output.stdout) + .unwrap_or_else(|e| format!("Failed to decode command output: {}", e.to_string())) + .trim() + .to_string(), + ), + Err(_) => None, + }; } diff --git a/src-tauri/src/error.rs b/src-tauri/src/error.rs index 667c0aa..e9821cf 100644 --- a/src-tauri/src/error.rs +++ b/src-tauri/src/error.rs @@ -1,39 +1,48 @@ -use std::error::Error; -use std::fmt; - -pub trait MgrErrorCause: fmt::Display + fmt::Debug {} -impl MgrErrorCause for T {} - -#[derive(Debug)] -pub struct MgrError { - pub description: String, - pub cause: Option> +use serde::Serializer; +use std::io; +use tauri_plugin_http::reqwest; + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error(transparent)] + Request(#[from] reqwest::Error), + #[error(transparent)] + Io(#[from] io::Error), + #[error(transparent)] + Tauri(#[from] tauri::Error), + #[error(transparent)] + TauriStore(#[from] tauri_plugin_store::Error), + #[error(transparent)] + TauriShell(#[from] tauri_plugin_shell::Error), + #[error(transparent)] + Git(#[from] git2::Error), + #[error(transparent)] + RmRf(#[from] rm_rf::Error), + + #[error("Error installing NodeCG: {0}")] + NodeCGInstall(String), + #[error("Error launching NodeCG: {0}")] + NodeCGLaunch(String), + #[error("NodeCG install directory is not configured")] + MissingInstallDir, + #[error("Could not determine default install directory for NodeCG. Please select one manually.")] + CannotCreateDefaultInstallDir, + #[error("Bundle {0} is not installed.")] + MissingBundle(String), + #[error("Failed to uninstall bundle {0}: {1}")] + BundleUninstall(String, String), + #[error("Invalid bundle URL provided.")] + InvalidBundleURL, + + #[error("Error installing npm dependencies: {0}")] + NPMInstall(String), } -impl MgrError { - pub fn new(msg: &str) -> MgrError { - MgrError { description: msg.to_string(), cause: None } - } - - pub fn with_cause(msg: &str, cause: T) -> MgrError { - MgrError { description: msg.to_string(), cause: Some(Box::new(cause)) } - } - - pub fn boxed(self) -> Box { - Box::new(self) - } -} - -impl fmt::Display for MgrError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - if self.cause.is_none() { - write!(f, "{}", self.description) - } else { - write!(f, "{}: {}", self.description, self.cause.as_ref().unwrap()) - } - } -} - -impl Error for MgrError { - +impl serde::Serialize for Error { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_str(self.to_string().as_ref()) + } } diff --git a/src-tauri/src/git.rs b/src-tauri/src/git.rs index 03538ec..a9a76f8 100644 --- a/src-tauri/src/git.rs +++ b/src-tauri/src/git.rs @@ -1,8 +1,8 @@ +use git2::{Direction, ErrorCode, Remote, Repository}; +use itertools::Itertools; use std::cmp::Ordering; use std::collections::BTreeMap; use std::path::Path; -use git2::{Direction, ErrorCode, Remote, Repository}; -use itertools::Itertools; /* * Returns: @@ -11,81 +11,94 @@ use itertools::Itertools; * Err if opening the repository causes a different error */ pub fn try_open_repository>(path: P) -> Result, git2::Error> { - match Repository::open(path) { - Ok(repo) => Ok(Some(repo)), - Err(e) => { - if ErrorCode::NotFound.eq(&e.code()) { - Ok(None) - } else { - Err(e) - } - } + match Repository::open(path) { + Ok(repo) => Ok(Some(repo)), + Err(e) => { + if ErrorCode::NotFound.eq(&e.code()) { + Ok(None) + } else { + Err(e) + } } + } } -pub fn fetch_versions_for_url(remote_url: &str) -> Result, Box> { - let remote = Remote::create_detached(&*remote_url)?; - fetch_versions(remote) +pub fn fetch_versions_for_url(remote_url: &str) -> Result, git2::Error> { + let remote = Remote::create_detached(&*remote_url)?; + fetch_versions(remote) } -pub fn fetch_versions(mut remote: Remote) -> Result, Box> { - let connection = remote.connect_auth(Direction::Fetch, None, None)?; +pub fn fetch_versions(mut remote: Remote) -> Result, git2::Error> { + let connection = remote.connect_auth(Direction::Fetch, None, None)?; - Ok(connection.list()?.iter() - .filter(|item| { item.name().starts_with("refs/tags/") }) - .map(|item| item.name().split("refs/tags/").last().unwrap().to_string()) - .sorted_by(|item1, item2| { - let version1 = semver_parser::version::parse(item1); - let version2 = semver_parser::version::parse(item2); + Ok( + connection + .list()? + .iter() + .filter(|item| item.name().starts_with("refs/tags/")) + .map(|item| item.name().split("refs/tags/").last().unwrap().to_string()) + .sorted_by(|item1, item2| { + let version1 = semver_parser::version::parse(item1); + let version2 = semver_parser::version::parse(item2); - if version1.is_err() || version2.is_err() { - Ordering::Less - } else { - version2.unwrap().cmp(&version1.unwrap()) - } - }).collect_vec()) + if version1.is_err() || version2.is_err() { + Ordering::Less + } else { + version2.unwrap().cmp(&version1.unwrap()) + } + }) + .collect_vec(), + ) } -pub fn checkout_version(repo: &Repository, version: String) -> Result<(), Box> { - let (object, reference) = repo.revparse_ext(&version)?; - repo.checkout_tree(&object, None)?; - match reference { - Some(gref) => repo.set_head(gref.name().unwrap()), - None => repo.set_head_detached(object.id()) - }?; +pub fn checkout_version(repo: &Repository, version: String) -> Result<(), git2::Error> { + let (object, reference) = repo.revparse_ext(&version)?; + repo.checkout_tree(&object, None)?; + match reference { + Some(gref) => repo.set_head(gref.name().unwrap()), + None => repo.set_head_detached(object.id()), + }?; - Ok(()) + Ok(()) } -pub fn get_remote(repo: &Repository) -> Result> { - let remotes = repo.remotes()?; - let remote_name = remotes.iter() - .filter(|remote| { remote.is_some() }) - .map(|remote| { remote.unwrap() }) - .find_or_first(|remote| { remote == &"origin" }) - .expect("Could not find any remotes."); +pub fn get_remote(repo: &Repository) -> Result { + let remotes = repo.remotes()?; + let remote_name = remotes + .iter() + .filter(|remote| remote.is_some()) + .map(|remote| remote.unwrap()) + .find_or_first(|remote| remote == &"origin") + .expect("Could not find any remotes."); - let remote = repo.find_remote(&remote_name)?; + let remote = repo.find_remote(&remote_name)?; - Ok(remote) + Ok(remote) } -pub fn get_tag_name_at_head(repo: &Repository) -> Result, Box> { - let tag_names = repo.tag_names(None)?; +pub fn get_tag_name_at_head(repo: &Repository) -> Result, git2::Error> { + let tag_names = repo.tag_names(None)?; - let tag_and_refs = tag_names.iter() - .flat_map(|name| name) - .flat_map(|name| { - let full_tag = format!("refs/tags/{}", name); - repo.find_reference(&full_tag).map(|reference| (name, reference)) - }); + let tag_and_refs = tag_names.iter().flat_map(|name| name).flat_map(|name| { + let full_tag = format!("refs/tags/{}", name); + repo + .find_reference(&full_tag) + .map(|reference| (name, reference)) + }); - let mut refs_to_tags = BTreeMap::new(); - for (name, reference) in tag_and_refs { - refs_to_tags.entry(reference).or_insert_with(Vec::new).push(name); - } + let mut refs_to_tags = BTreeMap::new(); + for (name, reference) in tag_and_refs { + refs_to_tags + .entry(reference) + .or_insert_with(Vec::new) + .push(name); + } - let git_ref = repo.head()?; + let git_ref = repo.head()?; - Ok(refs_to_tags.get(&git_ref).and_then(|tags| tags.first().and_then(|tag| Some(tag.to_string())))) + Ok( + refs_to_tags + .get(&git_ref) + .and_then(|tags| tags.first().and_then(|tag| Some(tag.to_string()))), + ) } diff --git a/src-tauri/src/log.rs b/src-tauri/src/log.rs index 44b84b8..31766f5 100644 --- a/src-tauri/src/log.rs +++ b/src-tauri/src/log.rs @@ -1,106 +1,129 @@ -use std::{fmt}; -use tauri::api::process::{CommandEvent, TerminatedPayload}; -use tauri::async_runtime::{JoinHandle, Receiver, spawn}; -use tauri::{Manager}; +use std::fmt; +use tauri::async_runtime::{spawn, JoinHandle, Receiver}; +use tauri::Manager; +use tauri_plugin_shell::process::{CommandEvent, TerminatedPayload}; #[derive(Clone)] pub struct LogEmitter { - handle: tauri::AppHandle, - key: String, - max_progress_step: Option + handle: tauri::AppHandle, + key: String, + max_progress_step: Option, } impl LogEmitter { - pub fn new(handle: tauri::AppHandle, key: &str) -> LogEmitter { - LogEmitter { - handle: handle.clone(), - key: key.to_string(), - max_progress_step: None - } + pub fn new(handle: &tauri::AppHandle, key: &str) -> LogEmitter { + LogEmitter { + handle: handle.clone(), + key: key.to_string(), + max_progress_step: None, } + } - pub fn with_progress(handle: tauri::AppHandle, key: &str, max_progress_step: u32) -> LogEmitter { - let mut emitter = LogEmitter::new(handle, key); - emitter.max_progress_step = Some(max_progress_step); - emitter.emit_progress(0); - emitter - } + pub fn with_progress(handle: &tauri::AppHandle, key: &str, max_progress_step: u32) -> LogEmitter { + let mut emitter = LogEmitter::new(handle, key); + emitter.max_progress_step = Some(max_progress_step); + emitter.emit_progress(0); + emitter + } - pub fn emit(&self, msg: &str) -> () { - self.handle.emit_all( - &format!("log:{}", self.key), - LogPayload { message: msg.to_string() } - ).expect("Failed to emit log message"); - } + pub fn emit(&self, msg: &str) -> () { + self + .handle + .emit( + &format!("log:{}", self.key), + LogPayload { + message: msg.to_string(), + }, + ) + .expect("Failed to emit log message"); + } - pub fn emit_progress(&self, step: u32) -> () { - if self.max_progress_step.is_some() { - self.handle.emit_all( - &format!("progress:{}", self.key), - ProgressPayload { step, max_step: self.max_progress_step.unwrap() } - ).expect("Failed to emit log message"); - } + pub fn emit_progress(&self, step: u32) -> () { + if self.max_progress_step.is_some() { + self + .handle + .emit( + &format!("progress:{}", self.key), + ProgressPayload { + step, + max_step: self.max_progress_step.unwrap(), + }, + ) + .expect("Failed to emit log message"); } + } - pub fn emit_process_closure(&self, payload: &TerminatedPayload) -> () { - self.handle.emit_all( - &format!("process-exit:{}", self.key), - ProcessClosurePayload { code: payload.code, success: is_process_termination_successful(payload) } - ).expect("Failed to emit log message for process closure"); - } + pub fn emit_process_closure(&self, payload: &TerminatedPayload) -> () { + self + .handle + .emit( + &format!("process-exit:{}", self.key), + ProcessClosurePayload { + code: payload.code, + success: is_process_termination_successful(payload), + }, + ) + .expect("Failed to emit log message for process closure"); + } } #[derive(Clone, serde::Serialize)] struct LogPayload { - message: String, + message: String, } #[derive(Clone, serde::Serialize)] struct ProgressPayload { - step: u32, - max_step: u32 + step: u32, + max_step: u32, } #[derive(Clone, serde::Serialize)] struct ProcessClosurePayload { - code: Option, - success: bool, + code: Option, + success: bool, } fn is_process_termination_successful(payload: &TerminatedPayload) -> bool { - return payload.signal.is_some() || payload.code.is_none() || - (payload.code.is_some() && payload.code.unwrap().eq(&0)); + return payload.signal.is_some() + || payload.code.is_none() + || (payload.code.is_some() && payload.code.unwrap().eq(&0)); } -pub fn emit_tauri_process_output(logger: LogEmitter, mut receiver: Receiver) -> JoinHandle> { - spawn(async move { - let mut exit_code: Option = None; - while let Some(item) = receiver.recv().await { - logger.emit(&*match item { - CommandEvent::Stderr(msg) => msg, - CommandEvent::Stdout(msg) => msg, - CommandEvent::Error(msg) => msg, - CommandEvent::Terminated(payload) => { - logger.emit_process_closure(&payload); - match payload.code { - Some(code) => { - exit_code = Some(code); - format!("Process exited with code {}", code.to_string()) - } - None => "Process exited".to_string() - } - } - _ => { "".to_string() } - }) +pub fn emit_tauri_process_output( + logger: LogEmitter, + mut receiver: Receiver, +) -> JoinHandle> { + spawn(async move { + let mut exit_code: Option = None; + while let Some(item) = receiver.recv().await { + logger.emit(&*match item { + CommandEvent::Stderr(msg) => String::from_utf8(msg) + .unwrap_or_else(|e| format!("Failed to decode output: {}", e.to_string())), + CommandEvent::Stdout(msg) => String::from_utf8(msg) + .unwrap_or_else(|e| format!("Failed to decode output: {}", e.to_string())), + CommandEvent::Error(msg) => msg, + CommandEvent::Terminated(payload) => { + logger.emit_process_closure(&payload); + match payload.code { + Some(code) => { + exit_code = Some(code); + format!("Process exited with code {}", code.to_string()) + } + None => "Process exited".to_string(), + } } - exit_code - }) + _ => "".to_string(), + }) + } + exit_code + }) } pub fn err_to_string(msg: &str, err: T) -> String { - format!("{}: {}", msg, err.to_string()) + format!("{}: {}", msg, err.to_string()) } pub fn format_error(msg: &str, err: T) -> Result { - Err(err_to_string(msg, err)) + Err(err_to_string(msg, err)) } diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index a7d6f3c..959b1a0 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,107 +1,105 @@ #![cfg_attr( -all(not(debug_assertions), target_os = "windows"), -windows_subsystem = "windows" + all(not(debug_assertions), target_os = "windows"), + windows_subsystem = "windows" )] -extern crate core; - -use tauri::{AboutMetadata, Manager, Menu, MenuItem, RunEvent, Submenu}; -use tauri::api::process::{CommandEvent}; -use tauri::async_runtime::{JoinHandle, Receiver}; use crate::log::{err_to_string, format_error, LogEmitter}; +use tauri::async_runtime::{JoinHandle, Receiver}; +use tauri::{Manager, RunEvent}; +use tauri_plugin_shell::process::CommandEvent; -mod npm; -mod log; +mod bundles; +mod config; +mod dependencies; mod error; mod git; -mod bundles; +mod log; mod nodecg; -mod dependencies; +mod npm; use nodecg::ManagedNodecg; -fn log_npm_install(logger: LogEmitter, receiver: Receiver) -> JoinHandle> { - logger.emit("Installing npm dependencies..."); - log::emit_tauri_process_output(logger, receiver) +fn log_npm_install( + logger: LogEmitter, + receiver: Receiver, +) -> JoinHandle> { + logger.emit("Installing npm dependencies..."); + log::emit_tauri_process_output(logger, receiver) } #[tauri::command(async)] fn open_path_in_terminal(path: String) -> Result<(), String> { - if cfg!(target_os = "windows") { - return match std::process::Command::new("cmd") - .args(["/c", "start", "cmd.exe", "/k", &format!("cd /D {}", path)]) - .spawn() { - Ok(_) => { Ok(()) } - Err(e) => { format_error("Failed to open path", e) } - }; - } else if cfg!(target_os = "macos") { - return match std::process::Command::new("open") - .arg("-a") - .arg("Terminal") - .arg(path) - .spawn() { - Ok(_) => { Ok(()) } - Err(e) => { format_error("Failed to open path", e) } - }; - } else { - // After some deliberation, I was not able to find a way to open a path in the user's - // default terminal emulator when running Linux. - Err("Cannot open path in terminal outside MacOS or Windows.".to_string()) - } + if cfg!(target_os = "windows") { + return match std::process::Command::new("cmd") + .args(["/c", "start", "cmd.exe", "/k", &format!("cd /D {}", path)]) + .spawn() + { + Ok(_) => Ok(()), + Err(e) => format_error("Failed to open path", e), + }; + } else if cfg!(target_os = "macos") { + return match std::process::Command::new("open") + .arg("-a") + .arg("Terminal") + .arg(path) + .spawn() + { + Ok(_) => Ok(()), + Err(e) => format_error("Failed to open path", e), + }; + } else { + // After some deliberation, I was not able to find a way to open a path in the user's + // default terminal emulator when running Linux. + Err("Cannot open path in terminal outside MacOS or Windows.".to_string()) + } } fn main() { - let _ = fix_path_env::fix(); + let _ = fix_path_env::fix(); - let mut builder = tauri::Builder::default() - .invoke_handler(tauri::generate_handler![ - nodecg::install_nodecg, - nodecg::start_nodecg, - nodecg::stop_nodecg, - open_path_in_terminal, - bundles::install_bundle, - bundles::fetch_bundle_versions, - bundles::set_bundle_version, - bundles::uninstall_bundle, - bundles::get_bundle_git_tag, - dependencies::get_nodejs_version - ]) - .manage(ManagedNodecg::new()); + let builder = tauri::Builder::default() + .plugin(tauri_plugin_store::Builder::new().build()) + .plugin(tauri_plugin_http::init()) + .plugin(tauri_plugin_shell::init()) + .plugin(tauri_plugin_fs::init()) + .plugin(tauri_plugin_os::init()) + .plugin(tauri_plugin_dialog::init()) + .setup(|app| { + app.manage(ManagedNodecg::new(app.handle().clone())); + config::check_config(app.handle().clone())?; - if cfg!(target_os = "macos") { - let menu_app = Menu::new() - .add_native_item(MenuItem::About("NCGMGR".to_string(), AboutMetadata::new())) - .add_native_item(MenuItem::Quit); + Ok(()) + }) + .invoke_handler(tauri::generate_handler![ + nodecg::install_nodecg, + nodecg::start_nodecg, + nodecg::stop_nodecg, + open_path_in_terminal, + bundles::install_bundle, + bundles::fetch_bundle_versions, + bundles::set_bundle_version, + bundles::uninstall_bundle, + bundles::get_bundle_git_tag, + dependencies::get_nodejs_version, + config::update_config, + ]); - let menu_edit = Menu::new() - .add_native_item(MenuItem::Cut) - .add_native_item(MenuItem::Copy) - .add_native_item(MenuItem::Paste) - .add_native_item(MenuItem::SelectAll) - .add_native_item(MenuItem::Undo) - .add_native_item(MenuItem::Redo); + let app = builder + .build(tauri::generate_context!()) + .expect("error while building tauri application"); - builder = builder.menu(Menu::new() - .add_submenu(Submenu::new("NCGMGR", menu_app)) - .add_submenu(Submenu::new("Edit", menu_edit))); - } - - let app = builder - .build(tauri::generate_context!()) - .expect("error while building tauri application"); - - app.run(|handle, e| match e { - RunEvent::ExitRequested { api, .. } => { - let managed_nodecg = handle.state::(); - match managed_nodecg.stop() { - Ok(_) => {} - Err(e) => { - let logger = LogEmitter::new(handle.clone(), "run-nodecg"); - logger.emit(&err_to_string("Failed to shut down NodeCG", e)); - api.prevent_exit(); - } - } + app.run(|handle, e| match e { + RunEvent::ExitRequested { api, .. } => { + let managed_nodecg = handle.state::(); + match managed_nodecg.stop() { + Ok(_) => {} + Err(e) => { + let logger = LogEmitter::new(&handle, "run-nodecg"); + logger.emit(&err_to_string("Failed to shut down NodeCG", e)); + api.prevent_exit(); } - _ => {} - }); + } + } + _ => {} + }); } diff --git a/src-tauri/src/nodecg.rs b/src-tauri/src/nodecg.rs index 549434d..f208228 100644 --- a/src-tauri/src/nodecg.rs +++ b/src-tauri/src/nodecg.rs @@ -1,183 +1,211 @@ +use flate2::read::GzDecoder; use std::fs; -use std::sync::Mutex; -use tauri::api::process::{Command, CommandChild, CommandEvent}; -use tauri::async_runtime::Receiver; -use unwrap_or::unwrap_ok_or; use std::path::{Path, PathBuf}; -use flate2::read::GzDecoder; +use std::sync::Mutex; use sysinfo::{Pid, ProcessRefreshKind, RefreshKind, System}; -use tauri::api::http::{ClientBuilder, HttpRequestBuilder, ResponseType}; -use futures_util::TryFutureExt; use tar::Archive; +use tauri::async_runtime::Receiver; +use tauri::{AppHandle, Manager}; +use tauri_plugin_http::reqwest; +use tauri_plugin_shell::process::{CommandChild, CommandEvent}; +use tauri_plugin_shell::ShellExt; +use unwrap_or::unwrap_ok_or; -use crate::log::{format_error, emit_tauri_process_output, LogEmitter}; -use crate::{err_to_string, log_npm_install, npm}; -use crate::error::MgrError; +use crate::error::Error; +use crate::log::{emit_tauri_process_output, format_error, LogEmitter}; use crate::npm::NPMPackageMetadata; +use crate::{config, err_to_string, log_npm_install, npm}; pub struct ManagedNodecg { - process: Mutex> + process: Mutex>, + app_handle: AppHandle, } impl ManagedNodecg { - pub fn new() -> ManagedNodecg { - ManagedNodecg { - process: Mutex::new(None) - } + pub fn new(app_handle: AppHandle) -> Self { + ManagedNodecg { + process: Mutex::new(None), + app_handle, + } + } + + pub fn start(&self, nodecg_path: &str) -> Result, Error> { + let mut lock = self + .process + .lock() + .map_err(|e| Error::NodeCGLaunch(e.to_string()))?; + let process = lock.take(); + let sys = + System::new_with_specifics(RefreshKind::new().with_processes(ProcessRefreshKind::new())); + + if process.is_some() && sys.process(Pid::from_u32(process.unwrap().pid())).is_some() { + return Err(Error::NodeCGLaunch( + "NodeCG is already running.".to_string(), + )); } - pub fn start(&self, nodecg_path: &str) -> Result, Box> { - let mut lock = self.process.lock()?; - let process = lock.take(); - let sys = System::new_with_specifics(RefreshKind::new().with_processes(ProcessRefreshKind::new())); + let shell = self.app_handle.shell(); + let child = shell + .command("node") + .args([format!("{}/index.js", nodecg_path)]) + .current_dir(PathBuf::from(nodecg_path)) + .spawn()?; - if process.is_some() && sys.process(Pid::from_u32(process.unwrap().pid())).is_some() { - return Err(MgrError::new("NodeCG is already running.").boxed()) - } + *lock = Some(child.1); - let child = unwrap_ok_or!( - Command::new("node") - .args([format!("{}/index.js", nodecg_path)]) - .current_dir(PathBuf::from(nodecg_path)) - .spawn(), e, - { return Err(MgrError::with_cause("Failed to start NodeCG", e).boxed()) }); + Ok(child.0) + } - *lock = Some(child.1); + pub fn stop(&self) -> Result<(), String> { + let mut process = unwrap_ok_or!(self.process.lock(), e, { + return format_error("Failed to access process", e); + }); - Ok(child.0) + if process.is_none() { + return Ok(()); } - pub fn stop(&self) -> Result<(), String> { - let mut process = unwrap_ok_or!(self.process.lock(), e, { return format_error("Failed to access process", e) }); - - if process.is_none() { - return Ok(()) - } - - unwrap_ok_or!(process.take().unwrap().kill(), e, { return format_error("Failed to kill process", e) }); - *process = None; + unwrap_ok_or!(process.take().unwrap().kill(), e, { + return format_error("Failed to kill process", e); + }); + *process = None; - Ok(()) - } + Ok(()) + } } #[tauri::command(async)] -pub async fn install_nodecg(handle: tauri::AppHandle, path: String) -> Result<(), String> { - let logger = LogEmitter::with_progress(handle, "install-nodecg", 4); - - logger.emit("Starting NodeCG install..."); - - logger.emit("Loading version list..."); - let client = match ClientBuilder::new().build() { - Ok(client) => client, - Err(e) => return format_error("Failed to create HTTP client", e) - }; - let package_info_request = HttpRequestBuilder::new("GET", "https://registry.npmjs.org/nodecg/") - .unwrap() - .response_type(ResponseType::Json); - let tarball_url_and_version = match client.send(package_info_request).and_then(|response| async move { - response.read().await.and_then(|data| { - Ok(serde_json::from_value::(data.data)?) - }) - }).await { - Ok(response) => { - // According to npm, this shouldn't happen... - // https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#full-metadata-format - if !response.dist_tags.contains_key("latest") { - return Err("Couldn't find latest version of NodeCG".to_string()) - } - - let latest_version = response.dist_tags.get("latest").unwrap(); - if !response.versions.contains_key(latest_version) { - return Err(format!("Latest NodeCG version ({}) was not found in npm metadata", latest_version)) - } - let latest_version_metadata = response.versions.get(latest_version).unwrap(); - (latest_version_metadata.dist.tarball.clone(), latest_version.clone()) - }, - Err(e) => return format_error("Failed to get NodeCG version list", e) - }; - logger.emit_progress(1); - - logger.emit(&format!("Downloading NodeCG {}...", tarball_url_and_version.1)); - let tarball_request = HttpRequestBuilder::new("GET", tarball_url_and_version.0) - .unwrap() - .response_type(ResponseType::Binary); - let tarball_response = match client.send(tarball_request).and_then(|response| async move { - response.bytes().await - }).await { - Ok(response) => response, - Err(e) => return format_error("Failed to download NodeCG", e) - }; - logger.emit_progress(2); - - logger.emit("Extracting archive..."); - let gz = GzDecoder::new(tarball_response.data.as_slice()); - let mut archive = Archive::new(gz); - let base_unpack_path = Path::new(&path); - match archive.entries().map(|entries| { - entries - .filter_map(|e| e.ok()) - .map(|mut entry| -> Result<(), Box> { - // Skips the first directory of the archive. - let entry_path = entry.path()?.components().skip(1).collect::(); - let unpack_path = base_unpack_path.join(entry_path); - if entry.header().entry_type() != tar::EntryType::Directory { - if let Some(p) = unpack_path.parent() { - if !p.exists() { - fs::create_dir_all(p)?; - } - } - } - entry.unpack(&unpack_path)?; - Ok(()) - }) - }) { - Ok(results) => { - let mut has_err = false; - results.for_each(|r| { - if let Err(err) = r { - logger.emit(&format!("Error unpacking file: {}", err.to_string())); - has_err = true; - } - }); - if has_err { - return Err("Received one or more errors unpacking NodeCG archive".to_string()) - } - }, - Err(e) => return format_error("Failed to unpack archive", e) +pub async fn install_nodecg(handle: AppHandle, use_default_directory: bool) -> Result<(), Error> { + let logger = LogEmitter::with_progress(&handle, "install-nodecg", 4); + + let install_dir = if use_default_directory { + handle.path().app_local_data_dir() + .map_err(|_| Error::CannotCreateDefaultInstallDir)? + .join("nodecg") + .to_str() + .ok_or(Error::CannotCreateDefaultInstallDir)? + .to_string() + } else { + config::with_config(handle.clone(), |c| Ok(c.nodecg_install_dir))?.ok_or(Error::MissingInstallDir)? + }; + + logger.emit("Starting NodeCG install..."); + if use_default_directory { + let install_dir_path = Path::new(&install_dir); + rm_rf::ensure_removed(install_dir_path)?; + fs::create_dir_all(install_dir_path)?; + config::update_install_dir(handle.clone(), install_dir.clone())?; + } + + logger.emit("Loading version list..."); + let client = reqwest::Client::builder().build()?; + let npm_metadata = client + .get("https://registry.npmjs.org/nodecg/") + .send() + .await? + .json::() + .await?; + + let latest_version = match npm_metadata.dist_tags.get("latest") { + Some(version) => version, + None => { + // https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#full-metadata-format + return Err(Error::NodeCGInstall( + "Couldn't find latest version of NodeCG (This should never happen!)".to_string(), + )); } - logger.emit_progress(3); - - match npm::install_npm_dependencies(&path).and_then(|child| { - log_npm_install(logger, child); + }; + let tarball_url = match npm_metadata.versions.get(latest_version) { + Some(metadata) => metadata.dist.tarball.clone(), + None => { + return Err(Error::NodeCGInstall(format!( + "Latest NodeCG version ({}) was not found in npm metadata", + latest_version + ))); + } + }; + + logger.emit_progress(1); + + logger.emit(&format!("Downloading NodeCG {}...", latest_version)); + let tarball = client.get(tarball_url).send().await?.bytes().await?; + logger.emit_progress(2); + + logger.emit("Extracting archive..."); + let gz = GzDecoder::new(tarball.iter().as_slice()); + let mut archive = Archive::new(gz); + match archive.entries().map(|entries| { + entries + .filter_map(|e| e.ok()) + .map(|mut entry| -> Result<(), Box> { + // Skips the first directory of the archive. + let entry_path = entry.path()?.components().skip(1).collect::(); + let unpack_dir = Path::new(&install_dir).join(entry_path); + if entry.header().entry_type() != tar::EntryType::Directory { + if let Some(p) = unpack_dir.parent() { + if !p.exists() { + fs::create_dir_all(p)?; + } + } + } + entry.unpack(&unpack_dir)?; Ok(()) - }) { - Err(e) => format_error("Failed to install NodeCG dependencies", e), - Ok(_) => Ok(()) + }) + }) { + Ok(results) => { + let mut has_err = false; + results.for_each(|r| { + if let Err(err) = r { + logger.emit(&format!("Error unpacking file: {}", err.to_string())); + has_err = true; + } + }); + if has_err { + return Err(Error::NodeCGInstall( + "Received one or more errors unpacking NodeCG archive".to_string(), + )); + } } + Err(e) => return Err(Error::Io(e)), + } + logger.emit_progress(3); + + let shell = handle.shell(); + npm::install_npm_dependencies(shell, &install_dir).and_then(|child| { + log_npm_install(logger, child); + Ok(()) + }) } #[tauri::command(async)] -pub fn start_nodecg(handle: tauri::AppHandle, nodecg: tauri::State<'_, ManagedNodecg>, path: String) -> Result { - let logger = LogEmitter::new(handle, "run-nodecg"); - let output = unwrap_ok_or!(nodecg.start(&path), e, { return format_error("Failed to start NodeCG", e) }); - emit_tauri_process_output(logger, output); - - Ok("Started successfully".to_string()) +pub fn start_nodecg( + handle: AppHandle, + nodecg: tauri::State<'_, ManagedNodecg>, +) -> Result { + let logger = LogEmitter::new(&handle, "run-nodecg"); + let install_dir = config::with_config(handle.clone(), |c| Ok(c.nodecg_install_dir))? + .ok_or(Error::MissingInstallDir)?; + let output = nodecg.start(&install_dir)?; + emit_tauri_process_output(logger, output); + + Ok("Started successfully".to_string()) } #[tauri::command(async)] -pub fn stop_nodecg(handle: tauri::AppHandle, nodecg: tauri::State) -> Result<(), String> { - let logger = LogEmitter::new(handle, "run-nodecg"); - - match nodecg.stop() { - Ok(_) => { - logger.emit("Stopped successfully"); - Ok(()) - }, - Err(e) => { - logger.emit(&err_to_string("Failed to stop NodeCG", e.clone())); - Err(e) - } +pub fn stop_nodecg( + handle: tauri::AppHandle, + nodecg: tauri::State, +) -> Result<(), String> { + let logger = LogEmitter::new(&handle, "run-nodecg"); + + match nodecg.stop() { + Ok(_) => { + logger.emit("Stopped successfully"); + Ok(()) + } + Err(e) => { + logger.emit(&err_to_string("Failed to stop NodeCG", e.clone())); + Err(e) } + } } diff --git a/src-tauri/src/npm.rs b/src-tauri/src/npm.rs index 5ad43ca..5d4b08a 100644 --- a/src-tauri/src/npm.rs +++ b/src-tauri/src/npm.rs @@ -1,45 +1,56 @@ +use crate::error::Error; use std::collections::HashMap; use std::path::PathBuf; -use tauri::api::process::{Command, CommandEvent}; use tauri::async_runtime::Receiver; +use tauri::Wry; +use tauri_plugin_shell::process::CommandEvent; +use tauri_plugin_shell::Shell; #[derive(serde::Deserialize)] pub struct NPMPackageMetadata { - #[serde(rename = "dist-tags")] - pub dist_tags: HashMap, - pub versions: HashMap, + #[serde(rename = "dist-tags")] + pub dist_tags: HashMap, + pub versions: HashMap, } #[derive(serde::Deserialize)] pub struct NPMPackageVersion { - pub dist: NPMPackageVersionDist, + pub dist: NPMPackageVersionDist, } #[derive(serde::Deserialize)] pub struct NPMPackageVersionDist { - pub tarball: String, + pub tarball: String, } #[cfg(target_os = "windows")] -pub fn install_npm_dependencies(path: &str) -> Result, String> { - let command = Command::new("cmd") - .args(["/c", "npm", "i", "--omit=dev", "--no-progress"]) - .current_dir(PathBuf::from(path)) - .spawn(); - match command { - Ok(cmd) => Ok(cmd.0), - Err(e) => Err(format!("Failed to spawn npm process: {}", e.to_string())) - } +pub fn install_npm_dependencies( + shell: &Shell, + path: &str, +) -> Result, Error> { + let command = shell + .command("cmd") + .args(["/c", "npm", "i", "--omit=dev", "--no-progress"]) + .current_dir(PathBuf::from(path)) + .spawn(); + match command { + Ok(cmd) => Ok(cmd.0), + Err(e) => Err(Error::NPMInstall(e.to_string())), + } } #[cfg(not(target_os = "windows"))] -pub fn install_npm_dependencies(path: &str) -> Result, String> { - let command = Command::new("npm") - .args(["i", "--omit=dev", "--no-progress"]) - .current_dir(PathBuf::from(path)) - .spawn(); - match command { - Ok(cmd) => Ok(cmd.0), - Err(e) => Err(format!("Failed to spawn npm process: {}", e.to_string())) - } +pub fn install_npm_dependencies( + shell: &Shell, + path: &str, +) -> Result, Error> { + let command = shell + .command("npm") + .args(["i", "--omit=dev", "--no-progress"]) + .current_dir(PathBuf::from(path)) + .spawn(); + match command { + Ok(cmd) => Ok(cmd.0), + Err(e) => Err(Error::NPMInstall(e.to_string())), + } } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index e3a7d23..87ca593 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,55 +1,48 @@ { - "package": { - "productName": "NCGMGR", - "version": "0.6.0" + "bundle": { + "active": true, + "targets": "all", + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" + }, + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "resources": [], + "externalBin": [], + "copyright": "© inkfarer (inkfarer@inkfarer.com)", + "category": "Utility", + "shortDescription": "NCGMGR", + "longDescription": "Helps manage NodeCG installations.", + "macOS": { + "frameworks": [] + }, + "linux": { + "deb": { + "depends": [] + } + } }, "build": { - "distDir": "../dist", - "devPath": "http://localhost:5173", + "beforeBuildCommand": "yarn build", + "frontendDist": "../dist", "beforeDevCommand": "yarn dev", - "beforeBuildCommand": "yarn build" + "devUrl": "http://localhost:5173" }, - "tauri": { + "productName": "NCGMGR", + "version": "0.7.0", + "identifier": "com.inkfarer.ncgmgr", + "plugins": {}, + "app": { "macOSPrivateApi": true, - "bundle": { - "active": true, - "targets": "all", - "identifier": "com.inkfarer.ncgmgr", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ], - "resources": [], - "externalBin": [], - "copyright": "© inkfarer (inkfarer@inkfarer.com)", - "category": "Utility", - "shortDescription": "Helps manage NodeCG installations.", - "longDescription": "", - "deb": { - "depends": [] - }, - "macOS": { - "frameworks": [] - }, - "windows": { - "certificateThumbprint": null, - "digestAlgorithm": "sha256", - "timestampUrl": "" - } - }, - "updater": { - "active": false - }, - "allowlist": { - "all": true, - "fs": { - "scope": [ - "$HOME/**/*" - ] - } + "security": { + "csp": "default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self' img-src: 'self'; connect-src ipc: http://ipc.localhost" }, "windows": [ { @@ -61,9 +54,6 @@ "fullscreen": false, "titleBarStyle": "Transparent" } - ], - "security": { - "csp": "default-src blob: data: filesystem: ws: wss: http: https: tauri: 'unsafe-eval' 'unsafe-inline' 'self' img-src: 'self'" - } + ] } -} +} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index eea2a66..13dabc5 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,43 +3,55 @@ Please install Node.js to continue. - - + + + + diff --git a/src/components/InstallManager.vue b/src/components/InstallManager.vue deleted file mode 100644 index 1abf5d7..0000000 --- a/src/components/InstallManager.vue +++ /dev/null @@ -1,188 +0,0 @@ - - - - - diff --git a/src/components/NodecgStarter.vue b/src/components/NodecgStarter.vue new file mode 100644 index 0000000..32ce62b --- /dev/null +++ b/src/components/NodecgStarter.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/components/NodecgStatus.vue b/src/components/NodecgStatus.vue new file mode 100644 index 0000000..9a3e266 --- /dev/null +++ b/src/components/NodecgStatus.vue @@ -0,0 +1,87 @@ + + + diff --git a/src/components/__tests__/BundleInstaller.test.ts b/src/components/__tests__/BundleInstaller.test.ts deleted file mode 100644 index bf3865d..0000000 --- a/src/components/__tests__/BundleInstaller.test.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { mockTauri } from '@/__mocks__/tauri' -import BundleInstaller from '@/components/BundleInstaller.vue' -import { config, flushPromises, mount } from '@vue/test-utils' -import Mock = jest.Mock -import { IplButton, IplInput } from '@iplsplatoon/vue-components' -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { useConfigStore } from '@/store/configStore' -import { useLogStore } from '@/store/logStore' -import { useNodecgStore } from '@/store/nodecgStore' - -describe('BundleInstaller', () => { - config.global.stubs = { - IplInput: true, - IplButton: true, - LogOverlay: true - } - - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - }) - - it('matches snapshot', () => { - const wrapper = mount(BundleInstaller) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('handles installation', async () => { - const logStore = useLogStore() - logStore.reset = jest.fn() - logStore.logPromiseResult = jest.fn() - logStore.listenForProcessExit = jest.fn() - logStore.listen = jest.fn() - const configStore = useConfigStore() - configStore.installPath = '/install/path' - const nodecgStore = useNodecgStore() - nodecgStore.getBundleList = jest.fn() - mockTauri.invoke.mockResolvedValue({}) - const wrapper = mount(BundleInstaller, { - global: { - plugins: [pinia] - } - }) - - wrapper.getComponent('[data-test="bundle-path-input"]').vm.$emit('update:modelValue', 'git://new-path') - await flushPromises() - wrapper.getComponent('[data-test="install-button"]').vm.$emit('click') - await flushPromises() - - expect(logStore.reset).toHaveBeenCalledWith('install-bundle') - expect(logStore.listen).toHaveBeenCalledWith('install-bundle', true) - expect(mockTauri.invoke).toHaveBeenCalledWith('install_bundle', { bundleUrl: 'git://new-path', nodecgPath: '/install/path' }) - expect(logStore.logPromiseResult).toHaveBeenCalledWith({ promise: expect.anything(), key: 'install-bundle' }) - expect(logStore.listenForProcessExit).toHaveBeenCalledWith({ callback: expect.anything(), key: 'install-bundle' }); - (logStore.listenForProcessExit as Mock).mock.calls[0][0].callback() - expect(nodecgStore.getBundleList).toHaveBeenCalled() - expect(wrapper.findComponent('[data-test="bundle-log-overlay"]').exists()).toEqual(true) - }) -}) diff --git a/src/components/__tests__/BundleManager.test.ts b/src/components/__tests__/BundleManager.test.ts deleted file mode 100644 index c5bbebf..0000000 --- a/src/components/__tests__/BundleManager.test.ts +++ /dev/null @@ -1,62 +0,0 @@ -import BundleManager from '@/components/BundleManager.vue' -import { config, mount } from '@vue/test-utils' -import { IplButton } from '@iplsplatoon/vue-components' -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { useNodecgStore } from '@/store/nodecgStore' - -describe('BundleManager', () => { - config.global.stubs = { - IplButton: true, - BundleInstaller: true, - BundleSettings: true - } - - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - }) - - it('matches snapshot when installing a bundle', () => { - const nodecgStore = useNodecgStore() - nodecgStore.bundles = [] - const wrapper = mount(BundleManager, { - global: { - plugins: [pinia] - } - }) - - wrapper.getComponent('[data-test="install-new-bundle-button"]').vm.$emit('click') - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot with bundle data', () => { - const nodecgStore = useNodecgStore() - nodecgStore.bundles = [ - { name: 'Bundle One', version: '1.2.3' }, - { name: 'Bundle Two', version: '5.0' } - ] - const wrapper = mount(BundleManager, { - global: { - plugins: [pinia] - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('handles refreshing', () => { - const nodecgStore = useNodecgStore() - nodecgStore.getBundleList = jest.fn() - const wrapper = mount(BundleManager, { - global: { - plugins: [pinia] - } - }) - - wrapper.getComponent('[data-test="refresh-button"]').vm.$emit('click') - - expect(nodecgStore.getBundleList).toHaveBeenCalled() - }) -}) diff --git a/src/components/__tests__/ConfigWindow.test.ts b/src/components/__tests__/ConfigWindow.test.ts deleted file mode 100644 index 60bb0a1..0000000 --- a/src/components/__tests__/ConfigWindow.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { config, mount } from '@vue/test-utils' -import ConfigWindow from '@/components/ConfigWindow.vue' - -describe('ConfigWindow', () => { - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - }) - - config.global.stubs = { - IplSmallToggle: true, - DependencyChecker: true - } - - it('matches snapshot', () => { - const wrapper = mount(ConfigWindow) - - expect(wrapper.html()).toMatchSnapshot() - }) -}) diff --git a/src/components/__tests__/DependencyChecker.test.ts b/src/components/__tests__/DependencyChecker.test.ts deleted file mode 100644 index e2046c4..0000000 --- a/src/components/__tests__/DependencyChecker.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import DependencyChecker from '@/components/DependencyChecker.vue' -import { config, mount } from '@vue/test-utils' -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { useDependencyStore } from '@/store/dependencyStore' - -describe('DependencyChecker', () => { - config.global.stubs = { - IplButton: true, - FontAwesomeIcon: true, - StatusRow: true - } - - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - }) - - it('matches snapshot when dependencies are loading', () => { - useDependencyStore().isLoading = true - - expect(mount(DependencyChecker).html()).toMatchSnapshot() - }) - - it('matches snapshot when node.js is missing', () => { - const dependencyStore = useDependencyStore() - dependencyStore.isLoading = false - dependencyStore.nodejs.version = null - - expect(mount(DependencyChecker).html()).toMatchSnapshot() - }) - - it('matches snapshot when dependencies are present', () => { - const dependencyStore = useDependencyStore() - dependencyStore.isLoading = false - dependencyStore.nodejs.version = '12.3.4' - - expect(mount(DependencyChecker).html()).toMatchSnapshot() - }) -}) diff --git a/src/components/__tests__/ErrorList.test.ts b/src/components/__tests__/ErrorList.test.ts deleted file mode 100644 index 2c43992..0000000 --- a/src/components/__tests__/ErrorList.test.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { config, mount } from '@vue/test-utils' -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { useErrorHandlerStore } from '@/store/errorHandlerStore' -import ErrorList from '@/components/ErrorList.vue' - -describe('ErrorList', () => { - config.global.stubs = { - IplButton: true, - IplDataRow: true, - FontAwesomeIcon: true - } - - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - }) - - it('matches snapshot', () => { - const errorHandlerStore = useErrorHandlerStore() - errorHandlerStore.recentErrors = { - err1: { - err: new Error('Error!'), - info: 'error information', - component: { - // @ts-ignore - $: { - type: { - name: 'ComponentName' - } - } - } - }, - err2: { - err: new Error('Error 2!'), - info: 'info', - component: null - } - } - const wrapper = mount(ErrorList) - - expect(wrapper.html()).toMatchSnapshot() - }) -}) diff --git a/src/components/__tests__/InstallManager.test.ts b/src/components/__tests__/InstallManager.test.ts deleted file mode 100644 index 25907e4..0000000 --- a/src/components/__tests__/InstallManager.test.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { mockTauri, mockTauriDialog } from '@/__mocks__/tauri' -import { config, flushPromises, shallowMount } from '@vue/test-utils' -import InstallManager from '../InstallManager.vue' -import { InstallStatus, useNodecgStore, RunStatus } from '@/store/nodecgStore' -import { IplButton } from '@iplsplatoon/vue-components' -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { useConfigStore } from '@/store/configStore' -import { useLogStore } from '@/store/logStore' -import { openDashboard } from '@/service/nodecgService' - -jest.mock('@/service/nodecgService') - -describe('Installer', () => { - config.global.stubs = { - IplSpace: false, - IplExpandingSpace: false - } - - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - }) - - it('matches snapshot', () => { - useConfigStore().installPath = '/install/path' - - const wrapper = shallowMount(InstallManager) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it.each(Object.values(RunStatus))('matches snapshot when nodecg status is %s', (status: RunStatus) => { - useNodecgStore().status.runStatus = status - - expect(shallowMount(InstallManager).html()).toMatchSnapshot() - }) - - it('handles directory selection', async () => { - const store = useConfigStore() - store.persist = jest.fn() - const wrapper = shallowMount(InstallManager) - mockTauriDialog.open.mockResolvedValue('/new/path') - - wrapper.getComponent('[data-test="install-directory-select-button"]').vm.$emit('click') - await flushPromises() - - expect(mockTauriDialog.open).toHaveBeenCalledWith({ directory: true }) - expect(store.installPath).toEqual('/new/path') - expect(store.persist).toHaveBeenCalled() - }) - - it('handles directory selection getting cancelled', async () => { - const store = useConfigStore() - store.persist = jest.fn() - const wrapper = shallowMount(InstallManager) - mockTauriDialog.open.mockResolvedValue(null) - - wrapper.getComponent('[data-test="install-directory-select-button"]').vm.$emit('click') - await flushPromises() - - expect(store.installPath).toEqual('') - expect(store.persist).not.toHaveBeenCalled() - }) - - it('disables installation if installation is not possible', async () => { - const nodecgStore = useNodecgStore() - nodecgStore.checkNodecgStatus = jest.fn() - nodecgStore.status.installStatus = InstallStatus.UNABLE_TO_INSTALL - const wrapper = await shallowMount(InstallManager) - - expect(wrapper.getComponent('[data-test="install-button"]').attributes().disabled).toEqual('true') - expect(wrapper.findComponent('[data-test="launch-button"]').exists()).toEqual(false) - }) - - it('enables installation if installation is possible', async () => { - const nodecgStore = useNodecgStore() - nodecgStore.checkNodecgStatus = jest.fn() - nodecgStore.status.installStatus = InstallStatus.READY_TO_INSTALL - const wrapper = await shallowMount(InstallManager) - - expect(wrapper.getComponent('[data-test="install-button"]').attributes().disabled).toEqual('false') - expect(wrapper.findComponent('[data-test="launch-button"]').exists()).toEqual(false) - }) - - it('shows start/stop button if nodecg is installed', async () => { - const nodecgStore = useNodecgStore() - nodecgStore.checkNodecgStatus = jest.fn() - nodecgStore.status.installStatus = InstallStatus.INSTALLED - const wrapper = await shallowMount(InstallManager) - - expect(wrapper.findComponent('[data-test="install-button"]').exists()).toEqual(false) - expect(wrapper.findComponent('[data-test="start-stop-toggle-button"]').exists()).toEqual(true) - }) - - it('disables installation if installation status is unknown', async () => { - const nodecgStore = useNodecgStore() - nodecgStore.status.installStatus = InstallStatus.UNKNOWN - const wrapper = await shallowMount(InstallManager) - await flushPromises() - - expect(wrapper.getComponent('[data-test="install-button"]').attributes().disabled).toEqual('true') - expect(wrapper.findComponent('[data-test="launch-button"]').exists()).toEqual(false) - }) - - it('handles installation', async () => { - const configStore = useConfigStore() - configStore.installPath = '/install/path' - const logStore = useLogStore() - logStore.reset = jest.fn() - logStore.listen = jest.fn() - logStore.logPromiseResult = jest.fn() - logStore.listenForProcessExit = jest.fn() - const nodecgStore = useNodecgStore() - nodecgStore.status.installStatus = InstallStatus.READY_TO_INSTALL - mockTauri.invoke.mockResolvedValue({}) - const wrapper = shallowMount(InstallManager) - - await wrapper.getComponent('[data-test="install-button"]').vm.$emit('click') - - expect(logStore.reset).toHaveBeenCalledWith('install-nodecg') - expect(logStore.listen).toHaveBeenCalledWith('install-nodecg', true) - expect(mockTauri.invoke).toHaveBeenCalledWith('install_nodecg', { path: '/install/path' }) - expect(logStore.logPromiseResult).toHaveBeenCalledWith({ promise: expect.anything(), key: 'install-nodecg' }) - expect(logStore.listenForProcessExit).toHaveBeenCalledWith({ key: 'install-nodecg', callback: expect.anything() }) - }) - - it.each([RunStatus.NOT_STARTED, RunStatus.STOPPED])('handles launching when nodecg status is %s', async (status) => { - const configStore = useConfigStore() - configStore.installPath = '/install/path' - const logStore = useLogStore() - logStore.reset = jest.fn() - logStore.logPromiseResult = jest.fn() - const nodecgStore = useNodecgStore() - nodecgStore.status.installStatus = InstallStatus.INSTALLED - nodecgStore.status.runStatus = status - mockTauri.invoke.mockResolvedValue({}) - const wrapper = shallowMount(InstallManager) - - wrapper.getComponent('[data-test="start-stop-toggle-button"]').vm.$emit('click') - await flushPromises() - - expect(logStore.reset).toHaveBeenCalledWith('run-nodecg') - expect(mockTauri.invoke).toHaveBeenCalledWith('start_nodecg', { path: '/install/path' }) - expect(logStore.logPromiseResult).toHaveBeenCalledWith({ promise: expect.anything(), key: 'run-nodecg' }) - expect(nodecgStore.status.runStatus).toEqual(RunStatus.RUNNING) - }) - - it('handles stopping nodecg', async () => { - const nodecgStore = useNodecgStore() - nodecgStore.status.installStatus = InstallStatus.INSTALLED - nodecgStore.status.runStatus = RunStatus.RUNNING - mockTauri.invoke.mockResolvedValue({}) - const wrapper = shallowMount(InstallManager) - - await wrapper.getComponent('[data-test="start-stop-toggle-button"]').vm.$emit('click') - - expect(mockTauri.invoke).toHaveBeenCalledWith('stop_nodecg') - }) - - it('handles opening the dashboard', () => { - useConfigStore().installPath = '/nodecg/install/path' - const wrapper = shallowMount(InstallManager) - - wrapper.getComponent('[data-test="open-dashboard-button"]').vm.$emit('click') - - expect(openDashboard).toHaveBeenCalledWith('/nodecg/install/path') - }) -}) diff --git a/src/components/__tests__/StatusRow.test.ts b/src/components/__tests__/StatusRow.test.ts deleted file mode 100644 index a732e2f..0000000 --- a/src/components/__tests__/StatusRow.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -import StatusRow from '@/components/StatusRow.vue' -import { shallowMount } from '@vue/test-utils' - -describe('StatusRow', () => { - it('matches snapshot', () => { - const wrapper = shallowMount(StatusRow, { - props: { - color: 'yellow' - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('applies color class to status light', () => { - const wrapper = shallowMount(StatusRow, { - props: { - color: 'red' - } - }) - - expect(wrapper.get('.status-row__status-light').classes()).toContain('color-red') - }) - - describe('validator: color', () => { - const validator = StatusRow.props.color.validator - - it('returns true for known colors', () => { - expect(validator('red')).toEqual(true) - expect(validator('yellow')).toEqual(true) - expect(validator('green')).toEqual(true) - expect(validator('gray')).toEqual(true) - }) - - it('returns false for unknown colors', () => { - expect(validator('pink')).toEqual(false) - expect(validator(undefined)).toEqual(false) - expect(validator(null)).toEqual(false) - expect(validator('')).toEqual(false) - }) - }) -}) diff --git a/src/components/__tests__/__snapshots__/BundleInstaller.test.ts.snap b/src/components/__tests__/__snapshots__/BundleInstaller.test.ts.snap deleted file mode 100644 index 64ab227..0000000 --- a/src/components/__tests__/__snapshots__/BundleInstaller.test.ts.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`BundleInstaller matches snapshot 1`] = ` -"
- - - -
" -`; diff --git a/src/components/__tests__/__snapshots__/BundleManager.test.ts.snap b/src/components/__tests__/__snapshots__/BundleManager.test.ts.snap deleted file mode 100644 index e9d5b20..0000000 --- a/src/components/__tests__/__snapshots__/BundleManager.test.ts.snap +++ /dev/null @@ -1,54 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`BundleManager matches snapshot when installing a bundle 1`] = ` -"
-
-
Bundles
- - -
- -
No bundles found.
-
" -`; - -exports[`BundleManager matches snapshot with bundle data 1`] = ` -"
-
-
Bundles
- - -
- -
-
-
Name
-
Version
-
-
-
-
-
Bundle One
-
1.2.3
-
- - -
-
- -
-
-
-
Bundle Two
-
5.0
-
- - -
-
- -
- -
-
" -`; diff --git a/src/components/__tests__/__snapshots__/ConfigWindow.test.ts.snap b/src/components/__tests__/__snapshots__/ConfigWindow.test.ts.snap deleted file mode 100644 index bc491cc..0000000 --- a/src/components/__tests__/__snapshots__/ConfigWindow.test.ts.snap +++ /dev/null @@ -1,11 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ConfigWindow matches snapshot 1`] = ` -"
-
Dependency status
- -
-
- -
" -`; diff --git a/src/components/__tests__/__snapshots__/DependencyChecker.test.ts.snap b/src/components/__tests__/__snapshots__/DependencyChecker.test.ts.snap deleted file mode 100644 index 2a26ad1..0000000 --- a/src/components/__tests__/__snapshots__/DependencyChecker.test.ts.snap +++ /dev/null @@ -1,19 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`DependencyChecker matches snapshot when dependencies are loading 1`] = ` -"
- -
" -`; - -exports[`DependencyChecker matches snapshot when dependencies are present 1`] = ` -"
- -
" -`; - -exports[`DependencyChecker matches snapshot when node.js is missing 1`] = ` -"
- -
" -`; diff --git a/src/components/__tests__/__snapshots__/ErrorList.test.ts.snap b/src/components/__tests__/__snapshots__/ErrorList.test.ts.snap deleted file mode 100644 index 387f87d..0000000 --- a/src/components/__tests__/__snapshots__/ErrorList.test.ts.snap +++ /dev/null @@ -1,38 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ErrorList matches snapshot 1`] = ` -"
-
-
Errors that have occurred in this application will be listed here.
It is most useful to developers for diagnosing issues.
- -
-
-
-
-
-
Error: Error!
- -
-
- -
-
-
-
-
Error: Error 2!
- -
-
- -
-
-
" -`; diff --git a/src/components/__tests__/__snapshots__/InstallManager.test.ts.snap b/src/components/__tests__/__snapshots__/InstallManager.test.ts.snap deleted file mode 100644 index 8bd95e0..0000000 --- a/src/components/__tests__/__snapshots__/InstallManager.test.ts.snap +++ /dev/null @@ -1,105 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Installer matches snapshot 1`] = ` -"
-
Installation folder: /install/path
- -
- - - -
-
- -" -`; - -exports[`Installer matches snapshot when nodecg status is NOT_STARTED 1`] = ` -"
-
Installation folder:
- -
- - - -
-
- -" -`; - -exports[`Installer matches snapshot when nodecg status is RUNNING 1`] = ` -"
-
Installation folder:
- -
- - - -
-
-
-
-
-
NodeCG log Running
- -
-
-
-
- -
-
-
-" -`; - -exports[`Installer matches snapshot when nodecg status is STOPPED 1`] = ` -"
-
Installation folder:
- -
- - - -
-
-
-
-
-
NodeCG log Stopped
- -
-
-
-
- -
-
-
-" -`; diff --git a/src/components/__tests__/__snapshots__/StatusRow.test.ts.snap b/src/components/__tests__/__snapshots__/StatusRow.test.ts.snap deleted file mode 100644 index aca0346..0000000 --- a/src/components/__tests__/__snapshots__/StatusRow.test.ts.snap +++ /dev/null @@ -1,7 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`StatusRow matches snapshot 1`] = ` -"
-
-
" -`; diff --git a/src/components/bundleList/BundleConfig.vue b/src/components/bundleList/BundleConfig.vue index 6407db1..d6593d1 100644 --- a/src/components/bundleList/BundleConfig.vue +++ b/src/components/bundleList/BundleConfig.vue @@ -16,33 +16,28 @@ :disabled="disableVersionChange" :options="versionOptions" label="Version" - data-test="version-selector" /> @@ -65,10 +59,9 @@ import { IplButton, IplMessage, IplSelect, IplSpace } from '@iplsplatoon/vue-com import { useConfigStore } from '@/store/configStore' import LogOverlay from '@/components/log/LogOverlay.vue' import { useLogStore } from '@/store/logStore' -import { invoke } from '@tauri-apps/api/tauri' +import { invoke } from '@tauri-apps/api/core' import { useNodecgStore } from '@/store/nodecgStore' -import { open } from '@tauri-apps/api/shell' -import { type } from '@tauri-apps/api/os' +import { open } from '@tauri-apps/plugin-shell' export default defineComponent({ name: 'BundleConfig', @@ -94,11 +87,6 @@ export default defineComponent({ const showInstallLog = ref(false) const hasConfigFile = ref(false) const configFileLoading = ref(true) - const enableOpenTerminal = ref(false) - - type().then(type => { - enableOpenTerminal.value = type === 'Darwin' || type === 'Windows_NT' - }) watch(showInstallLog, newValue => { if (!newValue) { @@ -107,7 +95,7 @@ export default defineComponent({ }) watch(() => props.bundle.name, newValue => { - getBundleVersions(newValue, configStore.installPath).then(result => { + getBundleVersions(newValue).then(result => { versions.value = result if (result.length > 0) { selectedVersion.value = props.bundle.version @@ -124,7 +112,7 @@ export default defineComponent({ async function checkConfigFile (bundleName: string): Promise { configFileLoading.value = true hasConfigFile.value = false - configFileExists(bundleName, useConfigStore().installPath).then(result => { + configFileExists(bundleName, configStore.userConfig.nodecgInstallDir).then(result => { hasConfigFile.value = result }).catch(e => { hasConfigFile.value = false @@ -135,11 +123,11 @@ export default defineComponent({ } function getBundlePath () { - return `${useConfigStore().installPath}/bundles/${props.bundle.name}` + return `${configStore.userConfig.nodecgInstallDir}/bundles/${props.bundle.name}` } return { - enableOpenTerminal, + configStore, hasConfigFile, configFileLoading, showInstallLog, @@ -164,8 +152,7 @@ export default defineComponent({ showInstallLog.value = true const invocation = invoke('set_bundle_version', { bundleName: props.bundle.name, - version: selectedVersion.value, - nodecgPath: configStore.installPath + version: selectedVersion.value }) logStore.logPromiseResult({ promise: invocation, key: logKey }) logStore.listenForProcessExit({ key: logKey }) @@ -174,13 +161,12 @@ export default defineComponent({ await open(getBundlePath()) }, async openOrCreateConfigFile () { - const configStore = useConfigStore() if (!hasConfigFile.value) { - await createConfigFile(props.bundle.name, configStore.installPath) + await createConfigFile(props.bundle.name, configStore.userConfig.nodecgInstallDir) checkConfigFile(props.bundle.name) } - await openConfigFile(props.bundle.name, configStore.installPath) + await openConfigFile(props.bundle.name, configStore.userConfig.nodecgInstallDir) }, async openBundleInTerminal () { await invoke('open_path_in_terminal', { path: getBundlePath() }) diff --git a/src/components/bundleList/BundleList.vue b/src/components/bundleList/BundleList.vue index b4dcf95..da9c924 100644 --- a/src/components/bundleList/BundleList.vue +++ b/src/components/bundleList/BundleList.vue @@ -27,7 +27,6 @@
@@ -38,7 +37,6 @@ small icon="cog" :color="visibleBundleConfigs[bundle.name] ? themeColors.backgroundTertiary : 'blue'" - data-test="configure-button" @click="toggleConfiguration(bundle.name)" />
@@ -58,10 +55,7 @@ class="m-x-8" />
- +
Are you sure you want to uninstall {{ uninstallOverlayProps.bundleName }}?
@@ -70,13 +64,11 @@ label="Uninstall" color="red" async - data-test="confirm-uninstall-button" @click="doUninstall" /> @@ -123,12 +115,13 @@ export default defineComponent({ uninstallOverlayProps.visible = false uninstallOverlayProps.bundleName = '' }, - doUninstall: () => { - return removeBundle(uninstallOverlayProps.bundleName, configStore.installPath).then(() => { + doUninstall: async () => { + try { + await removeBundle(uninstallOverlayProps.bundleName, configStore.userConfig.nodecgInstallDir) uninstallOverlayProps.visible = false - }).finally(() => { + } finally { nodecgStore.getBundleList() - }) + } }, visibleBundleConfigs, toggleConfiguration: (name: string) => { diff --git a/src/components/bundleList/__tests__/BundleConfig.test.ts b/src/components/bundleList/__tests__/BundleConfig.test.ts deleted file mode 100644 index 1f0a69a..0000000 --- a/src/components/bundleList/__tests__/BundleConfig.test.ts +++ /dev/null @@ -1,367 +0,0 @@ -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { config, flushPromises, mount } from '@vue/test-utils' -import { getBundleVersions, configFileExists, openConfigFile, createConfigFile } from '@/service/nodecgService' -import BundleConfig from '../BundleConfig.vue' -import Mock = jest.Mock -import type { IplSelect, IplButton } from '@iplsplatoon/vue-components' -import { useLogStore } from '@/store/logStore' -import { mockTauri, mockTauriOs, mockTauriShell } from '@/__mocks__/tauri' -import { useConfigStore } from '@/store/configStore' -import LogOverlay from '@/components/log/LogOverlay.vue' - -jest.mock('@/service/nodecgService') - -describe('BundleConfig', () => { - let pinia: TestingPinia - config.global.stubs = { - IplButton: true, - IplSelect: true, - FontAwesomeIcon: true, - LogOverlay: true - } - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia]; - - (getBundleVersions as Mock).mockResolvedValue(['1.0.0', '0.0.1']); - (configFileExists as Mock).mockResolvedValue(true) - mockTauriOs.type.mockResolvedValue('') - }) - - it('matches snapshot', () => { - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot after bundle versions are loaded', async () => { - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when no bundle versions are found', async () => { - (getBundleVersions as Mock).mockResolvedValue([]) - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when config file exists', async () => { - (configFileExists as Mock).mockResolvedValue(true) - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when config file is missing', async () => { - (configFileExists as Mock).mockResolvedValue(false) - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when getting bundle versions fails', async () => { - (getBundleVersions as Mock).mockRejectedValue(new Error('Error!')) - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('adds expected version options when loading', () => { - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - - expect(wrapper.getComponent('[data-test="version-selector"]').vm.$props.options) - .toEqual([{ - name: 'Loading...', - value: '' - }]) - }) - - it('adds expected version options when no versions are present', async () => { - (getBundleVersions as Mock).mockResolvedValue([]) - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(wrapper.getComponent('[data-test="version-selector"]').vm.$props.options) - .toEqual([{ - name: 'No versions found', - value: '' - }]) - }) - - it('adds expected version options when version list is present', async () => { - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(wrapper.getComponent('[data-test="version-selector"]').vm.$props.options) - .toEqual([ - { - name: '1.0.0', - value: '1.0.0' - }, - { - name: '0.0.1', - value: '0.0.1' - } - ]) - }) - - it('handles setting version', async () => { - mockTauri.invoke.mockResolvedValue({}) - useConfigStore().installPath = 'nodecg/path' - const logStore = useLogStore() - logStore.reset = jest.fn() - logStore.listen = jest.fn() - logStore.logPromiseResult = jest.fn() - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - wrapper.getComponent('[data-test="version-selector"]').vm.$emit('update:modelValue', '2.0.1') - wrapper.getComponent('[data-test="set-version-button"]').vm.$emit('click') - await flushPromises() - - expect(logStore.reset).toHaveBeenCalledWith('change-bundle-version') - expect(logStore.listen).toHaveBeenCalledWith('change-bundle-version', true) - expect(mockTauri.invoke).toHaveBeenCalledWith('set_bundle_version', { - bundleName: 'bundle-name', - version: '2.0.1', - nodecgPath: 'nodecg/path' - }) - expect(logStore.logPromiseResult).toHaveBeenCalledWith({ - promise: expect.anything(), - key: 'change-bundle-version' - }) - expect(wrapper.getComponent('[data-test="bundle-log-overlay"]').vm.$props.visible) - .toEqual(true) - }) - - it('handles opening bundle folder', () => { - useConfigStore().installPath = 'nodecg/path' - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - - wrapper.getComponent('[data-test="open-folder-button"]').vm.$emit('click') - - expect(mockTauriShell.open).toHaveBeenCalledWith('nodecg/path/bundles/bundle-name') - }) - - it('disables opening bundle in terminal if system is linux', async () => { - mockTauriOs.type.mockResolvedValue('Linux') - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(wrapper.getComponent('[data-test="open-in-terminal-button"]').vm.$props.disabled).toEqual(true) - }) - - it.each(['Windows_NT', 'Darwin'])('enables opening bundle in terminal if system is %s', async (type) => { - mockTauriOs.type.mockResolvedValue(type) - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'bundle-name', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(wrapper.getComponent('[data-test="open-in-terminal-button"]').vm.$props.disabled).toEqual(false) - }) - - it('handles opening bundle in terminal', () => { - useConfigStore().installPath = '/nodecg/install/path' - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'cool-bundle', - version: '0.0.1' - } - } - }) - - wrapper.getComponent('[data-test="open-in-terminal-button"]').vm.$emit('click') - - expect(mockTauri.invoke).toHaveBeenCalledWith( - 'open_path_in_terminal', - { path: '/nodecg/install/path/bundles/cool-bundle' }) - }) - - it('disables opening config file if config file is missing', async () => { - (configFileExists as Mock).mockResolvedValue(false) - useConfigStore().installPath = '/nodecg/install/path' - const wrapper = await mount(BundleConfig, { - props: { - bundle: { - name: 'cool-bundle', - version: '0.0.1' - } - } - }) - - expect(configFileExists).toHaveBeenCalledWith('cool-bundle', '/nodecg/install/path') - expect(wrapper.getComponent('[data-test="open-config-file-button"]').vm.$props.disabled).toEqual(true) - }) - - it('disables opening config file if checking for config file presence fails', async () => { - (configFileExists as Mock).mockRejectedValue(new Error('Error!')) - useConfigStore().installPath = '/nodecg/install/path' - const wrapper = await mount(BundleConfig, { - props: { - bundle: { - name: 'cool-bundle', - version: '0.0.1' - } - } - }) - - expect(configFileExists).toHaveBeenCalledWith('cool-bundle', '/nodecg/install/path') - expect(wrapper.getComponent('[data-test="open-config-file-button"]').vm.$props.disabled).toEqual(true) - }) - - it('enables opening config file if config file exists', async () => { - (configFileExists as Mock).mockResolvedValue(true) - useConfigStore().installPath = '/nodecg/install' - const wrapper = mount(BundleConfig, { - props: { - bundle: { - name: 'rad-bundle', - version: '0.0.1' - } - } - }) - await flushPromises() - - expect(configFileExists).toHaveBeenCalledWith('rad-bundle', '/nodecg/install') - expect(wrapper.getComponent('[data-test="open-config-file-button"]').vm.$props.disabled).toEqual(false) - }) - - it('handles opening config file if it exists', async () => { - (configFileExists as Mock).mockResolvedValue(true) - useConfigStore().installPath = '/nodecg/install' - const wrapper = await mount(BundleConfig, { - props: { - bundle: { - name: 'rad-bundle', - version: '0.0.1' - } - } - }) - - wrapper.getComponent('[data-test="open-config-file-button"]').vm.$emit('click') - - expect(configFileExists).toHaveBeenCalledWith('rad-bundle', '/nodecg/install') - expect(openConfigFile).toHaveBeenCalledWith('rad-bundle', '/nodecg/install') - }) - - it('handles creating config file if it is missing', async () => { - (configFileExists as Mock).mockResolvedValue(false); - (createConfigFile as Mock).mockResolvedValue({}) - useConfigStore().installPath = '/nodecg/path' - const wrapper = await mount(BundleConfig, { - props: { - bundle: { - name: 'rad-bundle', - version: '0.0.1' - } - } - }) - - await wrapper.getComponent('[data-test="open-config-file-button"]').vm.$emit('click') - await flushPromises() - - expect(configFileExists).toHaveBeenCalledTimes(2) - expect(configFileExists).toHaveBeenCalledWith('rad-bundle', '/nodecg/path') - expect(createConfigFile).toHaveBeenCalledWith('rad-bundle', '/nodecg/path') - expect(openConfigFile).toHaveBeenCalledWith('rad-bundle', '/nodecg/path') - }) -}) diff --git a/src/components/bundleList/__tests__/BundleList.test.ts b/src/components/bundleList/__tests__/BundleList.test.ts deleted file mode 100644 index bcf8203..0000000 --- a/src/components/bundleList/__tests__/BundleList.test.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { useNodecgStore } from '@/store/nodecgStore' -import { config, flushPromises, mount } from '@vue/test-utils' -import BundleSettings from '@/components/bundleList/BundleList.vue' -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { useConfigStore } from '@/store/configStore' -import { mockTauri } from '@/__mocks__/tauri' -import { IplButton } from '@iplsplatoon/vue-components' -import { removeBundle } from '@/service/nodecgService' -import Mock = jest.Mock - -jest.mock('@/service/nodecgService') - -describe('BundleSettings', () => { - let pinia: TestingPinia - config.global.stubs = { - IplButton: true - } - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - }) - - it('matches snapshot when bundles are loading', () => { - const nodecgStore = useNodecgStore() - nodecgStore.status.bundlesLoading = true - const wrapper = mount(BundleSettings) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when no bundles are present', () => { - const nodecgStore = useNodecgStore() - nodecgStore.bundles = [] - const wrapper = mount(BundleSettings) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot', () => { - const nodecgStore = useNodecgStore() - nodecgStore.bundles = [ - { name: 'bundle-one', version: '1.2.3' }, - { name: 'bundle-two', version: '5.0' }, - { name: 'bundle-three', version: undefined } - ] - const wrapper = mount(BundleSettings) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('handles uninstalling a bundle', async () => { - const configStore = useConfigStore() - configStore.installPath = '/nodecg/path' - const nodecgStore = useNodecgStore() - nodecgStore.bundles = [ - { name: 'Bundle One', version: '1.2.3' }, - { name: 'Bundle Two', version: '5.0' } - ] - nodecgStore.getBundleList = jest.fn() - const wrapper = mount(BundleSettings); - (removeBundle as Mock).mockResolvedValue({}) - const bundleRow = wrapper.get('[data-test="bundle_Bundle One"]') - - bundleRow.getComponent('[data-test="uninstall-button"]').vm.$emit('click') - await flushPromises() - - expect(wrapper.findComponent('[data-test="uninstall-overlay"]').exists()).toEqual(true) - expect(mockTauri.invoke).not.toHaveBeenCalled() - - wrapper.getComponent('[data-test="confirm-uninstall-button"]').vm.$emit('click') - await flushPromises() - - expect(wrapper.findComponent('[data-test="uninstall-overlay"]').exists()).toEqual(false) - expect(removeBundle).toHaveBeenCalledWith('Bundle One', '/nodecg/path') - expect(nodecgStore.getBundleList).toHaveBeenCalled() - }) - - it('handles bundle uninstallation being cancelled', async () => { - const nodecgStore = useNodecgStore() - nodecgStore.bundles = [ - { name: 'Bundle One', version: '1.2.3' }, - { name: 'Bundle Two', version: '5.0' } - ] - const wrapper = mount(BundleSettings) - mockTauri.invoke.mockResolvedValue({}) - const bundleRow = wrapper.get('[data-test="bundle_Bundle One"]') - - bundleRow.getComponent('[data-test="uninstall-button"]').vm.$emit('click') - await flushPromises() - - expect(wrapper.findComponent('[data-test="uninstall-overlay"]').exists()).toEqual(true) - - wrapper.getComponent('[data-test="cancel-uninstall-button"]').vm.$emit('click') - await flushPromises() - - expect(wrapper.findComponent('[data-test="uninstall-overlay"]').exists()).toEqual(false) - expect(mockTauri.invoke).not.toHaveBeenCalled() - }) -}) diff --git a/src/components/bundleList/__tests__/__snapshots__/BundleConfig.test.ts.snap b/src/components/bundleList/__tests__/__snapshots__/BundleConfig.test.ts.snap deleted file mode 100644 index 9f06f86..0000000 --- a/src/components/bundleList/__tests__/__snapshots__/BundleConfig.test.ts.snap +++ /dev/null @@ -1,102 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`BundleConfig matches snapshot 1`] = ` -"
-
- - - - -
-
- - - -
-
" -`; - -exports[`BundleConfig matches snapshot after bundle versions are loaded 1`] = ` -"
-
- - - - -
-
- - - -
-
" -`; - -exports[`BundleConfig matches snapshot when config file exists 1`] = ` -"
-
- - - - -
-
- - - -
-
" -`; - -exports[`BundleConfig matches snapshot when config file is missing 1`] = ` -"
-
- - - - -
-
- - - -
-
" -`; - -exports[`BundleConfig matches snapshot when getting bundle versions fails 1`] = ` -"
-
-
- -
- Error: Error! -
-
- - - -
-
- - - -
-
" -`; - -exports[`BundleConfig matches snapshot when no bundle versions are found 1`] = ` -"
-
- - - - -
-
- - - -
-
" -`; diff --git a/src/components/bundleList/__tests__/__snapshots__/BundleList.test.ts.snap b/src/components/bundleList/__tests__/__snapshots__/BundleList.test.ts.snap deleted file mode 100644 index a28f8f5..0000000 --- a/src/components/bundleList/__tests__/__snapshots__/BundleList.test.ts.snap +++ /dev/null @@ -1,49 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`BundleSettings matches snapshot 1`] = ` -"
-
-
Name
-
Version
-
-
-
-
-
bundle-one
-
1.2.3
-
- - -
-
- -
-
-
-
bundle-two
-
5.0
-
- - -
-
- -
-
-
-
bundle-three
-
---
-
- - -
-
- -
- -
" -`; - -exports[`BundleSettings matches snapshot when bundles are loading 1`] = `"
Loading...
"`; - -exports[`BundleSettings matches snapshot when no bundles are present 1`] = `"
No bundles found.
"`; diff --git a/src/components/log/LogOverlay.vue b/src/components/log/LogOverlay.vue index e554d00..831461a 100644 --- a/src/components/log/LogOverlay.vue +++ b/src/components/log/LogOverlay.vue @@ -25,10 +25,7 @@ class="m-t-8 max-width" color="secondary" > - + diff --git a/src/components/log/__tests__/LogDisplay.test.ts b/src/components/log/__tests__/LogDisplay.test.ts deleted file mode 100644 index 09b17ce..0000000 --- a/src/components/log/__tests__/LogDisplay.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -import LogDisplay from '@/components/log/LogDisplay.vue' -import { config, mount } from '@vue/test-utils' -import { useLogStore } from '@/store/logStore' -import { createTestingPinia, TestingPinia } from '@pinia/testing' - -describe('LogDisplay', () => { - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - }) - - it('matches snapshot', () => { - const store = useLogStore() - store.listen = jest.fn() - store.unlisten = jest.fn() - store.lines = { - log1: [ - { message: '\x1b[31mLINE A' }, - { message: 'LINE ERROR!!!', type: 'error' } - ], - log2: [] - } - const wrapper = mount(LogDisplay, { - props: { - logKey: 'log1' - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('listens for log events', () => { - const store = useLogStore() - store.listen = jest.fn() - mount(LogDisplay, { - props: { logKey: 'cool-log' } - }) - - expect(store.listen).toHaveBeenCalledWith('cool-log') - }) - - it('listens for log events when log key is changed', async () => { - const store = useLogStore() - store.listen = jest.fn() - store.unlisten = jest.fn() - const wrapper = mount(LogDisplay, { - props: { logKey: 'cool-log' } - }) - expect(store.listen).toHaveBeenCalledWith('cool-log') - - await wrapper.setProps({ logKey: 'cooler-log' }) - - expect(store.unlisten).toHaveBeenCalledWith('cool-log') - expect(store.listen).toHaveBeenCalledWith('cooler-log') - }) -}) diff --git a/src/components/log/__tests__/LogOverlay.test.ts b/src/components/log/__tests__/LogOverlay.test.ts deleted file mode 100644 index 5167d2e..0000000 --- a/src/components/log/__tests__/LogOverlay.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import LogOverlay from '@/components/log/LogOverlay.vue' -import { useLogStore } from '@/store/logStore' -import { config, mount } from '@vue/test-utils' -import type { IplDialogTitle } from '@iplsplatoon/vue-components' -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { ActionState } from '@/types/log' - -describe('LogOverlay', () => { - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - const logStore = useLogStore() - logStore.listen = jest.fn() - logStore.unlisten = jest.fn() - }) - - config.global.stubs = { - IplButton: true, - ProgressDisplay: true, - IplDialogTitle: true - } - - it('matches snapshot', () => { - const wrapper = mount(LogOverlay, { - props: { - visible: true, - title: 'Log Overlay', - logKey: 'log1' - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('disables close button if log state is not completed', () => { - const store = useLogStore() - store.actionStates.logKey = ActionState.INCOMPLETE - const wrapper = mount(LogOverlay, { - props: { - visible: true, - title: 'Log Overlay', - logKey: 'logKey' - } - }) - - expect(wrapper.getComponent('ipl-dialog-title-stub').attributes().closingdisabled).toEqual('true') - }) - - it.each([ActionState.COMPLETED_ERROR, ActionState.COMPLETED_SUCCESS])('enables close button if log state is %s', state => { - const store = useLogStore() - store.actionStates['log-key'] = state - const wrapper = mount(LogOverlay, { - props: { - visible: true, - title: 'Log Overlay', - logKey: 'log-key' - } - }) - - expect(wrapper.getComponent('ipl-dialog-title-stub').attributes().closingdisabled).toEqual('false') - }) - - it('closes overlay on close button click', () => { - const store = useLogStore() - store.actionStates['key-1'] = ActionState.COMPLETED_SUCCESS - const wrapper = mount(LogOverlay, { - props: { - visible: true, - title: 'Log Overlay', - logKey: 'key-1' - } - }) - - wrapper.getComponent('ipl-dialog-title-stub').vm.$emit('close') - - const emitted = wrapper.emitted('update:visible') - expect(emitted?.length).toEqual(1) - expect(emitted?.[0]).toEqual([false]) - }) -}) diff --git a/src/components/log/__tests__/ProgressDisplay.test.ts b/src/components/log/__tests__/ProgressDisplay.test.ts deleted file mode 100644 index 6bf3791..0000000 --- a/src/components/log/__tests__/ProgressDisplay.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -import ProgressDisplay from '@/components/log/ProgressDisplay.vue' -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { config, mount } from '@vue/test-utils' -import { useLogStore } from '@/store/logStore' -import { ActionState } from '../../../types/log' - -describe('ProgressDisplay', () => { - config.global.stubs = { - IplProgressBar: true - } - - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - }) - - it('matches snapshot when no progress entry is present for given key', () => { - const logStore = useLogStore() - logStore.actionStates = { 'log-key-2': ActionState.COMPLETED_SUCCESS } - logStore.progressEntries = { 'log-key-2': { step: 9, max_step: 10 } } - - const wrapper = mount(ProgressDisplay, { - props: { - logKey: 'log-key-1' - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when given key has progress', () => { - const logStore = useLogStore() - logStore.actionStates = { 'log-key-2': ActionState.COMPLETED_ERROR } - logStore.progressEntries = { - 'log-key-1': { step: 4, max_step: 9 }, - 'log-key-2': { step: 9, max_step: 10 } - } - - const wrapper = mount(ProgressDisplay, { - props: { - logKey: 'log-key-1' - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when given key is completed successfully', () => { - const logStore = useLogStore() - logStore.actionStates = { 'log-key-1': ActionState.COMPLETED_SUCCESS } - logStore.progressEntries = {} - - const wrapper = mount(ProgressDisplay, { - props: { - logKey: 'log-key-1' - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when given key is completed with error', () => { - const logStore = useLogStore() - logStore.actionStates = { 'log-key-1': ActionState.COMPLETED_ERROR } - logStore.progressEntries = {} - - const wrapper = mount(ProgressDisplay, { - props: { - logKey: 'log-key-1' - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) -}) diff --git a/src/components/log/__tests__/__snapshots__/LogDisplay.test.ts.snap b/src/components/log/__tests__/__snapshots__/LogDisplay.test.ts.snap deleted file mode 100644 index 6e0750e..0000000 --- a/src/components/log/__tests__/__snapshots__/LogDisplay.test.ts.snap +++ /dev/null @@ -1,3 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`LogDisplay matches snapshot 1`] = `"
LINE ALINE ERROR!!!
"`; diff --git a/src/components/log/__tests__/__snapshots__/LogOverlay.test.ts.snap b/src/components/log/__tests__/__snapshots__/LogOverlay.test.ts.snap deleted file mode 100644 index 19ada1a..0000000 --- a/src/components/log/__tests__/__snapshots__/LogOverlay.test.ts.snap +++ /dev/null @@ -1,27 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`LogOverlay matches snapshot 1`] = ` -"
-
-
- -
-
Please wait...
- -
-
-
-
-
More details
-
-
- -
-
-
-
" -`; diff --git a/src/components/log/__tests__/__snapshots__/ProgressDisplay.test.ts.snap b/src/components/log/__tests__/__snapshots__/ProgressDisplay.test.ts.snap deleted file mode 100644 index 594558e..0000000 --- a/src/components/log/__tests__/__snapshots__/ProgressDisplay.test.ts.snap +++ /dev/null @@ -1,9 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ProgressDisplay matches snapshot when given key has progress 1`] = `""`; - -exports[`ProgressDisplay matches snapshot when given key is completed successfully 1`] = `""`; - -exports[`ProgressDisplay matches snapshot when given key is completed with error 1`] = `""`; - -exports[`ProgressDisplay matches snapshot when no progress entry is present for given key 1`] = `""`; diff --git a/src/components/mgr/MgrOverlay.vue b/src/components/mgr/MgrOverlay.vue index ca284b6..84cc648 100644 --- a/src/components/mgr/MgrOverlay.vue +++ b/src/components/mgr/MgrOverlay.vue @@ -79,6 +79,10 @@ export default defineComponent({ background-color: rgba(0, 0, 0, 0.5); + &.fixed-width .mgr-overlay__content { + max-width: 400px; + } + .mgr-overlay__content { max-width: 90%; max-height: 80%; diff --git a/src/components/mgr/__tests__/MgrOverlay.test.ts b/src/components/mgr/__tests__/MgrOverlay.test.ts deleted file mode 100644 index 55e8d09..0000000 --- a/src/components/mgr/__tests__/MgrOverlay.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import MgrOverlay from '@/components/mgr/MgrOverlay.vue' -import { mount } from '@vue/test-utils' - -describe('MgrOverlay', () => { - it('matches snapshot when visible', () => { - const wrapper = mount(MgrOverlay, { - props: { - visible: true - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when visible and max width', () => { - const wrapper = mount(MgrOverlay, { - props: { - visible: true, - maxWidth: true - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when hidden', () => { - const wrapper = mount(MgrOverlay, { - props: { - visible: false - } - }) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('closes itself on background click if noBackgroundClose is false', () => { - const wrapper = mount(MgrOverlay, { - props: { - visible: true, - noBackgroundClose: false - } - }) - - wrapper.get('.mgr-overlay__wrapper').trigger('click') - - const emitted = wrapper.emitted('update:visible') - expect(emitted?.length).toEqual(1) - expect(emitted?.[0]).toEqual([false]) - }) - - it('does nothing on background click if noBackgroundClose is true', () => { - const wrapper = mount(MgrOverlay, { - props: { - visible: true, - noBackgroundClose: true - } - }) - - wrapper.get('.mgr-overlay__wrapper').trigger('click') - - expect(wrapper.emitted('update:visible')).toBeFalsy() - }) -}) diff --git a/src/components/mgr/__tests__/__snapshots__/MgrOverlay.test.ts.snap b/src/components/mgr/__tests__/__snapshots__/MgrOverlay.test.ts.snap deleted file mode 100644 index c39017b..0000000 --- a/src/components/mgr/__tests__/__snapshots__/MgrOverlay.test.ts.snap +++ /dev/null @@ -1,23 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`MgrOverlay matches snapshot when hidden 1`] = ` -" - -" -`; - -exports[`MgrOverlay matches snapshot when visible 1`] = ` -" -
-
-
-
" -`; - -exports[`MgrOverlay matches snapshot when visible and max width 1`] = ` -" -
-
-
-
" -`; diff --git a/src/components/statusBar/StatusBar.vue b/src/components/statusBar/StatusBar.vue index 6708f68..e82cae6 100644 --- a/src/components/statusBar/StatusBar.vue +++ b/src/components/statusBar/StatusBar.vue @@ -22,6 +22,7 @@
- +
@@ -84,7 +88,7 @@ export default defineComponent({ return { items: computed(() => pick(items, [ 'dependencyCheck', - ...(configStore.enableErrorLog ? ['errorLog'] : []) + ...(configStore.userConfig.enableErrorLog ? ['errorLog'] : []) ])) } } diff --git a/src/components/statusBar/__tests__/StatusBar.test.ts b/src/components/statusBar/__tests__/StatusBar.test.ts deleted file mode 100644 index dede507..0000000 --- a/src/components/statusBar/__tests__/StatusBar.test.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { createTestingPinia, TestingPinia } from '@pinia/testing' -import { config, mount } from '@vue/test-utils' -import StatusBar from '@/components/statusBar/StatusBar.vue' -import { useDependencyStore } from '@/store/dependencyStore' -import MgrOverlay from '@/components/mgr/MgrOverlay.vue' -import { IplDialogTitle } from '@iplsplatoon/vue-components' -import { useConfigStore } from '@/store/configStore' -import { useErrorHandlerStore } from '@/store/errorHandlerStore' - -describe('StatusBar', () => { - let pinia: TestingPinia - - beforeEach(() => { - pinia = createTestingPinia() - config.global.plugins = [pinia] - }) - - config.global.stubs = { - IplDialogTitle: true, - FontAwesomeIcon: true, - DependencyChecker: true - } - - it('matches snapshot when error log is enabled', () => { - const configStore = useConfigStore() - configStore.enableErrorLog = true - - const wrapper = mount(StatusBar) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('matches snapshot when error log is disabled', () => { - const configStore = useConfigStore() - configStore.enableErrorLog = false - - const wrapper = mount(StatusBar) - - expect(wrapper.html()).toMatchSnapshot() - }) - - it('highlights dependency check icon when dependencies are missing', () => { - const dependencyStore = useDependencyStore() - dependencyStore.isLoading = false - dependencyStore.nodejs.version = null - const wrapper = mount(StatusBar) - - expect(wrapper.get('#status-bar-item_dependencyCheck').classes()).toContain('highlighted') - }) - - it.each([ - [true, null], - [true, '1.2.3'], - [false, '1.2.4'] - ])('does not highlight dependency check when dependency loading state is %s and nodejs version is %s', (isLoading, nodeVersion) => { - const dependencyStore = useDependencyStore() - dependencyStore.isLoading = isLoading - dependencyStore.nodejs.version = nodeVersion - const wrapper = mount(StatusBar) - - expect(wrapper.get('#status-bar-item_dependencyCheck').classes()).not.toContain('highlighted') - }) - - it('highlights error log when errors are present', () => { - const errorHandlerStore = useErrorHandlerStore() - errorHandlerStore.recentErrors = { - err1: { err: new Error(), info: 'info', component: null } - } - const configStore = useConfigStore() - configStore.enableErrorLog = true - - const wrapper = mount(StatusBar) - - expect(wrapper.get('#status-bar-item_errorLog').classes()).toContain('highlighted') - }) - - it('does not highlight error log when no errors are logged', () => { - const errorHandlerStore = useErrorHandlerStore() - errorHandlerStore.recentErrors = {} - const configStore = useConfigStore() - configStore.enableErrorLog = true - - const wrapper = mount(StatusBar) - - expect(wrapper.get('#status-bar-item_errorLog').classes()).not.toContain('highlighted') - }) - - it('opens dialog when clicking on status bar item', async () => { - const wrapper = mount(StatusBar) - - await wrapper.get('#status-bar-item_dependencyCheck').trigger('click') - - expect(wrapper.getComponent('#status-item-dialog_dependencyCheck').vm.visible).toEqual(true) - }) - - it('handles closing opened dialogs', async () => { - const wrapper = mount(StatusBar) - - await wrapper.get('#status-bar-item_dependencyCheck').trigger('click') - wrapper - .getComponent('#status-item-dialog_dependencyCheck') - .getComponent('ipl-dialog-title-stub').vm.$emit('close') - await wrapper.vm.$nextTick() - - expect(wrapper.findComponent('#status-item-dialog_dependencyCheck').exists()).toEqual(false) - }) -}) diff --git a/src/components/statusBar/__tests__/__snapshots__/StatusBar.test.ts.snap b/src/components/statusBar/__tests__/__snapshots__/StatusBar.test.ts.snap deleted file mode 100644 index 3166651..0000000 --- a/src/components/statusBar/__tests__/__snapshots__/StatusBar.test.ts.snap +++ /dev/null @@ -1,23 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`StatusBar matches snapshot when error log is disabled 1`] = ` -"
-
- Settings -
- -
" -`; - -exports[`StatusBar matches snapshot when error log is enabled 1`] = ` -"
-
- Settings -
- -
- Error log -
- -
" -`; diff --git a/src/main.ts b/src/main.ts index 39dc6ea..cb5a1a1 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,20 +3,35 @@ import { createApp } from 'vue' import App from './App.vue' import { createPinia } from 'pinia' import { setUpErrorHandler } from '@/store/errorHandlerStore' +import { useConfigStore } from '@/store/configStore' +import { useDependencyStore } from '@/store/dependencyStore' +import { useNodecgStore } from '@/store/nodecgStore' + +function setColorTheme(useLightMode: boolean) { + if (useLightMode) { + document.documentElement.classList.add('light') + } else { + document.documentElement.classList.remove('light') + } +} (async () => { const lightModePreference = window.matchMedia('(prefers-color-scheme: light)') + setColorTheme(lightModePreference.matches) lightModePreference.addEventListener('change', e => { - if (e.matches) { - document.documentElement.classList.add('light') - } else { - document.documentElement.classList.remove('light') - } + setColorTheme(e.matches) }) const app = createApp(App) .use(createPinia()) + const configStore = useConfigStore() + await configStore.init() + const dependencyStore = useDependencyStore() + await dependencyStore.checkVersions() + const nodecgStore = useNodecgStore() + await nodecgStore.checkNodecgStatus() + setUpErrorHandler(app) app.mount('#app') diff --git a/src/service/__tests__/dependencyService.test.ts b/src/service/__tests__/dependencyService.test.ts deleted file mode 100644 index f380849..0000000 --- a/src/service/__tests__/dependencyService.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { mockTauri } from '@/__mocks__/tauri' -import { getNodejsVersion } from '@/service/dependencyService' - -describe('dependencyService', () => { - describe('getNodejsVersion', () => { - it('invokes tauri method', async () => { - mockTauri.invoke.mockResolvedValue('12.13.1') - - const result = await getNodejsVersion() - - expect(mockTauri.invoke).toHaveBeenCalledWith('get_nodejs_version') - expect(result).toEqual('12.13.1') - }) - }) -}) diff --git a/src/service/__tests__/messagingService.test.ts b/src/service/__tests__/messagingService.test.ts deleted file mode 100644 index 6b1ab85..0000000 --- a/src/service/__tests__/messagingService.test.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { listenForProcessExit } from '@/service/messagingService' -import { mockTauriEvent } from '@/__mocks__/tauri' - -describe('listenForProcessExit', () => { - it('listens for exit event', async () => { - const callback = jest.fn() - const unlisten = jest.fn() - mockTauriEvent.listen.mockResolvedValue(unlisten) - - const result = await listenForProcessExit('key', callback) - - expect(result).toEqual(unlisten) - expect(mockTauriEvent.listen).toHaveBeenCalledWith('process-exit:key', callback) - }) -}) diff --git a/src/service/__tests__/nodecgService.test.ts b/src/service/__tests__/nodecgService.test.ts deleted file mode 100644 index 3bb5652..0000000 --- a/src/service/__tests__/nodecgService.test.ts +++ /dev/null @@ -1,286 +0,0 @@ -import { mockTauri, mockTauriFs, mockTauriShell } from '@/__mocks__/tauri' -import { - configFileExists, createConfigFile, getBundleGitTag, - getBundles, - getBundleVersions, getNodecgConfig, - getNodecgStatus, - openConfigFile, - removeBundle -} from '@/service/nodecgService' -import { InstallStatus } from '@/store/nodecgStore' -import { fileExists, folderExists } from '@/util/fs' -import Mock = jest.Mock -import { readTextFile } from '@tauri-apps/api/fs' - -jest.mock('@/util/fs') - -describe('getNodecgStatus', () => { - it('returns ready to install response when directory is empty', async () => { - mockTauriFs.readDir.mockResolvedValue([]) - - const result = await getNodecgStatus('/dir/') - - expect(result).toEqual({ - status: InstallStatus.READY_TO_INSTALL, - message: 'Directory is empty. Ready to install...' - }) - expect(mockTauriFs.readDir).toHaveBeenCalledWith('/dir/') - expect(mockTauriFs.readTextFile).not.toHaveBeenCalled() - }) - - it('returns installed response if nodecg package.json is found', async () => { - mockTauriFs.readDir.mockResolvedValue([{ name: 'file.png' }, { name: 'package.json', path: '/dir/package.json' }]) - mockTauriFs.readTextFile.mockResolvedValue('{"name": "nodecg", "version": "1.2.3"}') - - const result = await getNodecgStatus('/dir/') - - expect(result).toEqual({ - status: InstallStatus.INSTALLED, - message: 'Found NodeCG v1.2.3.' - }) - expect(mockTauriFs.readDir).toHaveBeenCalledWith('/dir/') - expect(mockTauriFs.readTextFile).toHaveBeenCalledWith('/dir/package.json') - }) - - it('returns error response if unknown package.json is found', async () => { - mockTauriFs.readDir.mockResolvedValue([{ name: 'file.png' }, { name: 'package.json', path: '/directory/package.json' }]) - mockTauriFs.readTextFile.mockResolvedValue('{"name": "other_pkg", "version": "1.2.3"}') - - const result = await getNodecgStatus('/directory/') - - expect(result).toEqual({ - status: InstallStatus.UNABLE_TO_INSTALL, - message: 'Found unknown package "other_pkg".' - }) - expect(mockTauriFs.readDir).toHaveBeenCalledWith('/directory/') - expect(mockTauriFs.readTextFile).toHaveBeenCalledWith('/directory/package.json') - }) - - it('returns error response if directory does not contain package.json', async () => { - mockTauriFs.readDir.mockResolvedValue([{ name: 'file.png' }, { name: 'file.rar' }]) - - const result = await getNodecgStatus('/directory/') - - expect(result).toEqual({ - status: InstallStatus.UNABLE_TO_INSTALL, - message: 'Could not find package.json.' - }) - expect(mockTauriFs.readDir).toHaveBeenCalledWith('/directory/') - expect(mockTauriFs.readTextFile).not.toHaveBeenCalled() - }) - - it('returns error response if directory is empty string', async () => { - const result = await getNodecgStatus(' ') - - expect(result).toEqual({ - status: InstallStatus.UNABLE_TO_INSTALL, - message: 'Please select an installation directory.' - }) - expect(mockTauriFs.readDir).not.toHaveBeenCalled() - expect(mockTauriFs.readTextFile).not.toHaveBeenCalled() - }) -}) - -describe('getBundles', () => { - it('throws error when no bundle directory is given', async () => { - await expect(getBundles(' ')).rejects.toThrow('No bundle directory provided.') - }) - - it('reads bundles directory and parses package.json files', async () => { - mockTauriFs.readTextFile - .mockResolvedValueOnce(JSON.stringify({ name: 'bundle-one', version: '1.0.0' })) - .mockResolvedValueOnce(JSON.stringify({ name: 'bundle-two', version: '1.0.1' })) - mockTauriFs.readDir.mockResolvedValue([ - { children: null }, - { children: [{ name: 'file.txt' }] }, - { children: [{ name: 'package.json', path: 'package-json-path-1' }] }, - { children: [{ name: 'other-file' }, { name: 'package.json', path: 'package-json-path-2' }] } - ]) - - const result = await getBundles('nodecg/dir') - - expect(mockTauri.invoke).not.toHaveBeenCalled() - expect(mockTauriFs.readDir).toHaveBeenCalledWith('nodecg/dir/bundles', { recursive: true }) - expect(mockTauriFs.readTextFile).toHaveBeenCalledWith('package-json-path-1') - expect(mockTauriFs.readTextFile).toHaveBeenCalledWith('package-json-path-2') - expect(result).toEqual([ - { name: 'bundle-one', version: '1.0.0' }, - { name: 'bundle-two', version: '1.0.1' } - ]) - }) - - it('requests git tag name if a bundle has version 0.0.0', async () => { - mockTauriFs.readTextFile.mockResolvedValueOnce(JSON.stringify({ name: 'bundle-one', version: '0.0.0' })) - mockTauriFs.readDir.mockResolvedValue([ - { children: [{ name: 'package.json', path: 'package-json-path' }] } - ]) - mockTauri.invoke.mockResolvedValue('9.1.2') - - const result = await getBundles('test/nodecg/dir') - - expect(mockTauriFs.readDir).toHaveBeenCalledWith('test/nodecg/dir/bundles', { recursive: true }) - expect(mockTauriFs.readTextFile).toHaveBeenCalledWith('package-json-path') - expect(mockTauri.invoke).toHaveBeenCalledWith('get_bundle_git_tag', { nodecgPath: 'test/nodecg/dir', bundleName: 'bundle-one' }) - expect(mockTauri.invoke).toHaveBeenCalledTimes(1) - expect(result).toEqual([ - { name: 'bundle-one', version: '9.1.2' } - ]) - }) - - it('requests git tag name if a bundle has no version set', async () => { - mockTauriFs.readTextFile.mockResolvedValueOnce(JSON.stringify({ name: 'bundle-one' })) - mockTauriFs.readDir.mockResolvedValue([ - { children: [{ name: 'package.json', path: 'package-json-path' }] } - ]) - mockTauri.invoke.mockResolvedValue('9.1.3') - - const result = await getBundles('test/nodecg/dir') - - expect(mockTauriFs.readDir).toHaveBeenCalledWith('test/nodecg/dir/bundles', { recursive: true }) - expect(mockTauriFs.readTextFile).toHaveBeenCalledWith('package-json-path') - expect(mockTauri.invoke).toHaveBeenCalledWith('get_bundle_git_tag', { nodecgPath: 'test/nodecg/dir', bundleName: 'bundle-one' }) - expect(mockTauri.invoke).toHaveBeenCalledTimes(1) - expect(result).toEqual([ - { name: 'bundle-one', version: '9.1.3' } - ]) - }) -}) - -describe('getBundleVersions', () => { - it('invokes tauri method', async () => { - mockTauri.invoke.mockResolvedValue(['1.0.0', '2.0.0']) - - const result = await getBundleVersions('bundle-name', 'nodecg/path') - - expect(mockTauri.invoke).toHaveBeenCalledWith( - 'fetch_bundle_versions', { bundleName: 'bundle-name', nodecgPath: 'nodecg/path' }) - expect(result).toEqual(['1.0.0', '2.0.0']) - }) -}) - -describe('getBundleGitTag', () => { - it('invokes tauri method', async () => { - mockTauri.invoke.mockResolvedValue('9.0.0') - - const result = await getBundleGitTag('bundle-name', 'nodecg/path') - - expect(mockTauri.invoke).toHaveBeenCalledWith( - 'get_bundle_git_tag', { bundleName: 'bundle-name', nodecgPath: 'nodecg/path' }) - expect(result).toEqual('9.0.0') - }) -}) - -describe('configFileExists', () => { - it('returns true when config file is found', async () => { - (fileExists as Mock).mockResolvedValue(true) - - const result = await configFileExists('bundle-two', '/nodecg/path') - - expect(fileExists).toHaveBeenCalledWith('/nodecg/path/cfg/bundle-two.json') - expect(result).toEqual(true) - }) - - it('returns false when config file is not found', async () => { - (fileExists as Mock).mockResolvedValue(false) - - const result = await configFileExists('bundle-two', '/nodecg/path') - - expect(fileExists).toHaveBeenCalledWith('/nodecg/path/cfg/bundle-two.json') - expect(result).toEqual(false) - }) -}) - -describe('removeBundle', () => { - it('removes bundle directory and config file', async () => { - mockTauri.invoke.mockResolvedValue({}); - (fileExists as Mock).mockResolvedValue(true) - mockTauriFs.removeFile.mockResolvedValue({}) - - await removeBundle('bundle-name', '/nodecg/path') - - expect(mockTauri.invoke).toHaveBeenCalledWith('uninstall_bundle', { nodecgPath: '/nodecg/path', bundleName: 'bundle-name' }) - expect(fileExists).toHaveBeenCalledWith('/nodecg/path/cfg/bundle-name.json') - expect(mockTauriFs.removeFile).toHaveBeenCalledWith('/nodecg/path/cfg/bundle-name.json') - }) - - it('does not remove config file if it is missing', async () => { - mockTauri.invoke.mockResolvedValue({}); - (fileExists as Mock).mockResolvedValue(false) - mockTauriFs.removeFile.mockResolvedValue({}) - - await removeBundle('bundle-name', '/nodecg/path') - - expect(mockTauri.invoke).toHaveBeenCalledWith('uninstall_bundle', { nodecgPath: '/nodecg/path', bundleName: 'bundle-name' }) - expect(fileExists).toHaveBeenCalledWith('/nodecg/path/cfg/bundle-name.json') - expect(mockTauriFs.removeFile).not.toHaveBeenCalled() - }) -}) - -describe('openConfigFile', () => { - it('opens file at expected path', () => { - openConfigFile('bundle-name', '/nodecg/path') - - expect(mockTauriShell.open).toHaveBeenCalledWith('/nodecg/path/cfg/bundle-name.json') - }) -}) - -describe('createConfigFile', () => { - it('creates config folder if required and writes new file', async () => { - (folderExists as Mock).mockResolvedValue(false) - mockTauriFs.createDir.mockResolvedValue({ }) - - await createConfigFile('bundleName', '/nodecg/path') - - expect(folderExists).toHaveBeenCalledWith('/nodecg/path/cfg') - expect(mockTauriFs.createDir).toHaveBeenCalledWith('/nodecg/path/cfg') - expect(mockTauriFs.writeFile).toHaveBeenCalledWith({ path: '/nodecg/path/cfg/bundleName.json', contents: '{\n\n}' }) - }) - - it('does not create config folder if it already exists and writes new file', async () => { - (folderExists as Mock).mockResolvedValue(true) - - await createConfigFile('bundle-name', '/nodecg/path') - - expect(folderExists).toHaveBeenCalledWith('/nodecg/path/cfg') - expect(mockTauriFs.createDir).not.toHaveBeenCalled() - expect(mockTauriFs.writeFile).toHaveBeenCalledWith({ path: '/nodecg/path/cfg/bundle-name.json', contents: '{\n\n}' }) - }) -}) - -describe('getNodecgConfig', () => { - it('returns null if config folder is not present', async () => { - (folderExists as Mock).mockResolvedValue(false) - - const result = await getNodecgConfig('/path') - - expect(folderExists).toHaveBeenCalledWith('/path/cfg') - expect(fileExists).not.toHaveBeenCalled() - expect(readTextFile).not.toHaveBeenCalled() - expect(result).toEqual(null) - }) - - it('returns null if config file is not present', async () => { - (folderExists as Mock).mockResolvedValue(true); - (fileExists as Mock).mockResolvedValue(false) - - const result = await getNodecgConfig('/path') - - expect(folderExists).toHaveBeenCalledWith('/path/cfg') - expect(fileExists).toHaveBeenCalledWith('/path/cfg/nodecg.json') - expect(readTextFile).not.toHaveBeenCalled() - expect(result).toEqual(null) - }) - - it('returns nodecg config file as object', async () => { - (folderExists as Mock).mockResolvedValue(true); - (fileExists as Mock).mockResolvedValue(true); - (readTextFile as Mock).mockResolvedValue(JSON.stringify({ port: 8090 })) - - const result = await getNodecgConfig('/nodecg/path') - - expect(folderExists).toHaveBeenCalledWith('/nodecg/path/cfg') - expect(fileExists).toHaveBeenCalledWith('/nodecg/path/cfg/nodecg.json') - expect(readTextFile).toHaveBeenCalledWith('/nodecg/path/cfg/nodecg.json') - expect(result).toEqual({ port: 8090 }) - }) -}) diff --git a/src/service/dependencyService.ts b/src/service/dependencyService.ts index 921f077..e19db37 100644 --- a/src/service/dependencyService.ts +++ b/src/service/dependencyService.ts @@ -1,4 +1,4 @@ -import { invoke } from '@tauri-apps/api/tauri' +import { invoke } from '@tauri-apps/api/core' export async function getNodejsVersion (): Promise { return invoke('get_nodejs_version') diff --git a/src/service/nodecgService.ts b/src/service/nodecgService.ts index 40147ee..3b67a99 100644 --- a/src/service/nodecgService.ts +++ b/src/service/nodecgService.ts @@ -1,16 +1,21 @@ -import { createDir, readDir, readTextFile, removeFile, writeFile } from '@tauri-apps/api/fs' +import { mkdir, readDir, readTextFile, remove, writeFile } from '@tauri-apps/plugin-fs' import { PackageSchema } from '@/types/package' import isEmpty from 'lodash/isEmpty' import { InstallStatus } from '@/store/nodecgStore' -import { invoke } from '@tauri-apps/api/tauri' +import { invoke } from '@tauri-apps/api/core' import { fileExists, folderExists } from '@/util/fs' -import { open } from '@tauri-apps/api/shell' +import { open } from '@tauri-apps/plugin-shell' import { NodecgConfiguration } from '@/types/nodecg' +import { appLocalDataDir } from '@tauri-apps/api/path' -export async function getNodecgStatus (directory: string): Promise<{ status: InstallStatus, message: string }> { - if (isEmpty(directory?.trim())) { +export async function getDefaultInstallDir (): Promise { + return `${await appLocalDataDir()}/nodecg` +} + +export async function getNodecgStatus (directory: string | null): Promise<{ status: InstallStatus, message: string }> { + if (directory == null || isEmpty(directory?.trim())) { return { - status: InstallStatus.UNABLE_TO_INSTALL, + status: InstallStatus.MISSING_INSTALL_DIRECTORY, message: 'Please select an installation directory.' } } @@ -24,7 +29,7 @@ export async function getNodecgStatus (directory: string): Promise<{ status: Ins } else { const packageFile = dir.find(entry => entry.name === 'package.json') if (packageFile) { - const packageJson: PackageSchema = JSON.parse(await readTextFile(packageFile.path)) + const packageJson: PackageSchema = JSON.parse(await readTextFile(`${directory}/package.json`)) if (packageJson.name === 'nodecg') { return { status: InstallStatus.INSTALLED, @@ -32,14 +37,14 @@ export async function getNodecgStatus (directory: string): Promise<{ status: Ins } } else { return { - status: InstallStatus.UNABLE_TO_INSTALL, + status: InstallStatus.BAD_INSTALL_DIRECTORY, message: `Found unknown package "${packageJson.name}".` } } } else { return { - status: InstallStatus.UNABLE_TO_INSTALL, - message: 'Could not find package.json.' + status: InstallStatus.BAD_INSTALL_DIRECTORY, + message: 'Selected install directory is not empty, but NodeCG is not installed here.' } } } @@ -50,61 +55,73 @@ export interface Bundle { version?: string } -export async function getBundles (directory: string): Promise { - if (isEmpty(directory.trim())) { +export async function getBundles (directory: string | null): Promise { + if (directory == null || isEmpty(directory.trim())) { throw new Error('No bundle directory provided.') } - const bundlesDir = await readDir(directory + '/bundles', { recursive: true }) + const bundlesDir = await readDir(directory + '/bundles') return Promise.all( bundlesDir - .filter(entry => entry.children?.some(child => child.name === 'package.json')) - .map(async (dir) => { - const packageFile = dir.children?.find(child => child.name === 'package.json')?.path - if (!packageFile) { - throw new Error(`Missing package.json in directory ${dir.name}`) - } - - const packageJson = JSON.parse(await readTextFile(packageFile)) as PackageSchema - - return { - name: packageJson.name, - version: packageJson.version == null || packageJson.version.trim() === '0.0.0' - ? await getBundleGitTag(packageJson.name, directory) - : packageJson.version + .filter(entry => entry.isDirectory) + .map(async (dir): Promise => { + try { + const packageJson = JSON.parse(await readTextFile(`${directory}/bundles/${dir.name}/package.json`)) as PackageSchema + return { + name: packageJson.name, + version: packageJson.version == null || packageJson.version.trim() === '0.0.0' + ? await getBundleGitTag(packageJson.name) + : packageJson.version + } + } catch (e) { + console.error('Failed to read package.json in bundle directory', e) + return null } })) + .then((bundles) => bundles.filter(bundle => bundle != null) as Bundle[]) } -export async function getBundleVersions (bundleName: string, nodecgPath: string): Promise { - return invoke('fetch_bundle_versions', { bundleName, nodecgPath }) +export async function getBundleVersions (bundleName: string): Promise { + return invoke('fetch_bundle_versions', { bundleName }) } -export async function configFileExists (bundleName: string, nodecgPath: string): Promise { +export async function configFileExists (bundleName: string, nodecgPath: string | null): Promise { + if (nodecgPath == null) { + return false + } return fileExists(`${nodecgPath}/cfg/${bundleName}.json`) } -export async function removeBundle (bundleName: string, nodecgPath: string): Promise<[string, void]> { +export async function removeBundle (bundleName: string, nodecgPath: string | null): Promise<[string, void]> { return Promise.all([ - invoke('uninstall_bundle', { nodecgPath, bundleName }), + invoke('uninstall_bundle', { bundleName }), (async () => { if (await configFileExists(bundleName, nodecgPath)) { - return removeFile(`${nodecgPath}/cfg/${bundleName}.json`) + return remove(`${nodecgPath}/cfg/${bundleName}.json`) } })() ]) } -export async function openConfigFile (bundleName: string, nodecgPath: string): Promise { +export async function openConfigFile (bundleName: string, nodecgPath: string | null): Promise { + if (nodecgPath == null) { + return + } + return open(`${nodecgPath}/cfg/${bundleName}.json`) } -export async function createConfigFile (bundleName: string, nodecgPath: string): Promise { +export async function createConfigFile (bundleName: string, nodecgPath: string | null): Promise { + if (nodecgPath == null) { + return + } + if (!await folderExists(`${nodecgPath}/cfg`)) { - await createDir(`${nodecgPath}/cfg`) + await mkdir(`${nodecgPath}/cfg`) } - return writeFile({ path: `${nodecgPath}/cfg/${bundleName}.json`, contents: '{\n\n}' }) + const encoder = new TextEncoder() + return writeFile(`${nodecgPath}/cfg/${bundleName}.json`, encoder.encode('{\n\n}')) } export async function getNodecgConfig (nodecgPath: string): Promise { @@ -120,6 +137,6 @@ export async function openDashboard (nodecgPath: string): Promise { return open(`http://localhost:${config?.port ?? '9090'}/dashboard`) } -export async function getBundleGitTag (bundleName: string, nodecgPath: string): Promise { - return invoke('get_bundle_git_tag', { bundleName, nodecgPath }) +export async function getBundleGitTag (bundleName: string): Promise { + return invoke('get_bundle_git_tag', { bundleName }) } diff --git a/src/store/__tests__/configStore.test.ts b/src/store/__tests__/configStore.test.ts deleted file mode 100644 index 564f270..0000000 --- a/src/store/__tests__/configStore.test.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { LOCAL_STORAGE_CONFIG_KEY, useConfigStore } from '@/store/configStore' -import { createPinia, setActivePinia } from 'pinia' - -describe('configStore', () => { - beforeEach(() => { - setActivePinia(createPinia()) - }) - - describe('load', () => { - it('loads data from local storage', () => { - const store = useConfigStore() - localStorage.setItem(LOCAL_STORAGE_CONFIG_KEY, JSON.stringify({ installPath: '/path/to/nodecg' })) - - store.load() - - expect(store.installPath).toEqual('/path/to/nodecg') - }) - }) - - describe('persist', () => { - it('saves data to local storage', () => { - const store = useConfigStore() - store.installPath = '/path/to/nodecg' - - store.persist() - - expect(localStorage.getItem(LOCAL_STORAGE_CONFIG_KEY)).toEqual('{"installPath":"/path/to/nodecg","enableErrorLog":false}') - }) - }) -}) diff --git a/src/store/__tests__/dependencyStore.test.ts b/src/store/__tests__/dependencyStore.test.ts deleted file mode 100644 index 10be793..0000000 --- a/src/store/__tests__/dependencyStore.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { createPinia, setActivePinia } from 'pinia' -import { useDependencyStore } from '@/store/dependencyStore' -import { getNodejsVersion } from '@/service/dependencyService' -import Mock = jest.Mock - -jest.mock('@/service/dependencyService') - -describe('dependencyStore', () => { - beforeEach(() => { - setActivePinia(createPinia()) - }) - - describe('hasNodejs', () => { - it('is true if node.js version is set', () => { - const store = useDependencyStore() - store.nodejs.version = '12.13.4' - - expect(store.hasNodejs).toEqual(true) - }) - - it('is false if node.js version is null', () => { - const store = useDependencyStore() - store.$state.nodejs.version = null - - expect(store.hasNodejs).toEqual(false) - }) - }) - - describe('checkVersions', () => { - it('gets node.js version', async () => { - const store = useDependencyStore(); - (getNodejsVersion as Mock).mockResolvedValue('156.53.3') - - await store.checkVersions() - - expect(getNodejsVersion).toHaveBeenCalled() - expect(store.nodejs.version).toEqual('156.53.3') - expect(store.isLoading).toEqual(false) - }) - }) -}) diff --git a/src/store/__tests__/errorHandlerStore.test.ts b/src/store/__tests__/errorHandlerStore.test.ts deleted file mode 100644 index b9876f7..0000000 --- a/src/store/__tests__/errorHandlerStore.test.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { useErrorHandlerStore } from '../errorHandlerStore' -import * as generateId from '../../util/generateId' -import { createPinia, setActivePinia } from 'pinia' - -describe('errorHandlerStore', () => { - beforeEach(() => { - jest.clearAllMocks() - jest.restoreAllMocks() - - setActivePinia(createPinia()) - - // eslint-disable-next-line @typescript-eslint/no-empty-function - jest.spyOn(console, 'error').mockImplementation(() => {}) - }) - - describe('removeRecentError', () => { - it('removes error from list', () => { - const store = useErrorHandlerStore() - store.recentErrors = { - err1: { err: {}, info: 'info', component: null }, - err2: { err: {}, info: 'info', component: null } - } - - store.removeRecentError({ key: 'err2' }) - - expect(store.recentErrors).toEqual({ err1: { err: {}, info: 'info', component: null } }) - }) - }) - - describe('handleError', () => { - it('logs given error', () => { - const store = useErrorHandlerStore() - const error = new Error('yeehaw') - - // @ts-ignore - store.handleError({ err: error, info: 'component event handler', component: {} }) - - expect(console.error).toHaveBeenCalledWith('Got error from \'component event handler\': \n', error) - }) - - it('stores error in state', () => { - const store = useErrorHandlerStore() - jest.spyOn(generateId, 'generateId').mockReturnValue('1010101') - const error = new Error('yeehaw') - - store.handleError({ err: error, info: 'component event handler', component: null }) - - expect(store.recentErrors).toEqual({ - 1010101: { err: error, info: 'component event handler', component: null } - }) - }) - }) -}) diff --git a/src/store/__tests__/logStore.test.ts b/src/store/__tests__/logStore.test.ts deleted file mode 100644 index 4111e82..0000000 --- a/src/store/__tests__/logStore.test.ts +++ /dev/null @@ -1,211 +0,0 @@ -import { mockTauriEvent } from '@/__mocks__/tauri' -import { useLogStore } from '@/store/logStore' -import { flushPromises } from '@vue/test-utils' -import { createPinia, setActivePinia } from 'pinia' -import { listenForProcessExit } from '@/service/messagingService' -import { ActionState } from '@/types/log' -import Mock = jest.Mock - -jest.mock('@/service/messagingService') - -describe('logStore', () => { - beforeEach(() => { - setActivePinia(createPinia()) - }) - - describe('insertLine', () => { - it('adds line to state', () => { - const store = useLogStore() - - store.insertLine({ - line: { message: 'MESSAGE 1' }, - key: 'key1' - }) - store.insertLine({ - line: { message: 'MESSAGE 2' }, - key: 'key2' - }) - - expect(store.lines).toEqual({ - key1: [{ message: 'MESSAGE 1' }], - key2: [{ message: 'MESSAGE 2' }] - }) - }) - }) - - describe('setProgress', () => { - it('sets progress in state', () => { - const store = useLogStore() - store.progressEntries = { key2: { max_step: 4, step: 2 } } - - store.setProgress('key1', { max_step: 5, step: 3 }) - - expect(store.progressEntries).toEqual({ key2: { max_step: 4, step: 2 }, key1: { max_step: 5, step: 3 } }) - }) - }) - - describe('reset', () => { - it('clears messages and progress', () => { - const logStore = useLogStore() - logStore.lines = { - key1: [{ message: 'MESSAGE 1' }], - key2: [{ message: 'MESSAGE 2' }] - } - logStore.actionStates = { - key1: ActionState.COMPLETED_SUCCESS, - key2: ActionState.COMPLETED_SUCCESS - } - logStore.progressEntries = { - key1: { max_step: 5, step: 4 }, - key2: { max_step: 5, step: 3 } - } - - logStore.reset('key1') - - expect(logStore.lines).toEqual({ - key1: [], - key2: [{ message: 'MESSAGE 2' }] - }) - expect(logStore.actionStates).toEqual({ - key1: ActionState.INCOMPLETE, - key2: ActionState.COMPLETED_SUCCESS - }) - expect(logStore.progressEntries).toEqual({ - key2: { max_step: 5, step: 3 } - }) - }) - }) - - describe('setActionState', () => { - it('sets completed state', () => { - const logStore = useLogStore() - logStore.actionStates = { - key1: ActionState.COMPLETED_SUCCESS, - key2: ActionState.INCOMPLETE - } - - logStore.setActionState({ - key: 'key2', - state: ActionState.COMPLETED_ERROR - }) - - expect(logStore.actionStates).toEqual({ - key1: ActionState.COMPLETED_SUCCESS, - key2: ActionState.COMPLETED_ERROR - }) - }) - }) - - describe('listen', () => { - it('listens for log events and adds received events to store', async () => { - const logStore = useLogStore() - mockTauriEvent.listen.mockResolvedValue(jest.fn()) - - await logStore.listen('key1') - - expect(mockTauriEvent.listen).toHaveBeenCalledTimes(1) - expect(mockTauriEvent.listen).toHaveBeenCalledWith('log:key1', expect.any(Function)) - - const listenCallback = mockTauriEvent.listen.mock.calls[0][1] - listenCallback({ - payload: { message: 'MESSAGE!' } - }) - - expect(logStore.lines).toEqual({ key1: [{ message: 'MESSAGE!' }] }) - }) - - it('listens for progress events when required', async () => { - const logStore = useLogStore() - mockTauriEvent.listen.mockResolvedValue(jest.fn()) - - await logStore.listen('key2', true) - - expect(mockTauriEvent.listen).toHaveBeenCalledTimes(2) - expect(mockTauriEvent.listen).toHaveBeenCalledWith('log:key2', expect.any(Function)) - expect(mockTauriEvent.listen).toHaveBeenCalledWith('progress:key2', expect.any(Function)) - - const messageCallback = mockTauriEvent.listen.mock.calls[0][1] - messageCallback({ - payload: { message: 'MESSAGE!' } - }) - - expect(logStore.lines).toEqual({ key2: [{ message: 'MESSAGE!' }] }) - - const progressCallback = mockTauriEvent.listen.mock.calls[1][1] - progressCallback({ - payload: { max_step: 5, step: 3 } - }) - - expect(logStore.progressEntries).toEqual({ key2: { max_step: 5, step: 3 } }) - }) - }) - - describe('unlisten', () => { - it('calls unlisten function returned by tauri listeners', async () => { - const logStore = useLogStore() - const unlisten = jest.fn() - mockTauriEvent.listen.mockResolvedValue(unlisten) - await logStore.listen('cool-key') - - logStore.unlisten('cool-key') - - expect(unlisten).toHaveBeenCalledTimes(1) - }) - - it('unlistens as expected when listening for progress events', async () => { - const logStore = useLogStore() - const unlisten = jest.fn() - mockTauriEvent.listen.mockResolvedValue(unlisten) - await logStore.listen('cool-key', true) - - logStore.unlisten('cool-key') - - expect(unlisten).toHaveBeenCalledTimes(2) - }) - }) - - describe('logPromiseResult', () => { - it('logs error to store', async () => { - const logStore = useLogStore() - - logStore.logPromiseResult({ - promise: Promise.reject(new Error('Failed!')), - key: 'key2' - }) - await flushPromises() - - expect(logStore.lines).toEqual({ - key2: [{ - message: 'Error: Failed!', - type: 'error' - }] - }) - expect(logStore.actionStates).toEqual({ key2: ActionState.COMPLETED_ERROR }) - }) - }) - - describe('listenForProcessExit', () => { - it.each([ - [ActionState.COMPLETED_SUCCESS, true], - [ActionState.COMPLETED_ERROR, false] - ])('sets action state to %p if process exit success value is %p', async (state, success) => { - const unlisten = jest.fn() - const callback = jest.fn(); - (listenForProcessExit as Mock).mockResolvedValue(unlisten) - const logStore = useLogStore() - logStore.setActionState = jest.fn() - - await logStore.listenForProcessExit({ key: 'log-key', callback }) - - expect(callback).not.toHaveBeenCalled() - expect(unlisten).not.toHaveBeenCalled() - expect(logStore.setActionState).not.toHaveBeenCalled(); - - (listenForProcessExit as Mock).mock.calls[0][1]({ payload: { success } }) - - expect(callback).toHaveBeenCalled() - expect(unlisten).toHaveBeenCalled() - expect(logStore.setActionState).toHaveBeenCalledWith({ key: 'log-key', state }) - }) - }) -}) diff --git a/src/store/__tests__/nodecgStore.test.ts b/src/store/__tests__/nodecgStore.test.ts deleted file mode 100644 index cc20e6d..0000000 --- a/src/store/__tests__/nodecgStore.test.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { InstallStatus, useNodecgStore } from '@/store/nodecgStore' -import { getBundles, getNodecgStatus } from '@/service/nodecgService' -import { useConfigStore } from '@/store/configStore' -import Mock = jest.Mock -import { createPinia, setActivePinia } from 'pinia' - -jest.mock('@/service/nodecgService') - -describe('nodecgStore', () => { - beforeEach(() => { - setActivePinia(createPinia()) - }) - - describe('checkNodecgStatus', () => { - it('sets status to unknown before status is found', () => { - const nodecgStore = useNodecgStore(); - // eslint-disable-next-line @typescript-eslint/no-empty-function - (getNodecgStatus as Mock).mockImplementation(() => new Promise(() => {})) - - nodecgStore.checkNodecgStatus() - - expect(nodecgStore.status.installStatus).toEqual(InstallStatus.UNKNOWN) - expect(nodecgStore.status.message).toEqual('Checking status...') - }) - - it('sets status', async () => { - const nodecgStore = useNodecgStore(); - (getNodecgStatus as Mock).mockResolvedValue({ - status: InstallStatus.READY_TO_INSTALL, - message: 'Message!' - }) - - await nodecgStore.checkNodecgStatus() - - expect(nodecgStore.status.installStatus).toEqual(InstallStatus.READY_TO_INSTALL) - expect(nodecgStore.status.message).toEqual('Message!') - }) - - it('handles status check throwing error', async () => { - const nodecgStore = useNodecgStore(); - (getNodecgStatus as Mock).mockRejectedValue(new Error('Failure!')) - - await nodecgStore.checkNodecgStatus() - - expect(nodecgStore.status.installStatus).toEqual(InstallStatus.UNABLE_TO_INSTALL) - expect(nodecgStore.status.message).toEqual('Error: Failure!') - }) - - it('gets bundles if nodecg is installed', async () => { - const nodecgStore = useNodecgStore(); - (getNodecgStatus as Mock).mockResolvedValue({ - status: InstallStatus.INSTALLED, - message: 'Found!' - }) - - await nodecgStore.checkNodecgStatus() - - expect(nodecgStore.status.installStatus).toEqual(InstallStatus.INSTALLED) - expect(nodecgStore.status.message).toEqual('Found!') - expect(getBundles).toHaveBeenCalled() - }) - }) - - describe('getBundleList', () => { - it('sets bundlesLoading to true before reading bundle data', () => { - const nodecgStore = useNodecgStore(); - // eslint-disable-next-line @typescript-eslint/no-empty-function - (getBundles as Mock).mockImplementation(() => new Promise(() => {})) - - nodecgStore.getBundleList() - - expect(nodecgStore.status.bundlesLoading).toEqual(true) - expect(getBundles).toHaveBeenCalled() - }) - - it('reads bundle data', async () => { - const nodecgStore = useNodecgStore() - useConfigStore().installPath = '/install/path'; - (getBundles as Mock).mockResolvedValue([{ name: 'Cool Bundle' }]) - - await nodecgStore.getBundleList() - - expect(nodecgStore.bundles).toEqual([{ name: 'Cool Bundle' }]) - expect(getBundles).toHaveBeenCalledWith('/install/path') - }) - }) -}) diff --git a/src/store/configStore.ts b/src/store/configStore.ts index 293d4da..0448542 100644 --- a/src/store/configStore.ts +++ b/src/store/configStore.ts @@ -1,24 +1,62 @@ import { defineStore } from 'pinia' +import { appConfigDir } from '@tauri-apps/api/path' +import { Store } from '@tauri-apps/plugin-store' +import { readonly, ref } from 'vue' +import { invoke } from '@tauri-apps/api/core' +import { type } from '@tauri-apps/plugin-os' -export const LOCAL_STORAGE_CONFIG_KEY = 'config' +const STORE_CONFIG_KEY = 'config' export interface Configuration { - installPath: string + nodecgInstallDir: string | null enableErrorLog: boolean } -export const useConfigStore = defineStore('config', { - state: () => ({ - installPath: '', +export const useConfigStore = defineStore('config', () => { + const userConfig = ref({ + nodecgInstallDir: null, enableErrorLog: false - } as Configuration), - actions: { - load () { - const config = JSON.parse(localStorage.getItem(LOCAL_STORAGE_CONFIG_KEY) ?? '{}') - this.$patch(config) - }, - persist () { - localStorage.setItem(LOCAL_STORAGE_CONFIG_KEY, JSON.stringify(this.$state)) + }) + const allowOpenInTerminal = ref(false) + let store: Store + + async function init() { + const configDir = await appConfigDir() + store = new Store(`${configDir}/config.json`) + const config = await store.get(STORE_CONFIG_KEY) + + if (config != null) { + userConfig.value = config + } + + await store.onKeyChange('config', newValue => { + if (newValue != null) { + userConfig.value = newValue + } + }) + + await type().then(type => { + allowOpenInTerminal.value = type === 'macos' || type === 'windows' + }) + } + + async function patch(values: Partial) { + const newConfig = { + ...userConfig.value, + ...values } + + return invoke('update_config', { + config: newConfig + }).then(() => { + userConfig.value = newConfig + }) + } + + return { + userConfig: readonly(userConfig), + allowOpenInTerminal: readonly(allowOpenInTerminal), + init, + patch } }) diff --git a/src/store/nodecgStore.ts b/src/store/nodecgStore.ts index 3200a7e..d839d47 100644 --- a/src/store/nodecgStore.ts +++ b/src/store/nodecgStore.ts @@ -7,7 +7,9 @@ export enum InstallStatus { UNKNOWN, READY_TO_INSTALL, INSTALLED, - UNABLE_TO_INSTALL + UNABLE_TO_INSTALL, + MISSING_INSTALL_DIRECTORY, + BAD_INSTALL_DIRECTORY } export enum RunStatus { @@ -39,11 +41,9 @@ export const useNodecgStore = defineStore('nodecg', { actions: { async checkNodecgStatus () { const configStore = useConfigStore() - this.status.installStatus = InstallStatus.UNKNOWN - this.status.message = 'Checking status...' try { - const { status, message } = await getNodecgStatus(configStore.installPath) + const { status, message } = await getNodecgStatus(configStore.userConfig.nodecgInstallDir) this.status.message = message this.status.installStatus = status if (status === InstallStatus.INSTALLED) { @@ -61,7 +61,7 @@ export const useNodecgStore = defineStore('nodecg', { const configStore = useConfigStore() this.status.bundlesLoading = true try { - this.bundles = await getBundles(configStore.installPath) + this.bundles = await getBundles(configStore.userConfig.nodecgInstallDir) } finally { this.status.bundlesLoading = false } diff --git a/src/styles/text.scss b/src/styles/text.scss index 2618a11..cd0f147 100644 --- a/src/styles/text.scss +++ b/src/styles/text.scss @@ -5,3 +5,7 @@ h2 { .bold { font-weight: 700; } + +.text-overflow-anywhere { + overflow-wrap: anywhere; +} diff --git a/src/styles/window.scss b/src/styles/window.scss index 0919285..ea9cf10 100644 --- a/src/styles/window.scss +++ b/src/styles/window.scss @@ -10,6 +10,7 @@ body { font-family: 'Roboto', sans-serif; color: var(--ipl-body-text-color); padding: 12px 8px; + margin: 0; background-color: var(--ipl-bg-primary); overflow-y: scroll; } diff --git a/src/util/__tests__/fs.test.ts b/src/util/__tests__/fs.test.ts deleted file mode 100644 index 448349a..0000000 --- a/src/util/__tests__/fs.test.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { mockTauriFs } from '@/__mocks__/tauri' -import { fileExists, folderExists } from '@/util/fs' - -describe('folderExists', () => { - it('is true if directory is read successfully', async () => { - mockTauriFs.readDir.mockResolvedValue({}) - - const result = await folderExists('/path/path') - - expect(mockTauriFs.readDir).toHaveBeenCalledWith('/path/path') - expect(result).toEqual(true) - }) - - it('returns false when reading directory throws not found error', async () => { - mockTauriFs.readDir.mockRejectedValue('path: /path: No such file or directory (os error 2)') - - const result = await folderExists('/path') - - expect(mockTauriFs.readDir).toHaveBeenCalledWith('/path') - expect(result).toEqual(false) - }) - - it('throws on other errors', async () => { - mockTauriFs.readDir.mockRejectedValue('path: /path (non recursive): File exists (os error 17)') - - await expect(folderExists('/cool/path')).rejects.toEqual('path: /path (non recursive): File exists (os error 17)') - expect(mockTauriFs.readDir).toHaveBeenCalledWith('/cool/path') - }) -}) - -describe('fileExists', () => { - it('is true if directory is read successfully', async () => { - mockTauriFs.readTextFile.mockResolvedValue({}) - - const result = await fileExists('/path/path') - - expect(mockTauriFs.readTextFile).toHaveBeenCalledWith('/path/path') - expect(result).toEqual(true) - }) - - it('returns false when reading directory throws not found error', async () => { - mockTauriFs.readTextFile.mockRejectedValue('path: /path: No such file or directory (os error 2)') - - const result = await fileExists('/path') - - expect(mockTauriFs.readTextFile).toHaveBeenCalledWith('/path') - expect(result).toEqual(false) - }) - - it('throws on other errors', async () => { - mockTauriFs.readTextFile.mockRejectedValue('path: /path (non recursive): File exists (os error 17)') - - await expect(fileExists('/cool/path')).rejects.toEqual('path: /path (non recursive): File exists (os error 17)') - expect(mockTauriFs.readTextFile).toHaveBeenCalledWith('/cool/path') - }) -}) diff --git a/src/util/__tests__/generateId.test.ts b/src/util/__tests__/generateId.test.ts deleted file mode 100644 index 66ffd9f..0000000 --- a/src/util/__tests__/generateId.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { generateId } from '../generateId' - -describe('generateId', () => { - it('returns an ID based on the given random number', () => { - jest.spyOn(Math, 'random') - .mockReturnValueOnce(0.042788) - .mockReturnValueOnce(0.589375) - - expect(generateId()).toBe('1jgbeqlc8') - expect(generateId()).toBe('l7tvoha2v') - }) -}) diff --git a/src/util/__tests__/stringUtil.test.ts b/src/util/__tests__/stringUtil.test.ts deleted file mode 100644 index 188bcbc..0000000 --- a/src/util/__tests__/stringUtil.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { addDots } from '@/util/stringUtil' - -describe('stringUtil', () => { - describe('addDots', () => { - it('cuts off long strings', () => { - expect(addDots('abcdefghijklmn', 10)).toEqual('abcdefg...') - }) - - it('does not cut off short strings', () => { - expect(addDots('A', 2)).toEqual('A') - }) - }) -}) diff --git a/src/util/fs.ts b/src/util/fs.ts index 9a1523c..0db3e4f 100644 --- a/src/util/fs.ts +++ b/src/util/fs.ts @@ -1,4 +1,4 @@ -import { readDir, readTextFile } from '@tauri-apps/api/fs' +import { readDir, readTextFile } from '@tauri-apps/plugin-fs' export async function folderExists (path: string): Promise { try { diff --git a/tsconfig.json b/tsconfig.json index 0b1e1e2..12556a2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,6 @@ "baseUrl": ".", "types": [ "webpack-env", - "jest", "node" ], "paths": { diff --git a/yarn.lock b/yarn.lock index 8fcd4c5..ab13c0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,271 +12,6 @@ __metadata: languageName: node linkType: hard -"@ampproject/remapping@npm:^2.2.0": - version: 2.3.0 - resolution: "@ampproject/remapping@npm:2.3.0" - dependencies: - "@jridgewell/gen-mapping": ^0.3.5 - "@jridgewell/trace-mapping": ^0.3.24 - checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2": - version: 7.24.2 - resolution: "@babel/code-frame@npm:7.24.2" - dependencies: - "@babel/highlight": ^7.24.2 - picocolors: ^1.0.0 - checksum: 70e867340cfe09ca5488b2f36372c45cabf43c79a5b6426e6df5ef0611ff5dfa75a57dda841895693de6008f32c21a7c97027a8c7bcabd63a7d17416cbead6f8 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/code-frame@npm:7.16.7" - dependencies: - "@babel/highlight": ^7.16.7 - checksum: db2f7faa31bc2c9cf63197b481b30ea57147a5fc1a6fab60e5d6c02cdfbf6de8e17b5121f99917b3dabb5eeb572da078312e70697415940383efc140d4e0808b - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.23.5": - version: 7.24.1 - resolution: "@babel/compat-data@npm:7.24.1" - checksum: e14e94b00c3ac57bba929a87da8edb6c6a99d0051c54bf49591a5481440dd4d3ac7b4e4a93b81b54e45c2bca55e538aa1e1ad8281b083440a1598bfa8c8df03a - languageName: node - linkType: hard - -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": - version: 7.24.3 - resolution: "@babel/core@npm:7.24.3" - dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.24.2 - "@babel/generator": ^7.24.1 - "@babel/helper-compilation-targets": ^7.23.6 - "@babel/helper-module-transforms": ^7.23.3 - "@babel/helpers": ^7.24.1 - "@babel/parser": ^7.24.1 - "@babel/template": ^7.24.0 - "@babel/traverse": ^7.24.1 - "@babel/types": ^7.24.0 - convert-source-map: ^2.0.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.3 - semver: ^6.3.1 - checksum: 1a33460794f4122cf255b656f4d6586913f41078a1afdf1bcf0365ddbd99c1ddb68f904062f9079445ab26b507c36bc297055192bc26e5c8e6e3def42195f9ab - languageName: node - linkType: hard - -"@babel/generator@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/generator@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - jsesc: ^2.5.1 - source-map: ^0.5.0 - checksum: 20c6a7c5e372a66ec2900c074b2ec3634d3f615cafccbb416770f4b419251c6dc27a0a137b71407e218463fe059a3a6a5afb734f35089d94bdb66e01fe8a9e6f - languageName: node - linkType: hard - -"@babel/generator@npm:^7.24.1, @babel/generator@npm:^7.7.2": - version: 7.24.1 - resolution: "@babel/generator@npm:7.24.1" - dependencies: - "@babel/types": ^7.24.0 - "@jridgewell/gen-mapping": ^0.3.5 - "@jridgewell/trace-mapping": ^0.3.25 - jsesc: ^2.5.1 - checksum: 98c6ce5ec7a1cba2bdf35cdf607273b90cf7cf82bbe75cd0227363fb84d7e1bd8efa74f40247d5900c8c009123f10132ad209a05283757698de918278c3c6700 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.23.6": - version: 7.23.6 - resolution: "@babel/helper-compilation-targets@npm:7.23.6" - dependencies: - "@babel/compat-data": ^7.23.5 - "@babel/helper-validator-option": ^7.23.5 - browserslist: ^4.22.2 - lru-cache: ^5.1.1 - semver: ^6.3.1 - checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590 - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-environment-visitor@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: c03a10105d9ebd1fe632a77356b2e6e2f3c44edba9a93b0dc3591b6a66bd7a2e323dd9502f9ce96fc6401234abff1907aa877b6674f7826b61c953f7c8204bbe - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-environment-visitor@npm:7.22.20" - checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-function-name@npm:7.16.7" - dependencies: - "@babel/helper-get-function-arity": ^7.16.7 - "@babel/template": ^7.16.7 - "@babel/types": ^7.16.7 - checksum: fc77cbe7b10cfa2a262d7a37dca575c037f20419dfe0c5d9317f589599ca24beb5f5c1057748011159149eaec47fe32338c6c6412376fcded68200df470161e1 - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.23.0": - version: 7.23.0 - resolution: "@babel/helper-function-name@npm:7.23.0" - dependencies: - "@babel/template": ^7.22.15 - "@babel/types": ^7.23.0 - checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 - languageName: node - linkType: hard - -"@babel/helper-get-function-arity@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-get-function-arity@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: 25d969fb207ff2ad5f57a90d118f6c42d56a0171022e200aaa919ba7dc95ae7f92ec71cdea6c63ef3629a0dc962ab4c78e09ca2b437185ab44539193f796e0c3 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-hoist-variables@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: 6ae1641f4a751cd9045346e3f61c3d9ec1312fd779ab6d6fecfe2a96e59a481ad5d7e40d2a840894c13b3fd6114345b157f9e3062fc5f1580f284636e722de60 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-hoist-variables@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-module-imports@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: ddd2c4a600a2e9a4fee192ab92bf35a627c5461dbab4af31b903d9ba4d6b6e59e0ff3499fde4e2e9a0eebe24906f00b636f8b4d9bd72ff24d50e6618215c3212 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.22.15": - version: 7.24.3 - resolution: "@babel/helper-module-imports@npm:7.24.3" - dependencies: - "@babel/types": ^7.24.0 - checksum: c23492189ba97a1ec7d37012336a5661174e8b88194836b6bbf90d13c3b72c1db4626263c654454986f924c6da8be7ba7f9447876d709cd00bd6ffde6ec00796 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-module-transforms@npm:7.16.7" - dependencies: - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-simple-access": ^7.16.7 - "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/helper-validator-identifier": ^7.16.7 - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.16.7 - "@babel/types": ^7.16.7 - checksum: 6e930ce776c979f299cdbeaf80187f4ab086d75287b96ecc1c6896d392fcb561065f0d6219fc06fa79b4ceb4bbdc1a9847da8099aba9b077d0a9e583500fb673 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/helper-module-transforms@npm:7.23.3" - dependencies: - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-module-imports": ^7.22.15 - "@babel/helper-simple-access": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/helper-validator-identifier": ^7.22.20 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.24.0 - resolution: "@babel/helper-plugin-utils@npm:7.24.0" - checksum: e2baa0eede34d2fa2265947042aa84d444aa48dc51e9feedea55b67fc1bc3ab051387e18b33ca7748285a6061390831ab82f8a2c767d08470b93500ec727e9b9 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-plugin-utils@npm:7.16.7" - checksum: d08dd86554a186c2538547cd537552e4029f704994a9201d41d82015c10ed7f58f9036e8d1527c3760f042409163269d308b0b3706589039c5f1884619c6d4ce - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-simple-access@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: 8d22c46c5ec2ead0686c4d5a3d1d12b5190c59be676bfe0d9d89df62b437b51d1a3df2ccfb8a77dded2e585176ebf12986accb6d45a18cff229eef3b10344f4b - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-simple-access@npm:7.22.5" - dependencies: - "@babel/types": ^7.22.5 - checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 - languageName: node - linkType: hard - -"@babel/helper-split-export-declaration@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-split-export-declaration@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: e10aaf135465c55114627951b79115f24bc7af72ecbb58d541d66daf1edaee5dde7cae3ec8c3639afaf74526c03ae3ce723444e3b5b3dc77140c456cd84bcaa1 - languageName: node - linkType: hard - -"@babel/helper-split-export-declaration@npm:^7.22.6": - version: 7.22.6 - resolution: "@babel/helper-split-export-declaration@npm:7.22.6" - dependencies: - "@babel/types": ^7.22.5 - checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.23.4": - version: 7.24.1 - resolution: "@babel/helper-string-parser@npm:7.24.1" - checksum: 8404e865b06013979a12406aab4c0e8d2e377199deec09dfe9f57b833b0c9ce7b6e8c1c553f2da8d0bcd240c5005bd7a269f4fef0d628aeb7d5fe035c436fb67 - languageName: node - linkType: hard - "@babel/helper-validator-identifier@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-validator-identifier@npm:7.16.7" @@ -284,55 +19,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-validator-identifier@npm:7.22.20" - checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/helper-validator-option@npm:7.23.5" - checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/helpers@npm:7.24.1" - dependencies: - "@babel/template": ^7.24.0 - "@babel/traverse": ^7.24.1 - "@babel/types": ^7.24.0 - checksum: 0643b8ccf3358682303aea65f0798e482b2c3642040d32ffe130a245f4a46d0d23fe575a5e06e3cda4e8ec4af89d52b94ff1c444a74465d47ccc27da6ddbbb9f - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/highlight@npm:7.16.7" - dependencies: - "@babel/helper-validator-identifier": ^7.16.7 - chalk: ^2.0.0 - js-tokens: ^4.0.0 - checksum: f7e04e7e03b83c2cca984f4d3e180c9b018784f45d03367e94daf983861229ddc47264045f3b58dfeb0007f9c67bc2a76c4de1693bad90e5394876ef55ece5bb - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.24.2": - version: 7.24.2 - resolution: "@babel/highlight@npm:7.24.2" - dependencies: - "@babel/helper-validator-identifier": ^7.22.20 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - picocolors: ^1.0.0 - checksum: 5f17b131cc3ebf3ab285a62cf98a404aef1bd71a6be045e748f8d5bf66d6a6e1aefd62f5972c84369472e8d9f22a614c58a89cd331eb60b7ba965b31b1bbeaf5 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1": +"@babel/parser@npm:^7.23.9": version: 7.24.1 resolution: "@babel/parser@npm:7.24.1" bin: @@ -341,262 +28,6 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.16.4, @babel/parser@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/parser@npm:7.16.7" - bin: - parser: ./bin/babel-parser.js - checksum: e664ff1edda164ab3f3c97fc1dd1a8930b0fba9981cbf873d3f25a22d16d50e2efcfaf81daeefa978bff2c4f268d34832f6817c8bc4e03594c3f43beba92fb68 - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.8.3": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.24.1 - resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 712f7e7918cb679f106769f57cfab0bc99b311032665c428b98f4c3e2e6d567601d45386a4f246df6a80d741e1f94192b3f008800d66c4f1daae3ad825c243f0 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.8.3": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.24.1 - resolution: "@babel/plugin-syntax-typescript@npm:7.24.1" - dependencies: - "@babel/helper-plugin-utils": ^7.24.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf4bd70788d5456b5f75572e47a2e31435c7c4e43609bd4dffd2cc0c7a6cf90aabcf6cd389e351854de9a64412a07d30effef5373251fe8f6a4c9db0c0163bda - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.2.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.16.7" - dependencies: - "@babel/helper-module-transforms": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-simple-access": ^7.16.7 - babel-plugin-dynamic-import-node: ^2.3.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 793c579c2cb71be99180e54b1cccfdd9cd599959e2408afb40a0b6225bac56d1e7c176516ad6bf25561e6eb6b31c5acc34ef6de02b9662c7237672ebecfa4d92 - languageName: node - linkType: hard - -"@babel/template@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/template@npm:7.16.7" - dependencies: - "@babel/code-frame": ^7.16.7 - "@babel/parser": ^7.16.7 - "@babel/types": ^7.16.7 - checksum: 10cd112e89276e00f8b11b55a51c8b2f1262c318283a980f4d6cdb0286dc05734b9aaeeb9f3ad3311900b09bc913e02343fcaa9d4a4f413964aaab04eb84ac4a - languageName: node - linkType: hard - -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": - version: 7.24.0 - resolution: "@babel/template@npm:7.24.0" - dependencies: - "@babel/code-frame": ^7.23.5 - "@babel/parser": ^7.24.0 - "@babel/types": ^7.24.0 - checksum: f257b003c071a0cecdbfceca74185f18fe62c055469ab5c1d481aab12abeebed328e67e0a19fd978a2a8de97b28953fa4bc3da6d038a7345fdf37923b9fcdec8 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/traverse@npm:7.16.7" - dependencies: - "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.16.7 - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-hoist-variables": ^7.16.7 - "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/parser": ^7.16.7 - "@babel/types": ^7.16.7 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 65261f7a5bf257c10a9415b6c227fb555ace359ad786645d9cf22f0e3fc8dc8e38895269f3b93cc39eccd8ed992e7bacc358b4cb7d3496fe54f91cda49220834 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.24.1": - version: 7.24.1 - resolution: "@babel/traverse@npm:7.24.1" - dependencies: - "@babel/code-frame": ^7.24.1 - "@babel/generator": ^7.24.1 - "@babel/helper-environment-visitor": ^7.22.20 - "@babel/helper-function-name": ^7.23.0 - "@babel/helper-hoist-variables": ^7.22.5 - "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.24.1 - "@babel/types": ^7.24.0 - debug: ^4.3.1 - globals: ^11.1.0 - checksum: 92a5ca906abfba9df17666d2001ab23f18600035f706a687055a0e392a690ae48d6fec67c8bd4ef19ba18699a77a5b7f85727e36b83f7d110141608fe0c24fe9 - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3": - version: 7.24.0 - resolution: "@babel/types@npm:7.24.0" - dependencies: - "@babel/helper-string-parser": ^7.23.4 - "@babel/helper-validator-identifier": ^7.22.20 - to-fast-properties: ^2.0.0 - checksum: 4b574a37d490f621470ff36a5afaac6deca5546edcb9b5e316d39acbb20998e9c2be42f3fc0bf2b55906fc49ff2a5a6a097e8f5a726ee3f708a0b0ca93aed807 - languageName: node - linkType: hard - -"@babel/types@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/types@npm:7.16.7" - dependencies: - "@babel/helper-validator-identifier": ^7.16.7 - to-fast-properties: ^2.0.0 - checksum: df9210723259df9faea8c7e5674a59e57ead82664aab9f54daae887db5a50a956f30f57ed77a2d6cbb89b908d520cf8d883267c4e9098e31bc74649f2f714654 - languageName: node - linkType: hard - "@babel/types@npm:^7.8.3": version: 7.17.0 resolution: "@babel/types@npm:7.17.0" @@ -607,13 +38,6 @@ __metadata: languageName: node linkType: hard -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 - languageName: node - linkType: hard - "@esbuild/aix-ppc64@npm:0.20.2": version: 0.20.2 resolution: "@esbuild/aix-ppc64@npm:0.20.2" @@ -867,21 +291,11 @@ __metadata: languageName: node linkType: hard -"@fortawesome/vue-fontawesome@npm:^3.0.0-5": - version: 3.0.0-5 - resolution: "@fortawesome/vue-fontawesome@npm:3.0.0-5" +"@fortawesome/vue-fontawesome@npm:^3.0.0-5, @fortawesome/vue-fontawesome@npm:^3.0.3": + version: 3.0.6 + resolution: "@fortawesome/vue-fontawesome@npm:3.0.6" peerDependencies: - "@fortawesome/fontawesome-svg-core": ~1 || >=1.3.0-beta1 - vue: ">= 3.0.0 < 4" - checksum: 7342d41ce40beb78ca26b3543881d519d81a4b43a266d895e8c0886e86357f47b22237e4924d0f615265a27d834ec5c3bcef5a30badbb9acd76df5830b149b32 - languageName: node - linkType: hard - -"@fortawesome/vue-fontawesome@npm:^3.0.3": - version: 3.0.6 - resolution: "@fortawesome/vue-fontawesome@npm:3.0.6" - peerDependencies: - "@fortawesome/fontawesome-svg-core": ~1 || ~6 + "@fortawesome/fontawesome-svg-core": ~1 || ~6 vue: ">= 3.0.0 < 4" checksum: 0ae311ed998660ae7b460ec03e5fd5f64268dd841ac000bb67172211fa3f36b2df46d6ffb95de608f716664ebc07048a17d5da8b4f93f2ccddc8a054b410bcaf languageName: node @@ -933,312 +347,13 @@ __metadata: languageName: node linkType: hard -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" - dependencies: - string-width: ^5.1.2 - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: ^7.0.1 - strip-ansi-cjs: "npm:strip-ansi@^6.0.1" - wrap-ansi: ^8.1.0 - wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" - checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb - languageName: node - linkType: hard - -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: ^5.3.1 - find-up: ^4.1.0 - get-package-type: ^0.1.0 - js-yaml: ^3.13.1 - resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 - languageName: node - linkType: hard - -"@jest/console@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/console@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - slash: ^3.0.0 - checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 - languageName: node - linkType: hard - -"@jest/core@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/core@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/reporters": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - ci-info: ^3.2.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-changed-files: ^29.7.0 - jest-config: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-resolve-dependencies: ^29.7.0 - jest-runner: ^29.7.0 - jest-runtime: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - jest-watcher: ^29.7.0 - micromatch: ^4.0.4 - pretty-format: ^29.7.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d - languageName: node - linkType: hard - -"@jest/environment@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/environment@npm:29.7.0" - dependencies: - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-mock: ^29.7.0 - checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 - languageName: node - linkType: hard - -"@jest/expect-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect-utils@npm:29.7.0" - dependencies: - jest-get-type: ^29.6.3 - checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed - languageName: node - linkType: hard - -"@jest/expect@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/expect@npm:29.7.0" - dependencies: - expect: ^29.7.0 - jest-snapshot: ^29.7.0 - checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/fake-timers@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@sinonjs/fake-timers": ^10.0.2 - "@types/node": "*" - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 - languageName: node - linkType: hard - -"@jest/globals@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/globals@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 - "@jest/types": ^29.6.3 - jest-mock: ^29.7.0 - checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 - languageName: node - linkType: hard - -"@jest/reporters@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/reporters@npm:29.7.0" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@jridgewell/trace-mapping": ^0.3.18 - "@types/node": "*" - chalk: ^4.0.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^6.0.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 - slash: ^3.0.0 - string-length: ^4.0.1 - strip-ansi: ^6.0.0 - v8-to-istanbul: ^9.0.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 - languageName: node - linkType: hard - -"@jest/schemas@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/schemas@npm:29.6.3" - dependencies: - "@sinclair/typebox": ^0.27.8 - checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 - languageName: node - linkType: hard - -"@jest/source-map@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/source-map@npm:29.6.3" - dependencies: - "@jridgewell/trace-mapping": ^0.3.18 - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb - languageName: node - linkType: hard - -"@jest/test-result@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-result@npm:29.7.0" - dependencies: - "@jest/console": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/test-sequencer@npm:29.7.0" - dependencies: - "@jest/test-result": ^29.7.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - slash: ^3.0.0 - checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd - languageName: node - linkType: hard - -"@jest/transform@npm:^29.7.0": - version: 29.7.0 - resolution: "@jest/transform@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/types": ^29.6.3 - "@jridgewell/trace-mapping": ^0.3.18 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^2.0.0 - fast-json-stable-stringify: ^2.1.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - write-file-atomic: ^4.0.2 - checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab - languageName: node - linkType: hard - -"@jest/types@npm:^29.6.3": - version: 29.6.3 - resolution: "@jest/types@npm:29.6.3" - dependencies: - "@jest/schemas": ^29.6.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.5 - resolution: "@jridgewell/gen-mapping@npm:0.3.5" - dependencies: - "@jridgewell/set-array": ^1.2.1 - "@jridgewell/sourcemap-codec": ^1.4.10 - "@jridgewell/trace-mapping": ^0.3.24 - checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.2.1": - version: 1.2.1 - resolution: "@jridgewell/set-array@npm:1.2.1" - checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.15": +"@jridgewell/sourcemap-codec@npm:^1.4.15": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": - version: 0.3.25 - resolution: "@jridgewell/trace-mapping@npm:0.3.25" - dependencies: - "@jridgewell/resolve-uri": ^3.1.0 - "@jridgewell/sourcemap-codec": ^1.4.14 - checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 - languageName: node - linkType: hard - "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -1266,19 +381,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/agent@npm:^2.0.0": - version: 2.2.1 - resolution: "@npmcli/agent@npm:2.2.1" - dependencies: - agent-base: ^7.1.0 - http-proxy-agent: ^7.0.0 - https-proxy-agent: ^7.0.1 - lru-cache: ^10.0.1 - socks-proxy-agent: ^8.0.1 - checksum: c69aca42dbba393f517bc5777ee872d38dc98ea0e5e93c1f6d62b82b8fecdc177a57ea045f07dda1a770c592384b2dd92a5e79e21e2a7cf51c9159466a8f9c9b - languageName: node - linkType: hard - "@npmcli/fs@npm:^1.0.0": version: 1.1.1 resolution: "@npmcli/fs@npm:1.1.1" @@ -1289,15 +391,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/fs@npm:^3.1.0": - version: 3.1.0 - resolution: "@npmcli/fs@npm:3.1.0" - dependencies: - semver: ^7.3.5 - checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e - languageName: node - linkType: hard - "@npmcli/move-file@npm:^1.0.1": version: 1.1.2 resolution: "@npmcli/move-file@npm:1.1.2" @@ -1308,31 +401,6 @@ __metadata: languageName: node linkType: hard -"@one-ini/wasm@npm:0.1.1": - version: 0.1.1 - resolution: "@one-ini/wasm@npm:0.1.1" - checksum: 11de17108eae57c797e552e36b259398aede999b4a689d78be6459652edc37f3428472410590a9d328011a8751b771063a5648dd5c4205631c55d1d58e313156 - languageName: node - linkType: hard - -"@pinia/testing@npm:^0.1.3": - version: 0.1.3 - resolution: "@pinia/testing@npm:0.1.3" - dependencies: - vue-demi: ">=0.14.5" - peerDependencies: - pinia: ">=2.1.5" - checksum: 02df818686f63b8f7b2521f05ecbf5f7fea1ab934d3dec8575a8d5146ebfcfb0605c61b64474271e6a954586f60510fba83dadd1a9498f7765c1187e58954c26 - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f - languageName: node - linkType: hard - "@rollup/rollup-android-arm-eabi@npm:4.13.1": version: 4.13.1 resolution: "@rollup/rollup-android-arm-eabi@npm:4.13.1" @@ -1431,122 +499,104 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.27.8": - version: 0.27.8 - resolution: "@sinclair/typebox@npm:0.27.8" - checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^3.0.0": - version: 3.0.1 - resolution: "@sinonjs/commons@npm:3.0.1" - dependencies: - type-detect: 4.0.8 - checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^10.0.2": - version: 10.3.0 - resolution: "@sinonjs/fake-timers@npm:10.3.0" - dependencies: - "@sinonjs/commons": ^3.0.0 - checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 +"@tauri-apps/api@npm:2.0.0-beta.4": + version: 2.0.0-beta.4 + resolution: "@tauri-apps/api@npm:2.0.0-beta.4" + checksum: 8bd1ff1e9b9fd7a36bde7c17a842bb31845de608ee611e316a629d227bc3bab4c1173895194b6187f07ff44e89f00bee4a9592b9f11e6f39fb7960b24421194f languageName: node linkType: hard -"@tauri-apps/api@npm:^1.5.3": - version: 1.5.3 - resolution: "@tauri-apps/api@npm:1.5.3" - checksum: 396f6f0630ab2cff0700f016eb84a8150cb8f16ec280e43975952448a0243503c0a0421ffa02ed7b79accef354e044dbd457ec9f73bd98273cf920610474bfbb +"@tauri-apps/api@npm:2.0.0-beta.7": + version: 2.0.0-beta.7 + resolution: "@tauri-apps/api@npm:2.0.0-beta.7" + checksum: c527c4c886c9337a35264f5c9e1da68d8a449b19483ab856b7364e13d1a547964a3f23a72a2dce4aede16043cc6d0d3a2c51f26bc6d8d5e52c726cee27960cfb languageName: node linkType: hard -"@tauri-apps/cli-darwin-arm64@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-darwin-arm64@npm:1.5.11" +"@tauri-apps/cli-darwin-arm64@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-darwin-arm64@npm:2.0.0-beta.12" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@tauri-apps/cli-darwin-x64@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-darwin-x64@npm:1.5.11" +"@tauri-apps/cli-darwin-x64@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-darwin-x64@npm:2.0.0-beta.12" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@tauri-apps/cli-linux-arm-gnueabihf@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-linux-arm-gnueabihf@npm:1.5.11" +"@tauri-apps/cli-linux-arm-gnueabihf@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-linux-arm-gnueabihf@npm:2.0.0-beta.12" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@tauri-apps/cli-linux-arm64-gnu@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-linux-arm64-gnu@npm:1.5.11" +"@tauri-apps/cli-linux-arm64-gnu@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-linux-arm64-gnu@npm:2.0.0-beta.12" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@tauri-apps/cli-linux-arm64-musl@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-linux-arm64-musl@npm:1.5.11" +"@tauri-apps/cli-linux-arm64-musl@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-linux-arm64-musl@npm:2.0.0-beta.12" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@tauri-apps/cli-linux-x64-gnu@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-linux-x64-gnu@npm:1.5.11" +"@tauri-apps/cli-linux-x64-gnu@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-linux-x64-gnu@npm:2.0.0-beta.12" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@tauri-apps/cli-linux-x64-musl@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-linux-x64-musl@npm:1.5.11" +"@tauri-apps/cli-linux-x64-musl@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-linux-x64-musl@npm:2.0.0-beta.12" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@tauri-apps/cli-win32-arm64-msvc@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-win32-arm64-msvc@npm:1.5.11" +"@tauri-apps/cli-win32-arm64-msvc@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-win32-arm64-msvc@npm:2.0.0-beta.12" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@tauri-apps/cli-win32-ia32-msvc@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-win32-ia32-msvc@npm:1.5.11" +"@tauri-apps/cli-win32-ia32-msvc@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-win32-ia32-msvc@npm:2.0.0-beta.12" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@tauri-apps/cli-win32-x64-msvc@npm:1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli-win32-x64-msvc@npm:1.5.11" +"@tauri-apps/cli-win32-x64-msvc@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli-win32-x64-msvc@npm:2.0.0-beta.12" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@tauri-apps/cli@npm:^1.5.11": - version: 1.5.11 - resolution: "@tauri-apps/cli@npm:1.5.11" +"@tauri-apps/cli@npm:2.0.0-beta.12": + version: 2.0.0-beta.12 + resolution: "@tauri-apps/cli@npm:2.0.0-beta.12" dependencies: - "@tauri-apps/cli-darwin-arm64": 1.5.11 - "@tauri-apps/cli-darwin-x64": 1.5.11 - "@tauri-apps/cli-linux-arm-gnueabihf": 1.5.11 - "@tauri-apps/cli-linux-arm64-gnu": 1.5.11 - "@tauri-apps/cli-linux-arm64-musl": 1.5.11 - "@tauri-apps/cli-linux-x64-gnu": 1.5.11 - "@tauri-apps/cli-linux-x64-musl": 1.5.11 - "@tauri-apps/cli-win32-arm64-msvc": 1.5.11 - "@tauri-apps/cli-win32-ia32-msvc": 1.5.11 - "@tauri-apps/cli-win32-x64-msvc": 1.5.11 + "@tauri-apps/cli-darwin-arm64": 2.0.0-beta.12 + "@tauri-apps/cli-darwin-x64": 2.0.0-beta.12 + "@tauri-apps/cli-linux-arm-gnueabihf": 2.0.0-beta.12 + "@tauri-apps/cli-linux-arm64-gnu": 2.0.0-beta.12 + "@tauri-apps/cli-linux-arm64-musl": 2.0.0-beta.12 + "@tauri-apps/cli-linux-x64-gnu": 2.0.0-beta.12 + "@tauri-apps/cli-linux-x64-musl": 2.0.0-beta.12 + "@tauri-apps/cli-win32-arm64-msvc": 2.0.0-beta.12 + "@tauri-apps/cli-win32-ia32-msvc": 2.0.0-beta.12 + "@tauri-apps/cli-win32-x64-msvc": 2.0.0-beta.12 dependenciesMeta: "@tauri-apps/cli-darwin-arm64": optional: true @@ -1570,131 +620,66 @@ __metadata: optional: true bin: tauri: tauri.js - checksum: cf4ba7ac83256490183fcccd5cbf88778c15003006c11ce9bb12ae05bce602fdd586a37122e43c8631460a83f3a48b030db8cea24b269877347b544ce381b966 + checksum: 7334a749a764cfdfc7f50afe20ba97d1b98d86248cbef9dcf48ab83eac5e11a8c99ff829e3fbb59e9f660028464cde85bc8ca6f7a7a05cafc2903aaabe0032f0 languageName: node linkType: hard -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.1.14": - version: 7.20.5 - resolution: "@types/babel__core@npm:7.20.5" - dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845 - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.8 - resolution: "@types/babel__generator@npm:7.6.8" - dependencies: - "@babel/types": ^7.0.0 - checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.4 - resolution: "@types/babel__template@npm:7.4.4" +"@tauri-apps/plugin-dialog@npm:2.0.0-beta.2": + version: 2.0.0-beta.2 + resolution: "@tauri-apps/plugin-dialog@npm:2.0.0-beta.2" dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 + "@tauri-apps/api": 2.0.0-beta.4 + checksum: 86fe4d216a034802c7a5013740272ec001f6ebddf3a869b7240df2c4e17d6d8011bb87d299b55e2bc8aa7433ae04a571b116939cd320f1cb6c45960f589ab941 languageName: node linkType: hard -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.20.5 - resolution: "@types/babel__traverse@npm:7.20.5" +"@tauri-apps/plugin-fs@npm:2.0.0-beta.2": + version: 2.0.0-beta.2 + resolution: "@tauri-apps/plugin-fs@npm:2.0.0-beta.2" dependencies: - "@babel/types": ^7.20.7 - checksum: 608e0ab4fc31cd47011d98942e6241b34d461608c0c0e153377c5fd822c436c475f1ded76a56bfa76a1adf8d9266b727bbf9bfac90c4cb152c97f30dadc5b7e8 + "@tauri-apps/api": 2.0.0-beta.4 + checksum: 8557f7c1af4f7a5e8dd4edd1aa81952861f0ae707c9672775eb50358872dbb59310c4018791a4a6fa0021b0890113b826bad991adf9a7391de1b7b313cd96c1f languageName: node linkType: hard -"@types/estree@npm:1.0.5": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a - languageName: node - linkType: hard - -"@types/graceful-fs@npm:^4.1.3": - version: 4.1.9 - resolution: "@types/graceful-fs@npm:4.1.9" +"@tauri-apps/plugin-os@npm:2.0.0-beta.2": + version: 2.0.0-beta.2 + resolution: "@tauri-apps/plugin-os@npm:2.0.0-beta.2" dependencies: - "@types/node": "*" - checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 - languageName: node - linkType: hard - -"@types/hosted-git-info@npm:2.7.0": - version: 2.7.0 - resolution: "@types/hosted-git-info@npm:2.7.0" - checksum: 155fdb80bdb5fb7c0ae767bcdbdc9477a27c92d7e6b59ddcb24d72174e7d94d3e1e4845e875374de223d4336683e590e152009475a987bc716601a071179f434 - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0": - version: 2.0.4 - resolution: "@types/istanbul-lib-coverage@npm:2.0.4" - checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.6 - resolution: "@types/istanbul-lib-coverage@npm:2.0.6" - checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 + "@tauri-apps/api": 2.0.0-beta.4 + checksum: 2c857cf51557ee6a2b7aa3589217539e9463edc6ab62e4da3501b11c9196e8705f39d13b29d170785d24c3f262904ee59b09b32e377b1d0e965ef61209275be0 languageName: node linkType: hard -"@types/istanbul-lib-report@npm:*": - version: 3.0.0 - resolution: "@types/istanbul-lib-report@npm:3.0.0" +"@tauri-apps/plugin-shell@npm:2.0.0-beta.2": + version: 2.0.0-beta.2 + resolution: "@tauri-apps/plugin-shell@npm:2.0.0-beta.2" dependencies: - "@types/istanbul-lib-coverage": "*" - checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36 + "@tauri-apps/api": 2.0.0-beta.4 + checksum: 4bb2bd9891d6bdb3b2d890cfba2c5077015be162f9294088655854bd808e7a971dbf6e74c473cec19f63c75ffd1b9297102e8f5f0c1c66b7257985b210984415 languageName: node linkType: hard -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.4 - resolution: "@types/istanbul-reports@npm:3.0.4" +"@tauri-apps/plugin-store@npm:^2.0.0-beta.2": + version: 2.0.0-beta.2 + resolution: "@tauri-apps/plugin-store@npm:2.0.0-beta.2" dependencies: - "@types/istanbul-lib-report": "*" - checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 + "@tauri-apps/api": 2.0.0-beta.4 + checksum: fc1525039811e5ebf6a6dca2f4fa449ab5531cfd50548fcdee001ff7a20d8db2e99eacfd0a685511cb6f6dba1db9c60d72d16273568bd7cd60b40000e210e169 languageName: node linkType: hard -"@types/jest@npm:^29.5.12": - version: 29.5.12 - resolution: "@types/jest@npm:29.5.12" - dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: 19b1efdeed9d9a60a81edc8226cdeae5af7479e493eaed273e01243891c9651f7b8b4c08fc633a7d0d1d379b091c4179bbaa0807af62542325fd72f2dd17ce1c +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 languageName: node linkType: hard -"@types/jsdom@npm:^20.0.0": - version: 20.0.1 - resolution: "@types/jsdom@npm:20.0.1" - dependencies: - "@types/node": "*" - "@types/tough-cookie": "*" - parse5: ^7.0.0 - checksum: d55402c5256ef451f93a6e3d3881f98339fe73a5ac2030588df056d6835df8367b5a857b48d27528289057e26dcdd3f502edc00cb877c79174cb3a4c7f2198c1 +"@types/estree@npm:1.0.5": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a languageName: node linkType: hard @@ -1712,7 +697,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^20.11.30": +"@types/node@npm:^20.11.30": version: 20.11.30 resolution: "@types/node@npm:20.11.30" dependencies: @@ -1728,50 +713,6 @@ __metadata: languageName: node linkType: hard -"@types/stack-utils@npm:^2.0.0": - version: 2.0.3 - resolution: "@types/stack-utils@npm:2.0.3" - checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 - languageName: node - linkType: hard - -"@types/strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/strip-bom@npm:3.0.0" - checksum: cb165d0c2ce6abbef95506ebee25be02bd453600ef1792dc1754236e5d6f9c830d52bdb85978d0b08ea1f36b96a61235ac5ad99e0f4c2767fb4ea004e141d2df - languageName: node - linkType: hard - -"@types/strip-json-comments@npm:0.0.30": - version: 0.0.30 - resolution: "@types/strip-json-comments@npm:0.0.30" - checksum: 829ddd389645073f347c5b1924a8c34b8813af29756576e511c46f40e218193cf93ccbade62661d47fc70f707e98f410331729b8c20edfcb2e807d51df1ad4b7 - languageName: node - linkType: hard - -"@types/tough-cookie@npm:*": - version: 4.0.5 - resolution: "@types/tough-cookie@npm:4.0.5" - checksum: f19409d0190b179331586365912920d192733112a195e870c7f18d20ac8adb7ad0b0ff69dad430dba8bc2be09593453a719cfea92dc3bda19748fd158fe1498d - languageName: node - linkType: hard - -"@types/yargs-parser@npm:*": - version: 20.2.1 - resolution: "@types/yargs-parser@npm:20.2.1" - checksum: 1d039e64494a7a61ddd278349a3dc60b19f99ff0517425696e796f794e4252452b9d62178e69755ad03f439f9dc0c8c3d7b3a1201b3a24e134bac1a09fa11eaa - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.32 - resolution: "@types/yargs@npm:17.0.32" - dependencies: - "@types/yargs-parser": "*" - checksum: 4505bdebe8716ff383640c6e928f855b5d337cb3c68c81f7249fc6b983d0aa48de3eee26062b84f37e0d75a5797bc745e0c6e76f42f81771252a758c638f36ba - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^7.4.0": version: 7.4.0 resolution: "@typescript-eslint/eslint-plugin@npm:7.4.0" @@ -1912,18 +853,6 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-core@npm:3.2.26": - version: 3.2.26 - resolution: "@vue/compiler-core@npm:3.2.26" - dependencies: - "@babel/parser": ^7.16.4 - "@vue/shared": 3.2.26 - estree-walker: ^2.0.2 - source-map: ^0.6.1 - checksum: 5ee694b573ff556a8d3c92f40c419da88a9ee1212aa0a52c17e101edbcc12fb2efb97eda9ecb46c2e5ce9e36f5d78b299a6e6321bd2739f57b25dbb4dba6d3e1 - languageName: node - linkType: hard - "@vue/compiler-core@npm:3.4.21": version: 3.4.21 resolution: "@vue/compiler-core@npm:3.4.21" @@ -1937,16 +866,6 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-dom@npm:3.2.26": - version: 3.2.26 - resolution: "@vue/compiler-dom@npm:3.2.26" - dependencies: - "@vue/compiler-core": 3.2.26 - "@vue/shared": 3.2.26 - checksum: 46f49ab75c7d85ea81d7100baab4ea7cb8c71b3ff51deb90ba3334586831ecc626cf57e91e1b890b536153139aba3713bb9076919c0f711c2ed8578a67ddeae6 - languageName: node - linkType: hard - "@vue/compiler-dom@npm:3.4.21": version: 3.4.21 resolution: "@vue/compiler-dom@npm:3.4.21" @@ -1957,7 +876,7 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-sfc@npm:3.4.21": +"@vue/compiler-sfc@npm:3.4.21, @vue/compiler-sfc@npm:^3.4.21": version: 3.4.21 resolution: "@vue/compiler-sfc@npm:3.4.21" dependencies: @@ -1974,34 +893,6 @@ __metadata: languageName: node linkType: hard -"@vue/compiler-sfc@npm:^3.0.0": - version: 3.2.26 - resolution: "@vue/compiler-sfc@npm:3.2.26" - dependencies: - "@babel/parser": ^7.16.4 - "@vue/compiler-core": 3.2.26 - "@vue/compiler-dom": 3.2.26 - "@vue/compiler-ssr": 3.2.26 - "@vue/reactivity-transform": 3.2.26 - "@vue/shared": 3.2.26 - estree-walker: ^2.0.2 - magic-string: ^0.25.7 - postcss: ^8.1.10 - source-map: ^0.6.1 - checksum: 902531974b43675c0066476df42bc2e9e550a52298f72d0b882feff5821a8d78ca1d2917538b195e3b8364c081cdcf9ef19ecab9d93199284eecf8e254172a3e - languageName: node - linkType: hard - -"@vue/compiler-ssr@npm:3.2.26": - version: 3.2.26 - resolution: "@vue/compiler-ssr@npm:3.2.26" - dependencies: - "@vue/compiler-dom": 3.2.26 - "@vue/shared": 3.2.26 - checksum: 15e057a7ea04b0e58d1f38dfe002dd39b368d1dc7edf4208b6e63d06c00a2778784f564050e2f6d77d8886f04506134f6ea45ae00dc74603561e5bbe4e9f7ec6 - languageName: node - linkType: hard - "@vue/compiler-ssr@npm:3.4.21": version: 3.4.21 resolution: "@vue/compiler-ssr@npm:3.4.21" @@ -2012,23 +903,10 @@ __metadata: languageName: node linkType: hard -"@vue/devtools-api@npm:^6.0.0-beta.21": - version: 6.0.13 - resolution: "@vue/devtools-api@npm:6.0.13" - checksum: 75c3f4ba10f0a5c555491c532327101fa55b180a9115071328bc9bce4726f534881fb2d7450f5c3f3464bf0c44a7d7106197fb62cd79b1a7a8f6fdf2d828019a - languageName: node - linkType: hard - -"@vue/reactivity-transform@npm:3.2.26": - version: 3.2.26 - resolution: "@vue/reactivity-transform@npm:3.2.26" - dependencies: - "@babel/parser": ^7.16.4 - "@vue/compiler-core": 3.2.26 - "@vue/shared": 3.2.26 - estree-walker: ^2.0.2 - magic-string: ^0.25.7 - checksum: 773aebb0efb34121688263f7cb0b7fa980b2da257ab49b6a49fd48db721b375f07401a86ca47524846c6422abe15ec81ae463f2eef914f1fdc7a4913b28e8ae6 +"@vue/devtools-api@npm:^6.5.0": + version: 6.6.1 + resolution: "@vue/devtools-api@npm:6.6.1" + checksum: cf12b5ebcc7729725087072289410107b55bb82e0b86b8442e4e85516977110a8a3f4e1dec763be8b567a59173703b4e9c0ac1b0489bb2bb81363af7ea258a27 languageName: node linkType: hard @@ -2074,13 +952,6 @@ __metadata: languageName: node linkType: hard -"@vue/shared@npm:3.2.26": - version: 3.2.26 - resolution: "@vue/shared@npm:3.2.26" - checksum: 2e21fe586cfcd07aa1d0cd546ec1a0f1cd65c5a9d16d03ef53f5672962a9b79b6ef864c55f503ed45e4391b2dd5d33d418b3d7e6466d43b132fbcd32517383d6 - languageName: node - linkType: hard - "@vue/shared@npm:3.4.21": version: 3.4.21 resolution: "@vue/shared@npm:3.4.21" @@ -2088,46 +959,6 @@ __metadata: languageName: node linkType: hard -"@vue/test-utils@npm:^2.4.5": - version: 2.4.5 - resolution: "@vue/test-utils@npm:2.4.5" - dependencies: - js-beautify: ^1.14.9 - vue-component-type-helpers: ^2.0.0 - checksum: 385745c2e644fcc5af1c6da1448c51b1222eba70fe21f290ee20b7ef718e3a8b699dbab6305ac7f6711c9d03e508fbdb009aa5b9b9be06556dee21e1a64af846 - languageName: node - linkType: hard - -"@vue/vue3-jest@npm:^29.2.6": - version: 29.2.6 - resolution: "@vue/vue3-jest@npm:29.2.6" - dependencies: - "@babel/plugin-transform-modules-commonjs": ^7.2.0 - chalk: ^2.1.0 - convert-source-map: ^1.6.0 - css-tree: ^2.0.1 - source-map: 0.5.6 - tsconfig: ^7.0.0 - peerDependencies: - "@babel/core": 7.x - babel-jest: 29.x - jest: 29.x - typescript: ">= 4.3" - vue: ^3.0.0-0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 2368ef29c1308e7d012db6d897e0f3b7fc62dab889e89c6368b7e1303362075a11df03c220d8f3950aba1c3c83f468488783fae329024e7efaf52ad115d66ace - languageName: node - linkType: hard - -"abab@npm:^2.0.6": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e - languageName: node - linkType: hard - "abbrev@npm:1": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -2135,23 +966,6 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 - languageName: node - linkType: hard - -"acorn-globals@npm:^7.0.0": - version: 7.0.1 - resolution: "acorn-globals@npm:7.0.1" - dependencies: - acorn: ^8.1.0 - acorn-walk: ^8.0.2 - checksum: 2a2998a547af6d0db5f0cdb90acaa7c3cbca6709010e02121fb8b8617c0fbd8bab0b869579903fde358ac78454356a14fadcc1a672ecb97b04b1c2ccba955ce8 - languageName: node - linkType: hard - "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -2161,14 +975,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.0.2": - version: 8.3.2 - resolution: "acorn-walk@npm:8.3.2" - checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 - languageName: node - linkType: hard - -"acorn@npm:^8.1.0, acorn@npm:^8.8.1, acorn@npm:^8.9.0": +"acorn@npm:^8.9.0": version: 8.11.3 resolution: "acorn@npm:8.11.3" bin: @@ -2186,15 +993,6 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": - version: 7.1.0 - resolution: "agent-base@npm:7.1.0" - dependencies: - debug: ^4.3.4 - checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f - languageName: node - linkType: hard - "agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" @@ -2235,15 +1033,6 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -2251,23 +1040,7 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^6.0.1": - version: 6.0.1 - resolution: "ansi-regex@npm:6.0.1" - checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: ^1.9.0 - checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": +"ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -2276,30 +1049,6 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^5.0.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 - languageName: node - linkType: hard - -"ansi-styles@npm:^6.1.0": - version: 6.2.1 - resolution: "ansi-styles@npm:6.2.1" - checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 - languageName: node - linkType: hard - -"anymatch@npm:^3.0.3": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 - languageName: node - linkType: hard - "anymatch@npm:~3.1.2": version: 3.1.2 resolution: "anymatch@npm:3.1.2" @@ -2327,15 +1076,6 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: ~1.0.2 - checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 - languageName: node - linkType: hard - "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -2350,107 +1090,6 @@ __metadata: languageName: node linkType: hard -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - -"atob@npm:^2.1.2": - version: 2.1.2 - resolution: "atob@npm:2.1.2" - bin: - atob: bin/atob.js - checksum: dfeeeb70090c5ebea7be4b9f787f866686c645d9f39a0d184c817252d0cf08455ed25267d79c03254d3be1f03ac399992a792edcd5ffb9c91e097ab5ef42833a - languageName: node - linkType: hard - -"babel-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "babel-jest@npm:29.7.0" - dependencies: - "@jest/transform": ^29.7.0 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.6.3 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 - languageName: node - linkType: hard - -"babel-plugin-dynamic-import-node@npm:^2.3.3": - version: 2.3.3 - resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" - dependencies: - object.assign: ^4.1.0 - checksum: c9d24415bcc608d0db7d4c8540d8002ac2f94e2573d2eadced137a29d9eab7e25d2cbb4bc6b9db65cf6ee7430f7dd011d19c911a9a778f0533b4a05ce8292c9b - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@istanbuljs/load-nyc-config": ^1.0.0 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-instrument: ^5.0.4 - test-exclude: ^6.0.0 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-plugin-jest-hoist@npm:29.6.3" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.1.14 - "@types/babel__traverse": ^7.0.6 - checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 - languageName: node - linkType: hard - -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" - dependencies: - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.8.3 - "@babel/plugin-syntax-import-meta": ^7.8.3 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.8.3 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-top-level-await": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 - languageName: node - linkType: hard - -"babel-preset-jest@npm:^29.6.3": - version: 29.6.3 - resolution: "babel-preset-jest@npm:29.6.3" - dependencies: - babel-plugin-jest-hoist: ^29.6.3 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -2500,45 +1139,6 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.22.2": - version: 4.23.0 - resolution: "browserslist@npm:4.23.0" - dependencies: - caniuse-lite: ^1.0.30001587 - electron-to-chromium: ^1.4.668 - node-releases: ^2.0.14 - update-browserslist-db: ^1.0.13 - bin: - browserslist: cli.js - checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def - languageName: node - linkType: hard - -"bs-logger@npm:0.x": - version: 0.2.6 - resolution: "bs-logger@npm:0.2.6" - dependencies: - fast-json-stable-stringify: 2.x - checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: ^0.4.0 - checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - "cacache@npm:^15.3.0": version: 15.3.0 resolution: "cacache@npm:15.3.0" @@ -2565,36 +1165,6 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^18.0.0": - version: 18.0.2 - resolution: "cacache@npm:18.0.2" - dependencies: - "@npmcli/fs": ^3.1.0 - fs-minipass: ^3.0.0 - glob: ^10.2.2 - lru-cache: ^10.0.1 - minipass: ^7.0.3 - minipass-collect: ^2.0.1 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - p-map: ^4.0.0 - ssri: ^10.0.0 - tar: ^6.1.11 - unique-filename: ^3.0.0 - checksum: 0250df80e1ad0c828c956744850c5f742c24244e9deb5b7dc81bca90f8c10e011e132ecc58b64497cc1cad9a98968676147fb6575f4f94722f7619757b17a11b - languageName: node - linkType: hard - -"call-bind@npm:^1.0.0": - version: 1.0.2 - resolution: "call-bind@npm:1.0.2" - dependencies: - function-bind: ^1.1.1 - get-intrinsic: ^1.0.2 - checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 - languageName: node - linkType: hard - "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -2602,38 +1172,6 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelcase@npm:^6.2.0": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001600 - resolution: "caniuse-lite@npm:1.0.30001600" - checksum: 1aae03be0e9f96163e88b9305531ef8db0e01f224aff545c61a32ce0b0ca323e22531bf680bacac3e34f98e23f71ac31a21b328fa0fcbbecea65a2c2638c70c4 - languageName: node - linkType: hard - -"chalk@npm:^2.0.0, chalk@npm:^2.1.0, chalk@npm:^2.4.2": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: ^3.2.1 - escape-string-regexp: ^1.0.5 - supports-color: ^5.3.0 - checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 - languageName: node - linkType: hard - "chalk@npm:^4.0.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -2644,13 +1182,6 @@ __metadata: languageName: node linkType: hard -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 - languageName: node - linkType: hard - "chokidar@npm:>=3.0.0 <4.0.0": version: 3.5.2 resolution: "chokidar@npm:3.5.2" @@ -2677,20 +1208,6 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^1.0.0": - version: 1.2.3 - resolution: "cjs-module-lexer@npm:1.2.3" - checksum: 5ea3cb867a9bb609b6d476cd86590d105f3cfd6514db38ff71f63992ab40939c2feb68967faa15a6d2b1f90daa6416b79ea2de486e9e2485a6f8b66a21b4fb0a - languageName: node - linkType: hard - "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -2698,40 +1215,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.1 - wrap-ansi: ^7.0.0 - checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 - languageName: node - linkType: hard - -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.2 - resolution: "collect-v8-coverage@npm:1.0.2" - checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -2741,13 +1224,6 @@ __metadata: languageName: node linkType: hard -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - "color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" @@ -2764,22 +1240,6 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - -"commander@npm:^10.0.0": - version: 10.0.1 - resolution: "commander@npm:10.0.1" - checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 - languageName: node - linkType: hard - "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -2787,16 +1247,6 @@ __metadata: languageName: node linkType: hard -"config-chain@npm:^1.1.13": - version: 1.1.13 - resolution: "config-chain@npm:1.1.13" - dependencies: - ini: ^1.3.4 - proto-list: ~1.2.1 - checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab - languageName: node - linkType: hard - "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -2804,40 +1254,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.6.0": - version: 1.8.0 - resolution: "convert-source-map@npm:1.8.0" - dependencies: - safe-buffer: ~5.1.1 - checksum: 985d974a2d33e1a2543ada51c93e1ba2f73eaed608dc39f229afc78f71dcc4c8b7d7c684aa647e3c6a3a204027444d69e53e169ce94e8d1fa8d7dee80c9c8fed - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 - languageName: node - linkType: hard - -"create-jest@npm:^29.7.0": - version: 29.7.0 - resolution: "create-jest@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - prompts: ^2.0.1 - bin: - create-jest: bin/create-jest.js - checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.2": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -2848,28 +1265,6 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^2.0.1": - version: 2.3.1 - resolution: "css-tree@npm:2.3.1" - dependencies: - mdn-data: 2.0.30 - source-map-js: ^1.0.1 - checksum: 493cc24b5c22b05ee5314b8a0d72d8a5869491c1458017ae5ed75aeb6c3596637dbe1b11dac2548974624adec9f7a1f3a6cf40593dc1f9185eb0e8279543fbc0 - languageName: node - linkType: hard - -"css@npm:^2.1.0": - version: 2.2.4 - resolution: "css@npm:2.2.4" - dependencies: - inherits: ^2.0.3 - source-map: ^0.6.1 - source-map-resolve: ^0.5.2 - urix: ^0.1.0 - checksum: a35d483c5ccc04bcde3b1e7393d58ad3eee1dd6956df0f152de38e46a17c0ee193c30eec6b1e59831ad0e74599385732000e95987fcc9cb2b16c6d951bae49e1 - languageName: node - linkType: hard - "cssesc@npm:^3.0.0": version: 3.0.0 resolution: "cssesc@npm:3.0.0" @@ -2879,29 +1274,6 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.5.0": - version: 0.5.0 - resolution: "cssom@npm:0.5.0" - checksum: 823471aa30091c59e0a305927c30e7768939b6af70405808f8d2ce1ca778cddcb24722717392438329d1691f9a87cb0183b64b8d779b56a961546d54854fde01 - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 - languageName: node - linkType: hard - "csstype@npm:^3.1.3": version: 3.1.3 resolution: "csstype@npm:3.1.3" @@ -2909,30 +1281,7 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^3.0.2": - version: 3.0.2 - resolution: "data-urls@npm:3.0.2" - dependencies: - abab: ^2.0.6 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^11.0.0 - checksum: 033fc3dd0fba6d24bc9a024ddcf9923691dd24f90a3d26f6545d6a2f71ec6956f93462f2cdf2183cc46f10dc01ed3bcb36731a8208456eb1a08147e571fe2a76 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.1": - version: 4.3.3 - resolution: "debug@npm:4.3.3" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 14472d56fe4a94dbcfaa6dbed2dd3849f1d72ba78104a1a328047bb564643ca49df0224c3a17fa63533fd11dd3d4c8636cd861191232a2c6735af00cc2d4de16 - languageName: node - linkType: hard - -"debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -2944,32 +1293,6 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.4.2": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae - languageName: node - linkType: hard - -"decode-uri-component@npm:^0.2.0": - version: 0.2.0 - resolution: "decode-uri-component@npm:0.2.0" - checksum: f3749344ab9305ffcfe4bfe300e2dbb61fc6359e2b736812100a3b1b6db0a5668cba31a05e4b45d4d63dbf1a18dfa354cd3ca5bb3ededddabb8cd293f4404f94 - languageName: node - linkType: hard - -"dedent@npm:^1.0.0": - version: 1.5.1 - resolution: "dedent@npm:1.5.1" - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - checksum: c3c300a14edf1bdf5a873f9e4b22e839d62490bc5c8d6169c1f15858a1a76733d06a9a56930e963d677a2ceeca4b6b0894cc5ea2f501aa382ca5b92af3413c2a - languageName: node - linkType: hard - "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -2977,29 +1300,6 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 - languageName: node - linkType: hard - -"define-properties@npm:^1.1.3": - version: 1.1.3 - resolution: "define-properties@npm:1.1.3" - dependencies: - object-keys: ^1.0.12 - checksum: da80dba55d0cd76a5a7ab71ef6ea0ebcb7b941f803793e4e0257b384cb772038faa0c31659d244e82c4342edef841c1a1212580006a05a5068ee48223d787317 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -3014,20 +1314,6 @@ __metadata: languageName: node linkType: hard -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 - languageName: node - linkType: hard - -"diff-sequences@npm:^29.6.3": - version: 29.6.3 - resolution: "diff-sequences@npm:29.6.3" - checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -3046,61 +1332,10 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^4.0.0": - version: 4.0.0 - resolution: "domexception@npm:4.0.0" - dependencies: - webidl-conversions: ^7.0.0 - checksum: ddbc1268edf33a8ba02ccc596735ede80375ee0cf124b30d2f05df5b464ba78ef4f49889b6391df4a04954e63d42d5631c7fcf8b1c4f12bc531252977a5f13d5 - languageName: node - linkType: hard - -"eastasianwidth@npm:^0.2.0": - version: 0.2.0 - resolution: "eastasianwidth@npm:0.2.0" - checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed - languageName: node - linkType: hard - -"editorconfig@npm:^1.0.4": - version: 1.0.4 - resolution: "editorconfig@npm:1.0.4" - dependencies: - "@one-ini/wasm": 0.1.1 - commander: ^10.0.0 - minimatch: 9.0.1 - semver: ^7.5.3 - bin: - editorconfig: bin/editorconfig - checksum: 09904f19381b3ddf132cea0762971aba887236f387be3540909e96b8eb9337e1793834e10f06890cd8e8e7bb1ba80cb13e7d50a863f227806c9ca74def4165fb - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.668": - version: 1.4.718 - resolution: "electron-to-chromium@npm:1.4.718" - checksum: 6578571324292635e5596172a106938ecdc80c4db42478673a9ad9bac2cc528a76aee197c676709902a46542a39c6b85c47b0cad6b48a7116414bcc477c08080 - languageName: node - linkType: hard - -"emittery@npm:^0.13.1": - version: 0.13.1 - resolution: "emittery@npm:0.13.1" - checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 languageName: node linkType: hard @@ -3113,7 +1348,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.4.0, entities@npm:^4.5.0": +"entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 @@ -3134,15 +1369,6 @@ __metadata: languageName: node linkType: hard -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: ^0.2.1 - checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 - languageName: node - linkType: hard - "esbuild@npm:^0.20.1": version: 0.20.2 resolution: "esbuild@npm:0.20.2" @@ -3223,27 +1449,6 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.1.1": - version: 3.1.2 - resolution: "escalade@npm:3.1.2" - checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" @@ -3251,24 +1456,6 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^2.0.0": - version: 2.1.0 - resolution: "escodegen@npm:2.1.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 - languageName: node - linkType: hard - "eslint-plugin-vue@npm:^9.24.0": version: 9.24.0 resolution: "eslint-plugin-vue@npm:9.24.0" @@ -3363,16 +1550,6 @@ __metadata: languageName: node linkType: hard -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - "esquery@npm:^1.4.0, esquery@npm:^1.4.2": version: 1.5.0 resolution: "esquery@npm:1.5.0" @@ -3412,59 +1589,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.0.0": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: ^7.0.3 - get-stream: ^6.0.0 - human-signals: ^2.1.0 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.1 - onetime: ^5.1.2 - signal-exit: ^3.0.3 - strip-final-newline: ^2.0.0 - checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 - languageName: node - linkType: hard - -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 - languageName: node - linkType: hard - -"expect@npm:^29.0.0, expect@npm:^29.7.0": - version: 29.7.0 - resolution: "expect@npm:29.7.0" - dependencies: - "@jest/expect-utils": ^29.7.0 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 - languageName: node - linkType: hard - -"extract-from-css@npm:^0.4.4": - version: 0.4.4 - resolution: "extract-from-css@npm:0.4.4" - dependencies: - css: ^2.1.0 - checksum: f3628d14a736a363188881dc9b5c603f42d6a7bbbf1338ca5eb8362bff6a392edb07ab8a57e3cee1fd8191cd9795c671b6369523d69231c59395a94a62436d84 - languageName: node - linkType: hard - "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -3485,7 +1609,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -3508,15 +1632,6 @@ __metadata: languageName: node linkType: hard -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 - languageName: node - linkType: hard - "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -3535,16 +1650,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - "find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -3573,27 +1678,6 @@ __metadata: languageName: node linkType: hard -"foreground-child@npm:^3.1.0": - version: 3.1.1 - resolution: "foreground-child@npm:3.1.1" - dependencies: - cross-spawn: ^7.0.0 - signal-exit: ^4.0.1 - checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 - languageName: node - linkType: hard - -"form-data@npm:^4.0.0": - version: 4.0.0 - resolution: "form-data@npm:4.0.0" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c - languageName: node - linkType: hard - "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -3603,15 +1687,6 @@ __metadata: languageName: node linkType: hard -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: ^7.0.3 - checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 - languageName: node - linkType: hard - "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -3619,7 +1694,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -3629,17 +1704,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" - dependencies: - node-gyp: latest - checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": +"fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" dependencies: @@ -3648,29 +1713,6 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 - languageName: node - linkType: hard - "gauge@npm:^4.0.0": version: 4.0.3 resolution: "gauge@npm:4.0.3" @@ -3687,45 +1729,6 @@ __metadata: languageName: node linkType: hard -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.0.2": - version: 1.1.1 - resolution: "get-intrinsic@npm:1.1.1" - dependencies: - function-bind: ^1.1.1 - has: ^1.0.3 - has-symbols: ^1.0.1 - checksum: a9fe2ca8fa3f07f9b0d30fb202bcd01f3d9b9b6b732452e79c48e79f7d6d8d003af3f9e38514250e3553fdc83c61650851cb6870832ac89deaaceb08e3721a17 - languageName: node - linkType: hard - -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 - languageName: node - linkType: hard - -"get-stream@npm:^6.0.0": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -3744,36 +1747,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.3.10 - resolution: "glob@npm:10.3.10" - dependencies: - foreground-child: ^3.1.0 - jackspeak: ^2.3.5 - minimatch: ^9.0.1 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - path-scurry: ^1.10.1 - bin: - glob: dist/esm/bin.mjs - checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 - languageName: node - linkType: hard - -"glob@npm:^10.3.3": - version: 10.3.12 - resolution: "glob@npm:10.3.12" - dependencies: - foreground-child: ^3.1.0 - jackspeak: ^2.3.6 - minimatch: ^9.0.1 - minipass: ^7.0.4 - path-scurry: ^1.10.2 - bin: - glob: dist/esm/bin.mjs - checksum: 2b0949d6363021aaa561b108ac317bf5a97271b8a5d7a5fac1a176e40e8068ecdcccc992f8a7e958593d501103ac06d673de92adc1efcbdab45edefe35f8d7c6 - languageName: node - linkType: hard - "glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.0 resolution: "glob@npm:7.2.0" @@ -3788,13 +1761,6 @@ __metadata: languageName: node linkType: hard -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e - languageName: node - linkType: hard - "globals@npm:^13.19.0, globals@npm:^13.24.0": version: 13.24.0 resolution: "globals@npm:13.24.0" @@ -3832,13 +1798,6 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.9": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 - languageName: node - linkType: hard - "graphemer@npm:^1.4.0": version: 1.4.0 resolution: "graphemer@npm:1.4.0" @@ -3846,13 +1805,6 @@ __metadata: languageName: node linkType: hard -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" @@ -3860,13 +1812,6 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.1": - version: 1.0.2 - resolution: "has-symbols@npm:1.0.2" - checksum: 2309c426071731be792b5be43b3da6fb4ed7cbe8a9a6bcfca1862587709f01b33d575ce8f5c264c1eaad09fca2f9a8208c0a2be156232629daa2dd0c0740976b - languageName: node - linkType: hard - "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" @@ -3874,40 +1819,6 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 - languageName: node - linkType: hard - -"hasown@npm:^2.0.0": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: ^1.1.2 - checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db - languageName: node - linkType: hard - -"html-encoding-sniffer@npm:^3.0.0": - version: 3.0.0 - resolution: "html-encoding-sniffer@npm:3.0.0" - dependencies: - whatwg-encoding: ^2.0.0 - checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.1.0": version: 4.1.0 resolution: "http-cache-semantics@npm:4.1.0" @@ -3915,13 +1826,6 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.1.1": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 - languageName: node - linkType: hard - "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -3933,851 +1837,160 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: ^7.1.0 - debug: ^4.3.4 - checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 - languageName: node - linkType: hard - "https-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "https-proxy-agent@npm:5.0.0" dependencies: agent-base: 6 - debug: 4 - checksum: 165bfb090bd26d47693597661298006841ab733d0c7383a8cb2f17373387a94c903a3ac687090aa739de05e379ab6f868bae84ab4eac288ad85c328cd1ec9e53 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.1": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.4 - resolution: "https-proxy-agent@npm:7.0.4" - dependencies: - agent-base: ^7.0.2 - debug: 4 - checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 - languageName: node - linkType: hard - -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 - languageName: node - linkType: hard - -"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - -"ignore@npm:^5.2.0, ignore@npm:^5.2.4": - version: 5.3.1 - resolution: "ignore@npm:5.3.1" - checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 - languageName: node - linkType: hard - -"immutable@npm:^4.0.0": - version: 4.0.0 - resolution: "immutable@npm:4.0.0" - checksum: 4b5e9181e4d5fa06728a481835ec09c86367e5d03268666c95b522b7644ab891098022e4479a43c4c81a68f2ed82f10751ce5d33e208d7b873b6e7f9dfaf4d87 - languageName: node - linkType: hard - -"import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: ^1.0.0 - resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa - languageName: node - linkType: hard - -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:^2.0.3": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"ini@npm:^1.3.4": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 - languageName: node - linkType: hard - -"ip-address@npm:^9.0.5": - version: 9.0.5 - resolution: "ip-address@npm:9.0.5" - dependencies: - jsbn: 1.1.0 - sprintf-js: ^1.1.3 - checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc - languageName: node - linkType: hard - -"ip@npm:^1.1.5": - version: 1.1.5 - resolution: "ip@npm:1.1.5" - checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f - languageName: node - linkType: hard - -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: ^2.0.0 - checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c - languageName: node - linkType: hard - -"is-core-module@npm:^2.13.0": - version: 2.13.1 - resolution: "is-core-module@npm:2.13.1" - dependencies: - hasown: ^2.0.0 - checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^5.0.4": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": ^7.12.3 - "@babel/parser": ^7.14.7 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.2.0 - semver: ^6.3.0 - checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^6.0.0": - version: 6.0.2 - resolution: "istanbul-lib-instrument@npm:6.0.2" - dependencies: - "@babel/core": ^7.23.9 - "@babel/parser": ^7.23.9 - "@istanbuljs/schema": ^0.1.3 - istanbul-lib-coverage: ^3.2.0 - semver: ^7.5.4 - checksum: c10aa1e93a022f9767d7f41e6c07d244cc0a5c090fbb5522d70a5f21fcb98c52b7038850276c6fd1a7a17d1868c14a9d4eb8a24efe58a0ebb9a06f3da68131fe - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: ^3.0.0 - make-dir: ^4.0.0 - supports-color: ^7.1.0 - checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.1.7 - resolution: "istanbul-reports@npm:3.1.7" - dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: 2072db6e07bfbb4d0eb30e2700250636182398c1af811aea5032acb219d2080f7586923c09fa194029efd6b92361afb3dcbe1ebcc3ee6651d13340f7c6c4ed95 - languageName: node - linkType: hard - -"jackspeak@npm:^2.3.5, jackspeak@npm:^2.3.6": - version: 2.3.6 - resolution: "jackspeak@npm:2.3.6" - dependencies: - "@isaacs/cliui": ^8.0.2 - "@pkgjs/parseargs": ^0.11.0 - dependenciesMeta: - "@pkgjs/parseargs": - optional: true - checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 - languageName: node - linkType: hard - -"jest-changed-files@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-changed-files@npm:29.7.0" - dependencies: - execa: ^5.0.0 - jest-util: ^29.7.0 - p-limit: ^3.1.0 - checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 - languageName: node - linkType: hard - -"jest-circus@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-circus@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/expect": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^1.0.0 - is-generator-fn: ^2.0.0 - jest-each: ^29.7.0 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-runtime: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - p-limit: ^3.1.0 - pretty-format: ^29.7.0 - pure-rand: ^6.0.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 - languageName: node - linkType: hard - -"jest-cli@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-cli@npm:29.7.0" - dependencies: - "@jest/core": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - create-jest: ^29.7.0 - exit: ^0.1.2 - import-local: ^3.0.2 - jest-config: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - yargs: ^17.3.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 - languageName: node - linkType: hard - -"jest-config@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-config@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.7.0 - "@jest/types": ^29.6.3 - babel-jest: ^29.7.0 - chalk: ^4.0.0 - ci-info: ^3.2.0 - deepmerge: ^4.2.2 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-circus: ^29.7.0 - jest-environment-node: ^29.7.0 - jest-get-type: ^29.6.3 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-runner: ^29.7.0 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^29.7.0 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - "@types/node": "*" - ts-node: ">=9.0.0" - peerDependenciesMeta: - "@types/node": - optional: true - ts-node: - optional: true - checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff - languageName: node - linkType: hard - -"jest-diff@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-diff@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.6.3 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 - languageName: node - linkType: hard - -"jest-docblock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-docblock@npm:29.7.0" - dependencies: - detect-newline: ^3.0.0 - checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 - languageName: node - linkType: hard - -"jest-each@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-each@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - chalk: ^4.0.0 - jest-get-type: ^29.6.3 - jest-util: ^29.7.0 - pretty-format: ^29.7.0 - checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c - languageName: node - linkType: hard - -"jest-environment-jsdom@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-jsdom@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/jsdom": ^20.0.0 - "@types/node": "*" - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - jsdom: ^20.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 559aac134c196fccc1dfc794d8fc87377e9f78e894bb13012b0831d88dec0abd7ece99abec69da564b8073803be4f04a9eb4f4d1bb80e29eec0cb252c254deb8 - languageName: node - linkType: hard - -"jest-environment-node@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-environment-node@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-mock: ^29.7.0 - jest-util: ^29.7.0 - checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 - languageName: node - linkType: hard - -"jest-get-type@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-get-type@npm:29.6.3" - checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 - languageName: node - linkType: hard - -"jest-haste-map@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-haste-map@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/graceful-fs": ^4.1.3 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^29.6.3 - jest-util: ^29.7.0 - jest-worker: ^29.7.0 - micromatch: ^4.0.4 - walker: ^1.0.8 - dependenciesMeta: - fsevents: - optional: true - checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 + debug: 4 + checksum: 165bfb090bd26d47693597661298006841ab733d0c7383a8cb2f17373387a94c903a3ac687090aa739de05e379ab6f868bae84ab4eac288ad85c328cd1ec9e53 languageName: node linkType: hard -"jest-leak-detector@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-leak-detector@npm:29.7.0" +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" dependencies: - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 languageName: node linkType: hard -"jest-matcher-utils@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-matcher-utils@npm:29.7.0" +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" dependencies: - chalk: ^4.0.0 - jest-diff: ^29.7.0 - jest-get-type: ^29.6.3 - pretty-format: ^29.7.0 - checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf languageName: node linkType: hard -"jest-message-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-message-util@npm:29.7.0" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.6.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.7.0 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 languageName: node linkType: hard -"jest-mock@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-mock@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - jest-util: ^29.7.0 - checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 +"immutable@npm:^4.0.0": + version: 4.0.0 + resolution: "immutable@npm:4.0.0" + checksum: 4b5e9181e4d5fa06728a481835ec09c86367e5d03268666c95b522b7644ab891098022e4479a43c4c81a68f2ed82f10751ce5d33e208d7b873b6e7f9dfaf4d87 languageName: node linkType: hard -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa languageName: node linkType: hard -"jest-regex-util@npm:^29.6.3": - version: 29.6.3 - resolution: "jest-regex-util@npm:29.6.3" - checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve-dependencies@npm:29.7.0" - dependencies: - jest-regex-util: ^29.6.3 - jest-snapshot: ^29.7.0 - checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 languageName: node linkType: hard -"jest-resolve@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-resolve@npm:29.7.0" - dependencies: - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-pnp-resolver: ^1.2.2 - jest-util: ^29.7.0 - jest-validate: ^29.7.0 - resolve: ^1.20.0 - resolve.exports: ^2.0.0 - slash: ^3.0.0 - checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 +"infer-owner@npm:^1.0.4": + version: 1.0.4 + resolution: "infer-owner@npm:1.0.4" + checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 languageName: node linkType: hard -"jest-runner@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runner@npm:29.7.0" +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" dependencies: - "@jest/console": ^29.7.0 - "@jest/environment": ^29.7.0 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.13.1 - graceful-fs: ^4.2.9 - jest-docblock: ^29.7.0 - jest-environment-node: ^29.7.0 - jest-haste-map: ^29.7.0 - jest-leak-detector: ^29.7.0 - jest-message-util: ^29.7.0 - jest-resolve: ^29.7.0 - jest-runtime: ^29.7.0 - jest-util: ^29.7.0 - jest-watcher: ^29.7.0 - jest-worker: ^29.7.0 - p-limit: ^3.1.0 - source-map-support: 0.5.13 - checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb - languageName: node - linkType: hard - -"jest-runtime@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-runtime@npm:29.7.0" - dependencies: - "@jest/environment": ^29.7.0 - "@jest/fake-timers": ^29.7.0 - "@jest/globals": ^29.7.0 - "@jest/source-map": ^29.6.3 - "@jest/test-result": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^29.7.0 - jest-message-util: ^29.7.0 - jest-mock: ^29.7.0 - jest-regex-util: ^29.6.3 - jest-resolve: ^29.7.0 - jest-snapshot: ^29.7.0 - jest-util: ^29.7.0 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd languageName: node linkType: hard -"jest-snapshot@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-snapshot@npm:29.7.0" - dependencies: - "@babel/core": ^7.11.6 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-jsx": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.7.0 - "@jest/transform": ^29.7.0 - "@jest/types": ^29.6.3 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^29.7.0 - graceful-fs: ^4.2.9 - jest-diff: ^29.7.0 - jest-get-type: ^29.6.3 - jest-matcher-utils: ^29.7.0 - jest-message-util: ^29.7.0 - jest-util: ^29.7.0 - natural-compare: ^1.4.0 - pretty-format: ^29.7.0 - semver: ^7.5.3 - checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad +"inherits@npm:2, inherits@npm:^2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 languageName: node linkType: hard -"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-util@npm:29.7.0" - dependencies: - "@jest/types": ^29.6.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca +"ip@npm:^1.1.5": + version: 1.1.5 + resolution: "ip@npm:1.1.5" + checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a languageName: node linkType: hard -"jest-validate@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-validate@npm:29.7.0" +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" dependencies: - "@jest/types": ^29.6.3 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^29.6.3 - leven: ^3.1.0 - pretty-format: ^29.7.0 - checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c languageName: node linkType: hard -"jest-watcher@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-watcher@npm:29.7.0" - dependencies: - "@jest/test-result": ^29.7.0 - "@jest/types": ^29.6.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.13.1 - jest-util: ^29.7.0 - string-length: ^4.0.1 - checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 languageName: node linkType: hard -"jest-worker@npm:^29.7.0": - version: 29.7.0 - resolution: "jest-worker@npm:29.7.0" - dependencies: - "@types/node": "*" - jest-util: ^29.7.0 - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 languageName: node linkType: hard -"jest@npm:^29.7.0": - version: 29.7.0 - resolution: "jest@npm:29.7.0" +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" dependencies: - "@jest/core": ^29.7.0 - "@jest/types": ^29.6.3 - import-local: ^3.0.2 - jest-cli: ^29.7.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 languageName: node linkType: hard -"js-beautify@npm:^1.14.9": - version: 1.15.1 - resolution: "js-beautify@npm:1.15.1" - dependencies: - config-chain: ^1.1.13 - editorconfig: ^1.0.4 - glob: ^10.3.3 - js-cookie: ^3.0.5 - nopt: ^7.2.0 - bin: - css-beautify: js/bin/css-beautify.js - html-beautify: js/bin/html-beautify.js - js-beautify: js/bin/js-beautify.js - checksum: 0428ea358cdf169da15e11a8b63f13845ee39c707f3718a3ec515eb89d585544525aa8ba5306503431c61e33e1fbfebdf2af41c461e512619d8a2f8664d6c0c4 +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 languageName: node linkType: hard -"js-cookie@npm:^3.0.5": - version: 3.0.5 - resolution: "js-cookie@npm:3.0.5" - checksum: 2dbd2809c6180fbcf060c6957cb82dbb47edae0ead6bd71cbeedf448aa6b6923115003b995f7d3e3077bfe2cb76295ea6b584eb7196cca8ba0a09f389f64967a +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a languageName: node linkType: hard -"js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 languageName: node linkType: hard -"js-yaml@npm:^3.13.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 languageName: node linkType: hard @@ -4792,61 +2005,6 @@ __metadata: languageName: node linkType: hard -"jsbn@npm:1.1.0": - version: 1.1.0 - resolution: "jsbn@npm:1.1.0" - checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 - languageName: node - linkType: hard - -"jsdom@npm:^20.0.0": - version: 20.0.3 - resolution: "jsdom@npm:20.0.3" - dependencies: - abab: ^2.0.6 - acorn: ^8.8.1 - acorn-globals: ^7.0.0 - cssom: ^0.5.0 - cssstyle: ^2.3.0 - data-urls: ^3.0.2 - decimal.js: ^10.4.2 - domexception: ^4.0.0 - escodegen: ^2.0.0 - form-data: ^4.0.0 - html-encoding-sniffer: ^3.0.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.1 - is-potential-custom-element-name: ^1.0.1 - nwsapi: ^2.2.2 - parse5: ^7.1.1 - saxes: ^6.0.0 - symbol-tree: ^3.2.4 - tough-cookie: ^4.1.2 - w3c-xmlserializer: ^4.0.0 - webidl-conversions: ^7.0.0 - whatwg-encoding: ^2.0.0 - whatwg-mimetype: ^3.0.0 - whatwg-url: ^11.0.0 - ws: ^8.11.0 - xml-name-validator: ^4.0.0 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 6e2ae21db397133a061b270c26d2dbc0b9051733ea3b896a7ece78d79f475ff0974f766a413c1198a79c793159119169f2335ddb23150348fbfdcfa6f3105536 - languageName: node - linkType: hard - -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d - languageName: node - linkType: hard - "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -4854,13 +2012,6 @@ __metadata: languageName: node linkType: hard -"json-parse-even-better-errors@npm:^2.3.0": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f - languageName: node - linkType: hard - "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -4875,15 +2026,6 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 - languageName: node - linkType: hard - "keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -4893,20 +2035,6 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 - languageName: node - linkType: hard - -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 - languageName: node - linkType: hard - "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -4917,22 +2045,6 @@ __metadata: languageName: node linkType: hard -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -4942,13 +2054,6 @@ __metadata: languageName: node linkType: hard -"lodash.memoize@npm:4.x": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 - languageName: node - linkType: hard - "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -4963,22 +2068,6 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.2.0 - resolution: "lru-cache@npm:10.2.0" - checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: ^3.0.2 - checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb - languageName: node - linkType: hard - "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -4995,15 +2084,6 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.25.7": - version: 0.25.7 - resolution: "magic-string@npm:0.25.7" - dependencies: - sourcemap-codec: ^1.4.4 - checksum: 727a1fb70f9610304fe384f1df0251eb7d1d9dd779c07ef1225690361b71b216f26f5d934bfb11c919b5b0e7ba50f6240c823a6f2e44cfd33d4a07d7747ca829 - languageName: node - linkType: hard - "magic-string@npm:^0.30.7": version: 0.30.8 resolution: "magic-string@npm:0.30.8" @@ -5013,22 +2093,6 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: ^7.5.3 - checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a - languageName: node - linkType: hard - -"make-error@npm:1.x": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - "make-fetch-happen@npm:^10.0.3": version: 10.0.5 resolution: "make-fetch-happen@npm:10.0.5" @@ -5053,48 +2117,6 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^13.0.0": - version: 13.0.0 - resolution: "make-fetch-happen@npm:13.0.0" - dependencies: - "@npmcli/agent": ^2.0.0 - cacache: ^18.0.0 - http-cache-semantics: ^4.1.1 - is-lambda: ^1.0.1 - minipass: ^7.0.2 - minipass-fetch: ^3.0.0 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - ssri: ^10.0.0 - checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af - languageName: node - linkType: hard - -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: 1.0.5 - checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 - languageName: node - linkType: hard - -"mdn-data@npm:2.0.30": - version: 2.0.30 - resolution: "mdn-data@npm:2.0.30" - checksum: d6ac5ac7439a1607df44b22738ecf83f48e66a0874e4482d6424a61c52da5cde5750f1d1229b6f5fa1b80a492be89465390da685b11f97d62b8adcc6e88189aa - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 - languageName: node - linkType: hard - "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -5112,39 +2134,7 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a - languageName: node - linkType: hard - -"minimatch@npm:9.0.1": - version: 9.0.1 - resolution: "minimatch@npm:9.0.1" - dependencies: - brace-expansion: ^2.0.1 - checksum: 97f5f5284bb57dc65b9415dec7f17a0f6531a33572193991c60ff18450dcfad5c2dad24ffeaf60b5261dccd63aae58cc3306e2209d57e7f88c51295a532d8ec3 - languageName: node - linkType: hard - -"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": +"minimatch@npm:9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -5153,16 +2143,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4": - version: 3.0.4 - resolution: "minimatch@npm:3.0.4" - dependencies: - brace-expansion: ^1.1.7 - checksum: 66ac295f8a7b59788000ea3749938b0970344c841750abd96694f80269b926ebcafad3deeb3f1da2522978b119e6ae3a5869b63b13a7859a456b3408bd18a078 - languageName: node - linkType: hard - -"minimatch@npm:^3.0.5, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -5180,15 +2161,6 @@ __metadata: languageName: node linkType: hard -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: ^7.0.3 - checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 - languageName: node - linkType: hard - "minipass-fetch@npm:^2.0.2": version: 2.0.3 resolution: "minipass-fetch@npm:2.0.3" @@ -5204,21 +2176,6 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^3.0.0": - version: 3.0.4 - resolution: "minipass-fetch@npm:3.0.4" - dependencies: - encoding: ^0.1.13 - minipass: ^7.0.3 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a - languageName: node - linkType: hard - "minipass-flush@npm:^1.0.5": version: 1.0.5 resolution: "minipass-flush@npm:1.0.5" @@ -5255,20 +2212,6 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass@npm:5.0.0" - checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea - languageName: node - linkType: hard - -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4": - version: 7.0.4 - resolution: "minipass@npm:7.0.4" - checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 - languageName: node - linkType: hard - "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -5295,19 +2238,10 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.0.0": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"nanoid@npm:^3.1.30": - version: 3.1.30 - resolution: "nanoid@npm:3.1.30" - bin: - nanoid: bin/nanoid.cjs - checksum: 276d0d4b0c41c46aeefec5f09f093e4085a2352d06881c845db22b84f8ef72cc8defae6d76bfb1d8a2a128eb2dec42ab148d16582be4e7754c97905806ef57b6 +"ms@npm:^2.0.0": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d languageName: node linkType: hard @@ -5335,35 +2269,30 @@ __metadata: "@fortawesome/free-solid-svg-icons": ^5.15.4 "@fortawesome/vue-fontawesome": ^3.0.0-5 "@iplsplatoon/vue-components": 3.2.0 - "@pinia/testing": ^0.1.3 - "@tauri-apps/api": ^1.5.3 - "@tauri-apps/cli": ^1.5.11 - "@types/hosted-git-info": 2.7.0 - "@types/jest": ^29.5.12 + "@tauri-apps/api": 2.0.0-beta.7 + "@tauri-apps/cli": 2.0.0-beta.12 + "@tauri-apps/plugin-dialog": 2.0.0-beta.2 + "@tauri-apps/plugin-fs": 2.0.0-beta.2 + "@tauri-apps/plugin-os": 2.0.0-beta.2 + "@tauri-apps/plugin-shell": 2.0.0-beta.2 + "@tauri-apps/plugin-store": ^2.0.0-beta.2 "@types/lodash": ^4.14.178 "@types/node": ^20.11.30 "@typescript-eslint/eslint-plugin": ^7.4.0 "@typescript-eslint/parser": ^7.4.0 "@vitejs/plugin-vue": ^5.0.4 - "@vue/compiler-sfc": ^3.0.0 - "@vue/test-utils": ^2.4.5 - "@vue/vue3-jest": ^29.2.6 + "@vue/compiler-sfc": ^3.4.21 anser: ^2.1.0 eslint: ^8.57.0 eslint-plugin-vue: ^9.24.0 - jest: ^29.7.0 - jest-environment-jsdom: ^29.7.0 lodash: ^4.17.21 - node-gyp: ^10.1.0 - pinia: ^2.0.11 + pinia: ^2.1.7 sass: ^1.45.1 - ts-jest: ^29.1.2 tslib: ^2.6.2 typescript: ~5.4.3 vite: ^5.2.6 vite-tsconfig-paths: ^4.3.2 - vue: ^3.2.47 - vue-jest: ^5.0.0-0 + vue: ^3.4.21 languageName: unknown linkType: soft @@ -5374,26 +2303,6 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^10.1.0": - version: 10.1.0 - resolution: "node-gyp@npm:10.1.0" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - glob: ^10.3.10 - graceful-fs: ^4.2.6 - make-fetch-happen: ^13.0.0 - nopt: ^7.0.0 - proc-log: ^3.0.0 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^4.0.0 - bin: - node-gyp: bin/node-gyp.js - checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 - languageName: node - linkType: hard - "node-gyp@npm:latest": version: 9.0.0 resolution: "node-gyp@npm:9.0.0" @@ -5414,20 +2323,6 @@ __metadata: languageName: node linkType: hard -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e - languageName: node - linkType: hard - -"node-releases@npm:^2.0.14": - version: 2.0.14 - resolution: "node-releases@npm:2.0.14" - checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 - languageName: node - linkType: hard - "nopt@npm:^5.0.0": version: 5.0.0 resolution: "nopt@npm:5.0.0" @@ -5439,17 +2334,6 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^7.0.0, nopt@npm:^7.2.0": - version: 7.2.0 - resolution: "nopt@npm:7.2.0" - dependencies: - abbrev: ^2.0.0 - bin: - nopt: bin/nopt.js - checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 - languageName: node - linkType: hard - "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -5457,15 +2341,6 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: ^3.0.0 - checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 - languageName: node - linkType: hard - "npmlog@npm:^6.0.0": version: 6.0.1 resolution: "npmlog@npm:6.0.1" @@ -5487,32 +2362,6 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.2": - version: 2.2.7 - resolution: "nwsapi@npm:2.2.7" - checksum: cab25f7983acec7e23490fec3ef7be608041b460504229770e3bfcf9977c41d6fe58f518994d3bd9aa3a101f501089a3d4a63536f4ff8ae4b8c4ca23bdbfda4e - languageName: node - linkType: hard - -"object-keys@npm:^1.0.12, object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a - languageName: node - linkType: hard - -"object.assign@npm:^4.1.0": - version: 4.1.2 - resolution: "object.assign@npm:4.1.2" - dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - has-symbols: ^1.0.1 - object-keys: ^1.1.1 - checksum: d621d832ed7b16ac74027adb87196804a500d80d9aca536fccb7ba48d33a7e9306a75f94c1d29cbfa324bc091bfc530bc24789568efdaee6a47fcfa298993814 - languageName: node - linkType: hard - "once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -5522,15 +2371,6 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: ^2.1.0 - checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 - languageName: node - linkType: hard - "optionator@npm:^0.9.3": version: 0.9.3 resolution: "optionator@npm:0.9.3" @@ -5545,16 +2385,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": +"p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -5563,15 +2394,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - "p-locate@npm:^5.0.0": version: 5.0.0 resolution: "p-locate@npm:5.0.0" @@ -5590,13 +2412,6 @@ __metadata: languageName: node linkType: hard -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -5606,27 +2421,6 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.2.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": ^7.0.0 - error-ex: ^1.3.1 - json-parse-even-better-errors: ^2.3.0 - lines-and-columns: ^1.1.6 - checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 - languageName: node - linkType: hard - -"parse5@npm:^7.0.0, parse5@npm:^7.1.1": - version: 7.1.2 - resolution: "parse5@npm:7.1.2" - dependencies: - entities: ^4.4.0 - checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 - languageName: node - linkType: hard - "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -5641,40 +2435,13 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": +"path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 languageName: node linkType: hard -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a - languageName: node - linkType: hard - -"path-scurry@npm:^1.10.1": - version: 1.10.1 - resolution: "path-scurry@npm:1.10.1" - dependencies: - lru-cache: ^9.1.1 || ^10.0.0 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 - languageName: node - linkType: hard - -"path-scurry@npm:^1.10.2": - version: 1.10.2 - resolution: "path-scurry@npm:1.10.2" - dependencies: - lru-cache: ^10.2.0 - minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 - checksum: 6739b4290f7d1a949c61c758b481c07ac7d1a841964c68cf5e1fa153d7e18cbde4872b37aadf9c5173c800d627f219c47945859159de36c977dd82419997b9b8 - languageName: node - linkType: hard - "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -5689,52 +2456,29 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1": - version: 2.3.0 - resolution: "picomatch@npm:2.3.0" - checksum: 16818720ea7c5872b6af110760dee856c8e4cd79aed1c7a006d076b1cc09eff3ae41ca5019966694c33fbd2e1cc6ea617ab10e4adac6df06556168f13be3fca2 - languageName: node - linkType: hard - -"picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf languageName: node linkType: hard -"pinia@npm:^2.0.11": - version: 2.0.11 - resolution: "pinia@npm:2.0.11" +"pinia@npm:^2.1.7": + version: 2.1.7 + resolution: "pinia@npm:2.1.7" dependencies: - "@vue/devtools-api": ^6.0.0-beta.21 - vue-demi: "*" + "@vue/devtools-api": ^6.5.0 + vue-demi: ">=0.14.5" peerDependencies: "@vue/composition-api": ^1.4.0 typescript: ">=4.4.4" - vue: ^2.6.14 || ^3.2.0 + vue: ^2.6.14 || ^3.3.0 peerDependenciesMeta: "@vue/composition-api": optional: true typescript: optional: true - checksum: 8cce95b07baae4558d60d51b59e34635c95bb333f7898462aee4d0c7b92b2b40f8c666f24dc4c2572739b5813f6dd148b1e48cf02fb0f6a047dae4b803fd731f - languageName: node - linkType: hard - -"pirates@npm:^4.0.4": - version: 4.0.6 - resolution: "pirates@npm:4.0.6" - checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 - languageName: node - linkType: hard - -"pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + checksum: 1b7882aab2828ad209d3e76e06918c8811d04699c9308d372094cde6df485d7e7785f25a3bb5c6a3724aeaee3fb0082fae03c41a6657acd3486c7965a0a09d34 languageName: node linkType: hard @@ -5748,17 +2492,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.1.10": - version: 8.4.5 - resolution: "postcss@npm:8.4.5" - dependencies: - nanoid: ^3.1.30 - picocolors: ^1.0.0 - source-map-js: ^1.0.1 - checksum: b78abdd89c10f7b48f4bdcd376104a19d6e9c7495ab521729bdb3df315af6c211360e9f06887ad3bc0ab0f61a04b91d68ea11462997c79cced58b9ccd66fac07 - languageName: node - linkType: hard - "postcss@npm:^8.4.35, postcss@npm:^8.4.36": version: 8.4.38 resolution: "postcss@npm:8.4.38" @@ -5777,24 +2510,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": - version: 29.7.0 - resolution: "pretty-format@npm:29.7.0" - dependencies: - "@jest/schemas": ^29.6.3 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 - languageName: node - linkType: hard - -"proc-log@npm:^3.0.0": - version: 3.0.0 - resolution: "proc-log@npm:3.0.0" - checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 - languageName: node - linkType: hard - "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -5812,51 +2527,13 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.5 - checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d - languageName: node - linkType: hard - -"proto-list@npm:~1.2.1": - version: 1.2.4 - resolution: "proto-list@npm:1.2.4" - checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 - languageName: node - linkType: hard - -"psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d - languageName: node - linkType: hard - -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": +"punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 languageName: node linkType: hard -"pure-rand@npm:^6.0.0": - version: 6.1.0 - resolution: "pure-rand@npm:6.1.0" - checksum: 8d53bc02bed99eca0b65b505090152ee7e9bd67dd74f8ff32ba1c883b87234067c5bf68d2614759fb217d82594d7a92919e6df80f97885e7b12b42af4bd3316a - languageName: node - linkType: hard - -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -5864,13 +2541,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e - languageName: node - linkType: hard - "readable-stream@npm:^3.6.0": version: 3.6.0 resolution: "readable-stream@npm:3.6.0" @@ -5891,29 +2561,6 @@ __metadata: languageName: node linkType: hard -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 - languageName: node - linkType: hard - -"requires-port@npm:^1.0.0": - version: 1.0.0 - resolution: "requires-port@npm:1.0.0" - checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -5921,53 +2568,6 @@ __metadata: languageName: node linkType: hard -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve-url@npm:^0.2.1": - version: 0.2.1 - resolution: "resolve-url@npm:0.2.1" - checksum: 7b7035b9ed6e7bc7d289e90aef1eab5a43834539695dac6416ca6e91f1a94132ae4796bbd173cdacfdc2ade90b5f38a3fb6186bebc1b221cd157777a23b9ad14 - languageName: node - linkType: hard - -"resolve.exports@npm:^2.0.0": - version: 2.0.2 - resolution: "resolve.exports@npm:2.0.2" - checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 - languageName: node - linkType: hard - -"resolve@npm:^1.20.0": - version: 1.22.8 - resolution: "resolve@npm:1.22.8" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.20.0#~builtin": - version: 1.22.8 - resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 - languageName: node - linkType: hard - "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -6059,13 +2659,6 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c - languageName: node - linkType: hard - "safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -6093,36 +2686,7 @@ __metadata: languageName: node linkType: hard -"saxes@npm:^6.0.0": - version: 6.0.0 - resolution: "saxes@npm:6.0.0" - dependencies: - xmlchars: ^2.2.0 - checksum: d3fa3e2aaf6c65ed52ee993aff1891fc47d5e47d515164b5449cbf5da2cbdc396137e55590472e64c5c436c14ae64a8a03c29b9e7389fc6f14035cf4e982ef3b - languageName: node - linkType: hard - -"semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 - languageName: node - linkType: hard - -"semver@npm:^7.3.5": - version: 7.3.5 - resolution: "semver@npm:7.3.5" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60 - languageName: node - linkType: hard - -"semver@npm:^7.3.6, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": +"semver@npm:^7.3.5, semver@npm:^7.3.6, semver@npm:^7.5.4, semver@npm:^7.6.0": version: 7.6.0 resolution: "semver@npm:7.6.0" dependencies: @@ -6156,27 +2720,13 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 languageName: node linkType: hard -"signal-exit@npm:^4.0.1": - version: 4.1.0 - resolution: "signal-exit@npm:4.1.0" - checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 - languageName: node - linkType: hard - -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -6187,144 +2737,35 @@ __metadata: "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^6.1.1": - version: 6.1.1 - resolution: "socks-proxy-agent@npm:6.1.1" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.1 - socks: ^2.6.1 - checksum: 9a8a4f791bba0060315cf7291ca6f9db37d6fc280fd0860d73d8887d3efe4c22e823aa25a8d5375f6079279f8dc91b50c075345179bf832bfe3c7c26d3582e3c - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.1": - version: 8.0.2 - resolution: "socks-proxy-agent@npm:8.0.2" - dependencies: - agent-base: ^7.0.2 - debug: ^4.3.4 - socks: ^2.7.1 - checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d - languageName: node - linkType: hard - -"socks@npm:^2.6.1": - version: 2.6.2 - resolution: "socks@npm:2.6.2" - dependencies: - ip: ^1.1.5 - smart-buffer: ^4.2.0 - checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e - languageName: node - linkType: hard - -"socks@npm:^2.7.1": - version: 2.8.1 - resolution: "socks@npm:2.8.1" - dependencies: - ip-address: ^9.0.5 - smart-buffer: ^4.2.0 - checksum: 29586d42e9c36c5016632b2bcb6595e3adfbcb694b3a652c51bc8741b079c5ec37bdd5675a1a89a1620078c8137208294991fabb50786f92d47759a725b2b62e - languageName: node - linkType: hard - -"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.1": - version: 1.0.1 - resolution: "source-map-js@npm:1.0.1" - checksum: 22606113d62bbd468712b0cb0c46e9a8629de7eb081049c62a04d977a211abafd7d61455617f8b78daba0b6c0c7e7c88f8c6b5aaeacffac0a6676ecf5caac5ce - languageName: node - linkType: hard - -"source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0": - version: 1.2.0 - resolution: "source-map-js@npm:1.2.0" - checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 - languageName: node - linkType: hard - -"source-map-resolve@npm:^0.5.2": - version: 0.5.3 - resolution: "source-map-resolve@npm:0.5.3" - dependencies: - atob: ^2.1.2 - decode-uri-component: ^0.2.0 - resolve-url: ^0.2.1 - source-map-url: ^0.4.0 - urix: ^0.1.0 - checksum: c73fa44ac00783f025f6ad9e038ab1a2e007cd6a6b86f47fe717c3d0765b4a08d264f6966f3bd7cd9dbcd69e4832783d5472e43247775b2a550d6f2155d24bae - languageName: node - linkType: hard - -"source-map-support@npm:0.5.13": - version: 0.5.13 - resolution: "source-map-support@npm:0.5.13" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 - languageName: node - linkType: hard - -"source-map-url@npm:^0.4.0": - version: 0.4.1 - resolution: "source-map-url@npm:0.4.1" - checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c - languageName: node - linkType: hard - -"source-map@npm:0.5.6": - version: 0.5.6 - resolution: "source-map@npm:0.5.6" - checksum: 390b3f5165c9631a74fb6fb55ba61e62a7f9b7d4026ae0e2bfc2899c241d71c1bccb8731c496dc7f7cb79a5f523406eb03d8c5bebe8448ee3fc38168e2d209c8 - languageName: node - linkType: hard - -"source-map@npm:^0.5.0": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 - languageName: node - linkType: hard - -"sourcemap-codec@npm:^1.4.4": - version: 1.4.8 - resolution: "sourcemap-codec@npm:1.4.8" - checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b languageName: node linkType: hard -"sprintf-js@npm:^1.1.3": - version: 1.1.3 - resolution: "sprintf-js@npm:1.1.3" - checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 +"socks-proxy-agent@npm:^6.1.1": + version: 6.1.1 + resolution: "socks-proxy-agent@npm:6.1.1" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.1 + socks: ^2.6.1 + checksum: 9a8a4f791bba0060315cf7291ca6f9db37d6fc280fd0860d73d8887d3efe4c22e823aa25a8d5375f6079279f8dc91b50c075345179bf832bfe3c7c26d3582e3c languageName: node linkType: hard -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 +"socks@npm:^2.6.1": + version: 2.6.2 + resolution: "socks@npm:2.6.2" + dependencies: + ip: ^1.1.5 + smart-buffer: ^4.2.0 + checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e languageName: node linkType: hard -"ssri@npm:^10.0.0": - version: 10.0.5 - resolution: "ssri@npm:10.0.5" - dependencies: - minipass: ^7.0.3 - checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 +"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0": + version: 1.2.0 + resolution: "source-map-js@npm:1.2.0" + checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 languageName: node linkType: hard @@ -6337,26 +2778,7 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: ^2.0.0 - checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 - languageName: node - linkType: hard - -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: ^1.0.2 - strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 - languageName: node - linkType: hard - -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -6367,17 +2789,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^5.0.1, string-width@npm:^5.1.2": - version: 5.1.2 - resolution: "string-width@npm:5.1.2" - dependencies: - eastasianwidth: ^0.2.0 - emoji-regex: ^9.2.2 - strip-ansi: ^7.0.1 - checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 - languageName: node - linkType: hard - "string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -6387,7 +2798,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -6396,43 +2807,6 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^7.0.1": - version: 7.1.0 - resolution: "strip-ansi@npm:7.1.0" - dependencies: - ansi-regex: ^6.0.1 - checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d - languageName: node - linkType: hard - -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b - languageName: node - linkType: hard - -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 - languageName: node - linkType: hard - -"strip-json-comments@npm:^2.0.0": - version: 2.0.1 - resolution: "strip-json-comments@npm:2.0.1" - checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 - languageName: node - linkType: hard - "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -6440,15 +2814,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - "supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -6458,29 +2823,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae - languageName: node - linkType: hard - -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d - languageName: node - linkType: hard - "tar@npm:^6.0.2, tar@npm:^6.1.2": version: 6.1.11 resolution: "tar@npm:6.1.11" @@ -6495,31 +2837,6 @@ __metadata: languageName: node linkType: hard -"tar@npm:^6.1.11": - version: 6.2.1 - resolution: "tar@npm:6.2.1" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^5.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c - languageName: node - linkType: hard - -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": ^0.1.2 - glob: ^7.1.4 - minimatch: ^3.0.4 - checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 - languageName: node - linkType: hard - "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -6527,13 +2844,6 @@ __metadata: languageName: node linkType: hard -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 - languageName: node - linkType: hard - "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -6550,27 +2860,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.1.2": - version: 4.1.3 - resolution: "tough-cookie@npm:4.1.3" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: c9226afff36492a52118432611af083d1d8493a53ff41ec4ea48e5b583aec744b989e4280bcf476c910ec1525a89a4a0f1cae81c08b18fb2ec3a9b3a72b91dcc - languageName: node - linkType: hard - -"tr46@npm:^3.0.0": - version: 3.0.0 - resolution: "tr46@npm:3.0.0" - dependencies: - punycode: ^2.1.1 - checksum: 44c3cc6767fb800490e6e9fd64fd49041aa4e49e1f6a012b34a75de739cc9ed3a6405296072c1df8b6389ae139c5e7c6496f659cfe13a04a4bff3a1422981270 - languageName: node - linkType: hard - "ts-api-utils@npm:^1.0.1": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" @@ -6580,39 +2869,6 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:^29.1.2": - version: 29.1.2 - resolution: "ts-jest@npm:29.1.2" - dependencies: - bs-logger: 0.x - fast-json-stable-stringify: 2.x - jest-util: ^29.0.0 - json5: ^2.2.3 - lodash.memoize: 4.x - make-error: 1.x - semver: ^7.5.3 - yargs-parser: ^21.0.1 - peerDependencies: - "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/types": ^29.0.0 - babel-jest: ^29.0.0 - jest: ^29.0.0 - typescript: ">=4.3 <6" - peerDependenciesMeta: - "@babel/core": - optional: true - "@jest/types": - optional: true - babel-jest: - optional: true - esbuild: - optional: true - bin: - ts-jest: cli.js - checksum: a0ce0affc1b716c78c9ab55837829c42cb04b753d174a5c796bb1ddf9f0379fc20647b76fbe30edb30d9b23181908138d6b4c51ef2ae5e187b66635c295cefd5 - languageName: node - linkType: hard - "tsconfck@npm:^3.0.3": version: 3.0.3 resolution: "tsconfck@npm:3.0.3" @@ -6627,18 +2883,6 @@ __metadata: languageName: node linkType: hard -"tsconfig@npm:^7.0.0": - version: 7.0.0 - resolution: "tsconfig@npm:7.0.0" - dependencies: - "@types/strip-bom": ^3.0.0 - "@types/strip-json-comments": 0.0.30 - strip-bom: ^3.0.0 - strip-json-comments: ^2.0.0 - checksum: 8bce05e93c673defd56d93d83d4055e49651d3947c076339c4bc15d47b7eb5029bed194087e568764213a2e4bf45c477ba9f4da16adfd92cd901af7c09e4517e - languageName: node - linkType: hard - "tslib@npm:^2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -6655,13 +2899,6 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 - languageName: node - linkType: hard - "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -6669,13 +2906,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 - languageName: node - linkType: hard - "typescript@npm:~5.4.3": version: 5.4.3 resolution: "typescript@npm:5.4.3" @@ -6712,15 +2942,6 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-filename@npm:3.0.0" - dependencies: - unique-slug: ^4.0.0 - checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df - languageName: node - linkType: hard - "unique-slug@npm:^2.0.0": version: 2.0.2 resolution: "unique-slug@npm:2.0.2" @@ -6730,36 +2951,6 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^4.0.0": - version: 4.0.0 - resolution: "unique-slug@npm:4.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 - languageName: node - linkType: hard - -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.0.13": - version: 1.0.13 - resolution: "update-browserslist-db@npm:1.0.13" - dependencies: - escalade: ^3.1.1 - picocolors: ^1.0.0 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 - languageName: node - linkType: hard - "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -6769,23 +2960,6 @@ __metadata: languageName: node linkType: hard -"urix@npm:^0.1.0": - version: 0.1.0 - resolution: "urix@npm:0.1.0" - checksum: 4c076ecfbf3411e888547fe844e52378ab5ada2d2f27625139011eada79925e77f7fbf0e4016d45e6a9e9adb6b7e64981bd49b22700c7c401c5fc15f423303b3 - languageName: node - linkType: hard - -"url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: ^2.1.1 - requires-port: ^1.0.0 - checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf - languageName: node - linkType: hard - "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -6793,17 +2967,6 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.1": - version: 9.2.0 - resolution: "v8-to-istanbul@npm:9.2.0" - dependencies: - "@jridgewell/trace-mapping": ^0.3.12 - "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^2.0.0 - checksum: 31ef98c6a31b1dab6be024cf914f235408cd4c0dc56a5c744a5eea1a9e019ba279e1b6f90d695b78c3186feed391ed492380ccf095009e2eb91f3d058f0b4491 - languageName: node - linkType: hard - "vite-tsconfig-paths@npm:^4.3.2": version: 4.3.2 resolution: "vite-tsconfig-paths@npm:4.3.2" @@ -6860,29 +3023,6 @@ __metadata: languageName: node linkType: hard -"vue-component-type-helpers@npm:^2.0.0": - version: 2.0.7 - resolution: "vue-component-type-helpers@npm:2.0.7" - checksum: 8061a543944d03649527732dc7c32432c67c602b05ea723663fad4136ede94582305dc0d96d0ba99b4ef6674444eab284b67983441a9507f5a180030c5ba4048 - languageName: node - linkType: hard - -"vue-demi@npm:*": - version: 0.12.1 - resolution: "vue-demi@npm:0.12.1" - peerDependencies: - "@vue/composition-api": ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - "@vue/composition-api": - optional: true - bin: - vue-demi-fix: bin/vue-demi-fix.js - vue-demi-switch: bin/vue-demi-switch.js - checksum: d39a43e765e5bc34cf5b378ccff53a521e824f8c55aae6a9163c294364e8af593c5331b3b3b1b679b28096a3142abed5aed07e2dfb581c96f2eba88a176666f2 - languageName: node - linkType: hard - "vue-demi@npm:>=0.14.5": version: 0.14.7 resolution: "vue-demi@npm:0.14.7" @@ -6916,33 +3056,7 @@ __metadata: languageName: node linkType: hard -"vue-jest@npm:^5.0.0-0": - version: 5.0.0-alpha.10 - resolution: "vue-jest@npm:5.0.0-alpha.10" - dependencies: - "@babel/plugin-transform-modules-commonjs": ^7.2.0 - chalk: ^2.1.0 - convert-source-map: ^1.6.0 - extract-from-css: ^0.4.4 - source-map: 0.5.6 - tsconfig: ^7.0.0 - peerDependencies: - "@babel/core": 7.x - babel-jest: ">= 24 < 27" - jest: ">= 24 < 27 " - ts-jest: ">= 24 < 27 " - typescript: ">= 3.x" - vue: ^3.0.0-0 - peerDependenciesMeta: - ts-jest: - optional: true - typescript: - optional: true - checksum: 88f7959ebff421dc0c489825b86497d13f1dfe9edcdf4090f6355c683a2264c9cc165fa9e804de63b0ab271d37ed1e5496caf30a9cd1f6d15f897695b206d9d6 - languageName: node - linkType: hard - -"vue@npm:^3.2.47": +"vue@npm:^3.4.21": version: 3.4.21 resolution: "vue@npm:3.4.21" dependencies: @@ -6960,57 +3074,6 @@ __metadata: languageName: node linkType: hard -"w3c-xmlserializer@npm:^4.0.0": - version: 4.0.0 - resolution: "w3c-xmlserializer@npm:4.0.0" - dependencies: - xml-name-validator: ^4.0.0 - checksum: eba070e78deb408ae8defa4d36b429f084b2b47a4741c4a9be3f27a0a3d1845e277e3072b04391a138f7e43776842627d1334e448ff13ff90ad9fb1214ee7091 - languageName: node - linkType: hard - -"walker@npm:^1.0.8": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: 1.0.12 - checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c - languageName: node - linkType: hard - -"webidl-conversions@npm:^7.0.0": - version: 7.0.0 - resolution: "webidl-conversions@npm:7.0.0" - checksum: f05588567a2a76428515333eff87200fae6c83c3948a7482ebb109562971e77ef6dc49749afa58abb993391227c5697b3ecca52018793e0cb4620a48f10bd21b - languageName: node - linkType: hard - -"whatwg-encoding@npm:^2.0.0": - version: 2.0.0 - resolution: "whatwg-encoding@npm:2.0.0" - dependencies: - iconv-lite: 0.6.3 - checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "whatwg-mimetype@npm:3.0.0" - checksum: ce08bbb36b6aaf64f3a84da89707e3e6a31e5ab1c1a2379fd68df79ba712a4ab090904f0b50e6693b0dafc8e6343a6157e40bf18fdffd26e513cf95ee2a59824 - languageName: node - linkType: hard - -"whatwg-url@npm:^11.0.0": - version: 11.0.0 - resolution: "whatwg-url@npm:11.0.0" - dependencies: - tr46: ^3.0.0 - webidl-conversions: ^7.0.0 - checksum: ed4826aaa57e66bb3488a4b25c9cd476c46ba96052747388b5801f137dd740b73fde91ad207d96baf9f17fbcc80fc1a477ad65181b5eb5fa718d27c69501d7af - languageName: node - linkType: hard - "which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -7022,17 +3085,6 @@ __metadata: languageName: node linkType: hard -"which@npm:^4.0.0": - version: 4.0.0 - resolution: "which@npm:4.0.0" - dependencies: - isexe: ^3.1.1 - bin: - node-which: bin/which.js - checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 - languageName: node - linkType: hard - "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -7042,28 +3094,6 @@ __metadata: languageName: node linkType: hard -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b - languageName: node - linkType: hard - -"wrap-ansi@npm:^8.1.0": - version: 8.1.0 - resolution: "wrap-ansi@npm:8.1.0" - dependencies: - ansi-styles: ^6.1.0 - string-width: ^5.0.1 - strip-ansi: ^7.0.1 - checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 - languageName: node - linkType: hard - "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -7071,31 +3101,6 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.2": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" - dependencies: - imurmurhash: ^0.1.4 - signal-exit: ^3.0.7 - checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c - languageName: node - linkType: hard - -"ws@npm:^8.11.0": - version: 8.16.0 - resolution: "ws@npm:8.16.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: feb3eecd2bae82fa8a8beef800290ce437d8b8063bdc69712725f21aef77c49cb2ff45c6e5e7fce622248f9c7abaee506bae0a9064067ffd6935460c7357321b - languageName: node - linkType: hard - "xml-name-validator@npm:^4.0.0": version: 4.0.0 resolution: "xml-name-validator@npm:4.0.0" @@ -7103,27 +3108,6 @@ __metadata: languageName: node linkType: hard -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d - languageName: node - linkType: hard - "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" @@ -7131,28 +3115,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c - languageName: node - linkType: hard - -"yargs@npm:^17.3.1": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: ^8.0.1 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 - y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a - languageName: node - linkType: hard - "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0"