diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index 5e1b7211..cc156834 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -4,3 +4,6 @@
# Prettier 3.0.3
acc35fbec38d72968b735826c6807793a2054aed
+
+# Xcode swift indent replace spaces to tabs
+962c4d81879e85362a5f878889d3aa869f4e6961
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 00000000..cab762b7
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,7 @@
+### Please note: the project is currently temporarily suspended from receiving direct code contributions.
+
+Please do not submit any new pull requests, they will be close immediately.
+
+If you have any ideas and suggestions, please submit them to us through [`Issues`](https://github.com/quoid/userscripts/issues) or [`Discussions`](https://github.com/quoid/userscripts/discussions).
+
+We apologize for the inconvenience and thank you for your understanding.
diff --git a/.github/workflows/deployment.yaml b/.github/workflows/deployment.yaml
new file mode 100644
index 00000000..f9b2e529
--- /dev/null
+++ b/.github/workflows/deployment.yaml
@@ -0,0 +1,70 @@
+# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
+
+name: Userscripts deployment
+on:
+ release:
+ types: [published] # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#release
+jobs:
+ Deployment:
+ strategy:
+ matrix: # https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs
+ platform: [mac, ios]
+ runs-on: macos-26 # https://github.com/actions/runner-images
+ steps:
+ - uses: actions/checkout@v4 # https://github.com/actions/checkout
+ with:
+ fetch-depth: 0
+ fetch-tags: true # https://github.com/actions/checkout/issues/1781
+ - uses: actions/setup-node@v4 # https://github.com/actions/setup-node
+ with:
+ node-version: latest
+ - id: semver # Parse semver from github ref
+ uses: userscriptsup/actions/semver-parser@main
+ - name: Verify release type
+ run: |
+ if ${{ github.event.release.prerelease }}; then
+ ${{ steps.semver.outputs.beta }} || exit 11
+ else
+ ${{ steps.semver.outputs.alpha }} && exit 12
+ ${{ steps.semver.outputs.beta }} && exit 13
+ [ -n "${{ steps.semver.outputs.prerelease }}" ] && exit 14
+ exit 0
+ fi
+ - run: npm ci
+ - run: npm run lint:js
+ - run: npm run lint:css
+ - run: BETA=1 npm run build:${{ matrix.platform }}-safari-15
+ if: ${{ github.event.release.prerelease }}
+ - run: npm run build:${{ matrix.platform }}-safari-15
+ if: ${{ ! github.event.release.prerelease }}
+ # - name: Set xcode version
+ # run: sudo xcode-select -s "/Applications/Xcode_26.1.1.app" # https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md#xcode
+ # - run: xcodebuild -downloadPlatform iOS # Temporary fix for Xcode_26_beta
+ # if: matrix.platform == 'ios'
+ - name: Run fastlane
+ id: fastlane
+ working-directory: ./fastlane
+ env:
+ FASTLANE_OPT_OUT_USAGE: "YES"
+ MATCH_GIT_URL: ${{ secrets.MATCH_GIT_URL }}
+ MATCH_GIT_PRIVATE_KEY: "fastlane/${{ secrets.GIT_PRIVATE_KEY_FILE }}"
+ GIT_PRIVATE_KEY_FILE: ${{ secrets.GIT_PRIVATE_KEY_FILE }}
+ GIT_PRIVATE_KEY_BASE64: ${{ secrets.GIT_PRIVATE_KEY_BASE64 }} # https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#storing-base64-binary-blobs-as-secrets
+ MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
+ GYM_INSTALLER_CERT_NAME: ${{ secrets.GYM_INSTALLER_CERT_NAME }} # required for mac (unable to auto-detect)
+ APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }}
+ APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}
+ APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }}
+ MARKETING_VERSION: ${{ steps.semver.outputs.core }}
+ IS_PRERELEASE: ${{ github.event.release.prerelease }}
+ run: |
+ echo $GIT_PRIVATE_KEY_BASE64 | base64 --decode > $GIT_PRIVATE_KEY_FILE
+ chmod 600 $GIT_PRIVATE_KEY_FILE
+ bundle install
+ $IS_PRERELEASE && bundle exec fastlane ${{ matrix.platform }} beta
+ $IS_PRERELEASE || bundle exec fastlane ${{ matrix.platform }} release
+ - name: Artifact dSYM
+ uses: actions/upload-artifact@v4 # https://github.com/actions/upload-artifact
+ with:
+ name: Userscripts_${{ matrix.platform }}_${{ steps.fastlane.outputs.ver || github.ref_name }}.app.dSYM
+ path: build/*.dSYM.zip
diff --git a/.gitignore b/.gitignore
index 0a6c392f..6e9c9304 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,6 @@ dist
dist-ssr
build
built
-*.local
# Logs
logs
@@ -47,5 +46,13 @@ xcuserdata/
*.xcuserstate
*.dev.xcconfig
XCBuildData
-xcode/**/build/
-xcode/**/dist/
\ No newline at end of file
+xcode/Ext-Safari/Resources/
+
+# directories and files
+local
+*.local
+/scripts/*.local.js
+
+# fastlane
+/fastlane/report.xml
+/fastlane/**/*.local.rb
\ No newline at end of file
diff --git a/.postcssrc.json b/.postcssrc.json
index 030421bc..5c893e80 100644
--- a/.postcssrc.json
+++ b/.postcssrc.json
@@ -1,5 +1,5 @@
{
"plugins": {
- "autoprefixer": { "overrideBrowserslist": ["safari >= 13"] }
+ "autoprefixer": { "overrideBrowserslist": ["safari >= 15"] }
}
}
diff --git a/.prettierignore b/.prettierignore
index be1335e6..5c1a0da1 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -6,7 +6,7 @@
# root
/package
-/public
+/public/**/vendor
/etc
# dir
diff --git a/.stylelintrc.json b/.stylelintrc.json
index a9464667..707413f5 100644
--- a/.stylelintrc.json
+++ b/.stylelintrc.json
@@ -11,12 +11,6 @@
],
"rules": {
"alpha-value-notation": "number",
- "comment-empty-line-before": [
- "always",
- {
- "ignore": ["after-comment", "stylelint-commands"]
- }
- ],
"custom-property-empty-line-before": null,
"no-descending-specificity": null,
"property-no-vendor-prefix": null,
diff --git a/.vscode/settings.json b/.vscode/settings.json
index f86b8368..892bfd4d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -5,9 +5,17 @@
},
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
+ "[yaml]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
+ "[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
+ "[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
+ "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
+ "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
+ "[css]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
+ "[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
+ "[svelte]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
+ "[markdown]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },
// https://github.com/microsoft/vscode-eslint#settings-options
"eslint.validate": ["javascript", "svelte"],
- "eslint.experimental.useFlatConfig": true,
// https://github.com/stylelint/vscode-stylelint#stylelintvalidate
"stylelint.validate": ["css", "postcss", "svelte"]
}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index 9d6aec0f..c967bcab 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -23,33 +23,86 @@
}
},
{
- "label": "npm: build",
+ "label": "npm: dev ext-safari-mac",
+ "detail": "Run dev server and build dev resource to xcode dist",
+ "type": "shell",
+ "command": "npm run dev:ext-safari-mac",
+ "group": "build",
+ "options": {
+ "cwd": "./"
+ }
+ },
+ {
+ "label": "npm: dev ext-safari-ios",
+ "detail": "Run dev server and build dev resource to xcode dist",
+ "type": "shell",
+ "command": "npm run dev:ext-safari-ios",
+ "group": "build",
+ "options": {
+ "cwd": "./"
+ }
+ },
+ {
+ "label": "npm: build mac",
"detail": "Build to xcode dist path",
"type": "shell",
- "command": "npm run build",
+ "command": "npm run build:mac",
"group": "build",
"options": {
"cwd": "./"
}
},
{
- "label": "xcode: build",
- "detail": "xcodebuild",
+ "label": "npm: build ios",
+ "detail": "Build to xcode dist path",
"type": "shell",
- "command": "xcodebuild -scheme Userscripts build",
+ "command": "npm run build:ios",
+ "group": "build",
+ "options": {
+ "cwd": "./"
+ }
+ },
+ {
+ "label": "xcodebuild: mac-debug",
+ "detail": "xcodebuild mac debug",
+ "type": "shell",
+ "command": "xcodebuild -scheme Mac -configuration Debug",
+ "group": "build",
+ "options": {
+ "cwd": "./xcode/"
+ }
+ },
+ {
+ "label": "xcodebuild: mac-vite",
+ "detail": "xcodebuild mac vite",
+ "type": "shell",
+ "command": "xcodebuild -scheme Mac-Vite-Dev -configuration Vite",
"group": "build",
"options": {
"cwd": "./xcode/"
}
},
{
- "label": "build all",
- "detail": "npm build + xcodebuild",
+ "label": "dev: ext-safari-mac",
+ "detail": "npm: dev ext-safari-mac + xcodebuild: mac-vite",
+ "presentation": {
+ "reveal": "silent"
+ },
+ "dependsOrder": "sequence",
+ "dependsOn": ["npm: dev ext-safari-mac", "xcodebuild: mac-vite"],
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ },
+ {
+ "label": "build: mac debug",
+ "detail": "npm: build mac + xcodebuild: mac-debug",
"presentation": {
"reveal": "silent"
},
"dependsOrder": "sequence",
- "dependsOn": ["npm: build", "xcode: build"],
+ "dependsOn": ["npm: build mac", "xcodebuild: mac-debug"],
"group": {
"kind": "build",
"isDefault": true
diff --git a/README.md b/README.md
index 5864d9b8..09cdc78a 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ An open-source userscript editor for Safari
## Installation
-Userscripts is available for iOS (+ipadOS) and macOS. For all versions, installation is done through [Apple's App Store](https://itunes.apple.com/us/app/userscripts/id1463298887). On macOS, versions prior to `4.x` were made available to download and install directly from the repository, but due to [changes in the way Apple allows developers to distribute apps built with the WebExtension API](https://github.com/quoid/userscripts/issues/154), that is no longer an option.
+Userscripts is available for iOS (iPadOS) and macOS. For all versions, installation is done through [Apple's App Store](https://itunes.apple.com/us/app/userscripts/id1463298887). On macOS, versions prior to `4.x` were made available to download and install directly from the repository, but due to [changes in the way Apple allows developers to distribute apps built with the WebExtension API](https://github.com/quoid/userscripts/issues/154), that is no longer an option.
To run Userscripts on iOS you should be on iOS 15.1 or higher.
@@ -40,22 +40,42 @@ It's recommend to read this documentation and, if you have time, watch the follo
Once the app is downloaded and installed the following steps should be taken:
-**iOS**
+### **iOS (iPadOS)**
-- Go to `Settings > Safari > Extensions > Userscripts`
-- Turn Userscripts `on`
-- For optimal experience it's recommended that you allow Userscripts for `All Websites`
-- Once the above is complete **open the containing app**
-- Click the "Set Userscripts Directory" button and select the directory, _within the Files.app_, where your userscripts are located and where you wish newly installed userscripts to be placed
- - **Tip:** for optimal cross platform experience it's a good idea to use an iCloud folder for syncing between macOS and iOS
- - **Note:** syncing between macOS and iOS is not immediate, it is sometimes necessary to open Files.app in order to applying changes made in macOS to be reflected in iOS - that includes userscript deletions, additions and edits
-- Once the directory is set you can close the containing app and open Safari.app
-- It **may be necessary** to apply further permissions and it's to `Always Allow` Userscripts for `All Websites`
+After installing the iOS App, you need two main steps to make the extension work:
-**macOS**
+- **Open the App and set a directory** (For saving and loading userscripts)
+ - After Userscripts for ios v1.5.0, a local default directory will be set automatically
+ - In earlier versions please click the `Set Userscripts Directory` button and select the directory
+- **Enable the extension in Safari** (And grant permissions)
+
+ - Manage extensions from Settings App (Settings > Safari > Extensions) or Safari App (`AA` button on iPhone, `extension-icon` on iPad, also where you open the extension's `popup` interface)
+ - For optimal experience it's recommended that you `Always Allow` Userscripts for `All Websites`
+
+> [!NOTE]
+>
+> The iOS App cannot detect whether you have enabled the extension in Safari, therefore, the App prompt will not change after you enable the extension. Currently the App interface is only used to set or change the userscripts directory.
+>
+> You could select an iCloud folder for syncing scripts between macOS and iOS, but please note that there may be delays in synchronization, and you may encounter files be evictioned due to iCloud optimization, please refer to [#424](https://github.com/quoid/userscripts/issues/424). (**Since macOS 15 / iOS 18, please set "keep downloaded" for the folder to avoid eviction**)
+
+There are two main ways to install a user script from the iOS version:
+
+- Visit a `.user.js` URL in Safari, then open the extension `popup` and you will see an installation prompt
+ - The URL should end with `.user.js` in `/PATH` part, not the `?QUERY` or `#HASH` parts
+- You could also save files with the extension `.user.js` directly to the Userscripts directory you set above
+
+> [!TIP]
+>
+> Both of the above work equally well in the macOS version.
+>
+> The iOS version does not include the script editor provided in the macOS version, but you can always edit script files in the directory you set directly on iOS. (use any third-party code editor apps, support in-place opening and editing)
+
+### **macOS**
After installing Userscripts on macOS, you **do not** need to select a userscripts directory if you do not plan on syncing your userscripts between multiple devices. Instead you can choose to use the default directory, which is located at `~/User/Library/Containers/Userscripts/Data/Documents/scripts` - again, this is default (and automatic) behavior. You only need to select a new location if you want to store your userscripts elsewhere, which is especially useful if you are using an external code editor such as Sublime Text or VSCode.
+Refer to Apple's official guide page: [Use Safari extensions on your Mac](https://support.apple.com/102343)
+
[**Here's a short clip showing how to easily create/add a userscript in Safari using this extension on macOS**](https://youtu.be/x1r3-L7pdYQ?t=14)
## UI Overview
@@ -102,7 +122,7 @@ After installing Userscripts on macOS, you **do not** need to select a userscrip
- **Show Toolbar Count** - displays a badge on the toolbar icon with a number that represents how many enabled scripts match the url for the page you are on
- **Save Location** - where your file are currently located and being saved to (click the blue text to open location)
- **Change Save Location (cogs icon)** - this button, located directly to the right of the save location, is a shortcut for opening the host app, which will allow you to change the save location
-- **Global Blacklist** - this input accepts a comma separated list of [`@match` patterns](https://developer.chrome.com/docs/extensions/mv3/match_patterns/), a page url that matches against a pattern in this list will be ignored for script injection
+- **Global Blacklist** - this input accepts a comma separated list of `@match` patterns ([Match pattern structure](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns#match_pattern_structure)), a page url that matches against a pattern in this list will be ignored for script injection
### Popup:
@@ -125,7 +145,7 @@ Userscripts Safari currently supports the following userscript metadata:
- `@name` - This will be the name that displays in the sidebar and be used as the filename - you can _not_ use the same name for multiple files of the same type
- `@description`- Use this to describe what your userscript does - this will be displayed in the sidebar - there is a setting to hide descriptions
- `@icon` - This doesn't have a function with this userscript manager, but the **first value** provided in the metadata will be accessible in the `GM_/GM.info` object
-- `@match` - Domain match patterns - you can use several instances of this field if you'd like multiple domain matches - view [this article for more information on constructing patterns](https://developer.chrome.com/extensions/match_patterns)
+- `@match` - Domain match patterns - you can use several instances of this field if you'd like multiple domain matches - please refer to: [Match pattern structure](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns#match_pattern_structure)
- **Note:** this extension only supports `http/s`
- `@exclude-match` - Domain patterns where you do _not_ want the script to run
- `@include` - Used to match against urls for injection, globs and regular expressions are allowed, [read more here](https://wiki.greasespot.net/Include_and_exclude_rules)
@@ -158,16 +178,23 @@ Userscripts Safari currently supports the following userscript metadata:
- when paired with `@updateURL`, this will allow the user to update a userscript from a remote source, if the version on their machine is `<` version at the update URL
- `@version` does nothing by itself, it needs to be paired with` @updateURL` for remote updating to function properly
- `@updateURL`
- - the remote url to check version against
+ - the remote url to check version against, the url `/PATH` should end with `.meta.js` and contains the Metadata block
- if the version of the file located at the update URL is `>` the version on the local machine, the file will be updated
- `@updateURL` does nothing by itself, it needs to be paired with `@version` for remote updating to function properly
+ - Read this [link](https://stackoverflow.com/questions/38023717/) for more details
+ - _Note: The extension does not correctly implement the entire update process, tracking in issue [#248](https://github.com/quoid/userscripts/issues/248)_
- `@downloadURL`
+ - the url `/PATH` should end with `.user.js`, that is, it cannot be in `?QUERY` or `#HASH` parts
- optional download location for a remotely updateable file (\*i.e. a file that has both `@version` and `@updateURL`)
- when paired with `@version` and `@updateURL`, if the local version is `<` the version of the file that `@updateURL` points to, the extension will attempt to update the file's code with the contents of the file located at the `@downloadURL`
- `@downloadURL` does nothing by itself, it needs `@version` and `@updateURL` to present in order to function properly
- `@noframes`
- this key takes no value
- prevents code from being injected into nested frames
+- `@grant`
+ - Imperative controls which special [`APIs`](#api) (if any) your script uses, one on each `@grant` line, only those API methods will be provided.
+ - If no `@grant` values are provided, `none` will be assumed.
+ - If you specify `none` and something else, `none` takes precedence.
**All userscripts need at least 1 `@match` or `@include` to run!**
@@ -175,6 +202,18 @@ Userscripts Safari currently supports the following userscript metadata:
Userscripts currently supports the following api methods. All methods are asynchronous unless otherwise noted. Users must `@grant` these methods in order to use them in a userscript. When using API methods, it's only possible to inject into the content script scope due to security concerns.
+> [!NOTE]
+>
+> The following API description applies to the latest development branch, you may need to check the documentation for the corresponding version. Please switch to the version you want to check via `Branches` or `Tags` at the top. For example:
+>
+> For the current version of the App Store:
+> https://github.com/quoid/userscripts/tree/release/4.x.x#api
+>
+> For the v4.5.x and earlier versions:
+> https://github.com/quoid/userscripts/tree/v4.5.4#api
+
+For API type definitions, please refer to: [`types.d.ts`](https://github.com/userscriptsup/testscripts/blob/f2fcde4b556fa436fe806a44a89afb9eb5dccd0b/userscripts/types.d.ts)
+
- `GM.addStyle(css)`
- `css: String`
- returns a [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise), resolved if succeeds, rejected with error message if fails
@@ -237,12 +276,25 @@ Userscripts currently supports the following api methods. All methods are asynch
- `user: String` - optional
- `password: String` - optional
- `headers: Object` - optional
- - `overrideMimeTyp: String` - optional
+ - `overrideMimeType: String` - optional
- `timeout: Int` - optional
- - `binary: Bool` - optional
- - `data: String` - optional
+ - `binary: Bool` - optional (Deprecated, use binary data objects such as `Blob`, `ArrayBuffer`, `TypedArray`, etc. instead.)
+ - `data: String | Blob | ArrayBuffer | TypedArray | DataView | FormData | URLSearchParams` - optional
- `responseType: String` - optional
- refer to [`XMLHttpRequests`](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)
+ - upload event handlers:
+ - `upload: Object` - optional
+ - `onabort: Function` - optional
+ - `onerror: Function` - optional
+ - `onload: Function` - optional
+ - `onloadend: Function` - optional
+ - `onloadstart: Function` - optional
+ - `onprogress: Function` - optional
+ - `ontimeout: Function` - optional
+ - the progress object passed to the event handlers has the following properties:
+ - `lengthComputable`
+ - `loaded`
+ - `total`
- event handlers:
- `onabort: Function` - optional
- `onerror: Function` - optional
@@ -261,12 +313,18 @@ Userscripts currently supports the following api methods. All methods are asynch
- `status`
- `statusText`
- `timeout`
- - `withCredentials`
- `responseText` (when `responseType` is `text`)
+ - returns a custom [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) contains an additional property `abort`, resolved with the response object.
+ - usage:
+ - `const xhr = GM.xmlHttpRequest({...});`
+ - `xhr.abort();` to abort the request
+ - `const response = await xhr;`
+ - or just:
+ - `const response = await GM.xmlHttpRequest({...});`
+- `GM_xmlhttpRequest(details)`
+ - Basically the same as `GM.xmlHttpRequest(details)`, except:
- returns an object with a single property, `abort`, which is a `Function`
- usage: `const foo = GM.xmlHttpRequest({...});` ... `foo.abort();` to abort the request
-- `GM_xmlhttpRequest(details)`
- - an alias for `GM.xmlHttpRequest`, works exactly the same
## Scripts Directory
@@ -308,16 +366,11 @@ If you encounter a problem while using this app/extension or are in need of some
## Contributing
-Code level contributions are welcome. _I prefer to collaborate directly with contributors rather than receiving spontaneous pull requests_. If you feel you can improve the project in some way, please reach out to me by email or by opening an issue with your improvement/feature request.
+Code level contributions please refer to [contributing.md](docs/contributing.md)
Further, any issue marked "help wanted" is actively seeking assistance. Please respond to those issues with feedback, guidance or offers of coding assistance.
-Notes:
-
-- use [semantic commit messages](https://gist.github.com/joshbuchea/6f47e86d2510bce28f8e7f42ae84c716)
-- under most circumstances, you should fork the most current version of the `develop` branch for your contributions
-
-**Please ensure your contributions align with the project's license before committing anything.**
+Participating and interacting with any existing [`Issues`](https://github.com/quoid/userscripts/issues) or [`Discussions`](https://github.com/quoid/userscripts/discussions) would be a great help to the project and open source communities. Thank you for your contributions.
## Support
@@ -325,9 +378,7 @@ The quickest and easiest way to support the project is by [leaving a positive re
The second best way to help out is to sign up to beta test new versions of the app. Since this extension values your privacy, and **does not collect any data from users**, it is difficult to gauge how the extension is being used. By signing up to be a beta tester it not only allows you to test upcoming features, but also gives me the opportunity to elicit direct feedback from real users.
-**[iOS Beta Sign Up Form](https://forms.gle/QB46uYQHVyCxULue9)**
-
-**[macOS Beta Sign Up Form](https://forms.gle/cUDtKg1ip4Vc9Xhc7)**
+**Please join and test the corresponding beta version in [releases](https://github.com/quoid/userscripts/releases) via the TestFlight public link.**
## Privacy Policy
@@ -335,6 +386,6 @@ Userscripts does not collect any data from its users nor monitor activities or a
## License
-Copyright (c) 2018-2023 Justin Wasack
+Copyright © 2018-2025 Justin Wasack
Licensed under the [GNU General Public License v3.0](/LICENSE) license for all open source applications. A commercial license is required for all other applications.
diff --git a/Userscripts.code-workspace b/Userscripts.code-workspace
new file mode 100644
index 00000000..11c4d094
--- /dev/null
+++ b/Userscripts.code-workspace
@@ -0,0 +1,14 @@
+// https://code.visualstudio.com/docs/editor/workspaces
+{
+ "folders": [
+ {
+ "name": "Userscripts-JS",
+ "path": ".",
+ },
+ {
+ "name": "Userscripts-Xcode",
+ "path": "xcode",
+ },
+ ],
+ "settings": {},
+}
diff --git a/docs/contributing.md b/docs/contributing.md
index 5b2c616b..3cb92e9d 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -1,5 +1,15 @@
# Welcome to Userscripts contributing guide
+### Please note: the project is currently temporarily suspended from receiving direct code contributions.
+
+Please do not submit any new pull requests, they will be close immediately.
+
+If you have any ideas and suggestions, please submit them to us through [`Issues`](https://github.com/quoid/userscripts/issues) or [`Discussions`](https://github.com/quoid/userscripts/discussions).
+
+We apologize for the inconvenience and thank you for your understanding.
+
+### The following is the original guide for reference only.
+
Thank you for investing your time in contributing to this open source project!
We hope this guide will helps you understand how to contribute to this project.
@@ -10,7 +20,9 @@ For development and build environments please refer to [development guide](dev.m
> Portions of this guide are outdated. Some processes are still being tweaked and optimized, we will update them in due course.
> [!IMPORTANT]
-> Any pull requests must first go through code formatting and linters, otherwise you will fail the CI check. Refer to the `scripts` in [`package.json`](../package.json)
+> Please ensure your contributions align with the project's license before committing anything.
+>
+> Any pull requests must first go through code formatting and linters, otherwise you will fail the CI check. (Refer to the `scripts` in [`package.json`](../package.json))
# Branches
@@ -105,4 +117,4 @@ If you are not a member of the project, first you need to fork the master branch
# About
-[Userscripts](https://github.com/quoid/userscripts) @ 2018-2023
+[Userscripts](https://github.com/quoid/userscripts)
diff --git a/docs/dev.md b/docs/dev.md
index d1e7a7da..262aac05 100644
--- a/docs/dev.md
+++ b/docs/dev.md
@@ -22,49 +22,52 @@ Reviewing the template will help you understand the composition of the project.
- [`Node.js`](https://nodejs.org/)
- [`Xcode`](https://geo.itunes.apple.com/app/id497799835)
+- `Developer Team ID` (i.e. Apple Account, see [Xcode section](#xcode))
# Dev
-- `npm install`[^1]
-- `npm run dev`[^1]
+- `npm install` [^1]
+- `npm run dev` [^1]
# Build
-- `npm run build`[^1]
+> [!NOTE]
+> Before building the app with Xcode make sure you create the `.dev.xcconfig` files [below](#xcconfig) and fill in your `Developer Team ID`.
+> Otherwise `App groups` related functions will not work properly.
+
+- `npm run build:mac` [^1][^2]
- `cd ./xcode`
-- `xcodebuild`[^1][^2] or build with `Xcode` App
+- `xcodebuild -scheme Mac` [^1][^2][^3] or build with `Xcode` App
[^1]: These commands can also be executed directly through the vscode tasks. Please refer to: [/.vscode/tasks.json](../.vscode/tasks.json)
-[^2]: Local setup may be required. Please refer to: [Building from the Command Line with Xcode FAQ](https://developer.apple.com/library/archive/technotes/tn2339/_index.html)
+
+[^2]: Select the corresponding target and platform to build. Please refer to: [/package.json](../package.json) and [xcode-schemes](../xcode/Userscripts.xcodeproj/xcshareddata/xcschemes/)
+
+[^3]: Local setup may be required. Please refer to: [Building from the Command Line with Xcode FAQ](https://developer.apple.com/library/archive/technotes/tn2339/_index.html)
# Xcode
+Please note that a developer account is required, which can be a free Apple Account that has agreed to the Apple Developer Agreement. This is required to obtain a `Team ID` and use the `App groups` capability.
+
### Configurations
-The Xcode project contains two configurations, which have independent `xcconfig` configuration files, and can run on your local at the same time without conflicts.
+The Xcode project contains several configurations, which have independent `xcconfig` configuration files, and can run on your local at the same time without conflicts.
+
+- `Vite`: for vite real-time development.
-- `Debug`: No developer account is required, that is `Sign to Run Locally` by default, which will speed up the build during development. This is convenient for developers without an account, and contributors who only need to do simple local debugging.
+- `Debug`: for development and debugging.
-- `Release`: A developer account is required, which means it can be used for distribution as well as running on real iOS/iPadOS devices. You will need to override your developer account information in `xcconfig` to complete the build.
+- `Release`: for building and distributing.
### xcconfig
All `xcconfig` files are in the [`/xcode/xcconfig/`](../xcode/xcconfig) directory. Each `.xcconfig` file can be overridden by `.dev.xcconfig` in the same path, they will be ignored by `git`, so you can override any build settings locally.
-For example, you can create an `Userscripts-Release.dev.xcconfig` file to override [`Userscripts-Release.xcconfig`](../xcode/xcconfig/Userscripts-Release.xcconfig) and fill in your own developer account information there:
-
-`Userscripts-Release.dev.xcconfig`
-
-```
-DEVELOPMENT_TEAM = XXXXXXXXXX
-```
-
-Another example, if you want `Debug` builds to be also signed, so instead of enabling `Allow Unsigned Extensions` every time in Safari, you can create:
+For example, you can create an `Userscripts-Debug.dev.xcconfig` file to override [`Userscripts-Debug.xcconfig`](../xcode/xcconfig/Userscripts-Debug.xcconfig) and fill in your own developer account `Team ID` there:
`Userscripts-Debug.dev.xcconfig`
```
-CODE_SIGN_IDENTITY = Apple Development
DEVELOPMENT_TEAM = XXXXXXXXXX
```
@@ -76,4 +79,4 @@ Note that all existing `.xcconfig` files already include `.dev.xcconfig` files o
# About
-[Userscripts](https://github.com/quoid/userscripts) @ 2018-2023
+[Userscripts](https://github.com/quoid/userscripts)
diff --git a/docs/structure.md b/docs/structure.md
index d493c3b7..1a0cd320 100644
--- a/docs/structure.md
+++ b/docs/structure.md
@@ -38,4 +38,4 @@ Build the project from here to extension bundled app
# About
-[Userscripts](https://github.com/quoid/userscripts) @ 2018-2023
+[Userscripts](https://github.com/quoid/userscripts)
diff --git a/entry-app-webview.html b/entry-app-webview.html
index 7e4280cc..d8789222 100644
--- a/entry-app-webview.html
+++ b/entry-app-webview.html
@@ -7,7 +7,7 @@
name="viewport"
content="width=device-width, initial-scale=1, user-scalable=no"
/>
-
+
Userscripts App
diff --git a/entry-ext-action-popup.html b/entry-ext-action-popup.html
index c329fa52..8d65c1ca 100644
--- a/entry-ext-action-popup.html
+++ b/entry-ext-action-popup.html
@@ -3,7 +3,7 @@
-
+
Userscripts popup
diff --git a/entry-ext-background.html b/entry-ext-background.html
new file mode 100644
index 00000000..e3ee5d4c
--- /dev/null
+++ b/entry-ext-background.html
@@ -0,0 +1,9 @@
+
+
+
+ Userscripts background
+
+
+
+
+
diff --git a/entry-ext-extension-page.html b/entry-ext-extension-page.html
index 16e4944d..24b226cb 100644
--- a/entry-ext-extension-page.html
+++ b/entry-ext-extension-page.html
@@ -3,13 +3,13 @@
-
+
Userscripts page
-
+
diff --git a/eslint.config.js b/eslint.config.js
index e2bd75e7..e89b2946 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -8,48 +8,56 @@
*/
import js from "@eslint/js";
-import sveltePlugin from "eslint-plugin-svelte";
-import svelteParser from "svelte-eslint-parser";
-import prettier from "eslint-config-prettier";
import globals from "globals";
+import eslintPluginSvelte from "eslint-plugin-svelte";
+import eslintConfigPrettier from "eslint-config-prettier";
+/** @type {import("eslint").Linter.Config[]} */
export default [
- // https://eslint.org/docs/latest/use/configure/configuration-files-new#using-predefined-configurations
- // https://github.com/eslint/eslint/tree/main/packages/js
+ /**
+ * @see {@link https://eslint.org/docs/latest/use/configure/configuration-files-new#using-predefined-configurations}
+ * @see {@link https://github.com/eslint/eslint/tree/main/packages/js}
+ */
js.configs.recommended,
- // https://github.com/sveltejs/eslint-plugin-svelte
- // currently no official svelte/recommended flat config
- // flatten and call it through a custom config object
- {
- files: ["**/*.svelte"],
- languageOptions: {
- parser: svelteParser,
- },
- processor: "svelte/svelte",
- plugins: {
- svelte: sveltePlugin,
- },
- rules: {
- ...sveltePlugin.configs.base.overrides[0].rules,
- ...sveltePlugin.configs.recommended.rules,
- },
- },
+ /**
+ * @see {@link https://github.com/sveltejs/eslint-plugin-svelte}
+ */
+ ...eslintPluginSvelte.configs.recommended,
+ ...eslintPluginSvelte.configs.prettier,
- // https://github.com/prettier/eslint-config-prettier
- // turns off the conflict rules, put it last
- prettier,
+ /**
+ * @see {@link https://github.com/prettier/eslint-config-prettier}
+ * turns off the conflict rules, put it last
+ */
+ eslintConfigPrettier,
- // custom config objects
+ /** custom config objects */
- // https://eslint.org/docs/latest/use/configure/configuration-files-new#globally-ignoring-files-with-ignores
+ /** @see {@link https://eslint.org/docs/latest/use/configure/configuration-files-new#globally-ignoring-files-with-ignores} */
{
ignores: ["**/dist/", "**/build/", "etc/", "xcode/", "public/"],
},
- // https://eslint.org/docs/latest/use/configure/migration-guide#configuring-language-options
+ /** @see {@link https://eslint.org/docs/latest/use/configure/migration-guide#configuring-language-options} */
+ {
+ files: ["*.js", "scripts/**/*.js"],
+ languageOptions: {
+ globals: {
+ ...globals.node,
+ },
+ },
+ },
+ {
+ files: ["src/{app,dev,shared}/**/*.{js,svelte}"],
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ },
+ },
+ },
{
- files: ["src/**/*.{js,svelte}"],
+ files: ["src/ext/**/*.{js,svelte}"],
languageOptions: {
globals: {
...globals.browser,
diff --git a/etc/uilayout.sketch b/etc/uilayout.sketch
index 3c513380..f86be3ba 100644
Binary files a/etc/uilayout.sketch and b/etc/uilayout.sketch differ
diff --git a/fastlane/Appfile b/fastlane/Appfile
new file mode 100644
index 00000000..86b5e78c
--- /dev/null
+++ b/fastlane/Appfile
@@ -0,0 +1,4 @@
+# For more information about the Appfile, see:
+# https://docs.fastlane.tools/advanced/#appfile
+
+app_identifier("com.userscripts.macos")
diff --git a/fastlane/Fastfile b/fastlane/Fastfile
new file mode 100644
index 00000000..dfbdaa49
--- /dev/null
+++ b/fastlane/Fastfile
@@ -0,0 +1,89 @@
+# This file contains the fastlane.tools configuration
+# You can find the documentation at https://docs.fastlane.tools
+
+LOCAL_FASTFILE = "local/Fastfile.local.rb"
+if File.file?(LOCAL_FASTFILE)
+ import(LOCAL_FASTFILE)
+end
+
+PROJECT_PATH = "xcode/Userscripts.xcodeproj"
+
+# https://docs.fastlane.tools/actions/is_ci/
+if is_ci
+ setup_ci
+ IS_CI = true
+else
+ IS_CI = false
+end
+
+# https://docs.fastlane.tools/actions/app_store_connect_api_key/
+app_store_connect_api_key(
+ key_id: ENV['APP_STORE_CONNECT_API_KEY_KEY_ID'],
+ issuer_id: ENV['APP_STORE_CONNECT_API_KEY_ISSUER_ID'],
+ key_content: ENV['APP_STORE_CONNECT_API_KEY_KEY'],
+ key_filepath: ENV['APP_STORE_CONNECT_API_KEY_KEY_FILEPATH'],
+)
+
+default_platform(:ios)
+
+platform :ios do
+ lane :beta do
+ match
+ BUILD_NUMBER = latest_testflight_build_number(platform: "ios") + 1
+ File.open(ENV['GITHUB_OUTPUT'], 'a') do |file|
+ file.puts "ver=v#{ENV['MARKETING_VERSION']}(#{BUILD_NUMBER})"
+ end
+ build_app(
+ project: PROJECT_PATH,
+ scheme: "iOS",
+ xcargs: {
+ CURRENT_PROJECT_VERSION: BUILD_NUMBER.to_s,
+ MARKETING_VERSION: ENV['MARKETING_VERSION'],
+ },
+ output_directory: "build",
+ output_name: "Userscripts-iOS-Beta",
+ silent: IS_CI,
+ )
+ upload_to_testflight(
+ changelog: "#{ENV['GITHUB_REF_NAME']}",
+ distribute_external: true,
+ groups: ["QA"],
+ )
+ end
+
+ lane :release do
+ puts "ios release #{ENV['MARKETING_VERSION']}"
+ beta
+ end
+end
+
+platform :mac do
+ lane :beta do
+ match
+ BUILD_NUMBER = latest_testflight_build_number(platform: "osx") + 1
+ File.open(ENV['GITHUB_OUTPUT'], 'a') do |file|
+ file.puts "ver=v#{ENV['MARKETING_VERSION']}(#{BUILD_NUMBER})"
+ end
+ build_mac_app(
+ project: PROJECT_PATH,
+ scheme: "Mac",
+ xcargs: {
+ CURRENT_PROJECT_VERSION: BUILD_NUMBER.to_s,
+ MARKETING_VERSION: ENV['MARKETING_VERSION'],
+ },
+ output_directory: "build",
+ output_name: "Userscripts-Mac-Beta",
+ silent: IS_CI,
+ )
+ upload_to_testflight(
+ changelog: "#{ENV['GITHUB_REF_NAME']}",
+ distribute_external: true,
+ groups: ["QA"],
+ )
+ end
+
+ lane :release do
+ puts "mac release #{ENV['MARKETING_VERSION']}"
+ beta
+ end
+end
\ No newline at end of file
diff --git a/fastlane/Gemfile b/fastlane/Gemfile
new file mode 100644
index 00000000..a4353219
--- /dev/null
+++ b/fastlane/Gemfile
@@ -0,0 +1,4 @@
+source "https://rubygems.org"
+
+gem "fastlane"
+# gem "rubocop"
diff --git a/fastlane/Gemfile.lock b/fastlane/Gemfile.lock
new file mode 100644
index 00000000..c6013a88
--- /dev/null
+++ b/fastlane/Gemfile.lock
@@ -0,0 +1,233 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ CFPropertyList (3.0.8)
+ abbrev (0.1.2)
+ addressable (2.8.8)
+ public_suffix (>= 2.0.2, < 8.0)
+ artifactory (3.0.17)
+ atomos (0.1.3)
+ aws-eventstream (1.4.0)
+ aws-partitions (1.1188.0)
+ aws-sdk-core (3.239.2)
+ aws-eventstream (~> 1, >= 1.3.0)
+ aws-partitions (~> 1, >= 1.992.0)
+ aws-sigv4 (~> 1.9)
+ base64
+ bigdecimal
+ jmespath (~> 1, >= 1.6.1)
+ logger
+ aws-sdk-kms (1.118.0)
+ aws-sdk-core (~> 3, >= 3.239.1)
+ aws-sigv4 (~> 1.5)
+ aws-sdk-s3 (1.205.0)
+ aws-sdk-core (~> 3, >= 3.234.0)
+ aws-sdk-kms (~> 1)
+ aws-sigv4 (~> 1.5)
+ aws-sigv4 (1.12.1)
+ aws-eventstream (~> 1, >= 1.0.2)
+ babosa (1.0.4)
+ base64 (0.2.0)
+ bigdecimal (3.3.1)
+ claide (1.1.0)
+ colored (1.2)
+ colored2 (3.1.2)
+ commander (4.6.0)
+ highline (~> 2.0.0)
+ csv (3.3.5)
+ declarative (0.0.20)
+ digest-crc (0.7.0)
+ rake (>= 12.0.0, < 14.0.0)
+ domain_name (0.6.20240107)
+ dotenv (2.8.1)
+ emoji_regex (3.2.3)
+ excon (0.112.0)
+ faraday (1.10.4)
+ faraday-em_http (~> 1.0)
+ faraday-em_synchrony (~> 1.0)
+ faraday-excon (~> 1.1)
+ faraday-httpclient (~> 1.0)
+ faraday-multipart (~> 1.0)
+ faraday-net_http (~> 1.0)
+ faraday-net_http_persistent (~> 1.0)
+ faraday-patron (~> 1.0)
+ faraday-rack (~> 1.0)
+ faraday-retry (~> 1.0)
+ ruby2_keywords (>= 0.0.4)
+ faraday-cookie_jar (0.0.8)
+ faraday (>= 0.8.0)
+ http-cookie (>= 1.0.0)
+ faraday-em_http (1.0.0)
+ faraday-em_synchrony (1.0.1)
+ faraday-excon (1.1.0)
+ faraday-httpclient (1.0.1)
+ faraday-multipart (1.1.1)
+ multipart-post (~> 2.0)
+ faraday-net_http (1.0.2)
+ faraday-net_http_persistent (1.2.0)
+ faraday-patron (1.0.0)
+ faraday-rack (1.0.0)
+ faraday-retry (1.0.3)
+ faraday_middleware (1.2.1)
+ faraday (~> 1.0)
+ fastimage (2.4.0)
+ fastlane (2.229.1)
+ CFPropertyList (>= 2.3, < 4.0.0)
+ abbrev (~> 0.1.2)
+ addressable (>= 2.8, < 3.0.0)
+ artifactory (~> 3.0)
+ aws-sdk-s3 (~> 1.0)
+ babosa (>= 1.0.3, < 2.0.0)
+ base64 (~> 0.2.0)
+ bundler (>= 1.12.0, < 3.0.0)
+ colored (~> 1.2)
+ commander (~> 4.6)
+ csv (~> 3.3)
+ dotenv (>= 2.1.1, < 3.0.0)
+ emoji_regex (>= 0.1, < 4.0)
+ excon (>= 0.71.0, < 1.0.0)
+ faraday (~> 1.0)
+ faraday-cookie_jar (~> 0.0.6)
+ faraday_middleware (~> 1.0)
+ fastimage (>= 2.1.0, < 3.0.0)
+ fastlane-sirp (>= 1.0.0)
+ gh_inspector (>= 1.1.2, < 2.0.0)
+ google-apis-androidpublisher_v3 (~> 0.3)
+ google-apis-playcustomapp_v1 (~> 0.1)
+ google-cloud-env (>= 1.6.0, < 2.0.0)
+ google-cloud-storage (~> 1.31)
+ highline (~> 2.0)
+ http-cookie (~> 1.0.5)
+ json (< 3.0.0)
+ jwt (>= 2.1.0, < 3)
+ mini_magick (>= 4.9.4, < 5.0.0)
+ multipart-post (>= 2.0.0, < 3.0.0)
+ mutex_m (~> 0.3.0)
+ naturally (~> 2.2)
+ nkf (~> 0.2.0)
+ optparse (>= 0.1.1, < 1.0.0)
+ plist (>= 3.1.0, < 4.0.0)
+ rubyzip (>= 2.0.0, < 3.0.0)
+ security (= 0.1.5)
+ simctl (~> 1.6.3)
+ terminal-notifier (>= 2.0.0, < 3.0.0)
+ terminal-table (~> 3)
+ tty-screen (>= 0.6.3, < 1.0.0)
+ tty-spinner (>= 0.8.0, < 1.0.0)
+ word_wrap (~> 1.0.0)
+ xcodeproj (>= 1.13.0, < 2.0.0)
+ xcpretty (~> 0.4.1)
+ xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
+ fastlane-sirp (1.0.0)
+ sysrandom (~> 1.0)
+ gh_inspector (1.1.3)
+ google-apis-androidpublisher_v3 (0.54.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-core (0.11.3)
+ addressable (~> 2.5, >= 2.5.1)
+ googleauth (>= 0.16.2, < 2.a)
+ httpclient (>= 2.8.1, < 3.a)
+ mini_mime (~> 1.0)
+ representable (~> 3.0)
+ retriable (>= 2.0, < 4.a)
+ rexml
+ google-apis-iamcredentials_v1 (0.17.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-playcustomapp_v1 (0.13.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-apis-storage_v1 (0.31.0)
+ google-apis-core (>= 0.11.0, < 2.a)
+ google-cloud-core (1.8.0)
+ google-cloud-env (>= 1.0, < 3.a)
+ google-cloud-errors (~> 1.0)
+ google-cloud-env (1.6.0)
+ faraday (>= 0.17.3, < 3.0)
+ google-cloud-errors (1.5.0)
+ google-cloud-storage (1.47.0)
+ addressable (~> 2.8)
+ digest-crc (~> 0.4)
+ google-apis-iamcredentials_v1 (~> 0.1)
+ google-apis-storage_v1 (~> 0.31.0)
+ google-cloud-core (~> 1.6)
+ googleauth (>= 0.16.2, < 2.a)
+ mini_mime (~> 1.0)
+ googleauth (1.8.1)
+ faraday (>= 0.17.3, < 3.a)
+ jwt (>= 1.4, < 3.0)
+ multi_json (~> 1.11)
+ os (>= 0.9, < 2.0)
+ signet (>= 0.16, < 2.a)
+ highline (2.0.3)
+ http-cookie (1.0.8)
+ domain_name (~> 0.5)
+ httpclient (2.9.0)
+ mutex_m
+ jmespath (1.6.2)
+ json (2.16.0)
+ jwt (2.10.2)
+ base64
+ logger (1.7.0)
+ mini_magick (4.13.2)
+ mini_mime (1.1.5)
+ multi_json (1.17.0)
+ multipart-post (2.4.1)
+ mutex_m (0.3.0)
+ nanaimo (0.4.0)
+ naturally (2.3.0)
+ nkf (0.2.0)
+ optparse (0.8.0)
+ os (1.1.4)
+ plist (3.7.2)
+ public_suffix (7.0.0)
+ rake (13.3.1)
+ representable (3.2.0)
+ declarative (< 0.1.0)
+ trailblazer-option (>= 0.1.1, < 0.2.0)
+ uber (< 0.2.0)
+ retriable (3.1.2)
+ rexml (3.4.4)
+ rouge (3.28.0)
+ ruby2_keywords (0.0.5)
+ rubyzip (2.4.1)
+ security (0.1.5)
+ signet (0.21.0)
+ addressable (~> 2.8)
+ faraday (>= 0.17.5, < 3.a)
+ jwt (>= 1.5, < 4.0)
+ multi_json (~> 1.10)
+ simctl (1.6.10)
+ CFPropertyList
+ naturally
+ sysrandom (1.0.5)
+ terminal-notifier (2.0.0)
+ terminal-table (3.0.2)
+ unicode-display_width (>= 1.1.1, < 3)
+ trailblazer-option (0.1.2)
+ tty-cursor (0.7.1)
+ tty-screen (0.8.2)
+ tty-spinner (0.9.3)
+ tty-cursor (~> 0.7)
+ uber (0.1.0)
+ unicode-display_width (2.6.0)
+ word_wrap (1.0.0)
+ xcodeproj (1.27.0)
+ CFPropertyList (>= 2.3.3, < 4.0)
+ atomos (~> 0.1.3)
+ claide (>= 1.0.2, < 2.0)
+ colored2 (~> 3.1)
+ nanaimo (~> 0.4.0)
+ rexml (>= 3.3.6, < 4.0)
+ xcpretty (0.4.1)
+ rouge (~> 3.28.0)
+ xcpretty-travis-formatter (1.0.1)
+ xcpretty (~> 0.2, >= 0.0.7)
+
+PLATFORMS
+ arm64-darwin-25
+ ruby
+
+DEPENDENCIES
+ fastlane
+
+BUNDLED WITH
+ 2.7.2
diff --git a/fastlane/Matchfile b/fastlane/Matchfile
new file mode 100644
index 00000000..3cbce194
--- /dev/null
+++ b/fastlane/Matchfile
@@ -0,0 +1,12 @@
+# https://docs.fastlane.tools/actions/match
+
+readonly(true)
+type("appstore")
+app_identifier([
+ "com.userscripts.macos",
+ "com.userscripts.macos.Userscripts-Extension",
+])
+
+for_platform :mac do
+ additional_cert_types(["mac_installer_distribution"])
+end
\ No newline at end of file
diff --git a/jsconfig.json b/jsconfig.json
index 2fae38f7..8f85baf3 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -22,5 +22,5 @@
"skipLibCheck": true,
"sourceMap": true
},
- "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"]
+ "include": ["*.d.ts", "*.js"]
}
diff --git a/package-lock.json b/package-lock.json
index 34e70d75..d4f33dbf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,233 +6,75 @@
"": {
"name": "userscripts",
"devDependencies": {
- "@sveltejs/vite-plugin-svelte": "^2.4.5",
- "@types/webextension-polyfill": "^0.10.5",
- "autoprefixer": "^10.4.16",
+ "@sveltejs/vite-plugin-svelte": "^5.0.3",
+ "@types/webextension-polyfill": "^0.12.3",
+ "autoprefixer": "^10.4.21",
"cm-show-invisibles": "^3.1.0",
- "codemirror": "^5.65.15",
- "eslint": "^8.52.0",
- "eslint-config-prettier": "^9.0.0",
- "eslint-plugin-svelte": "^2.34.0",
- "prettier": "3.0.3",
- "prettier-plugin-svelte": "3.0.3",
- "stylelint": "^15.11.0",
+ "codemirror": "^5.65.19",
+ "eslint": "^9.27.0",
+ "eslint-config-prettier": "^10.1.5",
+ "eslint-plugin-svelte": "^3.9.0",
+ "globals": "^16.1.0",
+ "marked": "^15.0.12",
+ "prettier": "3.5.3",
+ "prettier-plugin-svelte": "3.4.0",
+ "stylelint": "^16.19.1",
"stylelint-config-html": "^1.1.0",
- "stylelint-config-standard": "^34.0.0",
- "svelte": "4.2.0",
- "vite": "^4.5.0"
- }
- },
- "node_modules/@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
- "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "stylelint-config-standard": "^38.0.0",
+ "svelte": "^5.33.0",
+ "vite": "^6.3.5"
}
},
"node_modules/@ampproject/remapping": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
- "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/code-frame/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/code-frame/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/js-tokens": {
+ "node_modules/@babel/code-frame/node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=4"
+ "node": ">=6.9.0"
}
},
"node_modules/@csstools/css-parser-algorithms": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz",
- "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz",
+ "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==",
"dev": true,
"funding": [
{
@@ -244,17 +86,18 @@
"url": "https://opencollective.com/csstools"
}
],
+ "license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18"
+ "node": ">=18"
},
"peerDependencies": {
- "@csstools/css-tokenizer": "^2.2.1"
+ "@csstools/css-tokenizer": "^3.0.3"
}
},
"node_modules/@csstools/css-tokenizer": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz",
- "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz",
+ "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==",
"dev": true,
"funding": [
{
@@ -266,14 +109,15 @@
"url": "https://opencollective.com/csstools"
}
],
+ "license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18"
+ "node": ">=18"
}
},
"node_modules/@csstools/media-query-list-parser": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz",
- "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz",
+ "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==",
"dev": true,
"funding": [
{
@@ -285,18 +129,19 @@
"url": "https://opencollective.com/csstools"
}
],
+ "license": "MIT",
"engines": {
- "node": "^14 || ^16 || >=18"
+ "node": ">=18"
},
"peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3"
}
},
"node_modules/@csstools/selector-specificity": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz",
- "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
+ "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
"dev": true,
"funding": [
{
@@ -308,399 +153,541 @@
"url": "https://opencollective.com/csstools"
}
],
+ "license": "MIT-0",
"engines": {
- "node": "^14 || ^16 || >=18"
+ "node": ">=18"
},
"peerDependencies": {
- "postcss-selector-parser": "^6.0.13"
+ "postcss-selector-parser": "^7.0.0"
+ }
+ },
+ "node_modules/@dual-bundle/import-meta-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
+ "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz",
+ "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
- "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz",
+ "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
- "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz",
+ "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/android-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
- "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz",
+ "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
- "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz",
+ "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/darwin-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
- "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz",
+ "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
- "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz",
+ "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/freebsd-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
- "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz",
+ "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
- "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz",
+ "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==",
"cpu": [
"arm"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
- "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz",
+ "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ia32": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
- "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz",
+ "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==",
"cpu": [
"ia32"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-loong64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
- "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz",
+ "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==",
"cpu": [
"loong64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-mips64el": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
- "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz",
+ "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==",
"cpu": [
"mips64el"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-ppc64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
- "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz",
+ "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==",
"cpu": [
"ppc64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-riscv64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
- "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz",
+ "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==",
"cpu": [
"riscv64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-s390x": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
- "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz",
+ "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==",
"cpu": [
"s390x"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/linux-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
- "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz",
+ "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz",
+ "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@esbuild/netbsd-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
- "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz",
+ "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"netbsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz",
+ "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
}
},
"node_modules/@esbuild/openbsd-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
- "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz",
+ "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"openbsd"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/sunos-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
- "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz",
+ "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"sunos"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
- "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz",
+ "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-ia32": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
- "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz",
+ "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==",
"cpu": [
"ia32"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@esbuild/win32-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
- "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz",
+ "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==",
"cpu": [
"x64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
- "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+ "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "eslint-visitor-keys": "^3.3.0"
+ "eslint-visitor-keys": "^3.4.3"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
"peerDependencies": {
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
"node_modules/@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
+ "node_modules/@eslint/config-array": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
+ "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.6",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
+ "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
+ "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
"node_modules/@eslint/eslintrc": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
- "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -708,33 +695,98 @@
"strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@eslint/js": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
- "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
+ "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.13",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
- "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
+ "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@humanwhocodes/object-schema": "^2.0.1",
- "debug": "^4.1.1",
- "minimatch": "^3.0.5"
+ "@eslint/core": "^0.14.0",
+ "levn": "^0.4.1"
},
"engines": {
- "node": ">=10.10.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
}
},
"node_modules/@humanwhocodes/module-importer": {
@@ -742,6 +794,7 @@
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
"node": ">=12.22"
},
@@ -750,65 +803,89 @@
"url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
- "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
- "dev": true
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.20",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
- "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@keyv/serialize": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.3.tgz",
+ "integrity": "sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^6.0.3"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -822,6 +899,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -831,6 +909,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -839,80 +918,363 @@
"node": ">= 8"
}
},
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz",
+ "integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz",
+ "integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz",
+ "integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz",
+ "integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz",
+ "integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz",
+ "integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz",
+ "integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz",
+ "integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz",
+ "integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz",
+ "integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz",
+ "integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz",
+ "integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz",
+ "integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz",
+ "integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz",
+ "integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz",
+ "integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz",
+ "integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz",
+ "integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz",
+ "integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz",
+ "integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@sveltejs/acorn-typescript": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz",
+ "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^8.9.0"
+ }
+ },
"node_modules/@sveltejs/vite-plugin-svelte": {
- "version": "2.4.6",
- "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.6.tgz",
- "integrity": "sha512-zO79p0+DZnXPnF0ltIigWDx/ux7Ni+HRaFOw720Qeivc1azFUrJxTl0OryXVibYNx1hCboGia1NRV3x8RNv4cA==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.0.3.tgz",
+ "integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4",
- "debug": "^4.3.4",
+ "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1",
+ "debug": "^4.4.0",
"deepmerge": "^4.3.1",
"kleur": "^4.1.5",
- "magic-string": "^0.30.3",
- "svelte-hmr": "^0.15.3",
- "vitefu": "^0.2.4"
+ "magic-string": "^0.30.15",
+ "vitefu": "^1.0.4"
},
"engines": {
- "node": "^14.18.0 || >= 16"
+ "node": "^18.0.0 || ^20.0.0 || >=22"
},
"peerDependencies": {
- "svelte": "^3.54.0 || ^4.0.0",
- "vite": "^4.0.0"
+ "svelte": "^5.0.0",
+ "vite": "^6.0.0"
}
},
"node_modules/@sveltejs/vite-plugin-svelte-inspector": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz",
- "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz",
+ "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "debug": "^4.3.4"
+ "debug": "^4.3.7"
},
"engines": {
- "node": "^14.18.0 || >= 16"
+ "node": "^18.0.0 || ^20.0.0 || >=22"
},
"peerDependencies": {
- "@sveltejs/vite-plugin-svelte": "^2.2.0",
- "svelte": "^3.54.0 || ^4.0.0",
- "vite": "^4.0.0"
+ "@sveltejs/vite-plugin-svelte": "^5.0.0",
+ "svelte": "^5.0.0",
+ "vite": "^6.0.0"
}
},
"node_modules/@types/estree": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.4.tgz",
- "integrity": "sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==",
- "dev": true
- },
- "node_modules/@types/minimist": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.4.tgz",
- "integrity": "sha512-Kfe/D3hxHTusnPNRbycJE1N77WHDsdS4AjUYIzlDzhDrS47NrwuL3YW4VITxwR7KCVpzwgy4Rbj829KSSQmwXQ==",
- "dev": true
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
+ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/@types/normalize-package-data": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.3.tgz",
- "integrity": "sha512-ehPtgRgaULsFG8x0NeYJvmyH1hmlfsNLujHe9dQEia/7MAJYdzMSi19JtchUHjmBA6XC/75dK55mzZH+RyieSg==",
- "dev": true
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/webextension-polyfill": {
- "version": "0.10.5",
- "resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.10.5.tgz",
- "integrity": "sha512-LlmbFLUB7+BDrb9nMuM0wlqtx9LZbBV2x3W98o02cD7Y8i10+sBenTlhG56vr47dzC7WIVXbURii+5jMJsyjLw==",
- "dev": true
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
+ "version": "0.12.3",
+ "resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.12.3.tgz",
+ "integrity": "sha512-F58aDVSeN/MjUGazXo/cPsmR76EvqQhQ1v4x23hFjUX0cfAJYE+JBWwiOGW36/VJGGxoH74sVlRIF3z7SJCKyg==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/acorn": {
- "version": "8.11.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
- "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
"dev": true,
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -925,6 +1287,7 @@
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
@@ -934,6 +1297,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -950,6 +1314,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -959,6 +1324,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -973,15 +1339,17 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
+ "dev": true,
+ "license": "Python-2.0"
},
"node_modules/aria-query": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
- "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
"dev": true,
- "dependencies": {
- "dequal": "^2.0.3"
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/array-union": {
@@ -989,32 +1357,25 @@
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/autoprefixer": {
- "version": "10.4.16",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
- "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
+ "version": "10.4.21",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz",
+ "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==",
"dev": true,
"funding": [
{
@@ -1030,12 +1391,13 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "browserslist": "^4.21.10",
- "caniuse-lite": "^1.0.30001538",
- "fraction.js": "^4.3.6",
+ "browserslist": "^4.24.4",
+ "caniuse-lite": "^1.0.30001702",
+ "fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
+ "picocolors": "^1.1.1",
"postcss-value-parser": "^4.2.0"
},
"bin": {
@@ -1049,46 +1411,71 @@
}
},
"node_modules/axobject-query": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
- "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
"dev": true,
- "dependencies": {
- "dequal": "^2.0.3"
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/browserslist": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
- "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
+ "version": "4.24.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz",
+ "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==",
"dev": true,
"funding": [
{
@@ -1104,11 +1491,12 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "caniuse-lite": "^1.0.30001541",
- "electron-to-chromium": "^1.4.535",
- "node-releases": "^2.0.13",
- "update-browserslist-db": "^1.0.13"
+ "caniuse-lite": "^1.0.30001716",
+ "electron-to-chromium": "^1.5.149",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.3"
},
"bin": {
"browserslist": "cli.js"
@@ -1117,61 +1505,66 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
"dev": true,
- "engines": {
- "node": ">=6"
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
}
},
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "node_modules/cacheable": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.9.0.tgz",
+ "integrity": "sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==",
"dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "license": "MIT",
+ "dependencies": {
+ "hookified": "^1.8.2",
+ "keyv": "^5.3.3"
}
},
- "node_modules/camelcase-keys": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz",
- "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==",
+ "node_modules/cacheable/node_modules/keyv": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz",
+ "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "camelcase": "^6.3.0",
- "map-obj": "^4.1.0",
- "quick-lru": "^5.1.1",
- "type-fest": "^1.2.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "@keyv/serialize": "^1.0.3"
}
},
- "node_modules/camelcase-keys/node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=6"
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001561",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz",
- "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==",
+ "version": "1.0.30001718",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz",
+ "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==",
"dev": true,
"funding": [
{
@@ -1186,13 +1579,15 @@
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
+ ],
+ "license": "CC-BY-4.0"
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -1204,36 +1599,36 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/cm-show-invisibles": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cm-show-invisibles/-/cm-show-invisibles-3.1.0.tgz",
"integrity": "sha512-dfWd4QmuSMoSgONkCv4+REfPrxp3R3OE8jnxR3u2IjkLPolHArGOhMetBLo6gTeiL8tA4ff5v+VBZ1u1AZx+4A==",
- "dev": true
- },
- "node_modules/code-red": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
- "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
"dev": true,
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15",
- "@types/estree": "^1.0.1",
- "acorn": "^8.10.0",
- "estree-walker": "^3.0.3",
- "periscopic": "^3.1.0"
- }
+ "license": "MIT"
},
"node_modules/codemirror": {
- "version": "5.65.15",
- "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.15.tgz",
- "integrity": "sha512-YC4EHbbwQeubZzxLl5G4nlbLc1T21QTrKGaOal/Pkm9dVDMZXMH7+ieSPEOZCtO9I68i8/oteJKOxzHC2zR+0g==",
- "dev": true
+ "version": "5.65.19",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.19.tgz",
+ "integrity": "sha512-+aFkvqhaAVr1gferNMuN8vkTSrWIFvzlMV9I2KBLCWS2WpZ2+UAkZjlMZmEuT+gcXTi6RrGQCkWq1/bDtGqhIA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -1245,30 +1640,34 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/colord": {
"version": "2.9.3",
"resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
"integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+ "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
+ "env-paths": "^2.2.1",
"import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
+ "parse-json": "^5.2.0"
},
"engines": {
"node": ">=14"
@@ -1286,10 +1685,11 @@
}
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
@@ -1300,21 +1700,23 @@
}
},
"node_modules/css-functions-list": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz",
- "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==",
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
+ "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12 || >=16"
}
},
"node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
+ "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "mdn-data": "2.0.30",
+ "mdn-data": "2.12.2",
"source-map-js": "^1.0.1"
},
"engines": {
@@ -1326,6 +1728,7 @@
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"dev": true,
+ "license": "MIT",
"bin": {
"cssesc": "bin/cssesc"
},
@@ -1334,12 +1737,13 @@
}
},
"node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@@ -1350,81 +1754,29 @@
}
}
},
- "node_modules/decamelize": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz",
- "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decamelize-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
- "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
- "dev": true,
- "dependencies": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decamelize-keys/node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/decamelize-keys/node_modules/map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/deepmerge": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-type": "^4.0.0"
},
@@ -1432,23 +1784,12 @@
"node": ">=8"
}
},
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
+ "license": "MIT",
"peer": true,
"dependencies": {
"domelementtype": "^2.3.0",
@@ -1470,6 +1811,7 @@
"url": "https://github.com/sponsors/fb55"
}
],
+ "license": "BSD-2-Clause",
"peer": true
},
"node_modules/domhandler": {
@@ -1477,6 +1819,7 @@
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
+ "license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"domelementtype": "^2.3.0"
@@ -1489,10 +1832,11 @@
}
},
"node_modules/domutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
- "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
"dev": true,
+ "license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"dom-serializer": "^2.0.0",
@@ -1504,22 +1848,25 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.576",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.576.tgz",
- "integrity": "sha512-yXsZyXJfAqzWk1WKryr0Wl0MN2D47xodPvEEwlVePBnhU5E7raevLQR+E6b9JAD3GfL/7MbAL9ZtWQQPcLx7wA==",
- "dev": true
+ "version": "1.5.155",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz",
+ "integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
+ "license": "BSD-2-Clause",
"peer": true,
"engines": {
"node": ">=0.12"
@@ -1528,57 +1875,73 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
"node_modules/esbuild": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
- "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+ "version": "0.25.4",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz",
+ "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
},
"optionalDependencies": {
- "@esbuild/android-arm": "0.18.20",
- "@esbuild/android-arm64": "0.18.20",
- "@esbuild/android-x64": "0.18.20",
- "@esbuild/darwin-arm64": "0.18.20",
- "@esbuild/darwin-x64": "0.18.20",
- "@esbuild/freebsd-arm64": "0.18.20",
- "@esbuild/freebsd-x64": "0.18.20",
- "@esbuild/linux-arm": "0.18.20",
- "@esbuild/linux-arm64": "0.18.20",
- "@esbuild/linux-ia32": "0.18.20",
- "@esbuild/linux-loong64": "0.18.20",
- "@esbuild/linux-mips64el": "0.18.20",
- "@esbuild/linux-ppc64": "0.18.20",
- "@esbuild/linux-riscv64": "0.18.20",
- "@esbuild/linux-s390x": "0.18.20",
- "@esbuild/linux-x64": "0.18.20",
- "@esbuild/netbsd-x64": "0.18.20",
- "@esbuild/openbsd-x64": "0.18.20",
- "@esbuild/sunos-x64": "0.18.20",
- "@esbuild/win32-arm64": "0.18.20",
- "@esbuild/win32-ia32": "0.18.20",
- "@esbuild/win32-x64": "0.18.20"
+ "@esbuild/aix-ppc64": "0.25.4",
+ "@esbuild/android-arm": "0.25.4",
+ "@esbuild/android-arm64": "0.25.4",
+ "@esbuild/android-x64": "0.25.4",
+ "@esbuild/darwin-arm64": "0.25.4",
+ "@esbuild/darwin-x64": "0.25.4",
+ "@esbuild/freebsd-arm64": "0.25.4",
+ "@esbuild/freebsd-x64": "0.25.4",
+ "@esbuild/linux-arm": "0.25.4",
+ "@esbuild/linux-arm64": "0.25.4",
+ "@esbuild/linux-ia32": "0.25.4",
+ "@esbuild/linux-loong64": "0.25.4",
+ "@esbuild/linux-mips64el": "0.25.4",
+ "@esbuild/linux-ppc64": "0.25.4",
+ "@esbuild/linux-riscv64": "0.25.4",
+ "@esbuild/linux-s390x": "0.25.4",
+ "@esbuild/linux-x64": "0.25.4",
+ "@esbuild/netbsd-arm64": "0.25.4",
+ "@esbuild/netbsd-x64": "0.25.4",
+ "@esbuild/openbsd-arm64": "0.25.4",
+ "@esbuild/openbsd-x64": "0.25.4",
+ "@esbuild/sunos-x64": "0.25.4",
+ "@esbuild/win32-arm64": "0.25.4",
+ "@esbuild/win32-ia32": "0.25.4",
+ "@esbuild/win32-x64": "0.25.4"
}
},
"node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -1588,6 +1951,7 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -1596,99 +1960,109 @@
}
},
"node_modules/eslint": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
- "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz",
+ "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.3",
- "@eslint/js": "8.53.0",
- "@humanwhocodes/config-array": "^0.11.13",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.20.0",
+ "@eslint/config-helpers": "^0.2.1",
+ "@eslint/core": "^0.14.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.27.0",
+ "@eslint/plugin-kit": "^0.3.1",
+ "@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
+ "cross-spawn": "^7.0.6",
"debug": "^4.3.2",
- "doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
+ "file-entry-cache": "^8.0.0",
"find-up": "^5.0.0",
"glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
"ignore": "^5.2.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
"lodash.merge": "^4.6.2",
"minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
+ "optionator": "^0.9.3"
},
"bin": {
"eslint": "bin/eslint.js"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
- "url": "https://opencollective.com/eslint"
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
}
},
"node_modules/eslint-config-prettier": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
- "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
+ "version": "10.1.5",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz",
+ "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==",
"dev": true,
+ "license": "MIT",
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
+ "funding": {
+ "url": "https://opencollective.com/eslint-config-prettier"
+ },
"peerDependencies": {
"eslint": ">=7.0.0"
}
},
"node_modules/eslint-plugin-svelte": {
- "version": "2.34.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.34.1.tgz",
- "integrity": "sha512-HnLzYevh9bLL0Rj2d4dmZY9EutN0BL5JsJRHqtJFIyaEmdxxd3ZuY5zNoSjIFhctFMSntsClbd6TwYjgaOY0Xw==",
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.9.0.tgz",
+ "integrity": "sha512-nvIUNyyPGbr5922Kd1p/jXe+FfNdVPXsxLyrrXpwfSbZZEFdAYva9O/gm2lObC/wXkQo/AUmQkAihfmNJYeCjA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@jridgewell/sourcemap-codec": "^1.4.14",
- "debug": "^4.3.1",
+ "@eslint-community/eslint-utils": "^4.6.1",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
"esutils": "^2.0.3",
- "known-css-properties": "^0.29.0",
- "postcss": "^8.4.5",
+ "globals": "^16.0.0",
+ "known-css-properties": "^0.36.0",
+ "postcss": "^8.4.49",
"postcss-load-config": "^3.1.4",
- "postcss-safe-parser": "^6.0.0",
- "postcss-selector-parser": "^6.0.11",
- "semver": "^7.5.3",
- "svelte-eslint-parser": ">=0.33.0 <1.0.0"
+ "postcss-safe-parser": "^7.0.0",
+ "semver": "^7.6.3",
+ "svelte-eslint-parser": "^1.2.0"
},
"engines": {
- "node": "^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://github.com/sponsors/ota-meshi"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0-0",
- "svelte": "^3.37.0 || ^4.0.0"
+ "eslint": "^8.57.1 || ^9.0.0",
+ "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0"
},
"peerDependenciesMeta": {
"svelte": {
@@ -1697,55 +2071,66 @@
}
},
"node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
"dev": true,
+ "license": "Apache-2.0",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/esm-env": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
+ "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.9.0",
+ "acorn": "^8.14.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
+ "eslint-visitor-keys": "^4.2.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/esquery": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
- "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"estraverse": "^5.1.0"
},
@@ -1753,11 +2138,22 @@
"node": ">=0.10"
}
},
+ "node_modules/esrap": {
+ "version": "1.4.6",
+ "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.6.tgz",
+ "integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
"node_modules/esrecurse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
},
@@ -1770,24 +2166,17 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
},
- "node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
- },
"node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -1796,19 +2185,21 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "micromatch": "^4.0.8"
},
"engines": {
"node": ">=8.6.0"
@@ -1819,6 +2210,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -1830,49 +2222,72 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
+ "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
},
"node_modules/fastest-levenshtein": {
"version": "1.0.16",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
"integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4.9.1"
}
},
"node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
},
"node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "flat-cache": "^3.0.4"
+ "flat-cache": "^4.0.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">=16.0.0"
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -1885,6 +2300,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
@@ -1897,30 +2313,32 @@
}
},
"node_modules/flat-cache": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz",
- "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flatted": "^3.2.9",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
+ "keyv": "^4.5.4"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=16"
}
},
"node_modules/flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
- "dev": true
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/fraction.js": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "*"
},
@@ -1929,18 +2347,13 @@
"url": "https://github.com/sponsors/rawify"
}
},
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -1949,40 +2362,12 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -1995,6 +2380,7 @@
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
"integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"global-prefix": "^3.0.0"
},
@@ -2007,6 +2393,7 @@
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
"integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ini": "^1.3.5",
"kind-of": "^6.0.2",
@@ -2021,6 +2408,7 @@
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -2029,15 +2417,13 @@
}
},
"node_modules/globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "version": "16.1.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.1.0.tgz",
+ "integrity": "sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==",
"dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -2048,6 +2434,7 @@
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
@@ -2067,61 +2454,32 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
"integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
- "dev": true
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
- "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "dev": true
- },
- "node_modules/hard-rejection": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
- "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
"dev": true,
- "engines": {
- "node": ">=6"
- }
+ "license": "MIT"
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/hasown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
- "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "node_modules/hookified": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.0.tgz",
+ "integrity": "sha512-2yEEGqphImtKIe1NXWEhu6yD3hlFR4Mxk4Mtp3XEyScpSt4pQ4ymmXA1zzxZpj99QkFK+nN0nzjeb2+RUi/6CQ==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
+ "license": "MIT"
},
"node_modules/html-tags": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
"integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -2141,6 +2499,7 @@
"url": "https://github.com/sponsors/fb55"
}
],
+ "license": "MIT",
"peer": true,
"dependencies": {
"domelementtype": "^2.3.0",
@@ -2149,20 +2508,43 @@
"entities": "^4.4.0"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -2174,81 +2556,36 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/import-lazy": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
- "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
- "node_modules/indent-string": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz",
- "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
"node_modules/ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "node_modules/is-core-module": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
- "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true,
- "dependencies": {
- "hasown": "^2.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "license": "MIT"
},
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2258,6 +2595,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2267,6 +2605,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -2279,57 +2618,44 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-reference": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
- "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
+ "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/estree": "*"
+ "@types/estree": "^1.0.6"
}
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/js-tokens": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.2.tgz",
- "integrity": "sha512-Olnt+V7xYdvGze9YTbGFZIfQXuGV4R3nQwwl8BrtgaPE/wq8UFpUHWuTNc05saowhSr1ZO6tx+V6RjE9D5YQog==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
+ "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
"dev": true,
+ "license": "MIT",
"peer": true
},
"node_modules/js-yaml": {
@@ -2337,6 +2663,7 @@
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -2348,31 +2675,36 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"json-buffer": "3.0.1"
}
@@ -2382,6 +2714,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2391,21 +2724,24 @@
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/known-css-properties": {
- "version": "0.29.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
- "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
- "dev": true
+ "version": "0.36.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
+ "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -2419,6 +2755,7 @@
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
}
@@ -2427,19 +2764,22 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/locate-character": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
"integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
@@ -2454,48 +2794,37 @@
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
"integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
- "dev": true
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
+ "license": "MIT"
},
"node_modules/magic-string": {
- "version": "0.30.5",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
- "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+ "version": "0.30.17",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
+ "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.15"
- },
- "engines": {
- "node": ">=12"
+ "@jridgewell/sourcemap-codec": "^1.5.0"
}
},
- "node_modules/map-obj": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
- "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
+ "node_modules/marked": {
+ "version": "15.0.12",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz",
+ "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "license": "MIT",
+ "bin": {
+ "marked": "bin/marked.js"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": ">= 18"
}
},
"node_modules/mathml-tag-names": {
@@ -2503,50 +2832,27 @@
"resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
"integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
"dev": true,
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true
- },
- "node_modules/meow": {
- "version": "10.1.5",
- "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz",
- "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==",
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
+ "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
"dev": true,
- "dependencies": {
- "@types/minimist": "^1.2.2",
- "camelcase-keys": "^7.0.0",
- "decamelize": "^5.0.0",
- "decamelize-keys": "^1.1.0",
- "hard-rejection": "^2.1.0",
- "minimist-options": "4.1.0",
- "normalize-package-data": "^3.0.2",
- "read-pkg-up": "^8.0.0",
- "redent": "^4.0.0",
- "trim-newlines": "^4.0.2",
- "type-fest": "^1.2.2",
- "yargs-parser": "^20.2.9"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "license": "CC0-1.0"
},
- "node_modules/meow/node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "node_modules/meow": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz",
+ "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -2557,37 +2863,31 @@
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
"node": ">=8.6"
}
},
- "node_modules/min-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
- "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -2595,30 +2895,17 @@
"node": "*"
}
},
- "node_modules/minimist-options": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
- "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
- "dev": true,
- "dependencies": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0",
- "kind-of": "^6.0.3"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
"dev": true,
"funding": [
{
@@ -2626,6 +2913,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -2637,34 +2925,22 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
- "dev": true
- },
- "node_modules/normalize-package-data": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
- "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
"dev": true,
- "dependencies": {
- "hosted-git-info": "^4.0.1",
- "is-core-module": "^2.5.0",
- "semver": "^7.3.4",
- "validate-npm-package-license": "^3.0.1"
- },
- "engines": {
- "node": ">=10"
- }
+ "license": "MIT"
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2674,31 +2950,24 @@
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
"node_modules/optionator": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
- "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
},
"engines": {
"node": ">= 0.8.0"
@@ -2709,6 +2978,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
@@ -2724,6 +2994,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
},
@@ -2739,6 +3010,7 @@
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
},
@@ -2751,6 +3023,7 @@
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
@@ -2769,24 +3042,17 @@
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2796,32 +3062,24 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/periscopic": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
- "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^3.0.0",
- "is-reference": "^3.0.0"
- }
- },
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -2830,9 +3088,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+ "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
"dev": true,
"funding": [
{
@@ -2848,36 +3106,57 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "nanoid": "^3.3.8",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-html": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.5.0.tgz",
- "integrity": "sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.0.tgz",
+ "integrity": "sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==",
"dev": true,
+ "license": "MIT",
"peer": true,
"dependencies": {
"htmlparser2": "^8.0.0",
- "js-tokens": "^8.0.0",
- "postcss": "^8.4.0",
+ "js-tokens": "^9.0.0",
+ "postcss": "^8.5.0",
"postcss-safe-parser": "^6.0.0"
},
"engines": {
"node": "^12 || >=14"
}
},
+ "node_modules/postcss-html/node_modules/postcss-safe-parser": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+ "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.3.3"
+ }
+ },
"node_modules/postcss-load-config": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lilconfig": "^2.0.5",
"yaml": "^1.10.2"
@@ -2902,26 +3181,48 @@
}
}
},
+ "node_modules/postcss-load-config/node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/postcss-resolve-nested-selector": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
- "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
- "dev": true
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz",
+ "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/postcss-safe-parser": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
- "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
+ "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
"engines": {
- "node": ">=12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
+ "node": ">=18.0"
},
"peerDependencies": {
- "postcss": "^8.3.3"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-scss": {
@@ -2943,6 +3244,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"engines": {
"node": ">=12.0"
},
@@ -2951,10 +3253,11 @@
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+ "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -2967,163 +3270,83 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prettier": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
- "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
- "dev": true,
- "bin": {
- "prettier": "bin/prettier.cjs"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/prettier-plugin-svelte": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.0.3.tgz",
- "integrity": "sha512-dLhieh4obJEK1hnZ6koxF+tMUrZbV5YGvRpf2+OADyanjya5j0z1Llo8iGwiHmFWZVG/hLEw/AJD5chXd9r3XA==",
- "dev": true,
- "peerDependencies": {
- "prettier": "^3.0.0",
- "svelte": "^3.2.0 || ^4.0.0-next.0"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
- "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==",
- "dev": true,
- "dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^3.0.2",
- "parse-json": "^5.2.0",
- "type-fest": "^1.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg-up": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz",
- "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^5.0.0",
- "read-pkg": "^6.0.0",
- "type-fest": "^1.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "node_modules/read-pkg-up/node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "node_modules/prettier": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=14"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/prettier/prettier?sponsor=1"
}
},
- "node_modules/read-pkg/node_modules/type-fest": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz",
- "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==",
+ "node_modules/prettier-plugin-svelte": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.4.0.tgz",
+ "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==",
"dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "license": "MIT",
+ "peerDependencies": {
+ "prettier": "^3.0.0",
+ "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0"
}
},
- "node_modules/redent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz",
- "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==",
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
- "dependencies": {
- "indent-string": "^5.0.0",
- "strip-indent": "^4.0.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=6"
}
},
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3133,48 +3356,59 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
"dev": true,
+ "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
}
},
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "node_modules/rollup": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz",
+ "integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
+ "@types/estree": "1.0.7"
},
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rollup": {
- "version": "3.29.4",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
- "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
- "dev": true,
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=14.18.0",
+ "node": ">=18.0.0",
"npm": ">=8.0.0"
},
"optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.41.0",
+ "@rollup/rollup-android-arm64": "4.41.0",
+ "@rollup/rollup-darwin-arm64": "4.41.0",
+ "@rollup/rollup-darwin-x64": "4.41.0",
+ "@rollup/rollup-freebsd-arm64": "4.41.0",
+ "@rollup/rollup-freebsd-x64": "4.41.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.41.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.41.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.41.0",
+ "@rollup/rollup-linux-arm64-musl": "4.41.0",
+ "@rollup/rollup-linux-loongarch64-gnu": "4.41.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.41.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.41.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.41.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.41.0",
+ "@rollup/rollup-linux-x64-gnu": "4.41.0",
+ "@rollup/rollup-linux-x64-musl": "4.41.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.41.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.41.0",
+ "@rollup/rollup-win32-x64-msvc": "4.41.0",
"fsevents": "~2.3.2"
}
},
@@ -3197,18 +3431,17 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
},
"node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -3221,6 +3454,7 @@
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
@@ -3233,6 +3467,7 @@
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -3242,6 +3477,7 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
+ "license": "ISC",
"engines": {
"node": ">=14"
},
@@ -3254,6 +3490,7 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -3263,6 +3500,7 @@
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
@@ -3276,51 +3514,21 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/spdx-correct": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
- "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
- "dev": true,
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.16",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz",
- "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==",
- "dev": true
- },
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -3335,6 +3543,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -3342,26 +3551,12 @@
"node": ">=8"
}
},
- "node_modules/strip-indent": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz",
- "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==",
- "dev": true,
- "dependencies": {
- "min-indent": "^1.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -3369,68 +3564,67 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/style-search": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
- "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
- "dev": true
- },
"node_modules/stylelint": {
- "version": "15.11.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz",
- "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==",
+ "version": "16.19.1",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz",
+ "integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "@csstools/css-parser-algorithms": "^2.3.1",
- "@csstools/css-tokenizer": "^2.2.0",
- "@csstools/media-query-list-parser": "^2.1.4",
- "@csstools/selector-specificity": "^3.0.0",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "@csstools/media-query-list-parser": "^4.0.2",
+ "@csstools/selector-specificity": "^5.0.0",
+ "@dual-bundle/import-meta-resolve": "^4.1.0",
"balanced-match": "^2.0.0",
"colord": "^2.9.3",
- "cosmiconfig": "^8.2.0",
- "css-functions-list": "^3.2.1",
- "css-tree": "^2.3.1",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.1",
+ "cosmiconfig": "^9.0.0",
+ "css-functions-list": "^3.2.3",
+ "css-tree": "^3.1.0",
+ "debug": "^4.3.7",
+ "fast-glob": "^3.3.3",
"fastest-levenshtein": "^1.0.16",
- "file-entry-cache": "^7.0.0",
+ "file-entry-cache": "^10.0.8",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.3.1",
- "ignore": "^5.2.4",
- "import-lazy": "^4.0.0",
+ "ignore": "^7.0.3",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.29.0",
+ "known-css-properties": "^0.36.0",
"mathml-tag-names": "^2.1.3",
- "meow": "^10.1.5",
- "micromatch": "^4.0.5",
+ "meow": "^13.2.0",
+ "micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.28",
- "postcss-resolve-nested-selector": "^0.1.1",
- "postcss-safe-parser": "^6.0.0",
- "postcss-selector-parser": "^6.0.13",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.5.3",
+ "postcss-resolve-nested-selector": "^0.1.6",
+ "postcss-safe-parser": "^7.0.1",
+ "postcss-selector-parser": "^7.1.0",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
"string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "style-search": "^0.1.0",
- "supports-hyperlinks": "^3.0.0",
+ "supports-hyperlinks": "^3.2.0",
"svg-tags": "^1.0.0",
- "table": "^6.8.1",
+ "table": "^6.9.0",
"write-file-atomic": "^5.0.1"
},
"bin": {
"stylelint": "bin/stylelint.mjs"
},
"engines": {
- "node": "^14.13.1 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/stylelint"
+ "node": ">=18.12.0"
}
},
"node_modules/stylelint-config-html": {
@@ -3438,6 +3632,7 @@
"resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz",
"integrity": "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12 || >=14"
},
@@ -3450,48 +3645,91 @@
}
},
"node_modules/stylelint-config-recommended": {
- "version": "13.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz",
- "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==",
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-16.0.0.tgz",
+ "integrity": "sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
"engines": {
- "node": "^14.13.1 || >=16.0.0"
+ "node": ">=18.12.0"
},
"peerDependencies": {
- "stylelint": "^15.10.0"
+ "stylelint": "^16.16.0"
}
},
"node_modules/stylelint-config-standard": {
- "version": "34.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz",
- "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==",
+ "version": "38.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-38.0.0.tgz",
+ "integrity": "sha512-uj3JIX+dpFseqd/DJx8Gy3PcRAJhlEZ2IrlFOc4LUxBX/PNMEQ198x7LCOE2Q5oT9Vw8nyc4CIL78xSqPr6iag==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/stylelint"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/stylelint"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "stylelint-config-recommended": "^13.0.0"
+ "stylelint-config-recommended": "^16.0.0"
},
"engines": {
- "node": "^14.13.1 || >=16.0.0"
+ "node": ">=18.12.0"
},
"peerDependencies": {
- "stylelint": "^15.10.0"
+ "stylelint": "^16.18.0"
}
},
"node_modules/stylelint/node_modules/balanced-match": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
"integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/stylelint/node_modules/file-entry-cache": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.1.tgz",
- "integrity": "sha512-uLfFktPmRetVCbHe5UPuekWrQ6hENufnA46qEGbfACkK5drjTTdQYUragRgMjHldcbYG+nslUerqMPjbBSHXjQ==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.0.tgz",
+ "integrity": "sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "flat-cache": "^3.1.1"
- },
+ "flat-cache": "^6.1.9"
+ }
+ },
+ "node_modules/stylelint/node_modules/flat-cache": {
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.9.tgz",
+ "integrity": "sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cacheable": "^1.9.0",
+ "flatted": "^3.3.3",
+ "hookified": "^1.8.2"
+ }
+ },
+ "node_modules/stylelint/node_modules/ignore": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz",
+ "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=12.0.0"
+ "node": ">= 4"
}
},
"node_modules/stylelint/node_modules/resolve-from": {
@@ -3499,6 +3737,7 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -3508,6 +3747,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -3516,62 +3756,70 @@
}
},
"node_modules/supports-hyperlinks": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz",
- "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz",
+ "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0",
"supports-color": "^7.0.0"
},
"engines": {
"node": ">=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1"
}
},
"node_modules/svelte": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.0.tgz",
- "integrity": "sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==",
- "dev": true,
- "dependencies": {
- "@ampproject/remapping": "^2.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.15",
- "@jridgewell/trace-mapping": "^0.3.18",
- "acorn": "^8.9.0",
- "aria-query": "^5.3.0",
- "axobject-query": "^3.2.1",
- "code-red": "^1.0.3",
- "css-tree": "^2.3.1",
- "estree-walker": "^3.0.3",
- "is-reference": "^3.0.1",
+ "version": "5.33.0",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.33.0.tgz",
+ "integrity": "sha512-COPJa+cxefgDShgTr3vcLKXdyBfuE96Z65D/EsuxDcU3fwqBxAN6bVjZ0LoVYyAYAShu4K96/k9BxxlAVO6fpg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.3.0",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@sveltejs/acorn-typescript": "^1.0.5",
+ "@types/estree": "^1.0.5",
+ "acorn": "^8.12.1",
+ "aria-query": "^5.3.1",
+ "axobject-query": "^4.1.0",
+ "clsx": "^2.1.1",
+ "esm-env": "^1.2.1",
+ "esrap": "^1.4.6",
+ "is-reference": "^3.0.3",
"locate-character": "^3.0.0",
- "magic-string": "^0.30.0",
- "periscopic": "^3.1.0"
+ "magic-string": "^0.30.11",
+ "zimmerframe": "^1.1.2"
},
"engines": {
- "node": ">=16"
+ "node": ">=18"
}
},
"node_modules/svelte-eslint-parser": {
- "version": "0.33.1",
- "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz",
- "integrity": "sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.2.0.tgz",
+ "integrity": "sha512-mbPtajIeuiyU80BEyGvwAktBeTX7KCr5/0l+uRGLq1dafwRNrjfM5kHGJScEBlPG3ipu6dJqfW/k0/fujvIEVw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "eslint-scope": "^7.0.0",
- "eslint-visitor-keys": "^3.0.0",
- "espree": "^9.0.0",
- "postcss": "^8.4.29",
- "postcss-scss": "^4.0.8"
+ "eslint-scope": "^8.2.0",
+ "eslint-visitor-keys": "^4.0.0",
+ "espree": "^10.0.0",
+ "postcss": "^8.4.49",
+ "postcss-scss": "^4.0.9",
+ "postcss-selector-parser": "^7.0.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://github.com/sponsors/ota-meshi"
},
"peerDependencies": {
- "svelte": "^3.37.0 || ^4.0.0"
+ "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0"
},
"peerDependenciesMeta": {
"svelte": {
@@ -3579,18 +3827,6 @@
}
}
},
- "node_modules/svelte-hmr": {
- "version": "0.15.3",
- "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz",
- "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==",
- "dev": true,
- "engines": {
- "node": "^12.20 || ^14.13.1 || >= 16"
- },
- "peerDependencies": {
- "svelte": "^3.19.0 || ^4.0.0"
- }
- },
"node_modules/svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
@@ -3598,10 +3834,11 @@
"dev": true
},
"node_modules/table": {
- "version": "6.8.1",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
- "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
+ "version": "6.9.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
+ "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"ajv": "^8.0.1",
"lodash.truncate": "^4.4.2",
@@ -3614,15 +3851,16 @@
}
},
"node_modules/table/node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
@@ -3633,36 +3871,65 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "node_modules/tinyglobby": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
+ "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-number": "^7.0.0"
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2"
},
"engines": {
- "node": ">=8.0"
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+ "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
}
},
- "node_modules/trim-newlines": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
- "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==",
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
}
},
"node_modules/type-check": {
@@ -3670,6 +3937,7 @@
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1"
},
@@ -3677,22 +3945,10 @@
"node": ">= 0.8.0"
}
},
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
"dev": true,
"funding": [
{
@@ -3708,9 +3964,10 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -3724,6 +3981,7 @@
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
@@ -3732,53 +3990,55 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
+ "license": "MIT"
},
"node_modules/vite": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz",
- "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==",
+ "version": "6.3.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
+ "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "esbuild": "^0.18.10",
- "postcss": "^8.4.27",
- "rollup": "^3.27.1"
+ "esbuild": "^0.25.0",
+ "fdir": "^6.4.4",
+ "picomatch": "^4.0.2",
+ "postcss": "^8.5.3",
+ "rollup": "^4.34.9",
+ "tinyglobby": "^0.2.13"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^14.18.0 || >=16.0.0"
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
- "fsevents": "~2.3.2"
+ "fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": ">= 14",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "jiti": ">=1.21.0",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
+ "sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
- "terser": "^5.4.0"
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
+ "jiti": {
+ "optional": true
+ },
"less": {
"optional": true
},
@@ -3788,6 +4048,9 @@
"sass": {
"optional": true
},
+ "sass-embedded": {
+ "optional": true
+ },
"stylus": {
"optional": true
},
@@ -3796,16 +4059,55 @@
},
"terser": {
"optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/fdir": {
+ "version": "6.4.4",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
+ "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
}
}
},
+ "node_modules/vite/node_modules/picomatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+ "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/vitefu": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz",
- "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.6.tgz",
+ "integrity": "sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==",
"dev": true,
+ "license": "MIT",
+ "workspaces": [
+ "tests/deps/*",
+ "tests/projects/*"
+ ],
"peerDependencies": {
- "vite": "^3.0.0 || ^4.0.0 || ^5.0.0"
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
},
"peerDependenciesMeta": {
"vite": {
@@ -3818,6 +4120,7 @@
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -3828,17 +4131,22 @@
"node": ">= 8"
}
},
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
"node_modules/write-file-atomic": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
"integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
"signal-exit": "^4.0.1"
@@ -3847,28 +4155,19 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
+ "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
"dev": true,
+ "license": "ISC",
+ "optional": true,
+ "peer": true,
+ "bin": {
+ "yaml": "bin.mjs"
+ },
"engines": {
- "node": ">=10"
+ "node": ">= 14.6"
}
},
"node_modules/yocto-queue": {
@@ -3876,12 +4175,20 @@
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
+ },
+ "node_modules/zimmerframe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
+ "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==",
+ "dev": true,
+ "license": "MIT"
}
}
}
diff --git a/package.json b/package.json
index c2802776..6f9ef87f 100644
--- a/package.json
+++ b/package.json
@@ -2,30 +2,36 @@
"name": "userscripts",
"private": true,
"type": "module",
+ "sideEffects": false,
"scripts": {
"dev": "vite",
- "build": "npm run build:app && npm run build:ext",
- "build:app": "node scripts/build-app.js",
- "build:ext": "node scripts/build-ext-v4.js",
+ "dev:mac-safari": "SAFARI_PLATFORM=mac node scripts/dev-safari.js",
+ "dev:ios-safari": "SAFARI_PLATFORM=ios node scripts/dev-safari.js",
+ "build:mac-safari-15": "SAFARI_PLATFORM=mac node scripts/build-safari-15.js",
+ "build:ios-safari-15": "SAFARI_PLATFORM=ios node scripts/build-safari-15.js",
+ "build:mac-safari-16.4": "SAFARI_PLATFORM=mac node scripts/build-safari-16.4.js",
+ "build:ios-safari-16.4": "SAFARI_PLATFORM=ios node scripts/build-safari-16.4.js",
"lint:js": "eslint . && prettier --check . --plugin prettier-plugin-svelte",
"lint:css": "stylelint '**/*.{css,html,svelte}'",
"prettier": "prettier --write . --plugin prettier-plugin-svelte"
},
"devDependencies": {
- "@sveltejs/vite-plugin-svelte": "^2.4.5",
- "@types/webextension-polyfill": "^0.10.5",
- "autoprefixer": "^10.4.16",
+ "@sveltejs/vite-plugin-svelte": "^5.0.3",
+ "@types/webextension-polyfill": "^0.12.3",
+ "autoprefixer": "^10.4.21",
"cm-show-invisibles": "^3.1.0",
- "codemirror": "^5.65.15",
- "eslint": "^8.52.0",
- "eslint-config-prettier": "^9.0.0",
- "eslint-plugin-svelte": "^2.34.0",
- "prettier": "3.0.3",
- "prettier-plugin-svelte": "3.0.3",
- "stylelint": "^15.11.0",
+ "codemirror": "^5.65.19",
+ "eslint": "^9.27.0",
+ "eslint-config-prettier": "^10.1.5",
+ "eslint-plugin-svelte": "^3.9.0",
+ "globals": "^16.1.0",
+ "marked": "^15.0.12",
+ "prettier": "3.5.3",
+ "prettier-plugin-svelte": "3.4.0",
+ "stylelint": "^16.19.1",
"stylelint-config-html": "^1.1.0",
- "stylelint-config-standard": "^34.0.0",
- "svelte": "4.2.0",
- "vite": "^4.5.0"
+ "stylelint-config-standard": "^38.0.0",
+ "svelte": "^5.33.0",
+ "vite": "^6.3.5"
}
}
diff --git a/public/ext/safari-15/images/icon-128.png b/public/ext/safari-15/images/icon-128.png
new file mode 100644
index 00000000..f0030ddd
Binary files /dev/null and b/public/ext/safari-15/images/icon-128.png differ
diff --git a/public/ext/safari-15/images/icon-256.png b/public/ext/safari-15/images/icon-256.png
new file mode 100644
index 00000000..dea9320e
Binary files /dev/null and b/public/ext/safari-15/images/icon-256.png differ
diff --git a/public/ext/safari-15/images/icon-48.png b/public/ext/safari-15/images/icon-48.png
new file mode 100644
index 00000000..3955fd6b
Binary files /dev/null and b/public/ext/safari-15/images/icon-48.png differ
diff --git a/public/ext/safari-15/images/icon-512.png b/public/ext/safari-15/images/icon-512.png
new file mode 100644
index 00000000..3d0c5854
Binary files /dev/null and b/public/ext/safari-15/images/icon-512.png differ
diff --git a/public/ext/safari-15/images/icon-64.png b/public/ext/safari-15/images/icon-64.png
new file mode 100644
index 00000000..d1ffa334
Binary files /dev/null and b/public/ext/safari-15/images/icon-64.png differ
diff --git a/public/ext/safari-15/images/icon-96.png b/public/ext/safari-15/images/icon-96.png
new file mode 100644
index 00000000..411a520a
Binary files /dev/null and b/public/ext/safari-15/images/icon-96.png differ
diff --git a/public/ext/safari-15/images/toolbar-icon-16.png b/public/ext/safari-15/images/toolbar-icon-16.png
new file mode 100644
index 00000000..cee9abb0
Binary files /dev/null and b/public/ext/safari-15/images/toolbar-icon-16.png differ
diff --git a/public/ext/safari-15/images/toolbar-icon-32.png b/public/ext/safari-15/images/toolbar-icon-32.png
new file mode 100644
index 00000000..1de18ba5
Binary files /dev/null and b/public/ext/safari-15/images/toolbar-icon-32.png differ
diff --git a/public/ext/safari-15/images/toolbar-icon-48.png b/public/ext/safari-15/images/toolbar-icon-48.png
new file mode 100644
index 00000000..e1367b2b
Binary files /dev/null and b/public/ext/safari-15/images/toolbar-icon-48.png differ
diff --git a/public/ext/safari-15/manifest.json b/public/ext/safari-15/manifest.json
new file mode 100644
index 00000000..1f64988a
--- /dev/null
+++ b/public/ext/safari-15/manifest.json
@@ -0,0 +1,62 @@
+{
+ "manifest_version": 2,
+ "default_locale": "en",
+ "name": "__MSG_extension_name__",
+ "description": "__MSG_extension_description__",
+ "version": "_VERSION_",
+ "icons": {
+ "48": "images/icon-48.png",
+ "64": "images/icon-64.png",
+ "96": "images/icon-96.png",
+ "128": "images/icon-128.png",
+ "256": "images/icon-256.png",
+ "512": "images/icon-512.png"
+ },
+ "background": {
+ "scripts": ["dist/background.js"],
+ "persistent": false
+ },
+ "browser_action": {
+ "default_popup": "dist/entry-ext-action-popup.html",
+ "default_icon": {
+ "16": "images/toolbar-icon-16.png",
+ "32": "images/toolbar-icon-32.png",
+ "48": "images/toolbar-icon-48.png"
+ }
+ },
+ "options_ui": {
+ "page": "dist/entry-ext-extension-page.html#state=settings"
+ },
+ "content_scripts": [
+ {
+ "js": ["dist/content-scripts/userscripts.js"],
+ "matches": [""],
+ "run_at": "document_start",
+ "all_frames": true
+ },
+ {
+ "js": ["dist/content-scripts/dot-user-js.js"],
+ "matches": ["*://*/*.user.js", "*://*/*.user.js?*"],
+ "run_at": "document_start"
+ },
+ {
+ "js": ["dist/content-scripts/script-market.js"],
+ "matches": ["*://*.greasyfork.org/*"],
+ "exclude_matches": ["*://*/*.user.js", "*://*/*.user.js?*"],
+ "run_at": "document_end"
+ }
+ ],
+ "permissions": [
+ "",
+ "clipboardWrite",
+ "contextMenus",
+ "declarativeNetRequest",
+ "declarativeNetRequestWithHostAccess",
+ "menus",
+ "nativeMessaging",
+ "storage",
+ "tabs",
+ "unlimitedStorage",
+ "webNavigation"
+ ]
+}
diff --git a/public/ext/safari-16.4/images/128.svg b/public/ext/safari-16.4/images/128.svg
new file mode 100644
index 00000000..c6ec62ad
--- /dev/null
+++ b/public/ext/safari-16.4/images/128.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/ext/safari-16.4/images/action.svg b/public/ext/safari-16.4/images/action.svg
new file mode 100644
index 00000000..ad16f09d
--- /dev/null
+++ b/public/ext/safari-16.4/images/action.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/ext/safari-16.4/manifest.json b/public/ext/safari-16.4/manifest.json
new file mode 100644
index 00000000..ab445895
--- /dev/null
+++ b/public/ext/safari-16.4/manifest.json
@@ -0,0 +1,51 @@
+{
+ "manifest_version": 2,
+ "default_locale": "en",
+ "name": "__MSG_extension_name__",
+ "description": "__MSG_extension_description__",
+ "version": "_VERSION_",
+ "icons": {
+ "48": "images/128.svg",
+ "96": "images/128.svg",
+ "128": "images/128.svg",
+ "256": "images/128.svg",
+ "512": "images/128.svg"
+ },
+ "background": {
+ "scripts": ["dist/background.js"],
+ "persistent": false
+ },
+ "browser_action": {
+ "default_popup": "dist/entry-ext-action-popup.html",
+ "default_icon": "images/action.svg"
+ },
+ "options_ui": {
+ "page": "dist/entry-ext-extension-page.html#state=settings"
+ },
+ "content_scripts": [
+ {
+ "js": ["dist/content-scripts/userscripts.js"],
+ "matches": [""],
+ "run_at": "document_start",
+ "all_frames": true
+ }
+ ],
+ "permissions": [
+ "",
+ "clipboardWrite",
+ "contextMenus",
+ "declarativeNetRequestWithHostAccess",
+ "menus",
+ "nativeMessaging",
+ "scripting",
+ "storage",
+ "tabs",
+ "unlimitedStorage",
+ "webNavigation"
+ ],
+ "browser_specific_settings": {
+ "safari": {
+ "strict_min_version": "16.4"
+ }
+ }
+}
diff --git a/public/ext/safari-dev/manifest-ios.json b/public/ext/safari-dev/manifest-ios.json
new file mode 100644
index 00000000..e1cac050
--- /dev/null
+++ b/public/ext/safari-dev/manifest-ios.json
@@ -0,0 +1,52 @@
+{
+ "manifest_version": 2,
+ "default_locale": "en",
+ "name": "__MSG_extension_name__",
+ "description": "__MSG_extension_description__",
+ "version": "_VERSION_",
+ "icons": {
+ "48": "images/128.svg",
+ "96": "images/128.svg",
+ "128": "images/128.svg",
+ "256": "images/128.svg",
+ "512": "images/128.svg"
+ },
+ "background": {
+ "page": "dist/entry-ext-background.html",
+ "persistent": false
+ },
+ "browser_action": {
+ "default_popup": "dist/entry-ext-action-popup.html",
+ "default_icon": "images/action.svg"
+ },
+ "options_ui": {
+ "page": "dist/entry-ext-extension-page.html#state=settings"
+ },
+ "content_scripts": [
+ {
+ "js": ["dist/content-scripts/userscripts.js"],
+ "matches": [""],
+ "run_at": "document_start",
+ "all_frames": true
+ }
+ ],
+ "permissions": [
+ "",
+ "clipboardWrite",
+ "contextMenus",
+ "declarativeNetRequestWithHostAccess",
+ "menus",
+ "nativeMessaging",
+ "scripting",
+ "storage",
+ "tabs",
+ "unlimitedStorage",
+ "webNavigation"
+ ],
+ "browser_specific_settings": {
+ "safari": {
+ "strict_min_version": "16.4"
+ }
+ },
+ "content_security_policy": "script-src 'self' https://localhost:55173 https://userscripts.test:55173"
+}
diff --git a/public/ext/safari-dev/manifest-mac.json b/public/ext/safari-dev/manifest-mac.json
new file mode 100644
index 00000000..e469aa66
--- /dev/null
+++ b/public/ext/safari-dev/manifest-mac.json
@@ -0,0 +1,52 @@
+{
+ "manifest_version": 2,
+ "default_locale": "en",
+ "name": "__MSG_extension_name__",
+ "description": "__MSG_extension_description__",
+ "version": "_VERSION_",
+ "icons": {
+ "48": "images/128.svg",
+ "96": "images/128.svg",
+ "128": "images/128.svg",
+ "256": "images/128.svg",
+ "512": "images/128.svg"
+ },
+ "background": {
+ "page": "dist/entry-ext-background.html",
+ "persistent": true
+ },
+ "browser_action": {
+ "default_popup": "dist/entry-ext-action-popup.html",
+ "default_icon": "images/action.svg"
+ },
+ "options_ui": {
+ "page": "dist/entry-ext-extension-page.html#state=settings"
+ },
+ "content_scripts": [
+ {
+ "js": ["dist/content-scripts/userscripts.js"],
+ "matches": [""],
+ "run_at": "document_start",
+ "all_frames": true
+ }
+ ],
+ "permissions": [
+ "",
+ "clipboardWrite",
+ "contextMenus",
+ "declarativeNetRequestWithHostAccess",
+ "menus",
+ "nativeMessaging",
+ "scripting",
+ "storage",
+ "tabs",
+ "unlimitedStorage",
+ "webNavigation"
+ ],
+ "browser_specific_settings": {
+ "safari": {
+ "strict_min_version": "16.4"
+ }
+ },
+ "content_security_policy": "script-src 'self' https://localhost:55173 https://userscripts.test:55173"
+}
diff --git a/public/ext/shared-dev/images/128.svg b/public/ext/shared-dev/images/128.svg
new file mode 100644
index 00000000..76189438
--- /dev/null
+++ b/public/ext/shared-dev/images/128.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/ext/shared-dev/images/action.svg b/public/ext/shared-dev/images/action.svg
new file mode 100644
index 00000000..3789dd89
--- /dev/null
+++ b/public/ext/shared-dev/images/action.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/ext/shared/_locales/en/messages.json b/public/ext/shared/_locales/en/messages.json
new file mode 100644
index 00000000..c17c6cad
--- /dev/null
+++ b/public/ext/shared/_locales/en/messages.json
@@ -0,0 +1,268 @@
+{
+ "extension_name": {
+ "message": "_NAME_",
+ "description": "The display name for the extension."
+ },
+ "extension_description": {
+ "message": "Save and run javascript for the web pages you visit",
+ "description": "Description of what the extension does."
+ },
+ "settings": {
+ "message": "Settings"
+ },
+ "settings_section_editor": {
+ "message": "Editor Settings"
+ },
+ "settings_section_general": {
+ "message": "General Settings"
+ },
+ "settings_section_native": {
+ "message": "Native Settings"
+ },
+ "settings_section_tools": {
+ "message": "Tools"
+ },
+ "settings_section_about": {
+ "message": "About"
+ },
+ "settings_editor_auto_hint": {
+ "message": "Auto Hint"
+ },
+ "settings_editor_auto_hint_desc": {
+ "message": "Automatically shows completion hints while editing"
+ },
+ "settings_editor_close_brackets": {
+ "message": "Auto Close Brackets"
+ },
+ "settings_editor_close_brackets_desc": {
+ "message": "Toggles on/off auto closing of brackets in the editor, this affects the following characters: () [] {} \"\" ''"
+ },
+ "settings_editor_javascript_lint": {
+ "message": "JavaScript Linter"
+ },
+ "settings_editor_javascript_lint_desc": {
+ "message": "Toggles the basic javascript linting within the editor"
+ },
+ "settings_editor_list_descriptions": {
+ "message": "Sidebar Item Descriptions"
+ },
+ "settings_editor_list_descriptions_desc": {
+ "message": "Show or hides the item descriptions in the sidebar"
+ },
+ "settings_editor_list_sort": {
+ "message": "Sidebar Item Sort Order"
+ },
+ "settings_editor_list_sort_desc": {
+ "message": "Display order of items in the sidebar"
+ },
+ "settings_editor_list_sort_nameAsc": {
+ "message": "Scripts Name: Asc"
+ },
+ "settings_editor_list_sort_nameDesc": {
+ "message": "Scripts Name: Desc"
+ },
+ "settings_editor_list_sort_lastModifiedAsc": {
+ "message": "Last Modified: Asc"
+ },
+ "settings_editor_list_sort_lastModifiedDesc": {
+ "message": "Last Modified: Desc"
+ },
+ "settings_editor_show_whitespace": {
+ "message": "Show Whitespace Characters"
+ },
+ "settings_editor_show_whitespace_desc": {
+ "message": "Toggles the display of invisible characters in the editor"
+ },
+ "settings_editor_tab_size": {
+ "message": "Tab Size"
+ },
+ "settings_editor_tab_size_desc": {
+ "message": "Choose the number of spaces a tab is equal to when rendering code"
+ },
+ "settings_global_active": {
+ "message": "Enable Injection"
+ },
+ "settings_global_active_desc": {
+ "message": "Toggle on/off script injection for the pages you visit"
+ },
+ "settings_theme_mode": {
+ "message": "Theme mode"
+ },
+ "settings_theme_mode_desc": {
+ "message": "Toggle theme mode"
+ },
+ "settings_theme_mode_auto": {
+ "message": "Auto (System)"
+ },
+ "settings_theme_mode_dark": {
+ "message": "Dark"
+ },
+ "settings_theme_mode_light": {
+ "message": "Light"
+ },
+ "settings_theme_mode_custom": {
+ "message": "Custom"
+ },
+ "settings_global_exclude_match": {
+ "message": "Global Exclude Match patterns"
+ },
+ "settings_global_exclude_match_desc": {
+ "message": "This input accepts a whitespace (spaces, newlines etc.) separated list of @match patterns, a page url that matches against a pattern in this list will be ignored for script injection"
+ },
+ "settings_global_exclude_match_done": {
+ "message": "Done"
+ },
+ "settings_global_exclude_match_saving": {
+ "message": "Saving..."
+ },
+ "settings_global_exclude_match_placeholder": {
+ "message": "list of @match patterns, for example: \n*://*/*foo.bar\n*://*/*foo.bar?*\n*://*.example.net/*\nhttps://example.net/*/foo/*/\nhttps://*.example.net/a/b/c/?foo=/"
+ },
+ "settings_global_exclude_match_refer": {
+ "message": "Please refer to:"
+ },
+ "settings_scripts_update_automation": {
+ "message": "Scripts Updates Automatically"
+ },
+ "settings_scripts_update_automation_desc": {
+ "message": "Script silently auto-updates in the background, which is dangerous and may introduce unconfirmed malicious code"
+ },
+ "settings_scripts_update_check_interval": {
+ "message": "Scripts Update Check Interval"
+ },
+ "settings_scripts_update_check_interval_desc": {
+ "message": "Disable or set user scripts update check interval (days)"
+ },
+ "settings_scripts_update_check_interval_0": {
+ "message": "Never"
+ },
+ "settings_scripts_update_check_lasttime": {
+ "message": "Scripts Update Check Lasttime"
+ },
+ "settings_scripts_update_check_lasttime_desc": {
+ "message": "The lasttime for script update check in background"
+ },
+ "settings_settings_sync": {
+ "message": "Sync Settings"
+ },
+ "settings_settings_sync_desc": {
+ "message": "Sync settings across devices"
+ },
+ "settings_augmented_userjs_install": {
+ "message": "Enhanced installation prompts"
+ },
+ "settings_augmented_userjs_install_desc": {
+ "message": "Automatically pop up the installation interface when opening a user script URL (.user.js), and takes over the install button of the user scripts market"
+ },
+ "settings_toolbar_badge_count": {
+ "message": "Show Toolbar Count Badge"
+ },
+ "settings_toolbar_badge_count_desc": {
+ "message": "Displays a badge on the toolbar icon with a number that represents how many enabled scripts match the url for the page you are on"
+ },
+ "settings_scripts_directory": {
+ "message": "Save Location"
+ },
+ "settings_scripts_directory_desc": {
+ "message": "Path to the folder where user scripts are stored"
+ },
+ "settings_set_scripts_directory": {
+ "message": "Change save location"
+ },
+ "settings_section_tools_import": {
+ "message": "Import"
+ },
+ "settings_section_tools_export": {
+ "message": "Export"
+ },
+ "settings_section_tools_reset": {
+ "message": "Reset"
+ },
+ "settings_section_tools_goback": {
+ "message": "Go Back"
+ },
+ "settings_section_tools_reset_all": {
+ "message": "Reset All Settings"
+ },
+ "settings_section_tools_reset_single": {
+ "message": "Reset"
+ },
+ "settings_section_tools_reset_section": {
+ "message": "Reset Section"
+ },
+ "settings_scripts_tools_desc": {
+ "message": "These tools can help you import and export \"settings data\". Reset single, section or all settings."
+ },
+ "settings_about_text1": {
+ "message": "Get more information about this extension by visiting the open source project:"
+ },
+ "settings_about_text2": {
+ "message": "If you enjoy using this extension, please consider leaving a review on the App Store or sign up to beta test new versions:"
+ },
+ "settings_about_button_repo": {
+ "message": "Code repository"
+ },
+ "settings_about_button_docs": {
+ "message": "Documentation"
+ },
+ "settings_about_button_issues": {
+ "message": "Report bugs"
+ },
+ "settings_about_button_store": {
+ "message": "Open in the App Store"
+ },
+ "settings_about_button_beta": {
+ "message": "Sign up for beta testing"
+ },
+ "utils_check_match_patterns_0": {
+ "message": "The match pattern will match all URLs"
+ },
+ "utils_check_match_patterns_1": {
+ "message": "The scheme component should one of *, https, http"
+ },
+ "utils_check_match_patterns_2": {
+ "message": "The scheme and host should separated by `://`"
+ },
+ "utils_check_match_patterns_3": {
+ "message": "The match pattern has no path component"
+ },
+ "utils_check_match_patterns_4": {
+ "message": "The `*.` should followed by part of the hostname"
+ },
+ "utils_check_match_patterns_5": {
+ "message": "The host component length should be 1-255"
+ },
+ "utils_check_match_patterns_6": {
+ "message": "The `*` in host component should be independent or `*.` at the start"
+ },
+ "utils_check_match_patterns_7": {
+ "message": "The host component contains empty label(s)"
+ },
+ "utils_check_match_patterns_8": {
+ "message": "The hostname label cannot start or end with `-` character"
+ },
+ "utils_check_match_patterns_9": {
+ "message": "The maximum length of the hostname label cannot exceed 63"
+ },
+ "utils_check_match_patterns_10": {
+ "message": "The host component contains invalid character(s): $1"
+ },
+ "utils_check_match_patterns_11": {
+ "message": "The path component contains invalid character(s): $1"
+ },
+ "msg_invalid_match_pattern": {
+ "message": "Invalid match pattern"
+ },
+ "msg_invalid_backup_file": {
+ "message": "Not a valid backup file"
+ },
+ "msg_backup_import_finish": {
+ "message": "Import completed! ✅"
+ },
+ "msg_backup_import_failed": {
+ "message": "Import failed, please check the error log in the console"
+ },
+ "msg_settings_reset_finish": {
+ "message": "Reset all settings completed! ✅"
+ }
+}
diff --git a/public/ext/shared/_locales/zh/messages.json b/public/ext/shared/_locales/zh/messages.json
new file mode 100644
index 00000000..7338f30a
--- /dev/null
+++ b/public/ext/shared/_locales/zh/messages.json
@@ -0,0 +1,246 @@
+{
+ "extension_description": {
+ "message": "用户脚本和样式管理器",
+ "description": "Description of what the extension does."
+ },
+ "settings": {
+ "message": "设置"
+ },
+ "settings_section_editor": {
+ "message": "编辑器设置"
+ },
+ "settings_section_general": {
+ "message": "通用设置"
+ },
+ "settings_section_native": {
+ "message": "本地设置"
+ },
+ "settings_section_tools": {
+ "message": "工具"
+ },
+ "settings_section_about": {
+ "message": "关于"
+ },
+ "settings_editor_auto_hint": {
+ "message": "自动提示(Hint)"
+ },
+ "settings_editor_auto_hint_desc": {
+ "message": "编辑时自动显示完成提示"
+ },
+ "settings_editor_close_brackets": {
+ "message": "自动关闭括号"
+ },
+ "settings_editor_close_brackets_desc": {
+ "message": "在编辑器中启用自动关闭括号,这会影响以下字符:() [] {} \"\" ''"
+ },
+ "settings_editor_javascript_lint": {
+ "message": "JavaScript Linter"
+ },
+ "settings_editor_javascript_lint_desc": {
+ "message": "在编辑器中启用基本的 JavaScript Linting(代码检查)"
+ },
+ "settings_editor_list_descriptions": {
+ "message": "侧栏项目描述"
+ },
+ "settings_editor_list_descriptions_desc": {
+ "message": "显示或隐藏侧边栏中项目的描述"
+ },
+ "settings_editor_list_sort": {
+ "message": "侧栏项目排序"
+ },
+ "settings_editor_list_sort_desc": {
+ "message": "侧边栏中项目的显示顺序"
+ },
+ "settings_editor_list_sort_nameAsc": {
+ "message": "项目名称: 升序"
+ },
+ "settings_editor_list_sort_nameDesc": {
+ "message": "项目名称: 降序"
+ },
+ "settings_editor_list_sort_lastModifiedAsc": {
+ "message": "最后修改: 升序"
+ },
+ "settings_editor_list_sort_lastModifiedDesc": {
+ "message": "最后修改: 降序"
+ },
+ "settings_editor_show_whitespace": {
+ "message": "显示空白字符"
+ },
+ "settings_editor_show_whitespace_desc": {
+ "message": "切换编辑器中不可见字符的显示"
+ },
+ "settings_editor_tab_size": {
+ "message": "制表符大小"
+ },
+ "settings_editor_tab_size_desc": {
+ "message": "选择渲染代码时制表符等于的空格数"
+ },
+ "settings_global_active": {
+ "message": "启用注入"
+ },
+ "settings_global_active_desc": {
+ "message": "全局脚本注入的开启或关闭"
+ },
+ "settings_global_exclude_match": {
+ "message": "全局排除匹配模式列表"
+ },
+ "settings_global_exclude_match_desc": {
+ "message": "此输入接受以空白符(空格、换行等)分隔的 @match 模式列表,与此列表中的模式匹配的页面 URL 将在脚本注入时被忽略"
+ },
+ "settings_global_exclude_match_done": {
+ "message": "完成"
+ },
+ "settings_global_exclude_match_saving": {
+ "message": "保存中..."
+ },
+ "settings_global_exclude_match_placeholder": {
+ "message": "@match 模式列表,例如:\n*://*/*foo.bar\n*://*/*foo.bar?*\n*://*.example.net/*\nhttps://example.net/*/foo/*/\nhttps://*.example.net/a/b/c/?foo=/"
+ },
+ "settings_global_exclude_match_refer": {
+ "message": "匹配模式结构请参考:"
+ },
+ "settings_scripts_update_automation": {
+ "message": "自动更新脚本"
+ },
+ "settings_scripts_update_automation_desc": {
+ "message": "脚本在后台静默自动更新,这是危险的,可能引入未经确认的恶意代码"
+ },
+ "settings_scripts_update_check_interval": {
+ "message": "脚本更新检查间隔"
+ },
+ "settings_scripts_update_check_interval_desc": {
+ "message": "禁用或设置用户脚本更新检查间隔(天)"
+ },
+ "settings_scripts_update_check_interval_0": {
+ "message": "从不"
+ },
+ "settings_scripts_update_check_lasttime": {
+ "message": "脚本更新上次检查时间"
+ },
+ "settings_scripts_update_check_lasttime_desc": {
+ "message": "后台脚本更新检查上次时间"
+ },
+ "settings_settings_sync": {
+ "message": "同步设置"
+ },
+ "settings_settings_sync_desc": {
+ "message": "跨设备同步设置"
+ },
+ "settings_augmented_userjs_install": {
+ "message": "增强的脚本安装提示"
+ },
+ "settings_augmented_userjs_install_desc": {
+ "message": "当打开一个用户脚本 URL(.user.js)时自动弹出安装界面,并接管用户脚本市场的安装按钮"
+ },
+ "settings_toolbar_badge_count": {
+ "message": "工具栏图标显示计数徽章"
+ },
+ "settings_toolbar_badge_count_desc": {
+ "message": "在工具栏图标上显示一个徽章,其中的数字代表有多少个已启用的脚本与您所在页面的 URL 匹配"
+ },
+ "settings_scripts_directory": {
+ "message": "保存位置"
+ },
+ "settings_scripts_directory_desc": {
+ "message": "存储用户脚本的文件夹路径"
+ },
+ "settings_set_scripts_directory": {
+ "message": "更改保存位置"
+ },
+ "settings_section_tools_import": {
+ "message": "导入"
+ },
+ "settings_section_tools_export": {
+ "message": "导出"
+ },
+ "settings_section_tools_reset": {
+ "message": "还原"
+ },
+ "settings_section_tools_goback": {
+ "message": "返回"
+ },
+ "settings_section_tools_reset_all": {
+ "message": "还原所有设置"
+ },
+ "settings_section_tools_reset_single": {
+ "message": "还原"
+ },
+ "settings_section_tools_reset_section": {
+ "message": "还原该组"
+ },
+ "settings_scripts_tools_desc": {
+ "message": "这些工具可以帮助您导入和导出“设置数据”。重置单个、一组或所有设置。"
+ },
+ "settings_about_text1": {
+ "message": "获取有关此扩展的更多信息,请访问本开源项目:"
+ },
+ "settings_about_text2": {
+ "message": "如果您喜欢使用此扩展,请考虑在 App Store 上留下您的评论或注册 Beta 测试新版本:"
+ },
+ "settings_about_button_repo": {
+ "message": "代码库"
+ },
+ "settings_about_button_docs": {
+ "message": "文档"
+ },
+ "settings_about_button_issues": {
+ "message": "报告错误"
+ },
+ "settings_about_button_store": {
+ "message": "在 App Store 中打开"
+ },
+ "settings_about_button_beta": {
+ "message": "注册 Beta 测试版"
+ },
+ "utils_check_match_patterns_0": {
+ "message": "此匹配模式将匹配所有 URL"
+ },
+ "utils_check_match_patterns_1": {
+ "message": "这 scheme 部分应当为 *、https、http 之一"
+ },
+ "utils_check_match_patterns_2": {
+ "message": "这 scheme 和 host 部分应当用 `://` 分隔"
+ },
+ "utils_check_match_patterns_3": {
+ "message": "匹配模式缺少 path 部分(至少应当有`/`)"
+ },
+ "utils_check_match_patterns_4": {
+ "message": "这 `*.` 后面应当跟随主机名的一部分"
+ },
+ "utils_check_match_patterns_5": {
+ "message": "这 host 部分长度应当为 1-255"
+ },
+ "utils_check_match_patterns_6": {
+ "message": "这 host 部分中的 `*` 应该是独立的或为 `*.` 在开头"
+ },
+ "utils_check_match_patterns_7": {
+ "message": "这 host 部分包含一个或多个空标签"
+ },
+ "utils_check_match_patterns_8": {
+ "message": "主机名标签不能以 `-` 字符开头或结尾"
+ },
+ "utils_check_match_patterns_9": {
+ "message": "主机名标签最大长度不能超过 63"
+ },
+ "utils_check_match_patterns_10": {
+ "message": "这 host 部分包含无效字符:$1"
+ },
+ "utils_check_match_patterns_11": {
+ "message": "这 path 部分包含无效字符:$1"
+ },
+ "msg_invalid_match_pattern": {
+ "message": "无效的匹配模式"
+ },
+ "msg_invalid_backup_file": {
+ "message": "无效的备份文件"
+ },
+ "msg_backup_import_finish": {
+ "message": "导入完成!✅"
+ },
+ "msg_backup_import_failed": {
+ "message": "导入失败,请在控制台中检查错误日志"
+ },
+ "msg_settings_reset_finish": {
+ "message": "还原所有设置完成!✅"
+ }
+}
diff --git a/public/ext/shared/_locales/zh_HK b/public/ext/shared/_locales/zh_HK
new file mode 120000
index 00000000..dec9132e
--- /dev/null
+++ b/public/ext/shared/_locales/zh_HK
@@ -0,0 +1 @@
+zh_TW
\ No newline at end of file
diff --git a/public/ext/shared/_locales/zh_MO b/public/ext/shared/_locales/zh_MO
new file mode 120000
index 00000000..dec9132e
--- /dev/null
+++ b/public/ext/shared/_locales/zh_MO
@@ -0,0 +1 @@
+zh_TW
\ No newline at end of file
diff --git a/public/ext/shared/_locales/zh_TW/messages.json b/public/ext/shared/_locales/zh_TW/messages.json
new file mode 100644
index 00000000..07853cb3
--- /dev/null
+++ b/public/ext/shared/_locales/zh_TW/messages.json
@@ -0,0 +1,246 @@
+{
+ "extension_description": {
+ "message": "使用者腳本和樣式管理器",
+ "description": "Description of what the extension does."
+ },
+ "settings": {
+ "message": "設定"
+ },
+ "settings_section_editor": {
+ "message": "編輯器設定"
+ },
+ "settings_section_general": {
+ "message": "一般設定"
+ },
+ "settings_section_native": {
+ "message": "本地設定"
+ },
+ "settings_section_tools": {
+ "message": "工具"
+ },
+ "settings_section_about": {
+ "message": "關於"
+ },
+ "settings_editor_auto_hint": {
+ "message": "自動提示(Hint)"
+ },
+ "settings_editor_auto_hint_desc": {
+ "message": "編輯時自動顯示完成提示"
+ },
+ "settings_editor_close_brackets": {
+ "message": "自動關閉括號"
+ },
+ "settings_editor_close_brackets_desc": {
+ "message": "在編輯器中啟用自動關閉括號,這會影響以下字元:() [] {} \"\" ''"
+ },
+ "settings_editor_javascript_lint": {
+ "message": "JavaScript Linter"
+ },
+ "settings_editor_javascript_lint_desc": {
+ "message": "在編輯器中啟用基本的 JavaScript Linting(程式碼檢查)"
+ },
+ "settings_editor_list_descriptions": {
+ "message": "側欄項目描述"
+ },
+ "settings_editor_list_descriptions_desc": {
+ "message": "顯示或隱藏側邊欄中項目的描述"
+ },
+ "settings_editor_list_sort": {
+ "message": "側欄項目排序"
+ },
+ "settings_editor_list_sort_desc": {
+ "message": "側邊欄中項目的顯示順序"
+ },
+ "settings_editor_list_sort_nameAsc": {
+ "message": "項目名稱: 升序"
+ },
+ "settings_editor_list_sort_nameDesc": {
+ "message": "項目名稱: 降序"
+ },
+ "settings_editor_list_sort_lastModifiedAsc": {
+ "message": "最後修改: 升序"
+ },
+ "settings_editor_list_sort_lastModifiedDesc": {
+ "message": "最後修改: 降序"
+ },
+ "settings_editor_show_whitespace": {
+ "message": "顯示空白字元"
+ },
+ "settings_editor_show_whitespace_desc": {
+ "message": "切換編輯器中不可見字元的顯示"
+ },
+ "settings_editor_tab_size": {
+ "message": "製表符大小"
+ },
+ "settings_editor_tab_size_desc": {
+ "message": "選擇渲染程式碼時製表符等於的空格數"
+ },
+ "settings_global_active": {
+ "message": "啟用注入"
+ },
+ "settings_global_active_desc": {
+ "message": "全域性腳本注入的開啟或關閉"
+ },
+ "settings_global_exclude_match": {
+ "message": "全域性排除匹配模式列表"
+ },
+ "settings_global_exclude_match_desc": {
+ "message": "此輸入接受以空白符(空格、換行等)分隔的 @match 模式列表,與此列表中的模式匹配的頁面 URL 將在腳本注入時被忽略"
+ },
+ "settings_global_exclude_match_done": {
+ "message": "完成"
+ },
+ "settings_global_exclude_match_saving": {
+ "message": "儲存中..."
+ },
+ "settings_global_exclude_match_placeholder": {
+ "message": "@match 模式列表,例如:\n*://*/*foo.bar\n*://*/*foo.bar?*\n*://*.example.net/*\nhttps://example.net/*/foo/*/\nhttps://*.example.net/a/b/c/?foo=/"
+ },
+ "settings_global_exclude_match_refer": {
+ "message": "匹配模式結構請參考:"
+ },
+ "settings_scripts_update_automation": {
+ "message": "自動更新腳本"
+ },
+ "settings_scripts_update_automation_desc": {
+ "message": "腳本在後臺靜默自動更新,這是危險的,可能引入未經確認的惡意程式碼"
+ },
+ "settings_scripts_update_check_interval": {
+ "message": "腳本更新檢查間隔"
+ },
+ "settings_scripts_update_check_interval_desc": {
+ "message": "禁用或設定使用者腳本更新檢查間隔(天)"
+ },
+ "settings_scripts_update_check_interval_0": {
+ "message": "從不"
+ },
+ "settings_scripts_update_check_lasttime": {
+ "message": "腳本更新上次檢查時間"
+ },
+ "settings_scripts_update_check_lasttime_desc": {
+ "message": "後臺腳本更新檢查上次時間"
+ },
+ "settings_settings_sync": {
+ "message": "同步設定"
+ },
+ "settings_settings_sync_desc": {
+ "message": "跨裝置同步設定"
+ },
+ "settings_augmented_userjs_install": {
+ "message": "增強的腳本安裝提示"
+ },
+ "settings_augmented_userjs_install_desc": {
+ "message": "當開啟一個使用者腳本 URL(.user.js)時自動彈出安裝介面,並接管使用者腳本市場的安裝按鈕"
+ },
+ "settings_toolbar_badge_count": {
+ "message": "工具欄圖示顯示計數徽章"
+ },
+ "settings_toolbar_badge_count_desc": {
+ "message": "在工具欄圖示上顯示一個徽章,其中的數字代表有多少個已啟用的腳本與您所在頁面的 URL 匹配"
+ },
+ "settings_scripts_directory": {
+ "message": "儲存位置"
+ },
+ "settings_scripts_directory_desc": {
+ "message": "儲存使用者腳本的資料夾路徑"
+ },
+ "settings_set_scripts_directory": {
+ "message": "更改儲存位置"
+ },
+ "settings_section_tools_import": {
+ "message": "匯入"
+ },
+ "settings_section_tools_export": {
+ "message": "匯出"
+ },
+ "settings_section_tools_reset": {
+ "message": "還原"
+ },
+ "settings_section_tools_goback": {
+ "message": "返回"
+ },
+ "settings_section_tools_reset_all": {
+ "message": "還原所有設定"
+ },
+ "settings_section_tools_reset_single": {
+ "message": "還原"
+ },
+ "settings_section_tools_reset_section": {
+ "message": "還原該組"
+ },
+ "settings_scripts_tools_desc": {
+ "message": "這些工具可以幫助您匯入和匯出“設定資料”。重置單個、一組或所有設定。"
+ },
+ "settings_about_text1": {
+ "message": "獲取有關此延伸功能的更多資訊,請訪問本開源項目:"
+ },
+ "settings_about_text2": {
+ "message": "如果您喜歡使用此延伸功能,請考慮在 App Store 上留下您的評論或註冊 Beta 測試新版本:"
+ },
+ "settings_about_button_repo": {
+ "message": "代碼庫"
+ },
+ "settings_about_button_docs": {
+ "message": "文件"
+ },
+ "settings_about_button_issues": {
+ "message": "報告錯誤"
+ },
+ "settings_about_button_store": {
+ "message": "在 App Store 中開啟"
+ },
+ "settings_about_button_beta": {
+ "message": "註冊 Beta 測試版"
+ },
+ "utils_check_match_patterns_0": {
+ "message": "此匹配模式將匹配所有 URL"
+ },
+ "utils_check_match_patterns_1": {
+ "message": "這 scheme 部分應當為 *、https、http 之一"
+ },
+ "utils_check_match_patterns_2": {
+ "message": "這 scheme 和 host 部分應當用 `://` 分隔"
+ },
+ "utils_check_match_patterns_3": {
+ "message": "匹配模式缺少 path 部分(至少應當有`/`)"
+ },
+ "utils_check_match_patterns_4": {
+ "message": "這 `*.` 後面應當跟隨主機名的一部分"
+ },
+ "utils_check_match_patterns_5": {
+ "message": "這 host 部分長度應當為 1-255"
+ },
+ "utils_check_match_patterns_6": {
+ "message": "這 host 部分中的 `*` 應該是獨立的或為 `*.` 在開頭"
+ },
+ "utils_check_match_patterns_7": {
+ "message": "這 host 部分包含一個或多個空標籤"
+ },
+ "utils_check_match_patterns_8": {
+ "message": "主機名標籤不能以 `-` 字元開頭或結尾"
+ },
+ "utils_check_match_patterns_9": {
+ "message": "主機名標籤最大長度不能超過 63"
+ },
+ "utils_check_match_patterns_10": {
+ "message": "這 host 部分包含無效字元:$1"
+ },
+ "utils_check_match_patterns_11": {
+ "message": "這 path 部分包含無效字元:$1"
+ },
+ "msg_invalid_match_pattern": {
+ "message": "無效的匹配模式"
+ },
+ "msg_invalid_backup_file": {
+ "message": "無效的備份檔案"
+ },
+ "msg_backup_import_finish": {
+ "message": "匯入完成!✅"
+ },
+ "msg_backup_import_failed": {
+ "message": "匯入失敗,請在控制檯中檢查錯誤日誌"
+ },
+ "msg_settings_reset_finish": {
+ "message": "還原所有設定完成!✅"
+ }
+}
diff --git a/public/extension-page/jshint.min.js b/public/ext/vendor/jshint.min.js
similarity index 100%
rename from public/extension-page/jshint.min.js
rename to public/ext/vendor/jshint.min.js
diff --git a/scripts/build-app.js b/scripts/build-app.js
deleted file mode 100644
index 2fedc7ce..00000000
--- a/scripts/build-app.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * @file Build App WebView resources using the Vite JavaScript API
- * @see {@link https://vitejs.dev/guide/api-javascript.html JavaScript API}
- *
- * All build processes start at the same time due to asynchronous calls
- * The assets name is irrelevant, just need to determine the entry path
- */
-
-import { build } from "vite";
-import { svelte } from "@sveltejs/vite-plugin-svelte";
-
-/**
- * Define default vite config options
- * Disable auto resolving {@link vite.config.js}
- * @see {@link https://vitejs.dev/config/ Config}
- * @see {@link https://vitejs.dev/guide/api-javascript.html#inlineconfig configFile}
- */
-const defineConfig = {
- base: "./",
- configFile: false,
-};
-
-/**
- * Build App-Shared WebView resources to xcode dist
- */
-build({
- ...defineConfig,
- plugins: [svelte()],
- build: {
- outDir: "xcode/App-Shared/Resources/dist/",
- copyPublicDir: false,
- rollupOptions: {
- input: "entry-app-webview.html",
- },
- },
-});
diff --git a/scripts/build-ext-demo.js b/scripts/build-ext-demo.js
new file mode 100644
index 00000000..e614fff8
--- /dev/null
+++ b/scripts/build-ext-demo.js
@@ -0,0 +1,42 @@
+/**
+ * @file Build extension pages demonstration using the Vite JavaScript API
+ * @see {@link https://vitejs.dev/guide/api-javascript.html JavaScript API}
+ */
+
+import { build } from "vite";
+import { svelte } from "@sveltejs/vite-plugin-svelte";
+import * as Utils from "./utils.js";
+
+/** @type {import("vite").InlineConfig} */
+const sharedConfig = {
+ ...Utils.baseConfig,
+ mode: "development",
+
+ define: {
+ ...Utils.baseConfig.define,
+ "import.meta.env.SAFARI_VERSION": JSON.stringify(15),
+ "import.meta.env.EXT_DEMO_BUILD": JSON.stringify(true),
+ },
+};
+
+/**
+ * Empty resources directory
+ * Copy public static assets
+ */
+await Utils.emptyBuildDir("dist");
+Utils.cp("public/ext/shared", "dist");
+
+/** Build shared modules */
+build({
+ ...sharedConfig,
+ plugins: [svelte()],
+ publicDir: "public/ext/vendor/",
+ build: {
+ outDir: `dist/`,
+ emptyOutDir: false,
+ rollupOptions: {
+ input: ["entry-ext-action-popup.html", "entry-ext-extension-page.html"],
+ },
+ target: "esnext", // top-level await
+ },
+});
diff --git a/scripts/build-ext-v4.js b/scripts/build-ext-v4.js
deleted file mode 100644
index 03b01c3a..00000000
--- a/scripts/build-ext-v4.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * @file Build Safari extension resources using the Vite JavaScript API
- * @see {@link https://vitejs.dev/guide/api-javascript.html JavaScript API}
- *
- * Safari supports for modules in background since 16.4
- * @see {@link https://developer.apple.com/documentation/safari-release-notes/safari-16_4-release-notes#Safari-Extensions}
- * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/background#browser_compatibility}
- * To ensure forward compatibility, background script use independent builds in v4
- *
- * Content scripts not support import modules, and due to their privileges and the
- * speed of injecting user scripts, use a independent build currently
- *
- * All build processes start at the same time due to asynchronous calls
- * The assets name is irrelevant, just need to determine the entry path
- */
-
-import { build } from "vite";
-import { svelte } from "@sveltejs/vite-plugin-svelte";
-
-/**
- * Define default vite config options
- * Disable auto resolving {@link vite.config.js}
- * @see {@link https://vitejs.dev/config/ Config}
- * @see {@link https://vitejs.dev/guide/api-javascript.html#inlineconfig configFile}
- */
-const defineConfig = {
- base: "./",
- configFile: false,
- define: {
- "import.meta.env.BROWSER": JSON.stringify("safari"),
- "import.meta.env.NATIVE_APP": JSON.stringify("app"),
- },
-};
-
-/**
- * Build shared modules for safari
- * These multiple entry files will share the same modules
- * Using a subdirectory avoid emptying other built files
- */
-build({
- ...defineConfig,
- plugins: [svelte()],
- build: {
- outDir: "xcode/Ext-Safari/Resources/dist/s/",
- rollupOptions: {
- input: ["entry-ext-action-popup.html", "entry-ext-extension-page.html"],
- },
- },
-});
-
-/**
- * Build independent scripts for safari
- * Each entry in the array will generate a separate script
- */
-[
- { background: "src/ext/background/main.js" },
- { content: "src/ext/content-scripts/main.js" },
-].forEach((input) => {
- build({
- ...defineConfig,
- build: {
- outDir: "xcode/Ext-Safari/Resources/dist/",
- emptyOutDir: false,
- copyPublicDir: false,
- rollupOptions: {
- input,
- output: {
- entryFileNames: "[name].js",
- },
- },
- },
- });
-});
diff --git a/scripts/build-ext-v5.js b/scripts/build-ext-v5.js
deleted file mode 100644
index e810c972..00000000
--- a/scripts/build-ext-v5.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * @file Build Safari extension resources using the Vite JavaScript API
- * @see {@link https://vitejs.dev/guide/api-javascript.html JavaScript API}
- *
- * Safari supports for modules in background since 16.4
- * @see {@link https://developer.apple.com/documentation/safari-release-notes/safari-16_4-release-notes#Safari-Extensions}
- * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/background#browser_compatibility}
- *
- * Content scripts not support import modules, and due to their privileges and the
- * speed of injecting user scripts, use a independent build currently
- *
- * All build processes start at the same time due to asynchronous calls
- * The assets name is irrelevant, just need to determine the entry path
- */
-
-import { build } from "vite";
-import { svelte } from "@sveltejs/vite-plugin-svelte";
-
-/**
- * Define default vite config options
- * Disable auto resolving {@link vite.config.js}
- * @see {@link https://vitejs.dev/config/ Config}
- * @see {@link https://vitejs.dev/guide/api-javascript.html#inlineconfig configFile}
- */
-const defineConfig = {
- base: "./",
- configFile: false,
- define: {
- "import.meta.env.BROWSER": JSON.stringify("safari"),
- "import.meta.env.NATIVE_APP": JSON.stringify("app"),
- },
-};
-
-/**
- * Build shared modules for safari
- * These multiple entry files will share the same modules
- * Using a subdirectory avoid emptying other built files
- */
-build({
- ...defineConfig,
- plugins: [svelte()],
- build: {
- outDir: "xcode/Ext-Safari/Resources/dist/s/",
- rollupOptions: {
- input: {
- background: "src/ext/background/main.js",
- "action-popup": "entry-ext-action-popup.html",
- "extension-page": "entry-ext-extension-page.html",
- },
- output: {
- entryFileNames: "[name].js",
- },
- },
- },
-});
-
-/**
- * Build independent scripts for safari
- * Each entry in the array will generate a separate script
- */
-[{ content: "src/ext/content-scripts/main.js" }].forEach((input) => {
- build({
- ...defineConfig,
- build: {
- outDir: "xcode/Ext-Safari/Resources/dist/",
- emptyOutDir: false,
- copyPublicDir: false,
- rollupOptions: {
- input,
- output: {
- entryFileNames: "[name].js",
- },
- },
- },
- });
-});
diff --git a/scripts/build-safari-15.js b/scripts/build-safari-15.js
new file mode 100644
index 00000000..1466bf15
--- /dev/null
+++ b/scripts/build-safari-15.js
@@ -0,0 +1,108 @@
+/**
+ * @file Build App-WebView and Safari-Extension resources using the Vite JavaScript API
+ * @see {@link https://vitejs.dev/guide/api-javascript.html JavaScript API}
+ *
+ * Safari supports for modules in background since 16.4
+ * @see {@link https://developer.apple.com/documentation/safari-release-notes/safari-16_4-release-notes#Safari-Extensions}
+ * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/background#browser_compatibility}
+ * To ensure forward compatibility, background script use independent builds for safari 15
+ *
+ * Content scripts not support import modules, and due to their privileges and the
+ * speed of injecting user scripts, use a independent build currently
+ *
+ * All build processes start at the same time due to asynchronous calls
+ * The assets name is irrelevant, just need to determine the entry path
+ */
+
+import { build } from "vite";
+import { svelte } from "@sveltejs/vite-plugin-svelte";
+import pluginMarkedDivest from "./vite-plugin-marked-divest.js";
+import * as Utils from "./utils.js";
+
+/** @type {import("vite").InlineConfig} */
+const sharedConfig = {
+ ...Utils.baseConfig,
+ define: {
+ ...Utils.baseConfig.define,
+ "import.meta.env.SAFARI_VERSION": JSON.stringify(15),
+ },
+ build: {
+ sourcemap: process.env.BETA ? true : false,
+ target: "safari15",
+ },
+};
+
+/**
+ * Build App-Shared WebView resources to xcode dist
+ */
+build({
+ ...Utils.baseConfig,
+ plugins: [svelte(), pluginMarkedDivest()],
+ build: {
+ ...sharedConfig.build,
+ outDir: `${Utils.APP_SHARED_RESOURCES}/dist/`,
+ copyPublicDir: false,
+ rollupOptions: {
+ input: "entry-app-webview.html",
+ },
+ },
+});
+
+/**
+ * Empty resources directory
+ * Copy public static assets
+ */
+await Utils.emptyBuildDir(Utils.EXT_SAFARI_RESOURCES);
+Utils.cp("public/ext/shared", Utils.EXT_SAFARI_RESOURCES);
+Utils.cp("public/ext/safari-15", Utils.EXT_SAFARI_RESOURCES);
+
+/** Build content scripts */
+[
+ { userscripts: "src/ext/content-scripts/entry-userscripts.js" },
+ { "dot-user-js": "src/ext/content-scripts/entry-dot-user-js.js" },
+ { "script-market": "src/ext/content-scripts/entry-script-market.js" },
+].forEach((input) => {
+ build({
+ ...sharedConfig,
+ build: {
+ ...sharedConfig.build,
+ outDir: `${Utils.EXT_SAFARI_RESOURCES}/dist/content-scripts/`,
+ emptyOutDir: false,
+ copyPublicDir: false,
+ rollupOptions: {
+ input,
+ output: { entryFileNames: "[name].js" },
+ },
+ },
+ });
+});
+
+/** Build background scripts */
+build({
+ ...sharedConfig,
+ build: {
+ ...sharedConfig.build,
+ outDir: `${Utils.EXT_SAFARI_RESOURCES}/dist/`,
+ emptyOutDir: false,
+ copyPublicDir: false,
+ rollupOptions: {
+ input: { background: "src/ext/background/main.js" },
+ output: { entryFileNames: "[name].js" },
+ },
+ },
+});
+
+/** Build shared modules */
+build({
+ ...sharedConfig,
+ plugins: [svelte()],
+ publicDir: "public/ext/vendor/",
+ build: {
+ ...sharedConfig.build,
+ outDir: `${Utils.EXT_SAFARI_RESOURCES}/dist/`,
+ emptyOutDir: false,
+ rollupOptions: {
+ input: ["entry-ext-action-popup.html", "entry-ext-extension-page.html"],
+ },
+ },
+});
diff --git a/scripts/build-safari-16.4.js b/scripts/build-safari-16.4.js
new file mode 100644
index 00000000..866b844d
--- /dev/null
+++ b/scripts/build-safari-16.4.js
@@ -0,0 +1,116 @@
+/**
+ * @file Build App-WebView and Safari-Extension resources using the Vite JavaScript API
+ * @see {@link https://vitejs.dev/guide/api-javascript.html JavaScript API}
+ *
+ * Safari supports for modules in background since 16.4
+ * @see {@link https://developer.apple.com/documentation/safari-release-notes/safari-16_4-release-notes#Safari-Extensions}
+ * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/background#browser_compatibility}
+ *
+ * Content scripts not support import modules, and due to their privileges and the
+ * speed of injecting user scripts, use a independent build currently
+ *
+ * All build processes start at the same time due to asynchronous calls
+ * The assets name is irrelevant, just need to determine the entry path
+ */
+
+import { build } from "vite";
+import { svelte } from "@sveltejs/vite-plugin-svelte";
+import pluginMarkedDivest from "./vite-plugin-marked-divest.js";
+import * as Utils from "./utils.js";
+
+/** @type {import("vite").InlineConfig} */
+const sharedConfig = {
+ ...Utils.baseConfig,
+ define: {
+ ...Utils.baseConfig.define,
+ "import.meta.env.SAFARI_VERSION": JSON.stringify(16.4),
+ },
+ build: {
+ sourcemap: process.env.BETA ? true : false,
+ target: "safari16.4",
+ },
+};
+
+/**
+ * Build App-Shared WebView resources to xcode dist
+ */
+build({
+ ...Utils.baseConfig,
+ plugins: [svelte(), pluginMarkedDivest()],
+ build: {
+ ...sharedConfig.build,
+ outDir: `${Utils.APP_SHARED_RESOURCES}/dist/`,
+ copyPublicDir: false,
+ rollupOptions: {
+ input: "entry-app-webview.html",
+ },
+ },
+});
+
+/**
+ * Empty resources directory
+ * Copy public static assets
+ */
+await Utils.emptyBuildDir(Utils.EXT_SAFARI_RESOURCES);
+Utils.cp("public/ext/shared", Utils.EXT_SAFARI_RESOURCES);
+Utils.cp("public/ext/safari-16.4", Utils.EXT_SAFARI_RESOURCES);
+
+/** Build content scripts */
+[
+ { userscripts: "src/ext/content-scripts/entry-userscripts.js" },
+ { "dot-user-js": "src/ext/content-scripts/entry-dot-user-js.js" },
+ { "script-market": "src/ext/content-scripts/entry-script-market.js" },
+].forEach((input) => {
+ build({
+ ...sharedConfig,
+ build: {
+ ...sharedConfig.build,
+ outDir: `${Utils.EXT_SAFARI_RESOURCES}/dist/content-scripts/`,
+ emptyOutDir: false,
+ copyPublicDir: false,
+ rollupOptions: {
+ input,
+ output: { entryFileNames: "[name].js" },
+ },
+ },
+ });
+});
+
+/**
+ * Build background scripts
+ * Modular background may not load correctly on Safari startup
+ * Currently build classic script separately to avoid this error
+ */
+build({
+ ...sharedConfig,
+ build: {
+ ...sharedConfig.build,
+ outDir: `${Utils.EXT_SAFARI_RESOURCES}/dist/`,
+ emptyOutDir: false,
+ copyPublicDir: false,
+ rollupOptions: {
+ input: { background: "src/ext/background/main.js" },
+ output: { entryFileNames: "[name].js" },
+ },
+ },
+});
+
+/** Build shared modules */
+build({
+ ...sharedConfig,
+ plugins: [svelte()],
+ publicDir: "public/ext/vendor/",
+ build: {
+ ...sharedConfig.build,
+ outDir: `${Utils.EXT_SAFARI_RESOURCES}/dist/`,
+ emptyOutDir: false,
+ rollupOptions: {
+ input: {
+ // background: "src/ext/background/main.js",
+ "action-popup": "entry-ext-action-popup.html",
+ "extension-page": "entry-ext-extension-page.html",
+ },
+ output: { entryFileNames: "[name].js" },
+ },
+ },
+});
diff --git a/scripts/dev-safari.js b/scripts/dev-safari.js
new file mode 100644
index 00000000..c9236b9f
--- /dev/null
+++ b/scripts/dev-safari.js
@@ -0,0 +1,211 @@
+/**
+ * @file Develop Safari extension resources using the Vite JavaScript API
+ * @see {@link https://vitejs.dev/guide/api-javascript.html JavaScript API}
+ * This development build and server requires a valid https certificate to support remote real-time development
+ * Typically using a self-signed certificate, it needs to be installed and trusted by the device or simulator
+ * @see {@link https://developer.apple.com/library/archive/qa/qa1948/}
+ * @see {@link https://developer.apple.com/library/archive/technotes/tn2326/}
+ */
+
+import { build, createServer } from "vite";
+import { svelte } from "@sveltejs/vite-plugin-svelte";
+import * as Utils from "./utils.js";
+import https from "node:https";
+
+/** @type {import("vite").InlineConfig} */
+const sharedConfig = {
+ ...Utils.baseConfig,
+ mode: "development",
+ define: {
+ ...Utils.baseConfig.define,
+ "import.meta.env.SAFARI_VERSION": JSON.stringify(16.4),
+ },
+};
+
+/**
+ * Build resources for remote real-time development
+ * @param {import("vite").ViteDevServer} server
+ * @param {string} origin
+ */
+async function buildResources(server, origin) {
+ /**
+ * empty resources directory
+ * copy public static assets
+ */
+ await Utils.emptyBuildDir("dist");
+ await Utils.emptyBuildDir(Utils.EXT_SAFARI_RESOURCES);
+ Utils.cp("public/ext/shared", Utils.EXT_SAFARI_RESOURCES);
+ Utils.cp("public/ext/shared-dev", Utils.EXT_SAFARI_RESOURCES);
+ if (process.env.SAFARI_PLATFORM === "ios") {
+ Utils.cp(
+ "public/ext/safari-dev/manifest-ios.json",
+ `${Utils.EXT_SAFARI_RESOURCES}/manifest.json`,
+ );
+ } else {
+ Utils.cp(
+ "public/ext/safari-dev/manifest-mac.json",
+ `${Utils.EXT_SAFARI_RESOURCES}/manifest.json`,
+ );
+ }
+
+ /** build content scripts */
+ [
+ { userscripts: "src/ext/content-scripts/entry-userscripts.js" },
+ { "dot-user-js": "src/ext/content-scripts/entry-dot-user-js.js" },
+ { "script-market": "src/ext/content-scripts/entry-script-market.js" },
+ ].forEach((input) => {
+ /** build proxy content scripts replace actual code */
+ build({
+ ...sharedConfig,
+ plugins: [
+ {
+ name: "generate-content-proxy",
+ load(id) {
+ const name = id.replace(/.+entry-/, "");
+ const url = `${origin}/dist/content-scripts/${name}`;
+ return `// proxy content
+ (function () {
+ if (window["${id}"]) return;
+ window["${id}"] = 1;
+ const xhr = new XMLHttpRequest();
+ xhr.open("GET", "${url}", false);
+ xhr.send();
+ const code = xhr.responseText;
+ try {
+ Function(code + "//# sourceURL=proxy-${name}")();
+ } catch (error) {
+ console.error(error);
+ }
+ })();`;
+ },
+ },
+ ],
+ build: {
+ outDir: `${Utils.EXT_SAFARI_RESOURCES}/dist/content-scripts/`,
+ emptyOutDir: false,
+ copyPublicDir: false,
+ rollupOptions: {
+ input,
+ output: { entryFileNames: "[name].js" },
+ },
+ },
+ });
+ /** build content scripts for dev server and watch changes */
+ build({
+ ...sharedConfig,
+ build: {
+ outDir: `dist/content-scripts/`,
+ emptyOutDir: false,
+ copyPublicDir: false,
+ rollupOptions: {
+ input,
+ output: { entryFileNames: "[name].js" },
+ },
+ watch: {},
+ minify: false,
+ },
+ });
+ });
+
+ /** generate entrance dist */
+ build({
+ ...sharedConfig,
+ publicDir: "public/ext/vendor/",
+ plugins: [
+ /**
+ * @see {@link https://github.com/vitejs/vite/issues/14263}
+ * Dev only requires entrances, so order `pre` without transform modules
+ */
+ {
+ name: "generate-dev-entrance",
+ transformIndexHtml: {
+ order: "pre",
+ async handler(html, ctx) {
+ const str = await server.transformIndexHtml(ctx.path, html);
+ return str.replaceAll(`src="/`, `src="${origin}/`);
+ },
+ },
+ },
+ ],
+ build: {
+ outDir: `${Utils.EXT_SAFARI_RESOURCES}/dist/`,
+ emptyOutDir: false,
+ rollupOptions: {
+ input: {
+ background: "entry-ext-background.html",
+ "action-popup": "entry-ext-action-popup.html",
+ "extension-page": "entry-ext-extension-page.html",
+ },
+ },
+ },
+ });
+}
+
+/**
+ * Define shared constants
+ * Developing in native machine and simulator can just use `https://localhost:port/` as the origin
+ * But using a fixed domain name on non-native devices such as real iOS devices is a better choice
+ * The local domain name needs to be resolved to the LAN IP address on LAN DNS or the target device
+ * When the origin specified here is unreachable, localhost will be automatically used as the alternate
+ * The origin requires as an exemption to be added to the `manifest.json` due to default CSP limitations
+ * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_Security_Policy}
+ * @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_security_policy}
+ */
+const serverOptions = await Utils.sharedServerOptions();
+const SERVER_PORT = 55173;
+const SERVER_ORIGIN = `https://userscripts.test:${SERVER_PORT}`;
+
+/**
+ * Check if the server is reachable with self-signed certificate
+ * @param {string | URL} url
+ * @returns {Promise}
+ */
+async function serverCheck(url) {
+ const options = {
+ method: "HEAD",
+ ca: serverOptions.ca,
+ headers: { Accept: "*/*" },
+ };
+ return new Promise((resolve) => {
+ const req = https.request(url, options, (res) => {
+ if (res.headers.server === SERVER_ORIGIN) {
+ resolve(true);
+ }
+ resolve(false);
+ });
+ req.on("error", (e) => {
+ console.error(`${req.host}: ${e.message}`);
+ resolve(false);
+ });
+ req.end();
+ });
+}
+
+/** main process */
+(async () => {
+ /** run development server */
+ const server = await createServer({
+ ...sharedConfig,
+ publicDir: "public/ext/vendor/",
+ plugins: [svelte()],
+ server: {
+ host: true,
+ port: SERVER_PORT,
+ strictPort: true,
+ https: { key: serverOptions.key, cert: serverOptions.cert },
+ headers: { server: SERVER_ORIGIN },
+ },
+ });
+ await server.listen();
+ server.printUrls();
+
+ // Check available origins and build resources
+ for (let url of [SERVER_ORIGIN, ...server.resolvedUrls.local]) {
+ if (await serverCheck(url)) {
+ const origin = url.at(-1) === "/" ? url.slice(0, -1) : url;
+ console.info(`build with origin: ${origin}`);
+ buildResources(server, origin);
+ break;
+ }
+ }
+})();
diff --git a/scripts/jsconfig.json b/scripts/jsconfig.json
new file mode 100644
index 00000000..f0633242
--- /dev/null
+++ b/scripts/jsconfig.json
@@ -0,0 +1,26 @@
+// https://code.visualstudio.com/docs/languages/jsconfig
+// https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
+// https://www.typescriptlang.org/tsconfig
+
+// https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html
+// https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html
+
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "NodeNext",
+ "moduleResolution": "nodenext",
+
+ "verbatimModuleSyntax": true,
+ "isolatedModules": true,
+ "resolveJsonModule": true,
+
+ "allowJs": true,
+ "checkJs": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "skipLibCheck": true,
+ "sourceMap": true
+ },
+ "include": ["**/*.d.ts", "**/*.js"]
+}
diff --git a/scripts/preview-app.js b/scripts/preview-app.js
index 691f601c..1c1ad4eb 100644
--- a/scripts/preview-app.js
+++ b/scripts/preview-app.js
@@ -4,24 +4,14 @@
*/
import { preview } from "vite";
-
-/**
- * Define default vite config options
- * Disable auto resolving {@link vite.config.js}
- * @see {@link https://vitejs.dev/config/ Config}
- * @see {@link https://vitejs.dev/guide/api-javascript.html#inlineconfig configFile}
- */
-const defineConfig = {
- base: "./",
- configFile: false,
-};
+import { baseConfig } from "./utils.js";
/**
* Preview App-Shared WebView resources from xcode dist
*/
(async () => {
const previewServer = await preview({
- ...defineConfig,
+ ...baseConfig,
preview: {
// port: 4173,
open: "entry-app-webview.html",
diff --git a/scripts/preview-ext-demo.js b/scripts/preview-ext-demo.js
new file mode 100644
index 00000000..a14b0a9a
--- /dev/null
+++ b/scripts/preview-ext-demo.js
@@ -0,0 +1,24 @@
+/**
+ * @file Preview App WebView resources using the Vite JavaScript API
+ * @see {@link https://vitejs.dev/guide/api-javascript.html JavaScript API}
+ */
+
+import { preview } from "vite";
+import { baseConfig } from "./utils.js";
+
+/**
+ * Preview App-Shared WebView resources from xcode dist
+ */
+(async () => {
+ const previewServer = await preview({
+ ...baseConfig,
+ preview: {
+ // port: 4173,
+ open: "entry-ext-extension-page.html",
+ },
+ build: {
+ outDir: "dist/",
+ },
+ });
+ previewServer.printUrls();
+})();
diff --git a/scripts/utils.js b/scripts/utils.js
new file mode 100644
index 00000000..e0069126
--- /dev/null
+++ b/scripts/utils.js
@@ -0,0 +1,201 @@
+/**
+ * node:process
+ * @see {@link https://nodejs.org/api/process.html#processchdirdirectory chdir}
+ * @see {@link https://nodejs.org/api/process.html#processcwd cwd}
+ * node:child_process
+ * @see {@link https://nodejs.org/api/child_process.html#child_processexecfilefile-args-options-callback execFile}
+ * node:util
+ * @see {@link https://nodejs.org/api/util.html#utilpromisifyoriginal promisify}
+ * node:url
+ * @see {@link https://nodejs.org/api/url.html#urlfileurltopathurl fileURLToPath}
+ * node:fs/promises
+ * @see {@link https://nodejs.org/api/fs.html#fspromisescopyfilesrc-dest-mode copyFile}
+ * @see {@link https://nodejs.org/api/fs.html#fspromisesmkdirpath-options mkdir}
+ * @see {@link https://nodejs.org/api/fs.html#fspromisesreaddirpath-options readdir}
+ * @see {@link https://nodejs.org/api/fs.html#fspromisesreadfilepath-options readFile}
+ * @see {@link https://nodejs.org/api/fs.html#fspromisesrealpathpath-options realpath}
+ * @see {@link https://nodejs.org/api/fs.html#fspromisesrmpath-options rm}
+ * @see {@link https://nodejs.org/api/fs.html#fspromisesstatpath-options stat}
+ */
+import { chdir, cwd } from "node:process";
+import { execFile } from "node:child_process";
+import { promisify } from "node:util";
+import { fileURLToPath } from "node:url";
+import {
+ copyFile,
+ mkdir,
+ readdir,
+ readFile,
+ realpath,
+ rm,
+ stat,
+} from "node:fs/promises";
+
+/** Promisified execFile */
+const execFileAsync = promisify(execFile);
+
+/** Define shared constants */
+export const APP_SHARED_RESOURCES = "xcode/App-Shared/Resources";
+export const EXT_SAFARI_RESOURCES = "xcode/Ext-Safari/Resources";
+
+/**
+ * If not then cd to root dir and returns the path
+ * @see {@link https://nodejs.org/api/esm.html#importmetaurl}
+ * @returns {Promise} project root directory
+ */
+export async function rootDir() {
+ const root = fileURLToPath(new URL("..", import.meta.url));
+ if (cwd() !== (await realpath(root))) {
+ chdir(root);
+ console.info("cd:", root);
+ }
+ return root;
+}
+
+/**
+ * Empty the build directory safely
+ * @see {@link https://nodejs.org/api/errors.html#common-system-errors ENOENT}
+ * @param {string} dir
+ * @returns {Promise}
+ */
+export async function emptyBuildDir(dir) {
+ const buildPaths = ["dist", EXT_SAFARI_RESOURCES];
+ if (!buildPaths.includes(dir)) {
+ console.error("Non-build path, cannot be empty.");
+ return false;
+ }
+ const root = await rootDir();
+ try {
+ for (const sub of await readdir(dir)) {
+ const path = `${root}/${dir}/${sub}`;
+ // console.log("rm:", path); // DEBUG
+ await rm(path, { force: true, recursive: true });
+ }
+ return true;
+ } catch (error) {
+ if (error.code === "ENOENT") {
+ console.info("[SKIPPED] emptyBuildDir:", error.message);
+ return true;
+ }
+ console.error("emptyBuildDir:", error);
+ return false;
+ }
+}
+
+/**
+ * Copy a file or folder recursively
+ * @param {string} src Source file or directory
+ * @param {string} dest Destination file or directory
+ */
+export async function cp(src, dest) {
+ // console.log("cp:", src, "->", dest); // DEBUG
+ await rootDir();
+ const srcStat = await stat(src);
+ if (srcStat.isFile()) return copyFile(src, dest);
+ if (!srcStat.isDirectory()) return;
+ await mkdir(dest, { recursive: true });
+ for (const sub of await readdir(src)) {
+ if ([".DS_Store"].includes(sub)) continue;
+ await cp(`${src}/${sub}`, `${dest}/${sub}`);
+ }
+}
+
+/**
+ * Read file and return text
+ * @param {string} file file path
+ * @returns {Promise} file content
+ */
+export async function read(file) {
+ const path = fileURLToPath(new URL(file, import.meta.url));
+ return readFile(path, "utf8");
+}
+
+/**
+ * @see {@link https://vitejs.dev/config/server-options.html#server-https}
+ * @see {@link https://nodejs.org/api/https.html#https_https_createserver_options_requestlistener}
+ * @returns {Promise} https.ServerOptions
+ */
+export const sharedServerOptions = async () => ({
+ ca: await read("./local/ca.pem"),
+ key: await read("./local/key.pem"),
+ cert: await read("./local/cert.pem"),
+});
+
+/**
+ * @see {@link https://git-scm.com/docs/git-describe}
+ * @returns {Promise} git tag, eg: v5.0.0-beta.1
+ */
+async function getGitTag() {
+ try {
+ const { stdout, stderr } = await execFileAsync("git", [
+ "describe",
+ "--tags",
+ "--abbrev=0",
+ ]);
+ stderr && console.log(stderr);
+ if (stdout) return stdout.trim();
+ } catch (error) {
+ console.error(error);
+ process.exit(error.code);
+ }
+}
+
+/**
+ * @see {@link https://git-scm.com/docs/git-rev-parse}
+ * @returns {Promise} git commit, eg: 700c978ccbd387921084ee185f495aa1f795d2e0
+ */
+async function getGitCommit() {
+ try {
+ const { stdout, stderr } = await execFileAsync("git", [
+ "rev-parse",
+ "HEAD",
+ ]);
+ stderr && console.log(stderr);
+ if (stdout) return stdout.trim();
+ } catch (error) {
+ console.error(error);
+ process.exit(error.code);
+ }
+}
+
+const gitTag = await getGitTag();
+const gitCommit = await getGitCommit();
+if (!gitTag || !gitCommit) {
+ console.error("Failed to get git infos, please check.");
+ process.exit(1);
+}
+
+/**
+ * Define default vite config options
+ * Disable auto resolving {@link vite.config.js}
+ * @see {@link https://vitejs.dev/config/ Config}
+ * @see {@link https://vitejs.dev/guide/api-javascript.html#inlineconfig InlineConfig}
+ * @type {import("vite").InlineConfig}
+ */
+export const baseConfig = {
+ configFile: false,
+ envFile: false,
+ root: await rootDir(),
+ base: "./",
+ define: process.env.SAFARI_PLATFORM
+ ? {
+ "import.meta.env.BROWSER": JSON.stringify("Safari"),
+ "import.meta.env.NATIVE_APP": JSON.stringify("app"),
+ "import.meta.env.SAFARI_PLATFORM": JSON.stringify(
+ process.env.SAFARI_PLATFORM,
+ ),
+ "import.meta.env.GIT_TAG": JSON.stringify(gitTag),
+ "import.meta.env.GIT_COMMIT": JSON.stringify(gitCommit),
+ }
+ : {
+ "import.meta.env.GIT_TAG": JSON.stringify(gitTag),
+ "import.meta.env.GIT_COMMIT": JSON.stringify(gitCommit),
+ },
+ resolve: {
+ alias: {
+ // NOTE: Don't forget to modify the `paths` in `jsconfig.json` also
+ "@shared": fileURLToPath(new URL("../src/shared", import.meta.url)),
+ "@ext": fileURLToPath(new URL("../src/ext/shared", import.meta.url)),
+ },
+ },
+};
diff --git a/scripts/vite-plugin-marked-divest.js b/scripts/vite-plugin-marked-divest.js
new file mode 100644
index 00000000..27093567
--- /dev/null
+++ b/scripts/vite-plugin-marked-divest.js
@@ -0,0 +1,89 @@
+import { fileURLToPath } from "node:url";
+import { readFile } from "node:fs/promises";
+import { marked } from "marked";
+
+/**
+ * Exclude files that do not need to be processed
+ * @param {string} id
+ * @returns {boolean}
+ */
+function isExclude(id) {
+ const res = [/\/src\/app\/_locales\/[A-Za-z0-9_]+\/messages\.js/];
+ for (const re of res) {
+ if (re.test(id)) return false;
+ }
+ return true;
+}
+
+/**
+ * Preprocess `marked` calls and `.md?raw` transformations at build time
+ * to avoid including `marked` modules and runtime transformations
+ * @returns {import('vite').Plugin}
+ */
+function preprocessMarked() {
+ return {
+ name: "preprocess-marked",
+ resolveId: {
+ order: "pre",
+ handler(source, importer) {
+ if (isExclude(importer)) return;
+ if (source.endsWith(".md?raw")) {
+ const importerUrl = new URL(importer, import.meta.url);
+ const sourceUrl = new URL(source, importerUrl);
+ return fileURLToPath(sourceUrl) + "?marked";
+ }
+ },
+ },
+ load: {
+ order: "pre",
+ async handler(id) {
+ if (!id.endsWith(".md?marked")) return;
+ const url = new URL(id, import.meta.url);
+ const text = await readFile(fileURLToPath(url), "utf8");
+ const html = await marked.parse(text);
+ return `export default ${JSON.stringify(html)}`;
+ },
+ },
+ transform(code, id) {
+ if (isExclude(id)) return;
+ if (!code.includes("marked.parse")) return;
+ const node = this.parse(code);
+ if (node.sourceType !== "module") return;
+ for (const module of node.body) {
+ if (module.type !== "ImportDeclaration") continue;
+ if (!module.source.value.toString().endsWith(".md?raw")) continue;
+ const specifier = module.specifiers.find(
+ (specifier) => specifier.type === "ImportDefaultSpecifier",
+ );
+ const varName = specifier.local.name;
+ code = code.replace(`await marked.parse(${varName})`, varName);
+ // console.debug(`optimizing 'await marked.parse(${varName})'`, id); // DEBUG
+ }
+ return { code };
+ },
+ };
+}
+
+/**
+ * Turn off `Marked` module side effects for better tree-shaking
+ * @returns {import('vite').Plugin}
+ */
+function disableMarkedSideEffects() {
+ return {
+ name: "disable-marked-side-effects",
+ transform(code, id) {
+ if (id.includes("/node_modules/marked")) {
+ return { code, moduleSideEffects: false };
+ }
+ },
+ };
+}
+
+/**
+ * @returns {import('vite').Plugin[]}
+ */
+function markedDivest() {
+ return [disableMarkedSideEffects(), preprocessMarked()];
+}
+
+export default markedDivest;
diff --git a/src/app/App.svelte b/src/app/App.svelte
index 51818dcd..bbfe8df8 100644
--- a/src/app/App.svelte
+++ b/src/app/App.svelte
@@ -1,95 +1,346 @@
+
+
-
-
-
- {@html logo}
-
- {version}
- {build}
-
-
-
- You can turn on the Userscripts iOS Safari extension in Settings.
-
- Read the docs.
-
-
-
- CURRENT DIRECTORY:
-
-
-
+ {#await initialize() then app}
+ {#if OOBE}
+
+ {gl("quick_start_guide_title")}
+
+ {@html OOBEText}
+
+
+ {/if}
+ {#if promptLogger}
+
+
+
{gl("native_logger_enabled_title")}
+
+
{@html promptLoggerText}
+
+
+
+
+
+
+ {/if}
+ {#if enableLogger}
+
+
+
+
+
+
+ {/if}
+
+
+
+
+ {#if platform === "mac"}
+
+
+ {gl("safari_extension_status")}:
+ {gl(extStatus)}
+
+
+ {/if}
+
+
+
+
+
+
+
{gl("current_directory")}
+
+
+
+ {:catch error}
+
+ {error}
+
+ {/await}
diff --git a/src/app/_locales/en/messages.js b/src/app/_locales/en/messages.js
new file mode 100644
index 00000000..4cee3c24
--- /dev/null
+++ b/src/app/_locales/en/messages.js
@@ -0,0 +1,85 @@
+import nativeLoggerCaveat from "./native-logger-caveat.md?raw";
+import quickStartGuideMac from "./quick-start-guide-mac.md?raw";
+import quickStartGuideIos from "./quick-start-guide-ios.md?raw";
+
+import { marked } from "marked";
+
+/** @satisfies {Types.I18nMessages} */
+export const markdown = {
+ native_logger_caveat: {
+ message: await marked.parse(nativeLoggerCaveat),
+ },
+ quick_start_guide_mac: {
+ message: await marked.parse(quickStartGuideMac),
+ },
+ quick_start_guide_ios: {
+ message: await marked.parse(quickStartGuideIos),
+ },
+};
+
+/** @satisfies {Types.I18nMessages} */
+export const messages = {
+ enabled: {
+ message: "Enabled",
+ },
+ disabled: {
+ message: "Disabled",
+ },
+ unknown: {
+ message: "Unknown",
+ },
+ error: {
+ message: "Error",
+ },
+ button_ok: {
+ message: "OK",
+ },
+ button_dismiss: {
+ message: "Dismiss",
+ },
+ button_disable: {
+ message: "Disable",
+ },
+ safari_extension_status: {
+ message: "Safari Extension Status",
+ },
+ native_logger_enabled_title: {
+ message: "Native Logger Enabled",
+ },
+ quick_start_guide_title: {
+ message: "Quick Start Guide",
+ },
+ open_safari_settings: {
+ message: "Open Safari Settings",
+ },
+ open_safari_preferences: {
+ message: "Open Safari Preferences",
+ },
+ show_usage_guide: {
+ message: "Show Usage Guide",
+ },
+ change_directory: {
+ message: "Change Userscripts Directory",
+ },
+ current_directory: {
+ message: "CURRENT DIRECTORY:",
+ },
+ documentation: {
+ message: "Documentation",
+ },
+ discussions: {
+ message: "Discussions",
+ },
+ report_an_issue: {
+ message: "Report an Issue",
+ },
+ privacy_policy: {
+ message: "Privacy Policy",
+ },
+ export_log_files: {
+ message: "Export log files",
+ },
+ disable_logger: {
+ message: "Disable Logger",
+ },
+};
diff --git a/src/app/_locales/en/native-logger-caveat.md b/src/app/_locales/en/native-logger-caveat.md
new file mode 100644
index 00000000..f1ba6b62
--- /dev/null
+++ b/src/app/_locales/en/native-logger-caveat.md
@@ -0,0 +1,5 @@
+- The logger is for local debugging only and can be streamed through the macOS console while writing to a local file when enabled.
+- You can repeat the steps to reproduce the issue after enabling it, then export the log files and inspect them in the app.
+- There is no built-in upload function. If you need to submit it to developers, please manually attach the exported log files to your issue report.
+- To reduce energy consumption and disk reading and writing, please disbale the logger promptly after debugging.
+- If the log file exceeds $1, the logger will be automatically disbaled and the log files will be cleared.
diff --git a/src/app/_locales/en/quick-start-guide-ios.md b/src/app/_locales/en/quick-start-guide-ios.md
new file mode 100644
index 00000000..4bc2316b
--- /dev/null
+++ b/src/app/_locales/en/quick-start-guide-ios.md
@@ -0,0 +1,27 @@
+### Welcome, follow these two main steps to get the extension up and running:
+
+- **Open the app and set a directory**
+
+ - When you first launch the app, a local directory will be set by default.
+ - If needed, you can select a new directory to suit your preferences.
+ - This directory is used for saving and loading your user scripts.
+ - Click the current directory to jump to the default directory or the one you set.
+
+- **Enable the extension in Safari**
+
+ - Manage extensions from the Settings App (Settings > Safari > Extensions) or Safari App (`AA` button on iPhone, `extension-icon` on iPad, the same location where you open the extension's `popup` interface).
+ - For an optimal experience it's recommended that you "Always Allow" Userscripts for "All Websites", but you could also allow only the sites you want, but please don't forget your settings if your script doesn't work.
+
+### How to install and inject a user script and some things to note:
+
+- The mobile extension does not currently have a built-in script editor, but you could still write your own scripts and install them.
+- You could save files that extension with `.user.js` directly to the Userscripts directory.
+ - The script file must contain a valid metadata block to match the web pages and be displayed in the extension popup.
+- When you visit a `.user.js` URL in Safari, open the extension popup and you will see an installation prompt, or it will pop up automatically if you have enhanced prompts turned on.
+ - The URL should end with `.user.js` in `/PATH` part, not the `?QUERY` or `#HASH` parts, otherwise it will not be considered a valid user script URL by the extension.
+- When you enabled the extension and write the metadata correctly especially like `@match`, it will automatically complete the injection when you visit a matching web page.
+ - You could temporarily disable individual user scripts or all of them, just open the extension popup interface to toggle them.
+
+### That’s it, start improving your quality of life now!
+
+_Hey, don't forget to read our detailed documentation to learn more._
diff --git a/src/app/_locales/en/quick-start-guide-mac.md b/src/app/_locales/en/quick-start-guide-mac.md
new file mode 100644
index 00000000..c6ae6ef7
--- /dev/null
+++ b/src/app/_locales/en/quick-start-guide-mac.md
@@ -0,0 +1,27 @@
+### Welcome to this project, you will need two main steps to make the extension work:
+
+- **Open the app and set a directory**
+
+ - When you first launch the app, a local directory will be set by default.
+ - If needed, you can select a new directory to suit your preferences.
+ - This directory is used for saving and loading your user scripts.
+ - Click the current directory to jump to the default directory or the one you set.
+
+- **Enable the extension in Safari**
+
+ - Enable Userscripts in Safari > Settings... > Extensions list.
+ - For an optimal experience it's recommended that you "Always Allow" Userscripts for "All Websites", but you could also allow only the sites you want, but please don't forget your settings if your script doesn't work.
+
+### How to install and inject a user script and some things to note:
+
+- The preferred method is of course to create your own scripts, open the extension page and click on the plus sign in the editor to create a new JS, write code and save it.
+- You could also save files that extension with `.user.js` directly to the Userscripts directory.
+ - The script file must contain a valid metadata block to match the web pages and be displayed in the extension popup.
+- When you visit a `.user.js` URL in Safari, open the extension popup and you will see an installation prompt, or it will pop up automatically if you have enhanced prompts turned on.
+ - The URL should end with `.user.js` in `/PATH` part, not the `?QUERY` or `#HASH` parts, otherwise it will not be considered a valid user script URL by the extension.
+- When you enabled the extension and write the metadata correctly especially like `@match`, it will automatically complete the injection when you visit a matching web page.
+ - You could temporarily disable individual user scripts or all of them, just open the extension popup interface to toggle them.
+
+### That’s it, start improving your quality of life now!
+
+_Hey, don't forget to read our detailed documentation to learn more._
diff --git a/src/app/_locales/zh/messages.js b/src/app/_locales/zh/messages.js
new file mode 100644
index 00000000..e69057b0
--- /dev/null
+++ b/src/app/_locales/zh/messages.js
@@ -0,0 +1,85 @@
+import nativeLoggerCaveat from "./native-logger-caveat.md?raw";
+import quickStartGuideMac from "./quick-start-guide-mac.md?raw";
+import quickStartGuideIos from "./quick-start-guide-ios.md?raw";
+
+import { marked } from "marked";
+
+/** @satisfies {typeof import("../en/messages.js").markdown} */
+export const markdown = {
+ native_logger_caveat: {
+ message: await marked.parse(nativeLoggerCaveat),
+ },
+ quick_start_guide_mac: {
+ message: await marked.parse(quickStartGuideMac),
+ },
+ quick_start_guide_ios: {
+ message: await marked.parse(quickStartGuideIos),
+ },
+};
+
+/** @satisfies {typeof import("../en/messages.js").messages} */
+export const messages = {
+ enabled: {
+ message: "已启用",
+ },
+ disabled: {
+ message: "已停用",
+ },
+ unknown: {
+ message: "未知",
+ },
+ error: {
+ message: "错误",
+ },
+ button_ok: {
+ message: "确定",
+ },
+ button_dismiss: {
+ message: "关闭",
+ },
+ button_disable: {
+ message: "停用",
+ },
+ safari_extension_status: {
+ message: "Safari 扩展状态",
+ },
+ native_logger_enabled_title: {
+ message: "本地日志记录器已启用",
+ },
+ quick_start_guide_title: {
+ message: "快速入门指南",
+ },
+ open_safari_settings: {
+ message: "打开 Safari 设置",
+ },
+ open_safari_preferences: {
+ message: "打开 Safari 偏好",
+ },
+ show_usage_guide: {
+ message: "显示使用指南",
+ },
+ change_directory: {
+ message: "更改用户脚本目录",
+ },
+ current_directory: {
+ message: "当前目录:",
+ },
+ documentation: {
+ message: "详细文档",
+ },
+ discussions: {
+ message: "交流讨论",
+ },
+ report_an_issue: {
+ message: "报告问题",
+ },
+ privacy_policy: {
+ message: "隐私政策",
+ },
+ export_log_files: {
+ message: "导出日志文件",
+ },
+ disable_logger: {
+ message: "停用日志记录",
+ },
+};
diff --git a/src/app/_locales/zh/native-logger-caveat.md b/src/app/_locales/zh/native-logger-caveat.md
new file mode 100644
index 00000000..005723d0
--- /dev/null
+++ b/src/app/_locales/zh/native-logger-caveat.md
@@ -0,0 +1,5 @@
+- 日志记录器仅用于本地调试,开启期间可通过 macOS 控制台流式传输,同时写入本地文件。
+- 您可以在开启后重复复现问题的相关操作,然后在 App 中导出日志文件和检查它们。
+- 没有内建的上传功能,如需提交给开发者,请手动将导出的日志文件附加到您的问题报告中。
+- 为减少能耗和磁盘读写,请调试结束后及时关闭日志记录器。
+- 如日志文件超过 $1 将自动关闭日志记录器并清除日志。
diff --git a/src/app/_locales/zh/quick-start-guide-ios.md b/src/app/_locales/zh/quick-start-guide-ios.md
new file mode 100644
index 00000000..d24bda16
--- /dev/null
+++ b/src/app/_locales/zh/quick-start-guide-ios.md
@@ -0,0 +1,26 @@
+### 欢迎来到这个项目,您需要两个主要步骤来使扩展工作:
+
+- **打开 App 并设置目录**
+
+ - 该目录用于保存和加载您的用户脚本。
+ - 首次启动 App 时已为您设置默认本地目录。
+ - 点击当前目录可跳转到默认目录或您设置的目录。
+
+- **在 Safari 中启用扩展**
+
+ - 从 `设置` 应用(设置 > Safari > 扩展)或 `Safari` 应用(iPhone 上的“AA”按钮,iPad 上的“扩展图标”,也是您打开扩展的“弹出界面”的位置)管理扩展。
+ - 为了获得最佳体验,建议您“始终允许” Userscripts 为“所有网站”,但您也可以仅允许您想要的网站,但当您的脚本不起作用时,请不要忘记您的设置。
+
+### 那么,如何安装和注入用户脚本,以及一些注意事项?
+
+- 移动版扩展目前不包含内置的脚本编辑器,但您仍然可以编写您自己的脚本并安装它们。
+- 您可以直接保存扩展名为 `.user.js` 的文件到您上面设置的 Userscripts 目录中。
+ - 您的脚本文件必须包含有效的元数据块以匹配网站页面并正确显示在扩展的弹出界面中。
+- 当您在 Safari 中访问一个 `.user.js` 网址,然后打开扩展弹出界面,您将看到安装提示;如果您启用了增强提示,它会自动弹出。
+ - 请注意该网址的 `/路径` 部分应该以 `.user.js` 结尾,而不是 `?查询` 或 `#锚点` 部分,否则该网址将不会被视为有效的用户脚本。
+- 当您启用该扩展并正确编写元数据尤其是像 `@match` 后,当您访问匹配的网页时,它将自动完成注入。
+ - 您可以暂时禁用单个用户脚本或所有用户脚本,只需打开扩展弹出界面即可切换它们。
+
+### 就这样,现在就开始改善您的生活质量吧!
+
+_嘿,不要忘记阅读我们的详细文档以了解更多信息。_
diff --git a/src/app/_locales/zh/quick-start-guide-mac.md b/src/app/_locales/zh/quick-start-guide-mac.md
new file mode 100644
index 00000000..f9983ced
--- /dev/null
+++ b/src/app/_locales/zh/quick-start-guide-mac.md
@@ -0,0 +1,26 @@
+### 欢迎来到这个项目,您需要两个主要步骤来使扩展工作:
+
+- **打开 App 并设置目录**
+
+ - 该目录用于保存和加载您的用户脚本。
+ - 首次启动 App 时已为您设置默认本地目录。
+ - 点击当前目录可跳转到默认目录或您设置的目录。
+
+- **在 Safari 中启用扩展**
+
+ - 在 Safari > 设置... > 扩展列表中启用 Userscripts 条目。
+ - 为了获得最佳体验,建议您“始终允许” Userscripts 为“所有网站”,但您也可以仅允许您想要的网站,但当您的脚本不起作用时,请不要忘记您的设置。
+
+### 那么,如何安装和注入用户脚本,以及一些注意事项?
+
+- 首选的方法当然是撰写您自己的用户脚本,打开扩展页面点击加号创建新脚本,编辑和保存它。
+- 您还可以直接保存扩展名为 `.user.js` 的文件到您上面设置的 Userscripts 目录中。
+ - 您的脚本文件必须包含有效的元数据块以匹配网站页面并正确显示在扩展的弹出界面中。
+- 当您在 Safari 中访问一个 `.user.js` 网址,然后打开扩展弹出界面,您将看到安装提示;如果您启用了增强提示,它会自动弹出。
+ - 请注意该网址的 `/路径` 部分应该以 `.user.js` 结尾,而不是 `?查询` 或 `#锚点` 部分,否则该网址将不会被视为有效的用户脚本。
+- 当您启用该扩展并正确编写元数据尤其是像 `@match` 后,当您访问匹配的网页时,它将自动完成注入。
+ - 您可以暂时禁用单个用户脚本或所有用户脚本,只需打开扩展弹出界面即可切换它们。
+
+### 就这样,现在就开始改善您的生活质量吧!
+
+_嘿,不要忘记阅读我们的详细文档以了解更多信息。_
diff --git a/src/app/_locales/zh_Hant/messages.js b/src/app/_locales/zh_Hant/messages.js
new file mode 100644
index 00000000..e0fadede
--- /dev/null
+++ b/src/app/_locales/zh_Hant/messages.js
@@ -0,0 +1,85 @@
+import nativeLoggerCaveat from "./native-logger-caveat.md?raw";
+import quickStartGuideMac from "./quick-start-guide-mac.md?raw";
+import quickStartGuideIos from "./quick-start-guide-ios.md?raw";
+
+import { marked } from "marked";
+
+/** @satisfies {typeof import("../en/messages.js").markdown} */
+export const markdown = {
+ native_logger_caveat: {
+ message: await marked.parse(nativeLoggerCaveat),
+ },
+ quick_start_guide_mac: {
+ message: await marked.parse(quickStartGuideMac),
+ },
+ quick_start_guide_ios: {
+ message: await marked.parse(quickStartGuideIos),
+ },
+};
+
+/** @satisfies {typeof import("../en/messages.js").messages} */
+export const messages = {
+ enabled: {
+ message: "已啟用",
+ },
+ disabled: {
+ message: "已停用",
+ },
+ unknown: {
+ message: "未知",
+ },
+ error: {
+ message: "錯誤",
+ },
+ button_ok: {
+ message: "確定",
+ },
+ button_dismiss: {
+ message: "關閉",
+ },
+ button_disable: {
+ message: "停用",
+ },
+ safari_extension_status: {
+ message: "Safari 延伸功能狀態",
+ },
+ native_logger_enabled_title: {
+ message: "本地日誌記錄器已啟用",
+ },
+ quick_start_guide_title: {
+ message: "快速入門指南",
+ },
+ open_safari_settings: {
+ message: "開啟 Safari 設定",
+ },
+ open_safari_preferences: {
+ message: "開啟 Safari 偏好",
+ },
+ show_usage_guide: {
+ message: "顯示使用指南",
+ },
+ change_directory: {
+ message: "更改使用者腳本目錄",
+ },
+ current_directory: {
+ message: "當前目錄:",
+ },
+ documentation: {
+ message: "詳細文件",
+ },
+ discussions: {
+ message: "交流討論",
+ },
+ report_an_issue: {
+ message: "報告問題",
+ },
+ privacy_policy: {
+ message: "隱私政策",
+ },
+ export_log_files: {
+ message: "匯出日誌檔案",
+ },
+ disable_logger: {
+ message: "停用日誌記錄",
+ },
+};
diff --git a/src/app/_locales/zh_Hant/native-logger-caveat.md b/src/app/_locales/zh_Hant/native-logger-caveat.md
new file mode 100644
index 00000000..0c9b4baa
--- /dev/null
+++ b/src/app/_locales/zh_Hant/native-logger-caveat.md
@@ -0,0 +1,5 @@
+- 日誌記錄器僅用於本地除錯,開啟期間可透過 macOS 控制檯流式傳輸,同時寫入本地檔案。
+- 您可以在開啟後重複復現問題的相關操作,然後在 App 中匯出日誌檔案和檢查它們。
+- 沒有內建的上傳功能,如需提交給開發者,請手動將匯出的日誌檔案附加到您的問題報告中。
+- 為減少能耗和磁碟讀寫,請除錯結束後及時關閉日誌記錄器。
+- 如日誌檔案超過 $1 將自動關閉日誌記錄器並清除日誌。
diff --git a/src/app/_locales/zh_Hant/quick-start-guide-ios.md b/src/app/_locales/zh_Hant/quick-start-guide-ios.md
new file mode 100644
index 00000000..0d7f5e51
--- /dev/null
+++ b/src/app/_locales/zh_Hant/quick-start-guide-ios.md
@@ -0,0 +1,26 @@
+### 歡迎來到這個專案,您需要兩個主要步驟來使延伸功能工作:
+
+- **開啟 App 並設定目錄**
+
+ - 該目錄用於儲存和載入您的使用者腳本。
+ - 首次啟動 App 時已為您設定預設本地目錄。
+ - 點選當前目錄可跳轉到預設目錄或您設定的目錄。
+
+- **在 Safari 中啟用延伸功能**
+
+ - 從 `設定` 應用(設定 > Safari > 延伸功能)或 `Safari` 應用(iPhone 上的“AA”按鈕,iPad 上的“延伸功能圖示”,也是您開啟延伸功能的“彈出介面”的位置)管理延伸功能。
+ - 為了獲得最佳體驗,建議您“始終允許” Userscripts 為“所有網站”,但您也可以僅允許您想要的網站,但當您的腳本不起作用時,請不要忘記您的設定。
+
+### 那麼,如何安裝和注入使用者腳本,以及一些注意事項?
+
+- 移動版延伸功能目前不包含內建的腳本編輯器,但您仍然可以編寫您自己的腳本並安裝它們。
+- 您可以直接儲存副檔名為 `.user.js` 的檔案到您上面設定的 Userscripts 目錄中。
+ - 您的腳本檔案必須包含有效的元資料塊以匹配網站頁面並正確顯示在延伸功能的彈出介面中。
+- 當您在 Safari 中訪問一個 `.user.js` 網址,然後開啟延伸功能彈出介面,您將看到安裝提示;如果您啟用了增強提示,它會自動彈出。
+ - 請注意該網址的 `/路徑` 部分應該以 `.user.js` 結尾,而不是 `?查詢` 或 `#錨點` 部分,否則該網址將不會被視為有效的使用者腳本。
+- 當您啟用該延伸功能並正確編寫元資料尤其是像 `@match` 後,當您訪問匹配的網頁時,它將自動完成注入。
+ - 您可以暫時禁用單個使用者腳本或所有使用者腳本,只需開啟延伸功能彈出介面即可切換它們。
+
+### 就這樣,現在就開始改善您的生活質量吧!
+
+_嘿,不要忘記閱讀我們的詳細文件以瞭解更多資訊。_
diff --git a/src/app/_locales/zh_Hant/quick-start-guide-mac.md b/src/app/_locales/zh_Hant/quick-start-guide-mac.md
new file mode 100644
index 00000000..3331a109
--- /dev/null
+++ b/src/app/_locales/zh_Hant/quick-start-guide-mac.md
@@ -0,0 +1,26 @@
+### 歡迎來到這個專案,您需要兩個主要步驟來使延伸功能工作:
+
+- **開啟 App 並設定目錄**
+
+ - 該目錄用於儲存和載入您的使用者腳本。
+ - 首次啟動 App 時已為您設定預設本地目錄。
+ - 點選當前目錄可跳轉到預設目錄或您設定的目錄。
+
+- **在 Safari 中啟用延伸功能**
+
+ - 在 Safari > 設定... > 延伸功能列表中啟用 Userscripts 條目。
+ - 為了獲得最佳體驗,建議您“始終允許” Userscripts 為“所有網站”,但您也可以僅允許您想要的網站,但當您的腳本不起作用時,請不要忘記您的設定。
+
+### 那麼,如何安裝和注入使用者腳本,以及一些注意事項?
+
+- 首選的方法當然是撰寫您自己的使用者腳本,開啟延伸功能頁面點選加號建立新腳本,編輯和儲存它。
+- 您還可以直接儲存副檔名為 `.user.js` 的檔案到您上面設定的 Userscripts 目錄中。
+ - 您的腳本檔案必須包含有效的元資料塊以匹配網站頁面並正確顯示在延伸功能的彈出介面中。
+- 當您在 Safari 中訪問一個 `.user.js` 網址,然後開啟延伸功能彈出介面,您將看到安裝提示;如果您啟用了增強提示,它會自動彈出。
+ - 請注意該網址的 `/路徑` 部分應該以 `.user.js` 結尾,而不是 `?查詢` 或 `#錨點` 部分,否則該網址將不會被視為有效的使用者腳本。
+- 當您啟用該延伸功能並正確編寫元資料尤其是像 `@match` 後,當您訪問匹配的網頁時,它將自動完成注入。
+ - 您可以暫時禁用單個使用者腳本或所有使用者腳本,只需開啟延伸功能彈出介面即可切換它們。
+
+### 就這樣,現在就開始改善您的生活質量吧!
+
+_嘿,不要忘記閱讀我們的詳細文件以瞭解更多資訊。_
diff --git a/src/app/app.css b/src/app/app.css
index 2eaa3de0..40c7cfa2 100644
--- a/src/app/app.css
+++ b/src/app/app.css
@@ -1,39 +1,59 @@
html {
- font-size: 100%;
- height: 100vh;
- overflow: hidden;
+ height: auto;
+ overflow: visible;
+ overscroll-behavior: none;
}
body {
- background-color: var(--color-bg-secondary);
+ background-color: var(--color-bg-primary);
color: var(--text-color-primary);
- font: var(--text-medium);
- height: 100%;
+ font: var(--text-default);
letter-spacing: var(--letter-spacing-medium);
- position: relative;
text-rendering: optimizelegibility;
-webkit-font-smoothing: antialiased;
}
-@media screen and (height <= 400px) {
- html {
- font-size: 80%;
+/* ios */
+@supports (-webkit-touch-callout: none) {
+ /**
+ * Dynamic Type
+ * https://support.apple.com/102453
+ * https://webkit.org/blog/3709/using-the-system-font-in-web-content/
+ * https://developer.apple.com/library/archive/releasenotes/General/WhatsNewInSafari/Articles/Safari_7_0.html#//apple_ref/doc/uid/TP40014305-CH5-SW10
+ * https://github.com/w3c/csswg-drafts/issues/3708
+ */
+ @supports (font: -apple-system-body) {
+ html {
+ /* stylelint-disable-next-line font-family-no-missing-generic-family-keyword */
+ font: -apple-system-body; /* default 17px */
+ }
}
- p {
- font: var(--text-large);
- letter-spacing: var(--letter-spacing-large);
+ /* Avoid page zoom */
+ input,
+ textarea,
+ select {
+ font-size: max(1rem, 16px);
}
}
-@media screen and (height >= 700px) and (width >= 600px) {
- html {
- font-size: 150%;
- }
+#app {
+ flex-direction: column;
}
-#app {
- height: 100%;
+address,
+article,
+aside,
+button,
+div,
+footer,
+header,
+hgroup,
+main,
+nav,
+search,
+section {
+ display: flex;
}
button {
@@ -43,9 +63,59 @@ button {
user-select: none;
}
+button:disabled {
+ opacity: var(--opacity-disabled);
+ pointer-events: none;
+}
+
+a,
.link {
background: none;
color: var(--color-blue);
cursor: pointer;
text-decoration: underline;
}
+
+.truncate {
+ flex-grow: 1;
+ min-width: 0;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.flexible_space {
+ flex-grow: 1;
+}
+
+x-markdown {
+ display: flex;
+ flex-direction: column;
+ overflow: auto;
+ text-align: left;
+ gap: var(--gap);
+ padding: 0 3rem;
+ --gap: 0.75rem;
+}
+
+@media (width < 500px) {
+ x-markdown {
+ padding: 0 1.5rem;
+ }
+}
+
+x-markdown :is(h1, h2, h3, h4, h5, h6) {
+ padding: 0;
+ margin: 0;
+}
+
+x-markdown ul {
+ display: flex;
+ flex-direction: column;
+ gap: var(--gap);
+ padding-left: 1.5rem;
+}
+
+x-markdown > ul ul {
+ margin-top: var(--gap);
+}
diff --git a/src/app/global.d.ts b/src/app/global.d.ts
index 0b01b0d8..b3f9487f 100644
--- a/src/app/global.d.ts
+++ b/src/app/global.d.ts
@@ -5,19 +5,17 @@
declare global {
interface Window {
- APP: {
- show: (
- platform: "ios" | "mac",
- enabled: boolean,
- useSettingsInsteadOfPreferences: boolean,
- ) => void;
- printVersion: (v: string, b: string) => void;
- printDirectory: (d: string) => void;
+ webapp: {
+ updateDirectory: (directory: string) => void;
+ updateExtStatus: (extStatus: ExtensionStatus) => void;
+ switchLogger: (enableLogger: boolean, promptLogger: boolean) => void;
};
webkit: {
messageHandlers: {
controller: {
- postMessage: function;
+ postMessage: (
+ message: T,
+ ) => Promise>;
};
};
};
diff --git a/src/app/i18n.js b/src/app/i18n.js
new file mode 100644
index 00000000..389042d8
--- /dev/null
+++ b/src/app/i18n.js
@@ -0,0 +1,58 @@
+/**
+ * @typedef {typeof import("./_locales/en/messages.js").messages} MessagesT
+ * @typedef {typeof import("./_locales/en/messages.js").markdown} MarkdownT
+ */
+
+/**
+ * @param {Types.I18nMessages} messages
+ * @param {string} messageName
+ * @param {string | string[]} substitutions
+ * @returns {string}
+ */
+function getLangFrom(messages, messageName, substitutions = undefined) {
+ if (!(messageName in messages)) {
+ console.warn(`i18n - "${messageName}" not found`, messages);
+ return "";
+ }
+ let text = messages[messageName].message;
+ // handle substitutions
+ if (typeof substitutions === "string") {
+ text = text.replace("$1", substitutions);
+ } else if (Array.isArray(substitutions)) {
+ for (let i = 0; i < substitutions.length; i++) {
+ text = text.replace(`$${i + 1}`, substitutions[i]);
+ }
+ }
+ if (import.meta.env.MODE === "development") {
+ console.debug("i18n", messages[messageName].message, text, substitutions);
+ }
+ return text;
+}
+
+export async function i18nInit() {
+ const languages = [navigator.language.replace("-", "_")];
+ if (["zh-HK", "zh-MO", "zh-TW"].includes(navigator.language)) {
+ languages.unshift("zh_Hant");
+ }
+ languages.push(navigator.language.split("-")[0]);
+ languages.push("en"); // fallback
+ if (import.meta.env.MODE === "development") {
+ // languages.unshift("en"); // DEBUG
+ }
+ for (const language of languages) {
+ try {
+ /** @type {{messages: MessagesT, markdown: MarkdownT}} */
+ const module = await import(`./_locales/${language}/messages.js`);
+ const { messages, markdown } = module;
+ return {
+ /** @type {Types.GetLang} */
+ gl: (n, s) => getLangFrom(messages, n, s),
+ /** @type {Types.GetLang} */
+ md: (n, s) => getLangFrom(markdown, n, s),
+ };
+ } catch (error) {
+ console.debug("Will fall back to `en`", error);
+ }
+ }
+ throw Error("I18n initialization failed");
+}
diff --git a/src/app/img/icon.png b/src/app/img/icon.png
deleted file mode 100644
index 9fe96182..00000000
Binary files a/src/app/img/icon.png and /dev/null differ
diff --git a/src/app/img/logo.svg b/src/app/img/logo.svg
deleted file mode 100644
index 9bf95127..00000000
--- a/src/app/img/logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/app/jsconfig.json b/src/app/jsconfig.json
index 899038cd..95a69da9 100644
--- a/src/app/jsconfig.json
+++ b/src/app/jsconfig.json
@@ -20,7 +20,11 @@
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true,
- "sourceMap": true
+ "sourceMap": true,
+
+ "paths": {
+ "@shared/*": ["../shared/*"]
+ }
},
"include": ["**/*.d.ts", "**/*.js", "**/*.svelte"]
}
diff --git a/src/app/main.js b/src/app/main.js
index 62676104..8a28fe48 100644
--- a/src/app/main.js
+++ b/src/app/main.js
@@ -1,10 +1,42 @@
import "./reset.css";
-import "./variables.css";
+import "@shared/variables.css";
import "./app.css";
+import { mount } from "svelte";
import App from "./App.svelte";
-const app = new App({
- target: document.getElementById("app"),
-});
+if (import.meta.env.MODE === "development") {
+ // Simulation in non-WkWebView dev environment
+ if (import.meta.env.SAFARI_PLATFORM === undefined) {
+ console.warn("Simulation webkit...");
+ window.webkit = {
+ messageHandlers: {
+ controller: {
+ postMessage: async (message) => {
+ switch (message) {
+ case "INIT":
+ return {
+ build: "2",
+ directory: "Userscripts App Documents",
+ enableLogger: true,
+ extStatus: "unknown",
+ firstRunTime: 1,
+ maxLogFileSize: 500_000_000,
+ platform: "mac",
+ promptLogger: true,
+ useSettingsInsteadOfPreferences: true,
+ version: "2.0.0",
+ };
+ default:
+ console.debug("Simulation.webkit.messageHandler:", message);
+ break;
+ }
+ },
+ },
+ },
+ };
+ }
+}
+
+const app = mount(App, { target: document.getElementById("app") });
export default app;
diff --git a/src/app/reset.css b/src/app/reset.css
index 5748075f..0b8335ad 100644
--- a/src/app/reset.css
+++ b/src/app/reset.css
@@ -10,9 +10,7 @@ p {
}
ul {
- list-style: none;
margin: 0;
- padding: 0;
}
button,
diff --git a/src/app/types.d.ts b/src/app/types.d.ts
new file mode 100644
index 00000000..f282812b
--- /dev/null
+++ b/src/app/types.d.ts
@@ -0,0 +1,43 @@
+declare namespace Types {
+ /** @see {@link https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/i18n/Locale-Specific_Message_reference} */
+ type I18nMessages = {
+ [x: string]: {
+ message: string;
+ description?: string;
+ placeholders?: Object;
+ };
+ };
+
+ type GetLang = (
+ messageName: T,
+ substitutions?: string | string[],
+ ) => string;
+
+ type SystemPlatform = "mac" | "ios";
+
+ type ExtensionStatus = "unknown" | "disabled" | "enabled" | "error";
+
+ type MessageBody =
+ | "INIT"
+ | "CHANGE_DIRECTORY"
+ | "OPEN_DIRECTORY"
+ | "SHOW_PREFERENCES"
+ | "EXPORT_LOG_FILES"
+ | "DISABLE_LOGGER"
+ | "DISMISS_LOGGER_PROMPT";
+
+ type MessageReply = T extends "INIT"
+ ? {
+ build: string;
+ version: string;
+ platform: SystemPlatform;
+ directory: string;
+ extStatus: ExtensionStatus;
+ useSettingsInsteadOfPreferences: boolean;
+ enableLogger: boolean;
+ promptLogger: boolean;
+ maxLogFileSize: number;
+ firstRunTime: number;
+ }
+ : void;
+}
diff --git a/src/app/variables.css b/src/app/variables.css
deleted file mode 100644
index 0c641d23..00000000
--- a/src/app/variables.css
+++ /dev/null
@@ -1,52 +0,0 @@
-:root {
- --border-radius: 0.188rem;
- --box-shadow: 0 0.5rem 1rem 0 rgb(0 0 0 / 0.25);
- --color-bg-primary: #323639;
- --color-bg-secondary: #2f3337;
- --color-script-highlighted: #364049; /* rgba(116, 178, 235, 0.1); */
- --color-black: #1d2023;
- --color-blue: #74b1eb;
- --color-green: #60f36c;
- --color-grey: rgb(255 255 255 / 0.15);
- --color-red: #ff453a;
- --color-yellow: #e4f360;
- --letter-spacing-large: -0.031rem;
- --letter-spacing-default: -0.029rem;
- --letter-spacing-medium: -0.018rem;
- --letter-spacing-small: -0.008rem;
- --opacity-disabled: 0.3;
- --text-color-primary: rgb(255 255 255);
- --text-color-secondary: rgb(255 255 255 / 0.65);
- --text-color-disabled: rgb(255 255 255 / 0.4);
- --font-family: system-ui, -apple-system, "Helvetica Neue", "Helvetica",
- sans-serif;
- --text-default: 1rem/1.5rem var(--font-family);
- --text-large: 1.25rem/1.5rem var(--font-family);
- --text-medium: 0.875rem/1.313rem var(--font-family);
- --text-small: 0.719rem/1rem var(--font-family);
-
- /* editor variables */
- --editor-font: monaco, monospace;
- --editor-font-size: 14px;
- --editor-line-height: 24px;
- --editor-invisible: rgb(255 255 255 / 0.15);
- --editor-active-line: var(--color-bg-secondary);
- --editor-selected-bg: rgb(116 178 235 / 0.35);
- --editor-matched-highlight: rgb(116 178 235 / 0.2);
- --editor-search-highlight: rgb(255 166 0 / 0.3);
- --editor-number: #77e26a;
- --editor-comment: rgb(255 255 255 / 0.35);
- --editor-def: #efc371;
- --editor-default: #cdcfd1;
- --editor-keyword: #96c3ed;
- --editor-atom: #59ebf5;
- --editor-operator: #8c99a7;
- --editor-property: #e86c8a;
- --editor-string: #f5eea2;
- --editor-string-2: #cdabff;
- --editor-error: var(--color-red);
- --editor-cursor: #e3e7eb;
- --editor-matching-bracket-color: #fff;
- --editor-matching-bracket-border: var(--editor-number);
- --editor-non-matching-bracket: var(--editor-error);
-}
diff --git a/src/dev/App.svelte b/src/dev/App.svelte
index 2ac83b9c..602dae45 100644
--- a/src/dev/App.svelte
+++ b/src/dev/App.svelte
@@ -8,6 +8,7 @@
href="https://github.com/quoid/userscripts"
target="_blank"
rel="noreferrer"
+ aria-label="open userscripts github"
>
diff --git a/src/dev/jsconfig.json b/src/dev/jsconfig.json
new file mode 100644
index 00000000..899038cd
--- /dev/null
+++ b/src/dev/jsconfig.json
@@ -0,0 +1,26 @@
+// https://code.visualstudio.com/docs/languages/jsconfig
+// https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
+// https://www.typescriptlang.org/tsconfig
+
+// https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html
+// https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html
+
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+
+ "verbatimModuleSyntax": true,
+ "isolatedModules": true,
+ "resolveJsonModule": true,
+
+ "allowJs": true,
+ "checkJs": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "skipLibCheck": true,
+ "sourceMap": true
+ },
+ "include": ["**/*.d.ts", "**/*.js", "**/*.svelte"]
+}
diff --git a/src/dev/main.js b/src/dev/main.js
index b1acd03a..85631fee 100644
--- a/src/dev/main.js
+++ b/src/dev/main.js
@@ -1,8 +1,7 @@
import "./app.css";
+import { mount } from "svelte";
import App from "./App.svelte";
-const app = new App({
- target: document.getElementById("app"),
-});
+const app = mount(App, { target: document.getElementById("app") });
export default app;
diff --git a/src/ext/action-popup/App.svelte b/src/ext/action-popup/App.svelte
index 218721c5..6d593530 100644
--- a/src/ext/action-popup/App.svelte
+++ b/src/ext/action-popup/App.svelte
@@ -1,20 +1,20 @@
-
-
-{#if !active}
-
-{/if}
-{#if showInstallPrompt}
-
- Userscript
- {#if scriptChecking}
- {showInstallPrompt}
- {:else}
- {scriptInstalled ? "Installed" : "Detected"}:
-
- {/if}
-
-{/if}
-{#if errorNotification}
-
- {errorNotification}
- (errorNotification = undefined)}
- title={"Clear error"}
- />
-
-{/if}
-
- {#if loading}
-
- {:else if inactive}
-
Popup inactive on extension page
- {:else if firstGuide}
-
-
Welcome, first use please:
-
-
to complete the initialization
-
- {:else if initError}
-
- Something went wrong:
-
-
- {:else if items.length < 1}
-
No matched userscripts
- {:else}
-
- {#each list as item, i (item.filename)}
-
toggleItem(item)}
- />
- {/each}
-
- {/if}
-
-{#if !inactive && platform === "macos"}
-
-{/if}
{#if showUpdates}
(showUpdates = false)}
showLoaderOnDisabled={true}
@@ -607,7 +517,7 @@
{:else if showInstall}
(showInstall = false)}
showLoaderOnDisabled={true}
@@ -621,7 +531,7 @@
{:else if showAll}
{
showAll = false;
@@ -631,34 +541,151 @@
>
+{:else}
+
+
+ {#if loading}
+
+ {:else if inactive}
+
Popup inactive on extension page
+ {:else if firstGuide}
+
+
Welcome, first use please:
+
+
to complete the initialization
+
+ {:else if initError}
+
+ Something went wrong:
+
+
+ {:else if items.length < 1}
+
No matched userscripts
+ {:else}
+
+ {#each list as item, i (item.filename)}
+
toggleItem(item)}
+ />
+ {/each}
+
+ {/if}
+
+ {#if !inactive && platform === "macos"}
+
+ {/if}
{/if}
diff --git a/src/ext/action-popup/Components/Views/AllItemsView.svelte b/src/ext/action-popup/Components/Views/AllItemsView.svelte
index b5457123..20aea85c 100644
--- a/src/ext/action-popup/Components/Views/AllItemsView.svelte
+++ b/src/ext/action-popup/Components/Views/AllItemsView.svelte
@@ -5,7 +5,7 @@
export let allItemsToggleItem;
let disabled;
- let rowColorsAll;
+ let rowColorsAll = "";
$: list = allItems.sort((a, b) => a.name.localeCompare(b.name));
@@ -14,12 +14,12 @@
} else if (list.length > 1 && list.length % 2 !== 0) {
rowColorsAll = "odd--all";
} else {
- rowColorsAll = undefined;
+ rowColorsAll = "";
}
{#if allItems.length}
-
+
{#each list as item (item.filename)}
diff --git a/src/ext/action-popup/Components/Views/InstallView.svelte b/src/ext/action-popup/Components/Views/InstallView.svelte
index fe3a3152..8c54b6cc 100644
--- a/src/ext/action-popup/Components/Views/InstallView.svelte
+++ b/src/ext/action-popup/Components/Views/InstallView.svelte
@@ -1,6 +1,6 @@
-
+
-{#if $state.includes("init")}
+{#if $v4state.includes("init")}
-
- {@html logo}
- {#if $state.includes("init-error")}
+
+ {#if $v4state.includes("init-error")}
Failed to initialize app, check the browser console
{:else}
Initializing app...
{/if}
{/if}
-
-
-
-
+
+ {#if !sidebarHidden}
+
+
+ {/if}
+
+
+{#if splitterActive}
+
+{/if}
{#each $notifications as item (item.id)}
notifications.remove(item.id)} {item} />
{/each}
-{#if $state.includes("settings")}{/if}
+{#if $v4state.includes("settings")}
+ v4state.remove("settings")} let:navRegister>
+
+
+{/if}
diff --git a/src/ext/extension-page/Components/Editor/CodeMirror.svelte b/src/ext/extension-page/Components/Editor/CodeMirror.svelte
index e0c39081..b2cbacda 100644
--- a/src/ext/extension-page/Components/Editor/CodeMirror.svelte
+++ b/src/ext/extension-page/Components/Editor/CodeMirror.svelte
@@ -1,4 +1,4 @@
-
- {#if $state.includes("editor-loading") || $state.includes("fetching")}
+ {#if $v4state.includes("editor-loading") || $v4state.includes("fetching")}
{/if}
{#if !activeItem}
No Item Selected
{/if}