diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000000..80f989d97b
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,11 @@
+# http://EditorConfig.org
+
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index a3b85480f9..0000000000
--- a/.eslintignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.git
-packages/docsify-server-renderer/build.js
-node_modules
-build
-server.js
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index a8f7cd0c9c..0000000000
--- a/.eslintrc
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "extends": "xo-space/browser",
- "rules": {
- "semi": [2, "never"],
- "no-return-assign": "off",
- "no-unused-expressions": "off",
- "no-new-func": "off",
- "no-multi-assign": "off",
- "no-mixed-operators": "off",
- "max-params": "off",
- "no-script-url": "off",
- "camelcase": "off",
- "no-warning-comments": "off"
- },
- "globals": {
- "Docsify": true,
- "$docsify": true,
- "process": true
- }
-}
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000..6313b56c57
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto eol=lf
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 35d6b90ad3..0000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-
----
-
-
-
-
-
-## Bug Report
-
-#### Steps to reproduce
-
-
-
-#### What is current behaviour
-
-
-
-#### What is the expected behaviour
-
-
-
-#### Other relevant information
-
-
-- [ ] Bug does still occur when all/other plugins are disabled?
-
-- Your OS:
-- Node.js version:
-- npm/yarn version:
-- Browser version:
-- Docsify version:
-- Docsify plugins:
-
-
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 0000000000..0c8ea6d125
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,61 @@
+name: Bug Report
+description: Submit a bug report.
+labels: ['bug', 'Triage']
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for taking the time to fill out this bug report! **Please write in English**.
+ Before creating an issue please make sure you are using the latest version of Docsify.
+
+ - type: textarea
+ attributes:
+ label: Description
+ description: A clear and concise description of what the bug is, and why you consider it to be a bug.
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Expected behavior
+ description: A description of what you expected to happen.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Actual behavior
+ description: A description of what is actually happening.
+ validations:
+ required: true
+ - type: textarea
+ attributes:
+ label: Steps to reproduce
+ description: |
+ A description with steps to reproduce the issue.
+ Provide a link to a public repository or create a reproducible [sandbox](https://sandbox.docsifyjs.org/):
+ placeholder: |
+ 1. Step 1
+ 2. Step 2
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Environment
+ description: |
+ Please provide the following information if relevant to the issue:
+ ```markdown
+ - Your OS:
+ - Node.js version:
+ - npm/yarn version:
+ - Browser version:
+ - Docsify version:
+ - Docsify plugins (if the bug happens when plugins enabled, please try to isolate the issue):
+ ```
+
+ - type: checkboxes
+ attributes:
+ label: Additional Information
+ options:
+ - label: Bug still occurs when all/other plugins are disabled?
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000000..b0afe139b2
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Discord - the community chat
+ url: https://discord.gg/docsify
+ about: Join the Discord community and chat about Docsify
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index 501e4de505..0000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-
----
-
-
-
-
-
-## Feature request
-
-#### What problem does this feature solve?
-
-
-
-#### What does the proposed API look like?
-
-
-
-#### How should this be implemented in your opinion?
-
-
-
-#### Are you willing to work on this yourself?
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 0000000000..50adeb402d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,33 @@
+name: Feature Request
+description: Propose a new feature or improvement for this project.
+labels: ['feature request', 'Triage']
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thank you for suggesting a feature! Please provide as much detail as possible to help us understand your idea. **Write in English.**
+
+ - type: textarea
+ attributes:
+ label: Problem or Desire
+ description: What problem or need will this feature address? Why is it important?
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Proposal
+ description: What is your proposed solution? How should this feature work?
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Implementation Details
+ description: If you have any ideas about how this feature could be implemented, please share them here.
+
+ - type: textarea
+ attributes:
+ label: Additional Context
+ description: Add any other context, screenshots, or references that might help us understand your request.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index bb31bd41f2..e03dcea0c4 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,54 +1,38 @@
-
-
+## Summary
-
-
+
-**Summary**
+## Related issue, if any:
-**What kind of change does this PR introduce?** (check at least one)
+
+
+## What kind of change does this PR introduce?
+
+
- [ ] Bugfix
- [ ] Feature
-- [ ] Code style update
-- [ ] Refactor
-- [ ] Docs
-- [ ] Build-related changes
-- [ ] Other, please describe:
+- [ ] Code style update (formatting, renaming)
+- [ ] Refactoring (no functional changes, no api changes)
+- [ ] Build related changes
+- [ ] Documentation content changes
+- [ ] Other (please describe):
-If changing the UI of default theme, please provide the **before/after** screenshot:
+## For any code change,
-**Does this PR introduce a breaking change?** (check one)
-
-- [ ] Yes
-- [ ] No
+- [ ] Related documentation has been updated, if needed
+- [ ] Related tests have been added or updated, if needed
-If yes, please describe the impact and migration path for existing applications:
+## Does this PR introduce a breaking change?
-**The PR fulfills these requirements:**
+
-- [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number)
+- [ ] Yes
+- [ ] No
-You have tested in the following browsers: (Providing a detailed version will be better.)
+## Tested in the following browsers:
- [ ] Chrome
- [ ] Firefox
- [ ] Safari
- [ ] Edge
-- [ ] IE
-
-If adding a **new feature**, the PR's description includes:
-
-- [ ] A convincing reason for adding this feature
-- [ ] Related documents have been updated
-- [ ] Related tests have been updated
-
-To avoid wasting your time, it's best to open a **feature request issue** first and wait for approval before working on it.
-
-
-**Other information:**
-
----
-
-* [ ] DO NOT include files inside `lib` directory.
-
diff --git a/.github/crowdin/crowdin-push.yml b/.github/crowdin/crowdin-push.yml
new file mode 100644
index 0000000000..ebc81d1596
--- /dev/null
+++ b/.github/crowdin/crowdin-push.yml
@@ -0,0 +1,9 @@
+files:
+ - source: /*.md
+ translation: /%two_letters_code%/%original_file_name%
+ ignore:
+ - '/_coverpage.md'
+ - '/_navbar.md'
+
+project_id_env: CROWDIN_PROJECT_ID
+api_token_env: CROWDIN_PERSONAL_TOKEN
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000..0eeb12fa62
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,29 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+updates:
+ - package-ecosystem: npm # See documentation for possible values
+ directory: '/' # Location of package manifests
+ open-pull-requests-limit: 10
+ schedule:
+ interval: monthly
+ exclude-paths:
+ - 'test/consume-types/**'
+ ignore:
+ # For all dependencies, trigger pull requests only for semver-major updates (ignore minor and patch).
+ - dependency-name: '*'
+ update-types:
+ ['version-update:semver-patch', 'version-update:semver-minor']
+ - package-ecosystem: 'github-actions'
+ directory: '/'
+ open-pull-requests-limit: 10
+ schedule:
+ interval: monthly
+ ignore:
+ # For all dependencies, trigger pull requests only for semver-major and semver-minor updates (ignore patch).
+ - dependency-name: '*'
+ update-types:
+ ['version-update:semver-patch', 'version-update:semver-minor']
diff --git a/.github/semantic.yml b/.github/semantic.yml
new file mode 100644
index 0000000000..e7f5bb59b9
--- /dev/null
+++ b/.github/semantic.yml
@@ -0,0 +1,4 @@
+titleAndCommits: true
+allowMergeCommits: true
+allowRevertCommits: true
+anyCommit: true
diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml
new file mode 100644
index 0000000000..793cbaaec1
--- /dev/null
+++ b/.github/workflows/crowdin.yml
@@ -0,0 +1,31 @@
+name: Crowdin Action
+
+on:
+ workflow_dispatch:
+ push:
+ paths:
+ - 'docs/**.md'
+ branches: [develop, main]
+
+jobs:
+ crowdin:
+ if: github.repository == 'docsifyjs/docsify'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v7
+
+ - name: Crowdin push
+ uses: crowdin/github-action@v2
+ with:
+ upload_sources: true
+ upload_translations: false
+ download_translations: false
+ push_translations: false
+ config: '.github/crowdin/crowdin-push.yml'
+ crowdin_branch_name: ${{ github.ref_name }}
+ base_path: ${{ github.workspace }}/docs
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
+ CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
diff --git a/.github/workflows/emoji.yml b/.github/workflows/emoji.yml
new file mode 100644
index 0000000000..4f3e717199
--- /dev/null
+++ b/.github/workflows/emoji.yml
@@ -0,0 +1,42 @@
+name: Sync Emoji
+
+on:
+ schedule:
+ - cron: '0 2 * * *'
+ workflow_dispatch:
+
+jobs:
+ sync-emoji:
+ if: github.repository == 'docsifyjs/docsify'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v7
+
+ - uses: actions/setup-node@v7
+ with:
+ node-version: latest
+ cache: 'npm'
+
+ - name: Install dependencies
+ run: npm ci --ignore-scripts
+
+ - name: Run script to sync emoji data
+ run: npm run build:emoji
+
+ - name: Commit
+ id: auto-commit-action
+ uses: stefanzweifel/git-auto-commit-action@v7
+ with:
+ commit_message: 'chore: Sync emoji data with GitHub emoji API'
+ branch: sync-emoji
+ create_branch: true
+ file_pattern: 'src/core/render/emoji-data.js docs/emoji.md'
+ push_options: '--force'
+
+ - name: Create Pull Request
+ if: ${{ steps.auto-commit-action.outputs.changes_detected == 'true' }}
+ run: |
+ gh pr create --title 'chore: Sync emoji data with GitHub emoji API' --body 'Found updated github emojis need to sync.' --base develop --reviewer docsifyjs/reviewers
+ continue-on-error: true
+ env:
+ GH_TOKEN: ${{ secrets.READ_TEAM_TOKEN }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000000..8bb0b5348b
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,102 @@
+name: Build & Test
+
+on:
+ push:
+ branches: [main, develop]
+ pull_request:
+ branches: [main, develop]
+ workflow_dispatch:
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ node-version: ['lts/*']
+ steps:
+ - uses: actions/checkout@v7
+ - name: Setup Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v7
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: 'npm'
+ - name: Install dependencies
+ run: npm ci --ignore-scripts
+ - name: Build
+ run: npm run build
+ - name: Lint
+ run: npm run lint
+
+ test-jest:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ node-version: ['lts/*']
+ os: ['macos-latest', 'ubuntu-latest', 'windows-latest']
+ steps:
+ - uses: actions/checkout@v7
+ - name: Setup Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v7
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: 'npm'
+ - name: Install dependencies
+ run: npm ci --ignore-scripts
+ - name: Build
+ run: npm run build
+ - name: Unit Tests
+ run: npm run test:unit -- --ci --runInBand
+ - name: Integration Tests
+ run: npm run test:integration -- --ci --runInBand
+ - name: Consumption Tests
+ run: npm run test:consume-types
+
+ test-playwright:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ node-version: ['lts/*']
+ timeout-minutes: 30
+ steps:
+ - uses: actions/checkout@v7
+ - name: Setup Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v7
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: 'npm'
+ - name: Install dependencies
+ run: npm ci --ignore-scripts
+ - name: Build
+ run: npm run build
+ - name: Install Playwright
+ run: npx playwright install --with-deps
+ - name: E2E Tests (Playwright)
+ run: npm run test:e2e
+
+ # In the interest of not having to modify GitHub settings to update required
+ # builds for passing, I stuck this test here.
+ - name: Test v4 build
+ run: |
+ git fetch --tags
+ npm run build:v4
+ # ensure v4 build files exist:
+ test -f lib/docsify.js
+ test -f themes/pure.css
+ # ensure no git changes after building v4:
+ git diff --exit-code
+ npm run clean:v4
+ # ensure v4 build files are removed:
+ test ! -f lib/docsify.js
+ test ! -f themes/pure.css
+ # ensure no git changes after cleaning v4:
+ git diff --exit-code
+
+ - name: Store artifacts
+ uses: actions/upload-artifact@v7
+ if: failure()
+ with:
+ name: ${{ matrix.os }}-${{ matrix.node-version }}-artifacts
+ path: |
+ _playwright-results/
+ _playwright-report/
diff --git a/.gitignore b/.gitignore
index ea4b5b8059..c067112463 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,25 @@
-*.log
-.DS_Store
+# Directories
+.husky/_
.idea
+.vercel
+_playwright-report
+_playwright-results
node_modules
-themes/
+
+# Files
+.DS_Store
+*.log
+
+# Exceptions
+!.gitkeep
+
+# Output folder for the global build only
+dist/
+
+# Output folders for the legacy v4 build
lib/
+themes/
-# exceptions
-!.gitkeep
\ No newline at end of file
+# TypeScript declaration files for standard ESM consumption
+src/**/*.d.ts
+src/**/*.d.ts.map
diff --git a/.gitpod.yml b/.gitpod.yml
new file mode 100644
index 0000000000..41805e3e76
--- /dev/null
+++ b/.gitpod.yml
@@ -0,0 +1,10 @@
+tasks:
+ - command: gp await-port 3000 && sleep 3 && gp preview $(gp url 3000)
+ - init: npm install
+ command: npm run dev
+ports:
+ - port: 3000
+ onOpen: ignore
+vscode:
+ extensions:
+ - sysoev.language-stylus@1.11.0:xX39oruAJ5UQzTNVRdbBaQ==
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100755
index 0000000000..0997d63adf
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,5 @@
+#!/usr/bin/env sh
+. "$(dirname -- "$0")/_/husky.sh"
+
+npm run prettier
+npx lint-staged
diff --git a/.npmignore b/.npmignore
index 41b1431c08..a66241f111 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,5 +1,3 @@
.eslintignore
-.eslintrc
-.github/
+.github
.gitignore
-.travis.yml
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000000..2983d21759
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,11 @@
+# Directories
+_playwright-*
+dist
+lib
+
+# Files
+_vars.css
+_vars-advanced.css
+CHANGELOG.md
+emoji-data.*
+HISTORY.md
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000000..1c71f60703
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,4 @@
+{
+ "arrowParens": "avoid",
+ "singleQuote": true
+}
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 87576c5a3f..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-sudo: false
-language: node_js
-node_js: stable
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000000..9d8baf872b
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,70 @@
+{
+ // Use IntelliSense to learn about possible attributes.
+ // Hover to view descriptions of existing attributes.
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "type": "node",
+ "request": "launch",
+ "name": "Run unit tests",
+ "runtimeExecutable": "npm",
+ "runtimeArgs": ["run", "test:jest"],
+ "console": "integratedTerminal"
+ },
+ {
+ "type": "node",
+ "request": "launch",
+ "name": "Run current test file",
+ "runtimeExecutable": "npm",
+ "runtimeArgs": ["run", "test:jest", "--"],
+ "args": ["-i", "${relativeFile}", "--testPathIgnorePatterns"],
+ "console": "integratedTerminal"
+ },
+ {
+ "type": "node",
+ "request": "launch",
+ "name": "Run selected test name",
+ "runtimeExecutable": "npm",
+ "runtimeArgs": ["run", "test:jest", "--"],
+ "args": [
+ "-i",
+ "${relativeFile}",
+ "-t",
+ "${selectedText}",
+ "--testPathIgnorePatterns"
+ ],
+ "console": "integratedTerminal"
+ },
+ {
+ "type": "node",
+ "request": "launch",
+ "name": "Update current test file snapshot(s)",
+ "runtimeExecutable": "npm",
+ "runtimeArgs": ["run", "test:jest", "--"],
+ "args": [
+ "-i",
+ "${relativeFile}",
+ "--updateSnapshot",
+ "--testPathIgnorePatterns"
+ ],
+ "console": "integratedTerminal"
+ },
+ {
+ "type": "node",
+ "request": "launch",
+ "name": "Update selected test name snapshot(s)",
+ "runtimeExecutable": "npm",
+ "runtimeArgs": ["run", "test:jest", "--"],
+ "args": [
+ "-i",
+ "${relativeFile}",
+ "-t",
+ "${selectedText}",
+ "--updateSnapshot",
+ "--testPathIgnorePatterns"
+ ],
+ "console": "integratedTerminal"
+ }
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index b7d6eb8824..45d2e18043 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,3 +1,5 @@
{
- "prettier.eslintIntegration": true
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "cSpell.words": ["coverpage"],
+ "typescript.tsdk": "node_modules/typescript/lib"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 267d402aaf..823b46bca3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,446 @@
-
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+## [5.0.0](https://github.com/docsifyjs/docsify/compare/v5.0.0-rc.4...v5.0.0) (2026-07-23)
+
+
+### Features
+
+* add pageTitleFormatter config ([#2695](https://github.com/docsifyjs/docsify/issues/2695)) ([f3ab502](https://github.com/docsifyjs/docsify/commit/f3ab50255542559c8a5948f6a817c84c602d7938))
+* improve indexing and embedded search ([#2734](https://github.com/docsifyjs/docsify/issues/2734)) ([ab96d74](https://github.com/docsifyjs/docsify/commit/ab96d74a8d71668f1d5b15f2f71f1856db6e3ca1))
+
+
+### Bug Fixes
+
+* correct grammar in 'Edit on github' section of plugins.md ([18b03e4](https://github.com/docsifyjs/docsify/commit/18b03e49fab7d061089a5b7e3498005b7364df9d))
+* **embed:** strip front matter from included markdown ([#2752](https://github.com/docsifyjs/docsify/issues/2752)) ([e6ab47c](https://github.com/docsifyjs/docsify/commit/e6ab47cff0f3d201bb7f2504a5fa46419f4824eb))
+* enhance embed token handling in paragraphs and table cells ([870881a](https://github.com/docsifyjs/docsify/commit/870881a9d33ce0967cf75358d8e8e30dddc8e439))
+* enhance sidebar navigation link selection for decoded URLs ([#2708](https://github.com/docsifyjs/docsify/issues/2708)) ([72c0d63](https://github.com/docsifyjs/docsify/commit/72c0d63718073874de317dd6f952e38412943d98))
+* enhance slugify function to handle markdown links ([#2697](https://github.com/docsifyjs/docsify/issues/2697)) ([0784ebc](https://github.com/docsifyjs/docsify/commit/0784ebc8e4f571f6f9dfa4a97eb5e2fc5ed97beb))
+* escape HTML in image, link, and media components ([#2718](https://github.com/docsifyjs/docsify/issues/2718)) ([b8f7032](https://github.com/docsifyjs/docsify/commit/b8f70321b98d1747a025b2ce9ec0987971bd9be3))
+* exclude headings inside blockquotes from sidebar TOC ([#2691](https://github.com/docsifyjs/docsify/issues/2691)) ([09e85d4](https://github.com/docsifyjs/docsify/commit/09e85d4c34184e9ea0d7f090fdc8639a0fbe0942))
+* implement normalize method in html5.js ([#2712](https://github.com/docsifyjs/docsify/issues/2712)) ([ee6fef4](https://github.com/docsifyjs/docsify/commit/ee6fef4ffccbef9947a43228b106dad03781447a))
+* improve cache handling and error recovery ([#2744](https://github.com/docsifyjs/docsify/issues/2744)) ([cebb49f](https://github.com/docsifyjs/docsify/commit/cebb49fceb737fdc83ffe35841414a5a5bfce661))
+* keep anchor links aligned after layout changes ([#2731](https://github.com/docsifyjs/docsify/issues/2731)) ([ab54d53](https://github.com/docsifyjs/docsify/commit/ab54d53c31e48e95a8db24f4f10f1b3ab47057a8))
+* normalizing language input and escaping HTML ([#2716](https://github.com/docsifyjs/docsify/issues/2716)) ([f8ec7ac](https://github.com/docsifyjs/docsify/commit/f8ec7acb53731ddc9c07d248888ab85aea271e4f))
+* preserve callouts when revisiting pages ([#2757](https://github.com/docsifyjs/docsify/issues/2757)) ([d7df230](https://github.com/docsifyjs/docsify/commit/d7df230773946093625b54044dabc887b7fbf634))
+* update dependencies ([#2766](https://github.com/docsifyjs/docsify/issues/2766)) ([940d97f](https://github.com/docsifyjs/docsify/commit/940d97f813bb0ca6b1e23b96c19d106a7e650f4f))
+
+## [5.0.0-rc.4](https://github.com/docsifyjs/docsify/compare/v5.0.0-rc.3...v5.0.0-rc.4) (2026-03-11)
+
+
+### Bug Fixes
+
+* adjust intersection observer threshold for sticky class toggle ([#2637](https://github.com/docsifyjs/docsify/issues/2637)) ([4e8be38](https://github.com/docsifyjs/docsify/commit/4e8be38304ad5fcf64c585f42afef46c72adabb7))
+* enhance accessibility for sidebar toggle button ([#2604](https://github.com/docsifyjs/docsify/issues/2604)) ([3014945](https://github.com/docsifyjs/docsify/commit/3014945e4d677d24124a3a01fe88ec82951ebfa7))
+* improve word breaking for code blocks in markdown ([#2636](https://github.com/docsifyjs/docsify/issues/2636)) ([73d41e9](https://github.com/docsifyjs/docsify/commit/73d41e9e48ab7effae4c5dffd4aec4bd4e1b9168))
+* include h6 headings in heading element selection ([#2649](https://github.com/docsifyjs/docsify/issues/2649)) ([44326ca](https://github.com/docsifyjs/docsify/commit/44326ca423b25ddbb12b172ab7180edd553c61f4))
+* strip HTML tags from config.name when setting page title ([#2690](https://github.com/docsifyjs/docsify/issues/2690)) ([0cfee34](https://github.com/docsifyjs/docsify/commit/0cfee34dbc0d511a272070e4124eb2f3102d988e)), closes [#2610](https://github.com/docsifyjs/docsify/issues/2610)
+* typo ([#2632](https://github.com/docsifyjs/docsify/issues/2632)) ([2d45376](https://github.com/docsifyjs/docsify/commit/2d45376bb8dc3f7a07c633a7be4d38af3a56501b))
+
+
+### Features
+
+* add fallback default language support ([#2607](https://github.com/docsifyjs/docsify/issues/2607)) ([1abe3a9](https://github.com/docsifyjs/docsify/commit/1abe3a9ea48cd3a96ee65cd958090bf2936de3c9))
+* enhance embed handling for table cells ([#2606](https://github.com/docsifyjs/docsify/issues/2606)) ([422a745](https://github.com/docsifyjs/docsify/commit/422a745acc4783c325d55413c5349ca70c42c67c))
+* Fragment identifier full line ignore ([#2626](https://github.com/docsifyjs/docsify/issues/2626)) ([e811756](https://github.com/docsifyjs/docsify/commit/e8117563eae4aa9468c36b76fe83c5ce3f7423ea))
+* output type definitions, and allow `new Docsify(opts)` to accept options for ESM usage ([#2392](https://github.com/docsifyjs/docsify/issues/2392)) ([b960519](https://github.com/docsifyjs/docsify/commit/b960519608747015d1ab974c9ed809c21f3b1bda))
+
+
+
+## [5.0.0-rc.3](https://github.com/docsifyjs/docsify/compare/v5.0.0-rc.1...v5.0.0-rc.3) (2025-09-05)
+
+
+### Bug Fixes
+
+* enhance focus handling ([#2595](https://github.com/docsifyjs/docsify/issues/2595)) ([22ac7e8](https://github.com/docsifyjs/docsify/commit/22ac7e855de24b13280e9904930e58af58dbd6a7))
+* enhance focus handling by adding smooth scroll to content area ([#2569](https://github.com/docsifyjs/docsify/issues/2569)) ([20d095b](https://github.com/docsifyjs/docsify/commit/20d095b53c827c4d0590dee5fd377ba21560d7fb))
+* escape HTML in search keywords ([#2586](https://github.com/docsifyjs/docsify/issues/2586)) ([743e9cb](https://github.com/docsifyjs/docsify/commit/743e9cb484cc70859a582fb74d78ea1f52ef2c2a))
+* exclude app-name-link from sidebar text overflow styling ([#2564](https://github.com/docsifyjs/docsify/issues/2564)) ([375c058](https://github.com/docsifyjs/docsify/commit/375c058e3e1b12f3507d97a41b3fd8d6c4e904b0))
+* handle hash navigation to prevent duplicate callbacks ([#2575](https://github.com/docsifyjs/docsify/issues/2575)) ([72569de](https://github.com/docsifyjs/docsify/commit/72569dee8db92a01e8de5448e05c32afbd090fb2))
+* heading link overflow style ([#2568](https://github.com/docsifyjs/docsify/issues/2568)) ([be21637](https://github.com/docsifyjs/docsify/commit/be2163725ae314de3aa9a56c1216ce8c774cfcc6))
+* improve slug generation ([#2581](https://github.com/docsifyjs/docsify/issues/2581)) ([9bc58c9](https://github.com/docsifyjs/docsify/commit/9bc58c9ca24db513a90a06752181954aab0628ca))
+* normalize slugs to NFC and remove emoji variation selector ([#2597](https://github.com/docsifyjs/docsify/issues/2597)) ([5999f09](https://github.com/docsifyjs/docsify/commit/5999f09a4bac23169766af68fbdc71215161c1c6))
+* remove block display from anchor links to prevent layout issues ([#2576](https://github.com/docsifyjs/docsify/issues/2576)) ([6e45024](https://github.com/docsifyjs/docsify/commit/6e4502416886b9494cd7b510968c351c7e6fc3cd))
+* **sidebar:** remove ignored headings and children ([#2580](https://github.com/docsifyjs/docsify/issues/2580)) ([2a49bd0](https://github.com/docsifyjs/docsify/commit/2a49bd0aa4bb17eeb3d9f363c6f2b01e61e778ac))
+* update relative link handling ([#2579](https://github.com/docsifyjs/docsify/issues/2579)) ([eeacfcc](https://github.com/docsifyjs/docsify/commit/eeacfcce2a3df4e4146b5b54275553452b317352))
+
+
+### Features
+
+* GitHub style callouts ([#2487](https://github.com/docsifyjs/docsify/issues/2487)) ([2e59b0f](https://github.com/docsifyjs/docsify/commit/2e59b0f50cf8123b98e4c97c3053aa6985ae13a2))
+* support config helper multi keys if supported ([#2571](https://github.com/docsifyjs/docsify/issues/2571)) ([a2f734f](https://github.com/docsifyjs/docsify/commit/a2f734f223cae475aefe7d41995a2030a1f9c0a2))
+* support extract content between fragment markers from Markdown ([#2582](https://github.com/docsifyjs/docsify/issues/2582)) ([32aa74e](https://github.com/docsifyjs/docsify/commit/32aa74e0d2fcd89705e5c30fc8b8e2562e7b774e))
+
+
+
+## [5.0.0-rc.2](https://github.com/docsifyjs/docsify/compare/v5.0.0-rc.1...v5.0.0-rc.2) (2025-09-05)
+
+
+### Bug Fixes
+
+* enhance focus handling ([#2595](https://github.com/docsifyjs/docsify/issues/2595)) ([22ac7e8](https://github.com/docsifyjs/docsify/commit/22ac7e855de24b13280e9904930e58af58dbd6a7))
+* enhance focus handling by adding smooth scroll to content area ([#2569](https://github.com/docsifyjs/docsify/issues/2569)) ([20d095b](https://github.com/docsifyjs/docsify/commit/20d095b53c827c4d0590dee5fd377ba21560d7fb))
+* escape HTML in search keywords ([#2586](https://github.com/docsifyjs/docsify/issues/2586)) ([743e9cb](https://github.com/docsifyjs/docsify/commit/743e9cb484cc70859a582fb74d78ea1f52ef2c2a))
+* exclude app-name-link from sidebar text overflow styling ([#2564](https://github.com/docsifyjs/docsify/issues/2564)) ([375c058](https://github.com/docsifyjs/docsify/commit/375c058e3e1b12f3507d97a41b3fd8d6c4e904b0))
+* handle hash navigation to prevent duplicate callbacks ([#2575](https://github.com/docsifyjs/docsify/issues/2575)) ([72569de](https://github.com/docsifyjs/docsify/commit/72569dee8db92a01e8de5448e05c32afbd090fb2))
+* heading link overflow style ([#2568](https://github.com/docsifyjs/docsify/issues/2568)) ([be21637](https://github.com/docsifyjs/docsify/commit/be2163725ae314de3aa9a56c1216ce8c774cfcc6))
+* improve slug generation ([#2581](https://github.com/docsifyjs/docsify/issues/2581)) ([9bc58c9](https://github.com/docsifyjs/docsify/commit/9bc58c9ca24db513a90a06752181954aab0628ca))
+* remove block display from anchor links to prevent layout issues ([#2576](https://github.com/docsifyjs/docsify/issues/2576)) ([6e45024](https://github.com/docsifyjs/docsify/commit/6e4502416886b9494cd7b510968c351c7e6fc3cd))
+* **sidebar:** remove ignored headings and children ([#2580](https://github.com/docsifyjs/docsify/issues/2580)) ([2a49bd0](https://github.com/docsifyjs/docsify/commit/2a49bd0aa4bb17eeb3d9f363c6f2b01e61e778ac))
+* update relative link handling ([#2579](https://github.com/docsifyjs/docsify/issues/2579)) ([eeacfcc](https://github.com/docsifyjs/docsify/commit/eeacfcce2a3df4e4146b5b54275553452b317352))
+
+
+### Features
+
+* GitHub style callouts ([#2487](https://github.com/docsifyjs/docsify/issues/2487)) ([2e59b0f](https://github.com/docsifyjs/docsify/commit/2e59b0f50cf8123b98e4c97c3053aa6985ae13a2))
+* support config helper multi keys if supported ([#2571](https://github.com/docsifyjs/docsify/issues/2571)) ([a2f734f](https://github.com/docsifyjs/docsify/commit/a2f734f223cae475aefe7d41995a2030a1f9c0a2))
+* support extract content between fragment markers from Markdown ([#2582](https://github.com/docsifyjs/docsify/issues/2582)) ([32aa74e](https://github.com/docsifyjs/docsify/commit/32aa74e0d2fcd89705e5c30fc8b8e2562e7b774e))
+
+
+
+## [5.0.0-rc.1](https://github.com/docsifyjs/docsify/compare/v4.13.1...v5.0.0-rc.1) (2025-05-27)
+
+
+### Bug Fixes
+
+* auto header config heading generate func ([#2474](https://github.com/docsifyjs/docsify/issues/2474)) ([4bc5062](https://github.com/docsifyjs/docsify/commit/4bc5062fc13a3a43c7ed432f1b585fdab41f1447))
+* carbon broken ([#2387](https://github.com/docsifyjs/docsify/issues/2387)) ([87fd55d](https://github.com/docsifyjs/docsify/commit/87fd55d7125539b929f3260fca92e666e988b6da))
+* **ci:** run test action for pull requests ([#2445](https://github.com/docsifyjs/docsify/issues/2445)) ([15ed3b7](https://github.com/docsifyjs/docsify/commit/15ed3b76b00eac06cc4230b1f592993adf2a893b))
+* correct loadSidebar=false render structure issue ([#2470](https://github.com/docsifyjs/docsify/issues/2470)) ([7cbd532](https://github.com/docsifyjs/docsify/commit/7cbd5322d056bb87b4340bdb19909a9c32d19abb))
+* dev mode hot reload and add sourcemaps ([#2402](https://github.com/docsifyjs/docsify/issues/2402)) ([947d8de](https://github.com/docsifyjs/docsify/commit/947d8decb8c5c62f3ce50d0c6ac0e27bb6c7a6b5))
+* enhancement of isExternal ([#2093](https://github.com/docsifyjs/docsify/issues/2093)) ([7f13ba0](https://github.com/docsifyjs/docsify/commit/7f13ba0f9841776008d0707f027bd80c4e3cbf0c))
+* fix cross-origin links in history router mode ([#1967](https://github.com/docsifyjs/docsify/issues/1967)) ([ef6905b](https://github.com/docsifyjs/docsify/commit/ef6905b53a5c1587c3ebf870f0d11ff111a2350d))
+* fix dependabot.yml ([a321e83](https://github.com/docsifyjs/docsify/commit/a321e8373b3c6afc9d0b08714e34bd8bd68716d9))
+* fix docsify-server-renderer dependency. ([#1915](https://github.com/docsifyjs/docsify/issues/1915)) ([c73f858](https://github.com/docsifyjs/docsify/commit/c73f8587b2f67e28c228e521518110ff504cefeb))
+* fix id with pure number. ([#2021](https://github.com/docsifyjs/docsify/issues/2021)) ([f4f21a3](https://github.com/docsifyjs/docsify/commit/f4f21a3f74d265f16b1e658feda417bf851458da))
+* genIndex error for search ([#1933](https://github.com/docsifyjs/docsify/issues/1933)) ([a8f9fc1](https://github.com/docsifyjs/docsify/commit/a8f9fc1d5f5c7808efe65e5ca9359f38014b1bcd))
+* husky can not auto install issue after upgrade. ([#2325](https://github.com/docsifyjs/docsify/issues/2325)) ([cec43d7](https://github.com/docsifyjs/docsify/commit/cec43d71774556d38fa9746f4df4319a6ad768c2))
+* parse heading error ([#2526](https://github.com/docsifyjs/docsify/issues/2526)) ([561c777](https://github.com/docsifyjs/docsify/commit/561c777df898a71f8b44b25e5946b56eb1d2c106))
+* Prevent initial unnecessary IntersectionObserver callback execution ([#2523](https://github.com/docsifyjs/docsify/issues/2523)) ([a73e07e](https://github.com/docsifyjs/docsify/commit/a73e07eac06a70f63896e2bb7f0c205534dc21c8))
+* prevent unnecessary themeColor deprecation notice ([#2403](https://github.com/docsifyjs/docsify/issues/2403)) ([a3ab2be](https://github.com/docsifyjs/docsify/commit/a3ab2be0b070a1bacc4fec3c2d2f0ffe279bada0))
+* **search:** clean markdown elements in search contents ([#2457](https://github.com/docsifyjs/docsify/issues/2457)) ([95901eb](https://github.com/docsifyjs/docsify/commit/95901eb8a829865c883a4374c53a0b8909b53c41))
+* skip-to-content scroll behavior ([#2401](https://github.com/docsifyjs/docsify/issues/2401)) ([2d986fe](https://github.com/docsifyjs/docsify/commit/2d986feb34fcdb2a2731cff7b29b0a4d0563787e))
+* sync the page title regarding the title config ([#2478](https://github.com/docsifyjs/docsify/issues/2478)) ([2eec7c4](https://github.com/docsifyjs/docsify/commit/2eec7c4884146add6e0c8142e463cfad34fb7637))
+* upgrade debug from 4.3.3 to 4.3.4 ([#1919](https://github.com/docsifyjs/docsify/issues/1919)) ([0c9221e](https://github.com/docsifyjs/docsify/commit/0c9221e5a425984470ebc89ffb682e988b08b06e))
+* upgrade medium-zoom from 1.0.6 to 1.0.7 ([#1934](https://github.com/docsifyjs/docsify/issues/1934)) ([2601392](https://github.com/docsifyjs/docsify/commit/26013929ccf1927cc6a46c5455fb70f71d90492f))
+* upgrade medium-zoom from 1.0.7 to 1.0.8 ([#1939](https://github.com/docsifyjs/docsify/issues/1939)) ([81fc1b7](https://github.com/docsifyjs/docsify/commit/81fc1b7dce15d74bb025d3f95bfa5dae55540a10))
+* upgrade node-fetch from 2.6.8 to 2.6.9 ([#1996](https://github.com/docsifyjs/docsify/issues/1996)) ([bb88d63](https://github.com/docsifyjs/docsify/commit/bb88d6302b22b2484cca6436c7b4279d5e7fc5ea))
+* When alias contains parameters, append ext error ([#1855](https://github.com/docsifyjs/docsify/issues/1855)) ([1a32fb7](https://github.com/docsifyjs/docsify/commit/1a32fb73347308696f6e82c0757ba081a4e7b8de))
+
+
+### Features
+
+* Add "Skip to main content" link and update nav behavior ([#2253](https://github.com/docsifyjs/docsify/issues/2253)) ([50b84f7](https://github.com/docsifyjs/docsify/commit/50b84f74b25c27f1a3a102055e7f099db31155f8))
+* add google analytics gtag.js plugin ([#1702](https://github.com/docsifyjs/docsify/issues/1702)) ([29f3c82](https://github.com/docsifyjs/docsify/commit/29f3c82faaffb817d2149d23a0e3a884cd1cc843))
+* Allow top nav to receive keyboard focus ([#2269](https://github.com/docsifyjs/docsify/issues/2269)) ([4d5bf5a](https://github.com/docsifyjs/docsify/commit/4d5bf5ac48499c57cfdffd98bfaa29bf20d85260))
+* Keyboard bindings ([#2279](https://github.com/docsifyjs/docsify/issues/2279)) ([cf61192](https://github.com/docsifyjs/docsify/commit/cf61192f9a467c96372bce9e4e371a3f0c6a1780))
+* **search:** use dexie.js instead of localStorage ([#2464](https://github.com/docsifyjs/docsify/issues/2464)) ([42f2548](https://github.com/docsifyjs/docsify/commit/42f25482fa1ea6ec666800145f6da33e9119aa8c))
+* Support dark mode for zoom-image plugin ([#2524](https://github.com/docsifyjs/docsify/issues/2524)) ([5826863](https://github.com/docsifyjs/docsify/commit/58268632c8ebc2855c38305a05b8326727e388c1))
+* support prism langs dependencies import validation ([#2489](https://github.com/docsifyjs/docsify/issues/2489)) ([87e43f1](https://github.com/docsifyjs/docsify/commit/87e43f157f749dda01b54e33117ef851b12bda7c))
+* support relative path with target config. ([#1751](https://github.com/docsifyjs/docsify/issues/1751)) ([e15ad0c](https://github.com/docsifyjs/docsify/commit/e15ad0c7d530287692e98ca587f8f07d90624919))
+* v5 style overhaul ([#2469](https://github.com/docsifyjs/docsify/issues/2469)) ([77d93fa](https://github.com/docsifyjs/docsify/commit/77d93fae7886346e739285630ea865ac8197149e))
+
+
+
+## [4.13.1](https://github.com/docsifyjs/docsify/compare/v4.13.0...v4.13.1) (2023-06-24)
+
+
+### Bug Fixes
+
+* enhancement of isExternal ([#2093](https://github.com/docsifyjs/docsify/issues/2093)) ([6a7d15b](https://github.com/docsifyjs/docsify/commit/6a7d15b1d5b93e19d3cf9a328cdbf5f1a166b5bd))
+* fix cross-origin links in history router mode ([#1967](https://github.com/docsifyjs/docsify/issues/1967)) ([2312fee](https://github.com/docsifyjs/docsify/commit/2312feef459211a8bcdcbf9164a9ffe051609b70))
+* genIndex error for search ([#1933](https://github.com/docsifyjs/docsify/issues/1933)) ([68d8735](https://github.com/docsifyjs/docsify/commit/68d873587c29d694ece466177984aa5fd739dd4b))
+
+
+
+# [4.13.0](https://github.com/docsifyjs/docsify/compare/v4.12.4...v4.13.0) (2022-10-26)
+
+
+### Bug Fixes
+
+* cornerExternalLinkTarget config. ([#1814](https://github.com/docsifyjs/docsify/issues/1814)) ([54cc5f9](https://github.com/docsifyjs/docsify/commit/54cc5f939b9499ae56604f589eef4e3f1c13cdc5))
+* correctly fix missing +1, -1 ([#1722](https://github.com/docsifyjs/docsify/issues/1722)) ([719dcbe](https://github.com/docsifyjs/docsify/commit/719dcbea5cb0c8b0835f8e9fc473b094feecb7ec))
+* Coverpage when content > viewport height ([#1744](https://github.com/docsifyjs/docsify/issues/1744)) ([301b516](https://github.com/docsifyjs/docsify/commit/301b5169613e95765eda335a4b21d0f9f9cbbbfd)), closes [#381](https://github.com/docsifyjs/docsify/issues/381)
+* filter null node first. ([#1909](https://github.com/docsifyjs/docsify/issues/1909)) ([d27af3d](https://github.com/docsifyjs/docsify/commit/d27af3dd09a882fce4f1e2774065de57a3501858))
+* fix docsify-ignore in search title. ([#1872](https://github.com/docsifyjs/docsify/issues/1872)) ([9832805](https://github.com/docsifyjs/docsify/commit/9832805681cc6099e9c78deecf6dc0c6fb61fd9b))
+* fix search with no content. ([#1878](https://github.com/docsifyjs/docsify/issues/1878)) ([9b74744](https://github.com/docsifyjs/docsify/commit/9b74744299ece0108573a142e5a2e949dc569254))
+* Ignore emoji shorthand codes in URIs ([#1847](https://github.com/docsifyjs/docsify/issues/1847)) ([3c9b3d9](https://github.com/docsifyjs/docsify/commit/3c9b3d9702bb05a5ff45a4ce4233e144cf1ebecb)), closes [#1823](https://github.com/docsifyjs/docsify/issues/1823)
+* Legacy bugs (styles, site plugin error, and dev server error) ([#1743](https://github.com/docsifyjs/docsify/issues/1743)) ([fa6df6d](https://github.com/docsifyjs/docsify/commit/fa6df6d58487ec294e22be04ac159dfb5745bd66))
+* package.json & package-lock.json to reduce vulnerabilities ([#1756](https://github.com/docsifyjs/docsify/issues/1756)) ([2dc5b12](https://github.com/docsifyjs/docsify/commit/2dc5b12b715e3ad1922a6401e3fd9837a99ef9c0))
+* packages/docsify-server-renderer/package.json & packages/docsify-server-renderer/package-lock.json to reduce vulnerabilities ([#1715](https://github.com/docsifyjs/docsify/issues/1715)) ([c1227b2](https://github.com/docsifyjs/docsify/commit/c1227b22cb8a3fb6c362ca8ac109082ab2251cc3))
+
+
+### Features
+
+* Emoji build ([#1766](https://github.com/docsifyjs/docsify/issues/1766)) ([ba5ee26](https://github.com/docsifyjs/docsify/commit/ba5ee26f00e957b58173f96b1901f6ffd3d8e5f5))
+* Native emoji w/ image-based fallbacks and improved parsing ([#1746](https://github.com/docsifyjs/docsify/issues/1746)) ([35002c9](https://github.com/docsifyjs/docsify/commit/35002c92b762f0d12e51582d7de7914fa380596a)), closes [#779](https://github.com/docsifyjs/docsify/issues/779)
+* Plugin error handling ([#1742](https://github.com/docsifyjs/docsify/issues/1742)) ([63b2535](https://github.com/docsifyjs/docsify/commit/63b2535a45a98945ec897277f4fbddec2ddba887))
+
+
+
+## [4.12.2](https://github.com/docsifyjs/docsify/compare/v4.12.1...v4.12.2) (2022-01-06)
+
+
+### Bug Fixes
+
+* Add escapeHtml for search ([#1551](https://github.com/docsifyjs/docsify/issues/1551)) ([c24f7f6](https://github.com/docsifyjs/docsify/commit/c24f7f6f0b87a87f6dd3755f69eb0969ebb029c9))
+* allow also " inside of an embed ([ec16e4a](https://github.com/docsifyjs/docsify/commit/ec16e4a9d5718ac4f4c25bb3dcaea3b7551372e0))
+* buble theme missing generic fallback font ([#1568](https://github.com/docsifyjs/docsify/issues/1568)) ([37d9f0e](https://github.com/docsifyjs/docsify/commit/37d9f0e1214276e93b2a11ed87390aafa1bdbcec))
+* Cannot read property 'classList' of null ([#1527](https://github.com/docsifyjs/docsify/issues/1527)) ([d6df2b8](https://github.com/docsifyjs/docsify/commit/d6df2b85a99371bb9a87402a10dd515bb734182e))
+* Cannot read property 'tagName' of null ([#1655](https://github.com/docsifyjs/docsify/issues/1655)) ([c3cdadc](https://github.com/docsifyjs/docsify/commit/c3cdadc37137edcd9e219359973902d2fc8b66ff))
+* upgrade debug from 4.3.2 to 4.3.3 ([#1692](https://github.com/docsifyjs/docsify/issues/1692)) ([40e7749](https://github.com/docsifyjs/docsify/commit/40e77490c68b4143c75dfaebcd0b7f640581306b))
+* Upgrade docsify from 4.12.0 to 4.12.1 ([#1544](https://github.com/docsifyjs/docsify/issues/1544)) ([d607f6d](https://github.com/docsifyjs/docsify/commit/d607f6d71c35b50f586806a832f65061f5e3427e))
+* upgrade dompurify from 2.2.6 to 2.2.7 ([#1552](https://github.com/docsifyjs/docsify/issues/1552)) ([407e4d4](https://github.com/docsifyjs/docsify/commit/407e4d4f3de78bebd639a3fdae751f8045728e57))
+* Upgrade dompurify from 2.2.6 to 2.2.7 ([#1553](https://github.com/docsifyjs/docsify/issues/1553)) ([93c48f3](https://github.com/docsifyjs/docsify/commit/93c48f3d615d95dba550a0e95df6b545d68c3593))
+* upgrade dompurify from 2.2.7 to 2.2.8 ([#1577](https://github.com/docsifyjs/docsify/issues/1577)) ([0dd44cc](https://github.com/docsifyjs/docsify/commit/0dd44cc828cc54f7c3b776d45b32925b66cae499))
+* upgrade dompurify from 2.2.7 to 2.3.0 ([#1619](https://github.com/docsifyjs/docsify/issues/1619)) ([66303fe](https://github.com/docsifyjs/docsify/commit/66303fec4c7115621e556ad742cfac9d19f26bd9))
+* upgrade dompurify from 2.2.8 to 2.2.9 ([#1600](https://github.com/docsifyjs/docsify/issues/1600)) ([baf5a8a](https://github.com/docsifyjs/docsify/commit/baf5a8a4962656d8be8f714283064d2ea10c7e14))
+* upgrade dompurify from 2.2.9 to 2.3.0 ([#1616](https://github.com/docsifyjs/docsify/issues/1616)) ([b07fa3c](https://github.com/docsifyjs/docsify/commit/b07fa3cc8323e63dd7b105c7e29b2e1914f5c117))
+* upgrade dompurify from 2.3.0 to 2.3.1 ([#1635](https://github.com/docsifyjs/docsify/issues/1635)) ([5ac8237](https://github.com/docsifyjs/docsify/commit/5ac8237cc76e19ca2b373a1a1da6eb4a4da6d8b2))
+* upgrade dompurify from 2.3.1 to 2.3.2 ([#1647](https://github.com/docsifyjs/docsify/issues/1647)) ([ff6acfa](https://github.com/docsifyjs/docsify/commit/ff6acfa7623a7db8b00d62c51a9c3037215c4888))
+* upgrade node-fetch from 2.6.1 to 2.6.2 ([#1641](https://github.com/docsifyjs/docsify/issues/1641)) ([6ee1c14](https://github.com/docsifyjs/docsify/commit/6ee1c142769a6442aa8c1523ab215106707fa7fc))
+* upgrade node-fetch from 2.6.2 to 2.6.4 ([#1649](https://github.com/docsifyjs/docsify/issues/1649)) ([6f81034](https://github.com/docsifyjs/docsify/commit/6f81034ba6a7a6b64ccf1acd2d1fc73761f70a63))
+* upgrade node-fetch from 2.6.4 to 2.6.5 ([#1654](https://github.com/docsifyjs/docsify/issues/1654)) ([d16e657](https://github.com/docsifyjs/docsify/commit/d16e657f708777e8377d8e158b50b4010623282d))
+* upgrade node-fetch from 2.6.5 to 2.6.6 ([#1668](https://github.com/docsifyjs/docsify/issues/1668)) ([cefe3f8](https://github.com/docsifyjs/docsify/commit/cefe3f87e697a6c54a74d601df2eeb331fcd8933))
+
+
+
+## [4.12.1](https://github.com/docsifyjs/docsify/compare/v4.12.0...v4.12.1) (2021-03-07)
+
+
+### Bug Fixes
+
+* isExternal check with malformed URL + tests ([#1510](https://github.com/docsifyjs/docsify/issues/1510)) ([ff2a66f](https://github.com/docsifyjs/docsify/commit/ff2a66f12752471277fe81a64ad6c4b2c08111fe)), closes [#1477](https://github.com/docsifyjs/docsify/issues/1477) [#1126](https://github.com/docsifyjs/docsify/issues/1126) [#1489](https://github.com/docsifyjs/docsify/issues/1489)
+* Replace ES6 usage for IE11 compatibility ([#1500](https://github.com/docsifyjs/docsify/issues/1500)) ([a0f61b2](https://github.com/docsifyjs/docsify/commit/a0f61b2af72cb888ea5b635021a5c9da6beb7ac5))
+* theme switcher in IE11 ([#1502](https://github.com/docsifyjs/docsify/issues/1502)) ([8cda078](https://github.com/docsifyjs/docsify/commit/8cda07891afeb1ea6e198d2a600f205357ab4b89))
+* Upgrade docsify from 4.11.6 to 4.12.0 ([#1518](https://github.com/docsifyjs/docsify/issues/1518)) ([47cd86c](https://github.com/docsifyjs/docsify/commit/47cd86c8f196a241fc23720e3addfe95d4c973cd))
+
+
+### Features
+
+* Support search when there is no title ([#1519](https://github.com/docsifyjs/docsify/issues/1519)) ([bc37268](https://github.com/docsifyjs/docsify/commit/bc3726853fb2d1f9241927ea0317970ab0c8a2f2))
+
+
+### Chore
+
+- Fix missing carbon ([#1501](https://github.com/docsifyjs/docsify/issues/1501))
+- Change Gitter to Discord throughout project ([#1507](https://github.com/docsifyjs/docsify/issues/1507))
+- Add test cases on isExternal ([#1515](https://github.com/docsifyjs/docsify/issues/1515))
+
+
+# [4.12.0](https://github.com/docsifyjs/docsify/compare/v4.11.6...v4.12.0) (2021-02-08)
+
+
+### Bug Fixes
+
+* add missing argument for highlighting code ([#1365](https://github.com/docsifyjs/docsify/issues/1365)) ([f35bf99](https://github.com/docsifyjs/docsify/commit/f35bf99d9c762774e328b30347707e62eb8e6f63))
+* Can't search homepage content ([#1391](https://github.com/docsifyjs/docsify/issues/1391)) ([25bc9b7](https://github.com/docsifyjs/docsify/commit/25bc9b7eb7e878a6a50ed5f91d33d6a75f9811b0))
+* Cannot read property 'startsWith' of undefined ([#1358](https://github.com/docsifyjs/docsify/issues/1358)) ([9351729](https://github.com/docsifyjs/docsify/commit/9351729634b52db0e7e241bed7784fbcd5c39fe0))
+* Cannot read property level of undefined ([#1357](https://github.com/docsifyjs/docsify/issues/1357)) ([4807e58](https://github.com/docsifyjs/docsify/commit/4807e58cb994de83f063cb82d2b4a695f29378c8))
+* cannot search list content ([#1361](https://github.com/docsifyjs/docsify/issues/1361)) ([8d17dcb](https://github.com/docsifyjs/docsify/commit/8d17dcbe68048d654e62adb01a3925e39a8e0c44))
+* duplicate search content when `/README` or `/` exists in the sidebar ([#1403](https://github.com/docsifyjs/docsify/issues/1403)) ([7c3bf98](https://github.com/docsifyjs/docsify/commit/7c3bf98df869188d5956ed1a331f7048b6eba441))
+* package.json & package-lock.json to reduce vulnerabilities ([#1419](https://github.com/docsifyjs/docsify/issues/1419)) ([69b6907](https://github.com/docsifyjs/docsify/commit/69b6907c864dbcdf1fe5c75f51a80e6ae6ec279d))
+* packages/docsify-server-renderer/package.json & packages/docsify-server-renderer/package-lock.json to reduce vulnerabilities ([#1389](https://github.com/docsifyjs/docsify/issues/1389)) ([62cd35e](https://github.com/docsifyjs/docsify/commit/62cd35ee8345270aab7a48bc761db007d54a0f48))
+* packages/docsify-server-renderer/package.json & packages/docsify-server-renderer/package-lock.json to reduce vulnerabilities ([#1418](https://github.com/docsifyjs/docsify/issues/1418)) ([58fbca0](https://github.com/docsifyjs/docsify/commit/58fbca00ebd12f636c213d386761df9ebfb2bd4c))
+* Prevent loading remote content via URL hash ([#1489](https://github.com/docsifyjs/docsify/issues/1489)) ([14ce7f3](https://github.com/docsifyjs/docsify/commit/14ce7f3d862ac79fc7d9d316cb2e057d50e1b506)), closes [#1477](https://github.com/docsifyjs/docsify/issues/1477) [#1126](https://github.com/docsifyjs/docsify/issues/1126)
+* search on homepage test ([#1398](https://github.com/docsifyjs/docsify/issues/1398)) ([ee550d0](https://github.com/docsifyjs/docsify/commit/ee550d0c51f222851854c7cd7e9e6f76e26eb6f4))
+* search titles containing ignored characters ([#1395](https://github.com/docsifyjs/docsify/issues/1395)) ([a2ebb21](https://github.com/docsifyjs/docsify/commit/a2ebb2192ac73211a8924111d736df9574abf61b))
+* sidebar active class and expand don't work as expect when use "space" in markdown filename ([#1454](https://github.com/docsifyjs/docsify/issues/1454)) ([dcf5a64](https://github.com/docsifyjs/docsify/commit/dcf5a644eb6a2eef65fb940f3407c12828a679bc)), closes [#1032](https://github.com/docsifyjs/docsify/issues/1032)
+* sidebar horizontal scroll bar ([#1362](https://github.com/docsifyjs/docsify/issues/1362)) ([b480822](https://github.com/docsifyjs/docsify/commit/b480822286c66b478e5a7a9b2c82a10b99c69121))
+* sidebar title error ([#1360](https://github.com/docsifyjs/docsify/issues/1360)) ([2100fc3](https://github.com/docsifyjs/docsify/commit/2100fc318b009c6e448e48ffff6a693f1988916c))
+* slugs are still broken when headings contain html ([#1443](https://github.com/docsifyjs/docsify/issues/1443)) ([76c5e68](https://github.com/docsifyjs/docsify/commit/76c5e685d75ee6df9acc0a7cf92d5daa138c3240))
+* the sidebar links to another site. ([#1336](https://github.com/docsifyjs/docsify/issues/1336)) ([c9d4f7a](https://github.com/docsifyjs/docsify/commit/c9d4f7abc94a2cbc4bb558013775df380c1c8376))
+* title error when sidebar link exists with html tag ([#1404](https://github.com/docsifyjs/docsify/issues/1404)) ([8ccc202](https://github.com/docsifyjs/docsify/commit/8ccc20225104376af2e5df6757c4dbd58c0e758e)), closes [#1408](https://github.com/docsifyjs/docsify/issues/1408)
+* Unable to navigate on server without default index support ([#1372](https://github.com/docsifyjs/docsify/issues/1372)) ([759ffac](https://github.com/docsifyjs/docsify/commit/759ffac992b19dbb05b92114ec5620d3bb180d0d))
+* upgrade debug from 4.1.1 to 4.3.0 ([#1390](https://github.com/docsifyjs/docsify/issues/1390)) ([ae45b32](https://github.com/docsifyjs/docsify/commit/ae45b3201ba03303a2feb5a347b18fda818a569a))
+* upgrade debug from 4.3.0 to 4.3.1 ([#1446](https://github.com/docsifyjs/docsify/issues/1446)) ([bc3350f](https://github.com/docsifyjs/docsify/commit/bc3350f6e6bfe670c95569b4e9c51321f5c7dbb9))
+* upgrade debug from 4.3.1 to 4.3.2 ([#1463](https://github.com/docsifyjs/docsify/issues/1463)) ([df21153](https://github.com/docsifyjs/docsify/commit/df21153ab5e841ad89707e07c68a04873a2f3fe8))
+* upgrade docsify from 4.11.4 to 4.11.6 ([#1373](https://github.com/docsifyjs/docsify/issues/1373)) ([c2d12ed](https://github.com/docsifyjs/docsify/commit/c2d12ed27fe86b0c5cd690b4d8a22bf06d2a90b9))
+* upgrade dompurify from 2.0.17 to 2.1.0 ([#1397](https://github.com/docsifyjs/docsify/issues/1397)) ([1863d8e](https://github.com/docsifyjs/docsify/commit/1863d8edb70da234bf7f211986ba71706351682f))
+* upgrade dompurify from 2.1.0 to 2.1.1 ([#1402](https://github.com/docsifyjs/docsify/issues/1402)) ([8cf9fd8](https://github.com/docsifyjs/docsify/commit/8cf9fd8150bd67709c68d8dfe4dc881624583ac8))
+* upgrade dompurify from 2.2.2 to 2.2.3 ([#1457](https://github.com/docsifyjs/docsify/issues/1457)) ([720d909](https://github.com/docsifyjs/docsify/commit/720d9091c8e571d6c891426983f54d9c94739182))
+* upgrade dompurify from 2.2.2 to 2.2.6 ([#1483](https://github.com/docsifyjs/docsify/issues/1483)) ([eee9507](https://github.com/docsifyjs/docsify/commit/eee9507d435459ae8e68e1112bb58a63b2f58530))
+* upgrade dompurify from 2.2.3 to 2.2.6 ([#1482](https://github.com/docsifyjs/docsify/issues/1482)) ([7adad57](https://github.com/docsifyjs/docsify/commit/7adad57df1b7efa469b0cde37f788c36dc27cf8b))
+* upgrade marked from 1.2.4 to 1.2.9 ([#1486](https://github.com/docsifyjs/docsify/issues/1486)) ([716a7fa](https://github.com/docsifyjs/docsify/commit/716a7fa777a1eee66964977e1d4405cff3275c53))
+* upgrade prismjs from 1.21.0 to 1.22.0 ([#1415](https://github.com/docsifyjs/docsify/issues/1415)) ([0806f48](https://github.com/docsifyjs/docsify/commit/0806f48531b6cb5e6a395c12ab88f0b59281bbf8))
+* upgrade prismjs from 1.22.0 to 1.23.0 ([#1481](https://github.com/docsifyjs/docsify/issues/1481)) ([5f29cde](https://github.com/docsifyjs/docsify/commit/5f29cde84c7b74d70c34e3f1f43c479f1bba670d))
+* Use legacy-compatible methods for IE11 ([#1495](https://github.com/docsifyjs/docsify/issues/1495)) ([06cbebf](https://github.com/docsifyjs/docsify/commit/06cbebfc0d34726f4a7102a7dc9020520f3a7f86))
+
+
+### Features
+
+* search ignore diacritical marks ([#1434](https://github.com/docsifyjs/docsify/issues/1434)) ([8968a74](https://github.com/docsifyjs/docsify/commit/8968a744cea5910057ba59ef690316722a35b341))
+* Add Jest + Playwright Testing ([#1276](https://github.com/docsifyjs/docsify/issues/1276))
+* Add Vue components, mount options, global options, and v3 support ([#1409](https://github.com/docsifyjs/docsify/issues/1409))
+
+
+
+## [4.11.6](https://github.com/docsifyjs/docsify/compare/v4.11.5...v4.11.6) (2020-08-22)
+
+
+### Bug Fixes
+
+* Add patch for {docsify-ignore} and {docsify-ignore-all} ([ce31607](https://github.com/docsifyjs/docsify/commit/ce316075e033afdbeb43ce01e284a29fe1870e38))
+
+
+
+## [4.11.5](https://github.com/docsifyjs/docsify/compare/v4.11.4...v4.11.5) (2020-08-21)
+
+
+### Bug Fixes
+
+* Russian language link error ([#1270](https://github.com/docsifyjs/docsify/issues/1270)) ([2a52460](https://github.com/docsifyjs/docsify/commit/2a52460a59448abaf681046fbc5dca642285ae1f))
+* {docsify-updated} in the sample code is parsed into time ([#1321](https://github.com/docsifyjs/docsify/issues/1321)) ([2048610](https://github.com/docsifyjs/docsify/commit/2048610aacd4e3c6a592f4247834a726c7ca33fb))
+* Add error handling for missing dependencies (fixes [#1210](https://github.com/docsifyjs/docsify/issues/1210)) ([#1232](https://github.com/docsifyjs/docsify/issues/1232)) ([3673001](https://github.com/docsifyjs/docsify/commit/3673001a24cb24c57454f9bc7619de49d2c3a044))
+* after setting the background image, the button is obscured ([#1234](https://github.com/docsifyjs/docsify/issues/1234)) ([34d918f](https://github.com/docsifyjs/docsify/commit/34d918f9973bdb8e893248853e3ef7e803d4c253))
+* convert {docsify-ignore} and {docsify-ignore-all} to HTML comments ([#1318](https://github.com/docsifyjs/docsify/issues/1318)) ([90d283d](https://github.com/docsifyjs/docsify/commit/90d283d340502456a5d8495df596bb4a02ceb39b))
+* fallback page should use path not file location ([#1301](https://github.com/docsifyjs/docsify/issues/1301)) ([2bceabc](https://github.com/docsifyjs/docsify/commit/2bceabcb8e623570540493e2f1d956adf45c99e7))
+* Fix search error when exist translations documents ([#1300](https://github.com/docsifyjs/docsify/issues/1300)) ([b869019](https://github.com/docsifyjs/docsify/commit/b8690199006366e86084e9e018def7b9b8f46512))
+* gitignore was ignoring folders in src, so VS Code search results or file fuzzy finder were not working, etc ([d4c9247](https://github.com/docsifyjs/docsify/commit/d4c9247b87c0a2701683ed1a17383cfb451cf609))
+* packages/docsify-server-renderer/package.json & packages/docsify-server-renderer/package-lock.json to reduce vulnerabilities ([#1250](https://github.com/docsifyjs/docsify/issues/1250)) ([d439bac](https://github.com/docsifyjs/docsify/commit/d439bac93f479d0480799880538fc3104e54c907))
+* search can not search the table header ([#1256](https://github.com/docsifyjs/docsify/issues/1256)) ([3f03e78](https://github.com/docsifyjs/docsify/commit/3f03e78418993d8e9a4f5062e10dc79c3753389e))
+* Search plugin: matched text is replaced with search text ([#1298](https://github.com/docsifyjs/docsify/issues/1298)) ([78775b6](https://github.com/docsifyjs/docsify/commit/78775b6ee73102cc5ac71c0ee2b392c5f4f6f4f8))
+* the uncaught typeerror when el is null ([#1308](https://github.com/docsifyjs/docsify/issues/1308)) ([952f4c9](https://github.com/docsifyjs/docsify/commit/952f4c921b7a6a558c500ca6b105582d39ad36a2))
+* Updated docs with instructions for installing specific version (fixes [#780](https://github.com/docsifyjs/docsify/issues/780)) ([#1225](https://github.com/docsifyjs/docsify/issues/1225)) ([b90c948](https://github.com/docsifyjs/docsify/commit/b90c948090e89fa778279c95060dbd7668285658))
+* upgrade medium-zoom from 1.0.5 to 1.0.6 ([3beaa66](https://github.com/docsifyjs/docsify/commit/3beaa6666b78518f1ffaa37f6942f3cb08fef896))
+* upgrade tinydate from 1.2.0 to 1.3.0 ([#1341](https://github.com/docsifyjs/docsify/issues/1341)) ([59d090f](https://github.com/docsifyjs/docsify/commit/59d090fe9096bc03e259c166634bb75bb2623f85))
+
+
+### Features
+
+* **search:** add pathNamespaces option ([d179dde](https://github.com/docsifyjs/docsify/commit/d179dde1c71acdcbe66cb762377b123926c55bf2))
+* Add title to sidebar links ([#1286](https://github.com/docsifyjs/docsify/issues/1286)) ([667496b](https://github.com/docsifyjs/docsify/commit/667496b85d99b168255f58e60a6bfe902cc6ee03))
+
+
+
+## [4.11.4](https://github.com/docsifyjs/docsify/compare/v4.11.3...v4.11.4) (2020-06-18)
+
+
+### Bug Fixes
+
+* consistent location of search result ([e9dd2de](https://github.com/docsifyjs/docsify/commit/e9dd2de384b81619aae2bcbf92f52721cb76a177))
+* cover overlapping sidebar by removing z-index ([0bf03f5](https://github.com/docsifyjs/docsify/commit/0bf03f58103037d100b1635cf3989c8d3672b4ba))
+* cross-origin url cannot be redirected when "externalLinkTarget" is set to "_self" and "routerMode" is set to "history". ([#1062](https://github.com/docsifyjs/docsify/issues/1062)) ([fd2cec6](https://github.com/docsifyjs/docsify/commit/fd2cec6bd66c46d6957811fefae4c615c3052a4f)), closes [#1046](https://github.com/docsifyjs/docsify/issues/1046) [#1046](https://github.com/docsifyjs/docsify/issues/1046) [#1046](https://github.com/docsifyjs/docsify/issues/1046)
+* default html img resize if no height included ([#1065](https://github.com/docsifyjs/docsify/issues/1065)) ([9ff4d06](https://github.com/docsifyjs/docsify/commit/9ff4d0677304bc190e7bd9e89bbbdc64895197fa))
+* fixed target and rel issue (fixes [#1183](https://github.com/docsifyjs/docsify/issues/1183)) ([3d662a5](https://github.com/docsifyjs/docsify/commit/3d662a5bf71bbfef077cfbc478df241d794f55a0))
+* Inconsistent search and body rendering ([dcb0aae](https://github.com/docsifyjs/docsify/commit/dcb0aaea99efbd68175f1d1aeb5076b6dde9801e))
+* rendering cover width bug ([717991c](https://github.com/docsifyjs/docsify/commit/717991c90cf709f4da91fe32610129de6529266b))
+* search does not find the contents of the table ([#1198](https://github.com/docsifyjs/docsify/issues/1198)) ([31010e4](https://github.com/docsifyjs/docsify/commit/31010e4979b3d3ab4bd247a09c4ac5fd1405eaa8))
+* The search error after setting the ID in the title ([#1159](https://github.com/docsifyjs/docsify/issues/1159)) ([6e554f8](https://github.com/docsifyjs/docsify/commit/6e554f8ebd3d4a2c5c7e4f66cff3dfe2b6aa1e31))
+* upgrade docsify from 4.10.2 to 4.11.2 ([60b7f89](https://github.com/docsifyjs/docsify/commit/60b7f89b373b0d48ec8406a51eddeaed8126696d))
+
+
+### Features
+
+* added html sanitizer for remote rendering ([#1128](https://github.com/docsifyjs/docsify/issues/1128)) ([714ef29](https://github.com/docsifyjs/docsify/commit/714ef29afe779a6db5c4761ebaacdfc70ee2d8dd))
+* update src/core/index.js to export all global APIs, deprecate old globals in favor of a single global DOCSIFY, and add tests for this ([7e002bf](https://github.com/docsifyjs/docsify/commit/7e002bf939d7837843908417b5445b4f8d36c1cd))
+
+
+### Reverts
+
+* Revert "Updated docs site dark and light mode with switch and redesigned search bar using docsify-darklight-theme" (#1207) ([26cb940](https://github.com/docsifyjs/docsify/commit/26cb940b51d34ee584b8425012a336f38a4abd76)), closes [#1207](https://github.com/docsifyjs/docsify/issues/1207) [#1182](https://github.com/docsifyjs/docsify/issues/1182)
+
+
+
+## [4.11.3](https://github.com/docsifyjs/docsify/compare/v4.11.2...v4.11.3) (2020-03-24)
+
+
+### Bug Fixes
+
+* fix: digit issue with sidebar (complete REVERT to old method) ([154abf5](https://github.com/docsifyjs/docsify/commit/154abf59a6153e84b018fcdffa86892776d6da7d))
+
+
+
+## [4.11.2](https://github.com/docsifyjs/docsify/compare/v4.11.1...v4.11.2) (2020-03-09)
+
+
+### Bug Fixes
+
+* fixed rendering of color in coverpage issue ([406670c](https://github.com/docsifyjs/docsify/commit/406670c3d619a627142900fd45019fb8ce00f60a))
+
+
+
+## [4.11.1](https://github.com/docsifyjs/docsify/compare/v4.11.0...v4.11.1) (2020-03-09)
+
+
+
+# [4.11.0](https://github.com/docsifyjs/docsify/compare/v4.10.2...v4.11.0) (2020-03-09)
+
+
+### Bug Fixes
+
+* emojis in titles not working correctly and update ([#1016](https://github.com/docsifyjs/docsify/issues/1016)) ([b3d9b96](https://github.com/docsifyjs/docsify/commit/b3d9b966dfbb6f456c2c457da1d2a366e85d9190))
+* searching table content ([6184e50](https://github.com/docsifyjs/docsify/commit/6184e502629932ca71fdd0a1b10150d118f5a7c8))
+* stage modified files as part of pre-commit hook ([#985](https://github.com/docsifyjs/docsify/issues/985)) ([5b77b0f](https://github.com/docsifyjs/docsify/commit/5b77b0f628f056b7ebb6d0b617561d19964516a2))
+* config initialization and coercion ([#861](https://github.com/docsifyjs/docsify/pull/861))
+* strip indent when embedding code fragment ([#996](https://github.com/docsifyjs/docsify/pull/996))
+* Ensure autoHeader dom result is similar to parsed H1 ([#811](https://github.com/docsifyjs/docsify/pull/811))
+* upgrade docsify from 4.9.4 to 4.10.2 ([#1054](https://github.com/docsifyjs/docsify/issues/1054)) ([78290b2](https://github.com/docsifyjs/docsify/commit/78290b21038a3ae09c4c7438bd89b14ca4c02805))
+* upgrade medium-zoom from 1.0.4 to 1.0.5 ([39ebd73](https://github.com/docsifyjs/docsify/commit/39ebd73021290439180878cae32e663b9e60e214))
+* upgrade prismjs from 1.17.1 to 1.19.0 ([9981c43](https://github.com/docsifyjs/docsify/commit/9981c4361ad690d0ed32cf1fb5b48cc5b9f770bb))
+
+
+### Features
+
+* configure pre-commit hook ([#983](https://github.com/docsifyjs/docsify/issues/983)) ([eea41a1](https://github.com/docsifyjs/docsify/commit/eea41a1207c46533ea9c6c59d82e2c94aa4dd70e))
+* Add a prepare script. ([efbea24](https://github.com/docsifyjs/docsify/commit/efbea24de71f2287993b52ed1cef1a2dd6a53f81))
+* added capability to add css class and id to images + links + refactoring ([#820](https://github.com/docsifyjs/docsify/issues/820)) ([724ac02](https://github.com/docsifyjs/docsify/commit/724ac024ddfc28e93d8b5dd909e722747286fa00))
+* added dark mode to docs closes [#1031](https://github.com/docsifyjs/docsify/issues/1031) ([dc43d3c](https://github.com/docsifyjs/docsify/commit/dc43d3c512c2f04750e76176c25ece626ae7fe2a))
+* new option `hideSidebar` ([#1026](https://github.com/docsifyjs/docsify/issues/1026)) ([b7547f1](https://github.com/docsifyjs/docsify/commit/b7547f151e928b3a0eb6a94b2af36023da4fa877))
+* new option `topMargin` ([#1045](https://github.com/docsifyjs/docsify/pull/1045)) ([8faee03](https://github.com/docsifyjs/docsify/pull/1024/commits/b53ea1e304d3a2782b125c1d8711295d88faee03))
+
+
+### Docs
+
+* update docs for the `name` config option ([#992](https://github.com/docsifyjs/docsify/pull/992))
+* about cache ([#854](https://github.com/docsifyjs/docsify/pull/854))
+* removed FOSSA badge
+* documented `__colon__` tip ([#1025](https://github.com/docsifyjs/docsify/pull/1025))
+
+### Chore
+
+* Migrate relative links to absolute in embedded markdown ([#867](https://github.com/docsifyjs/docsify/pull/867))
+* smarter scroll behavior ([#744](https://github.com/docsifyjs/docsify/pull/744))
+* improve basic layout style ([#884](https://github.com/docsifyjs/docsify/pull/884))
+* There are currently {three=>four} themes available. ([#892](https://github.com/docsifyjs/docsify/pull/892))
+* Added a redirect for images to show up in Amplify ([#918](https://github.com/docsifyjs/docsify/pull/918))
+* removed the escaping of the name of sidebar ([#991](https://github.com/docsifyjs/docsify/pull/991))
+* Eslint fixes for v4x ([#989](https://github.com/docsifyjs/docsify/pull/989))
+* added github Actions for CI ([#1000](https://github.com/docsifyjs/docsify/pull/1000))
+* Add a prepare script. ([#1010](https://github.com/docsifyjs/docsify/pull/1010))
+* chore(GH-action): using ubuntu 16 and removed node 8 from CI
+* chore: add config ([#1014](https://github.com/docsifyjs/docsify/pull/1014))
+* chore(stale): added enhancement label to exemptlabels
+* chore(stale): added bug label to exemptlabels
+* .markdown-section max-width 800px to 80% ([#1017](https://github.com/docsifyjs/docsify/pull/1017))
+* changed the CDN from unpkg to jsDelivr #1020 ([#1022](https://github.com/docsifyjs/docsify/pull/1022))
+* migrate CI to github, refactore CI and npm scripts, linting fixes ([#1023](https://github.com/docsifyjs/docsify/pull/1023))
+* chore(readme): added CI badges and fixed the logo issue
+* added new linter config ([#1028](https://github.com/docsifyjs/docsify/pull/1028))
+
+
+## [4.10.2](https://github.com/docsifyjs/docsify/compare/v4.10.0...v4.10.2) (2019-12-16)
+
+
+
+# [4.10.0](https://github.com/docsifyjs/docsify/compare/v4.9.4...v4.10.0) (2019-12-16)
+
+
+### Bug Fixes
+
+* fixed security alert for chokidar(update dep) ([a62b037](https://github.com/docsifyjs/docsify/commit/a62b037becb36941c11c8eab6e4d83df8db85af3))
+* npm audit issues ([#934](https://github.com/docsifyjs/docsify/issues/934)) ([615205c](https://github.com/docsifyjs/docsify/commit/615205cfdb7aea8f37a1ec5dd928105eeef56357))
+* package security alerts ([f5f1561](https://github.com/docsifyjs/docsify/commit/f5f15619f1a239d6ce12a2f83ad8817352a3352b))
+* security alerts of cssnano ([d7d5c8f](https://github.com/docsifyjs/docsify/commit/d7d5c8f302d7c18dbb32e982202a07b73badf6f6))
+
+
+
## [4.9.4](https://github.com/docsifyjs/docsify/compare/v4.9.2...v4.9.4) (2019-05-05)
-
## [4.9.2](https://github.com/docsifyjs/docsify/compare/v4.9.1...v4.9.2) (2019-04-21)
@@ -18,7 +455,6 @@
-
## [4.9.1](https://github.com/docsifyjs/docsify/compare/v4.9.0...v4.9.1) (2019-02-21)
@@ -28,7 +464,6 @@
-
# [4.9.0](https://github.com/docsifyjs/docsify/compare/v4.8.6...v4.9.0) (2019-02-19)
@@ -46,7 +481,6 @@
-
## [4.8.6](https://github.com/docsifyjs/docsify/compare/v4.8.5...v4.8.6) (2018-11-12)
@@ -56,7 +490,6 @@
-
## [4.8.5](https://github.com/docsifyjs/docsify/compare/v4.8.4...v4.8.5) (2018-11-02)
@@ -66,7 +499,6 @@
-
## [4.8.4](https://github.com/docsifyjs/docsify/compare/v4.8.3...v4.8.4) (2018-11-01)
@@ -76,13 +508,11 @@
-
## [4.8.3](https://github.com/docsifyjs/docsify/compare/v4.8.2...v4.8.3) (2018-11-01)
Fix the last release files has the old version marked...
-
## [4.8.2](https://github.com/docsifyjs/docsify/compare/v4.8.1...v4.8.2) (2018-11-01)
@@ -97,7 +527,6 @@ Fix the last release files has the old version marked...
- add heading config id ([#671](https://github.com/docsifyjs/docsify/issues/671)) ([ab19b13](https://github.com/docsifyjs/docsify/commit/ab19b13))
-
## [4.8.1](https://github.com/docsifyjs/docsify/compare/v4.8.0...v4.8.1) (2018-10-31)
@@ -111,7 +540,6 @@ Fix the last release files has the old version marked...
- upgrade PrismJS, fixed [#534](https://github.com/docsifyjs/docsify/issues/534) ([4805cb5](https://github.com/docsifyjs/docsify/commit/4805cb5))
-
# [4.8.0](https://github.com/docsifyjs/docsify/compare/v4.7.1...v4.8.0) (2018-10-31)
@@ -132,11 +560,9 @@ Fix the last release files has the old version marked...
- Allow base64, external, and relative logo values ([#642](https://github.com/docsifyjs/docsify/issues/642)) ([0a0802a](https://github.com/docsifyjs/docsify/commit/0a0802a)), closes [#577](https://github.com/docsifyjs/docsify/issues/577)
- upgrade marked to 0.5.x, fixed [#645](https://github.com/docsifyjs/docsify/issues/645), close [#644](https://github.com/docsifyjs/docsify/issues/644) ([#662](https://github.com/docsifyjs/docsify/issues/662)) ([a39b214](https://github.com/docsifyjs/docsify/commit/a39b214))
-
## [4.7.1](https://github.com/docsifyjs/docsify/compare/v4.7.0...v4.7.1) (2018-08-30)
-
# [4.7.0](https://github.com/QingWei-Li/docsify/compare/v4.6.9...v4.7.0) (2018-06-29)
@@ -153,7 +579,6 @@ Fix the last release files has the old version marked...
- add unpkg field, close [#531](https://github.com/QingWei-Li/docsify/issues/531) ([#558](https://github.com/QingWei-Li/docsify/issues/558)) ([5c0de0a](https://github.com/QingWei-Li/docsify/commit/5c0de0a))
- support image resizing, resolve [#508](https://github.com/QingWei-Li/docsify/issues/508) ([#545](https://github.com/QingWei-Li/docsify/issues/545)) ([3a7ad62](https://github.com/QingWei-Li/docsify/commit/3a7ad62))
-
## [4.6.10](https://github.com/QingWei-Li/docsify/compare/v4.6.9...v4.6.10) (2018-03-25)
@@ -161,7 +586,6 @@ Fix the last release files has the old version marked...
- async install config, fixed [#425](https://github.com/QingWei-Li/docsify/issues/425) ([e4e011c](https://github.com/QingWei-Li/docsify/commit/e4e011c))
-
## [4.6.9](https://github.com/QingWei-Li/docsify/compare/v4.6.8...v4.6.9) (2018-03-10)
@@ -169,7 +593,6 @@ Fix the last release files has the old version marked...
- upgrade medium-zoom, fixed [#417](https://github.com/QingWei-Li/docsify/issues/417) ([6a3d69a](https://github.com/QingWei-Li/docsify/commit/6a3d69a))
-
## [4.6.8](https://github.com/QingWei-Li/docsify/compare/v4.6.7...v4.6.8) (2018-03-06)
@@ -177,7 +600,6 @@ Fix the last release files has the old version marked...
- resolve path of image and embed files, fixed [#412](https://github.com/QingWei-Li/docsify/issues/412) ([bfd0d18](https://github.com/QingWei-Li/docsify/commit/bfd0d18))
-
## [4.6.7](https://github.com/QingWei-Li/docsify/compare/v4.6.6...v4.6.7) (2018-03-03)
@@ -185,11 +607,9 @@ Fix the last release files has the old version marked...
- layout css, fixed [#409](https://github.com/QingWei-Li/docsify/issues/409) ([aeb692e](https://github.com/QingWei-Li/docsify/commit/aeb692e))
-
## [4.6.6](https://github.com/QingWei-Li/docsify/compare/v4.6.5...v4.6.6) (2018-03-03)
-
## [4.6.5](https://github.com/QingWei-Li/docsify/compare/v4.6.4...v4.6.5) (2018-03-03)
@@ -201,7 +621,6 @@ Fix the last release files has the old version marked...
- **config:** Add 404 page options. ([#406](https://github.com/QingWei-Li/docsify/issues/406)) ([9b3b445](https://github.com/QingWei-Li/docsify/commit/9b3b445))
-
## [4.6.4](https://github.com/QingWei-Li/docsify/compare/v4.6.3...v4.6.4) (2018-03-01)
@@ -213,7 +632,6 @@ Fix the last release files has the old version marked...
- **fetch:** Add fallback languages configuration. ([#402](https://github.com/QingWei-Li/docsify/issues/402)) ([ecc0e04](https://github.com/QingWei-Li/docsify/commit/ecc0e04))
-
## [4.6.3](https://github.com/QingWei-Li/docsify/compare/v4.6.2...v4.6.3) (2018-02-15)
@@ -221,7 +639,6 @@ Fix the last release files has the old version marked...
- **hook:** beforeEach don\'t work, fixed [#393](https://github.com/QingWei-Li/docsify/issues/393) ([6a09059](https://github.com/QingWei-Li/docsify/commit/6a09059))
-
## [4.6.2](https://github.com/QingWei-Li/docsify/compare/v4.6.1...v4.6.2) (2018-02-14)
@@ -230,7 +647,6 @@ Fix the last release files has the old version marked...
- **embed:** broken in IE, fixed [#389](https://github.com/QingWei-Li/docsify/issues/389), fixed [#391](https://github.com/QingWei-Li/docsify/issues/391) ([45a7464](https://github.com/QingWei-Li/docsify/commit/45a7464))
- **embed:** init value ([890a7bf](https://github.com/QingWei-Li/docsify/commit/890a7bf))
-
## [4.6.1](https://github.com/QingWei-Li/docsify/compare/v4.6.0...v4.6.1) (2018-02-12)
@@ -239,7 +655,6 @@ Fix the last release files has the old version marked...
- **embed** compatible ssr ([dc0c3ce](https://github.com/QingWei-Li/docsify/commit/dc0c3ce))
- **embed** async fetch embed files, fixed [#387](https://github.com/QingWei-Li/docsify/issues/387)
-
# [4.6.0](https://github.com/QingWei-Li/docsify/compare/v4.5.9...v4.6.0) (2018-02-11)
@@ -263,10 +678,9 @@ Fix the last release files has the old version marked...
- **compiler:** support embedded markdown, html, video, etc files, close [#383](https://github.com/QingWei-Li/docsify/issues/383), close [#333](https://github.com/QingWei-Li/docsify/issues/333) ([524f52f](https://github.com/QingWei-Li/docsify/commit/524f52f))
- **cover:** add onlyCover option, close [#382](https://github.com/QingWei-Li/docsify/issues/382) ([b265fdd](https://github.com/QingWei-Li/docsify/commit/b265fdd))
- **fetch:** add requestHeaders option, fixed [#336](https://github.com/QingWei-Li/docsify/issues/336) ([54ab4c9](https://github.com/QingWei-Li/docsify/commit/54ab4c9))
-- **render:** add ext option for custom file extenstion, close [#340](https://github.com/QingWei-Li/docsify/issues/340) ([248aa72](https://github.com/QingWei-Li/docsify/commit/248aa72))
+- **render:** add ext option for custom file extension, close [#340](https://github.com/QingWei-Li/docsify/issues/340) ([248aa72](https://github.com/QingWei-Li/docsify/commit/248aa72))
- **render:** mutilple coverpage, close [#315](https://github.com/QingWei-Li/docsify/issues/315) ([f68ddf5](https://github.com/QingWei-Li/docsify/commit/f68ddf5))
-
## [4.5.9](https://github.com/QingWei-Li/docsify/compare/v4.5.8...v4.5.9) (2018-02-07)
@@ -274,7 +688,6 @@ Fix the last release files has the old version marked...
- upgrade marked ([4157173](https://github.com/QingWei-Li/docsify/commit/4157173))
-
## [4.5.8](https://github.com/QingWei-Li/docsify/compare/v4.5.6...v4.5.8) (2018-02-07)
@@ -283,7 +696,6 @@ Fix the last release files has the old version marked...
- cover style, fixed [#381](https://github.com/QingWei-Li/docsify/issues/381) ([368754e](https://github.com/QingWei-Li/docsify/commit/368754e))
- updated deps ([#337](https://github.com/QingWei-Li/docsify/issues/337)) ([a12d393](https://github.com/QingWei-Li/docsify/commit/a12d393))
-
## [4.5.7](https://github.com/QingWei-Li/docsify/compare/v4.5.6...v4.5.7) (2017-12-29)
@@ -291,7 +703,6 @@ Fix the last release files has the old version marked...
- add navigation plugin, closed [#180](https://github.com/QingWei-Li/docsify/issues/180) ([f78be4c](https://github.com/QingWei-Li/docsify/commit/f78be4c))
-
## [4.5.6](https://github.com/QingWei-Li/docsify/compare/v4.5.3...v4.5.6) (2017-12-14)
@@ -299,7 +710,6 @@ Fix the last release files has the old version marked...
- **style:** increase the tap targets of menu button, fixed [#325](https://github.com/QingWei-Li/docsify/issues/325) ([888f217](https://github.com/QingWei-Li/docsify/commit/888f217))
-
## [4.5.5](https://github.com/QingWei-Li/docsify/compare/v4.5.4...v4.5.5) (2017-11-30)
@@ -307,7 +717,6 @@ Fix the last release files has the old version marked...
- disqus plugin issue ([#318](https://github.com/QingWei-Li/docsify/issues/318)) ([041b33e](https://github.com/QingWei-Li/docsify/commit/041b33e)), closes [#317](https://github.com/QingWei-Li/docsify/issues/317)
-
## [4.5.4](https://github.com/QingWei-Li/docsify/compare/v4.5.2...v4.5.4) (2017-11-29)
@@ -319,7 +728,6 @@ Fix the last release files has the old version marked...
- add gitalk plugin ([#306](https://github.com/QingWei-Li/docsify/issues/306)) ([9208e64](https://github.com/QingWei-Li/docsify/commit/9208e64))
-
## [4.5.3](https://github.com/QingWei-Li/docsify/compare/v4.5.2...v4.5.3) (2017-11-11)
@@ -327,7 +735,6 @@ Fix the last release files has the old version marked...
- add gitalk plugin ([#306](https://github.com/QingWei-Li/docsify/issues/306)) ([9208e64](https://github.com/QingWei-Li/docsify/commit/9208e64))
-
## [4.5.2](https://github.com/QingWei-Li/docsify/compare/v4.5.1...v4.5.2) (2017-11-09)
@@ -335,7 +742,6 @@ Fix the last release files has the old version marked...
- github task lists, close [#215](https://github.com/QingWei-Li/docsify/issues/215) ([#305](https://github.com/QingWei-Li/docsify/issues/305)) ([d486eef](https://github.com/QingWei-Li/docsify/commit/d486eef))
-
## [4.5.1](https://github.com/QingWei-Li/docsify/compare/v4.5.0...v4.5.1) (2017-11-07)
@@ -343,7 +749,6 @@ Fix the last release files has the old version marked...
- fetch files with the query params, fixed [#303](https://github.com/QingWei-Li/docsify/issues/303) ([2a2ed96](https://github.com/QingWei-Li/docsify/commit/2a2ed96))
-
# [4.5.0](https://github.com/QingWei-Li/docsify/compare/v4.4.1...v4.5.0) (2017-11-04)
@@ -351,7 +756,6 @@ Fix the last release files has the old version marked...
- add disqus plugin, closed [#123](https://github.com/QingWei-Li/docsify/issues/123) ([fd7d4e0](https://github.com/QingWei-Li/docsify/commit/fd7d4e0))
-
## [4.4.1](https://github.com/QingWei-Li/docsify/compare/v4.4.0...v4.4.1) (2017-10-31)
@@ -360,7 +764,6 @@ Fix the last release files has the old version marked...
- {docsify-ignore-all} and {docsify-ignore} bug ([#299](https://github.com/QingWei-Li/docsify/issues/299)) ([cc98f56](https://github.com/QingWei-Li/docsify/commit/cc98f56))
- zoom image plugin issue, fixed [#187](https://github.com/QingWei-Li/docsify/issues/187) ([#300](https://github.com/QingWei-Li/docsify/issues/300)) ([fa772cf](https://github.com/QingWei-Li/docsify/commit/fa772cf))
-
# [4.4.0](https://github.com/QingWei-Li/docsify/compare/v4.3.15...v4.4.0) (2017-10-30)
@@ -372,7 +775,6 @@ Fix the last release files has the old version marked...
- add helper for disabled link, fixed [#295](https://github.com/QingWei-Li/docsify/issues/295) ([#296](https://github.com/QingWei-Li/docsify/issues/296)) ([4ad96f3](https://github.com/QingWei-Li/docsify/commit/4ad96f3))
-
## [4.3.15](https://github.com/QingWei-Li/docsify/compare/v4.3.14...v4.3.15) (2017-10-20)
@@ -380,7 +782,6 @@ Fix the last release files has the old version marked...
- scroll active sidebar ([a2b8eae](https://github.com/QingWei-Li/docsify/commit/a2b8eae))
-
## [4.3.14](https://github.com/QingWei-Li/docsify/compare/v4.3.13...v4.3.14) (2017-10-20)
@@ -388,7 +789,6 @@ Fix the last release files has the old version marked...
- codesponsor style ([ab68268](https://github.com/QingWei-Li/docsify/commit/ab68268))
-
## [4.3.13](https://github.com/QingWei-Li/docsify/compare/v4.3.12...v4.3.13) (2017-10-17)
@@ -400,7 +800,6 @@ Fix the last release files has the old version marked...
- make whole search result clickable ([#285](https://github.com/QingWei-Li/docsify/issues/285)) ([1b91227](https://github.com/QingWei-Li/docsify/commit/1b91227))
-
## [4.3.12](https://github.com/QingWei-Li/docsify/compare/v4.3.11...v4.3.12) (2017-10-15)
@@ -408,7 +807,6 @@ Fix the last release files has the old version marked...
- incorrect active link ([#281](https://github.com/QingWei-Li/docsify/issues/281)) ([a3ab379](https://github.com/QingWei-Li/docsify/commit/a3ab379))
-
## [4.3.11](https://github.com/QingWei-Li/docsify/compare/v4.3.10...v4.3.11) (2017-10-15)
@@ -416,7 +814,6 @@ Fix the last release files has the old version marked...
- broken links to same page heading, fix [#278](https://github.com/QingWei-Li/docsify/issues/278), fix [#279](https://github.com/QingWei-Li/docsify/issues/279) ([91d6337](https://github.com/QingWei-Li/docsify/commit/91d6337))
-
## [4.3.10](https://github.com/QingWei-Li/docsify/compare/v4.3.9...v4.3.10) (2017-10-12)
@@ -424,7 +821,6 @@ Fix the last release files has the old version marked...
- link render issue after page refreshing ([#276](https://github.com/QingWei-Li/docsify/issues/276)) ([abd885e](https://github.com/QingWei-Li/docsify/commit/abd885e))
-
## [4.3.9](https://github.com/QingWei-Li/docsify/compare/v4.3.8...v4.3.9) (2017-10-11)
@@ -432,7 +828,6 @@ Fix the last release files has the old version marked...
- scroll issue in IE ([#275](https://github.com/QingWei-Li/docsify/issues/275)) ([3e94cb6](https://github.com/QingWei-Li/docsify/commit/3e94cb6))
-
## [4.3.8](https://github.com/QingWei-Li/docsify/compare/v4.3.7...v4.3.8) (2017-10-07)
@@ -440,7 +835,6 @@ Fix the last release files has the old version marked...
- **slugify:** GitHub compatible heading links, fixed [#272](https://github.com/QingWei-Li/docsify/issues/272) ([9b4e666](https://github.com/QingWei-Li/docsify/commit/9b4e666))
-
## [4.3.7](https://github.com/QingWei-Li/docsify/compare/v4.3.6...v4.3.7) (2017-10-02)
@@ -448,7 +842,6 @@ Fix the last release files has the old version marked...
- **slugify:** GitHub compatible heading links, fixed [#267](https://github.com/QingWei-Li/docsify/issues/267) ([c195d2d](https://github.com/QingWei-Li/docsify/commit/c195d2d))
-
## [4.3.6](https://github.com/QingWei-Li/docsify/compare/v4.3.5...v4.3.6) (2017-09-21)
@@ -456,7 +849,6 @@ Fix the last release files has the old version marked...
- style for codesponsor plugin ([08afec7](https://github.com/QingWei-Li/docsify/commit/08afec7))
-
## [4.3.5](https://github.com/QingWei-Li/docsify/compare/v4.3.4...v4.3.5) (2017-09-20)
@@ -468,7 +860,6 @@ Fix the last release files has the old version marked...
- **plugin:** add codesponsor plugin ([46ac4c3](https://github.com/QingWei-Li/docsify/commit/46ac4c3))
-
## [4.3.4](https://github.com/QingWei-Li/docsify/compare/v4.3.3...v4.3.4) (2017-09-07)
@@ -476,7 +867,6 @@ Fix the last release files has the old version marked...
- scroll position issue, fixed [#234](https://github.com/QingWei-Li/docsify/issues/234) ([388ed3d](https://github.com/QingWei-Li/docsify/commit/388ed3d))
-
## [4.3.3](https://github.com/QingWei-Li/docsify/compare/v4.3.2...v4.3.3) (2017-09-06)
@@ -488,7 +878,6 @@ Fix the last release files has the old version marked...
- add doc for react and vue demo box plugin ([#247](https://github.com/QingWei-Li/docsify/issues/247)) ([f0aca19](https://github.com/QingWei-Li/docsify/commit/f0aca19))
-
## [4.3.2](https://github.com/QingWei-Li/docsify/compare/v4.3.1...v4.3.2) (2017-09-01)
@@ -500,7 +889,6 @@ Fix the last release files has the old version marked...
- add Edit on github plugin (thanks [@njleonzhang](https://github.com/njleonzhang)) ([a0e1ea8](https://github.com/QingWei-Li/docsify/commit/a0e1ea8))
-
## [4.3.1](https://github.com/QingWei-Li/docsify/compare/v4.2.9...v4.3.1) (2017-08-30)
@@ -508,7 +896,6 @@ Fix the last release files has the old version marked...
- **markdown:** supports mermaid [#137](https://github.com/QingWei-Li/docsify/issues/137) ([f4800e0](https://github.com/QingWei-Li/docsify/commit/f4800e0))
-
# [4.3.0](https://github.com/QingWei-Li/docsify/compare/v4.2.9...v4.3.0) (2017-08-17)
@@ -516,7 +903,6 @@ Fix the last release files has the old version marked...
- **markdown:** supports mermaid [#137](https://github.com/QingWei-Li/docsify/issues/137) ([f4800e0](https://github.com/QingWei-Li/docsify/commit/f4800e0))
-
## [4.2.9](https://github.com/QingWei-Li/docsify/compare/v4.2.8...v4.2.9) (2017-08-15)
@@ -524,7 +910,6 @@ Fix the last release files has the old version marked...
- ensure document ready before init Docsify [#233](https://github.com/QingWei-Li/docsify/issues/233)
-
## [4.2.8](https://github.com/QingWei-Li/docsify/compare/v4.2.7...v4.2.8) (2017-08-10)
@@ -532,7 +917,6 @@ Fix the last release files has the old version marked...
- **compiler:** support for setting target attribute for link, fixed [#230](https://github.com/QingWei-Li/docsify/issues/230) ([7f270f9](https://github.com/QingWei-Li/docsify/commit/7f270f9))
-
## [4.2.7](https://github.com/QingWei-Li/docsify/compare/v4.2.4...v4.2.7) (2017-08-05)
@@ -541,7 +925,6 @@ Fix the last release files has the old version marked...
- **release:** release shell ([628e211](https://github.com/QingWei-Li/docsify/commit/628e211))
- **style:** nowrap => pre-wrap, fixed [#228](https://github.com/QingWei-Li/docsify/issues/228) ([a88252c](https://github.com/QingWei-Li/docsify/commit/a88252c))
-
## [4.2.6](https://github.com/QingWei-Li/docsify/compare/v4.2.4...v4.2.6) (2017-07-27)
@@ -550,7 +933,6 @@ Fix the last release files has the old version marked...
- **css:** hide the nav when the content has not yet been loaded ([1fa1619](https://github.com/QingWei-Li/docsify/commit/1fa1619))
- **release:** release shell ([628e211](https://github.com/QingWei-Li/docsify/commit/628e211))
-
## [4.2.4](https://github.com/QingWei-Li/docsify/compare/v4.2.2...v4.2.4) (2017-07-26)
@@ -558,7 +940,6 @@ Fix the last release files has the old version marked...
- **render:** Remove getRootNode to be compatible with the lower version of Chrome, fixed [#225](https://github.com/QingWei-Li/docsify/issues/225) ([b8dd346](https://github.com/QingWei-Li/docsify/commit/b8dd346))
-
## [4.2.3](https://github.com/QingWei-Li/docsify/compare/v4.2.2...v4.2.3) (2017-07-26)
@@ -566,7 +947,6 @@ Fix the last release files has the old version marked...
- **search:** Supports the max depth of the search headline, fixed [#223](https://github.com/QingWei-Li/docsify/issues/223), resolve [#129](https://github.com/QingWei-Li/docsify/issues/129) ([b7b589b](https://github.com/QingWei-Li/docsify/commit/b7b589b))
-
## [4.2.2](https://github.com/QingWei-Li/docsify/compare/v4.2.1...v4.2.2) (2017-07-24)
@@ -574,14 +954,12 @@ Fix the last release files has the old version marked...
- style rerender due to setting themeColor ([17ff3d1](https://github.com/QingWei-Li/docsify/commit/17ff3d1))
-
## [4.2.1](https://github.com/QingWei-Li/docsify/compare/v4.2.0...v4.2.1) (2017-07-19)
- give the navbar some line-height (#216)
- Remove unnecessary moduleName option from rollup config for plugins (#209)
-
# [4.2.0](https://github.com/QingWei-Li/docsify/compare/v4.1.14...v4.2.0) (2017-07-10)
@@ -594,23 +972,20 @@ Fix the last release files has the old version marked...
- alias option supports regexp, resolve [#183](https://github.com/QingWei-Li/docsify/issues/183) ([c4aa22c](https://github.com/QingWei-Li/docsify/commit/c4aa22c))
- ignore to compiled link, fixed [#203](https://github.com/QingWei-Li/docsify/issues/203) ([#204](https://github.com/QingWei-Li/docsify/issues/204)) ([2e00f4c](https://github.com/QingWei-Li/docsify/commit/2e00f4c))
-
## [4.1.14](https://github.com/QingWei-Li/docsify/compare/v4.1.13...v4.1.14) (2017-06-24)
### Bug Fixes
-- get file path, fixed jrappen/sublime-distractionless/commit/81bfadd391428823191cc03eca956a2312e04d13#commitcomment-22427070 ([e8117e5](https://github.com/QingWei-Li/docsify/commit/e8117e5)), closes [jrappen/sublime-distractionless/commit/81bfadd391428823191cc03eca956a2312e04d13#commitcomment-22427070](https://github.com/jrappen/sublime-distractionless/commit/81bfadd391428823191cc03eca956a2312e04d13/issues/commitcomment-22427070)
+- get file path ([e8117e5](https://github.com/QingWei-Li/docsify/commit/e8117e5))
### Features
- add context attribute, fixed [#191](https://github.com/QingWei-Li/docsify/issues/191) ([ce0e9ac](https://github.com/QingWei-Li/docsify/commit/ce0e9ac))
-
## [4.1.13](https://github.com/QingWei-Li/docsify/compare/v4.1.12...v4.1.13) (2017-06-11)
-
## [4.1.12](https://github.com/QingWei-Li/docsify/compare/v4.1.11...v4.1.12) (2017-06-03)
@@ -618,7 +993,6 @@ Fix the last release files has the old version marked...
- **render:** subtitle in side bar shows undefined, fixed [#182](https://github.com/QingWei-Li/docsify/issues/182) ([d087d57](https://github.com/QingWei-Li/docsify/commit/d087d57))
-
## [4.1.11](https://github.com/QingWei-Li/docsify/compare/v4.1.10...v4.1.11) (2017-06-02)
@@ -627,7 +1001,6 @@ Fix the last release files has the old version marked...
- **compiler:** force reset toc when rendering sidebar fixed [#181](https://github.com/QingWei-Li/docsify/issues/181) ([ccf4c7c](https://github.com/QingWei-Li/docsify/commit/ccf4c7c))
- **render:** autoHeader does not work ([1304d2e](https://github.com/QingWei-Li/docsify/commit/1304d2e))
-
## [4.1.10](https://github.com/QingWei-Li/docsify/compare/v4.1.9...v4.1.10) (2017-06-02)
@@ -635,7 +1008,6 @@ Fix the last release files has the old version marked...
- **hash:** hash routing crashes when url has querystring ([6d48ce1](https://github.com/QingWei-Li/docsify/commit/6d48ce1))
-
## [4.1.9](https://github.com/QingWei-Li/docsify/compare/v4.1.8...v4.1.9) (2017-05-31)
@@ -645,7 +1017,6 @@ Fix the last release files has the old version marked...
- **lifecycle:** continue to handle data ([955d3d5](https://github.com/QingWei-Li/docsify/commit/955d3d5))
- **render:** broken name link, fixed [#167](https://github.com/QingWei-Li/docsify/issues/167) ([91b66a5](https://github.com/QingWei-Li/docsify/commit/91b66a5))
-
## [4.1.8](https://github.com/QingWei-Li/docsify/compare/v4.1.7...v4.1.8) (2017-05-31)
@@ -659,56 +1030,42 @@ Fix the last release files has the old version marked...
- add edit button demo ([a64cee1](https://github.com/QingWei-Li/docsify/commit/a64cee1))
- add edit button demo, close [#162](https://github.com/QingWei-Li/docsify/issues/162) ([036fdac](https://github.com/QingWei-Li/docsify/commit/036fdac))
-
-
## [4.1.7](https://github.com/QingWei-Li/docsify/compare/v4.1.6...v4.1.7) (2017-05-30)
### Bug Fixes
- **ssr:** clean files ([0014895](https://github.com/QingWei-Li/docsify/commit/0014895))
-
-
## [4.1.6](https://github.com/QingWei-Li/docsify/compare/v4.1.5...v4.1.6) (2017-05-30)
### Bug Fixes
- **ssr:** add debug ([6b9e092](https://github.com/QingWei-Li/docsify/commit/6b9e092))
-
-
## [4.1.5](https://github.com/QingWei-Li/docsify/compare/v4.1.4...v4.1.5) (2017-05-30)
### Bug Fixes
- **ssr:** missing package ([6db8c9e](https://github.com/QingWei-Li/docsify/commit/6db8c9e))
-
-
## [4.1.4](https://github.com/QingWei-Li/docsify/compare/v4.1.3...v4.1.4) (2017-05-30)
### Bug Fixes
- **ssr:** file path ([79a83bc](https://github.com/QingWei-Li/docsify/commit/79a83bc))
-
-
## [4.1.3](https://github.com/QingWei-Li/docsify/compare/v4.1.2...v4.1.3) (2017-05-30)
### Bug Fixes
- update babel config ([9825db4](https://github.com/QingWei-Li/docsify/commit/9825db4))
-
-
## [4.1.2](https://github.com/QingWei-Li/docsify/compare/v4.1.1...v4.1.2) (2017-05-30)
### Bug Fixes
- update babel config ([80dba19](https://github.com/QingWei-Li/docsify/commit/80dba19))
-
-
## [4.1.1](https://github.com/QingWei-Li/docsify/compare/v4.1.0...v4.1.1) (2017-05-30)
### Bug Fixes
@@ -716,20 +1073,14 @@ Fix the last release files has the old version marked...
- build for ssr package ([4cb20a5](https://github.com/QingWei-Li/docsify/commit/4cb20a5))
- remove history mode ([0e74e6c](https://github.com/QingWei-Li/docsify/commit/0e74e6c))
-
-
# [4.1.0](https://github.com/QingWei-Li/docsify/compare/v4.0.2...v4.1.0) (2017-05-30)
-
-
## [4.0.2](https://github.com/QingWei-Li/docsify/compare/v4.0.1...v4.0.2) (2017-05-30)
### Bug Fixes
- basePath for history mode ([fc1cd3f](https://github.com/QingWei-Li/docsify/commit/fc1cd3f))
-
-
## [4.0.1](https://github.com/QingWei-Li/docsify/compare/v4.0.0...v4.0.1) (2017-05-29)
### Bug Fixes
@@ -737,8 +1088,6 @@ Fix the last release files has the old version marked...
- **ssr:** remove context ([4626157](https://github.com/QingWei-Li/docsify/commit/4626157))
- lint ([b764b6e](https://github.com/QingWei-Li/docsify/commit/b764b6e))
-
-
# [4.0.0](https://github.com/QingWei-Li/docsify/compare/v3.7.3...v4.0.0) (2017-05-29)
### Bug Fixes
@@ -749,5 +1098,642 @@ Fix the last release files has the old version marked...
### Features
- finish ssr ([3444884](https://github.com/QingWei-Li/docsify/commit/3444884))
-- init ocsify-server-renderer ([6dea685](https://github.com/QingWei-Li/docsify/commit/6dea685))
+- init docsify-server-renderer ([6dea685](https://github.com/QingWei-Li/docsify/commit/6dea685))
- support history mode ([f095eb8](https://github.com/QingWei-Li/docsify/commit/f095eb8))
+
+## [3.7.3](https://github.com/docsifyjs/docsify/compare/v3.7.2...v3.7.3) (2017-05-22)
+
+
+### Bug Fixes
+
+* **render:** find => filter ([eca3368](https://github.com/docsifyjs/docsify/commit/eca33681524d7047080c817d202d7b7d188634ea))
+
+
+
+## [3.7.2](https://github.com/docsifyjs/docsify/compare/v3.7.1...v3.7.2) (2017-05-19)
+
+
+
+## [3.7.1](https://github.com/docsifyjs/docsify/compare/v3.7.0...v3.7.1) (2017-05-19)
+
+
+### Bug Fixes
+
+* docsify-updated is undefined ([b2b4742](https://github.com/docsifyjs/docsify/commit/b2b474264f3a618d370a632713258e98278c732e))
+
+
+
+# [3.7.0](https://github.com/docsifyjs/docsify/compare/v3.6.6...v3.7.0) (2017-05-16)
+
+
+### Features
+
+* add docsify-updated, close [#158](https://github.com/docsifyjs/docsify/issues/158) ([d2be5ae](https://github.com/docsifyjs/docsify/commit/d2be5aecf8fe65a8f9443c023f8b5e9fe035bf6c))
+* add externalLinkTarget, close [#149](https://github.com/docsifyjs/docsify/issues/149) ([2d73285](https://github.com/docsifyjs/docsify/commit/2d73285de505d5dd4afdc62c3b5463cf17f21109))
+
+
+
+## [3.6.6](https://github.com/docsifyjs/docsify/compare/v3.6.5...v3.6.6) (2017-05-06)
+
+
+### Features
+
+* support query string for the search, fixed [#156](https://github.com/docsifyjs/docsify/issues/156) ([da75d70](https://github.com/docsifyjs/docsify/commit/da75d70dee4f0b7e5f07d2f06a3d437aff5980b3))
+
+
+
+## [3.6.5](https://github.com/docsifyjs/docsify/compare/v3.6.4...v3.6.5) (2017-04-28)
+
+
+### Bug Fixes
+
+* **util:** fix crash, fixed [#154](https://github.com/docsifyjs/docsify/issues/154) ([51832d3](https://github.com/docsifyjs/docsify/commit/51832d3506b23b1a1335c1c2b907afd1ccada755))
+
+
+
+## [3.6.4](https://github.com/docsifyjs/docsify/compare/v3.6.3...v3.6.4) (2017-04-28)
+
+
+### Bug Fixes
+
+* **util:** correctly clean up duplicate slashes, fixed [#153](https://github.com/docsifyjs/docsify/issues/153) ([76c041a](https://github.com/docsifyjs/docsify/commit/76c041ad48cd4edc73d7114a80e9c2b85fddee52))
+
+
+
+## [3.6.3](https://github.com/docsifyjs/docsify/compare/v3.6.2...v3.6.3) (2017-04-25)
+
+
+### Bug Fixes
+
+* **external-script:** script attrs ([2653849](https://github.com/docsifyjs/docsify/commit/2653849a3ed1d16ec36cf3733bac203761b964db))
+
+
+
+## [3.6.2](https://github.com/docsifyjs/docsify/compare/v3.6.0...v3.6.2) (2017-04-12)
+
+
+### Features
+
+* **event:** Collapse the sidebar when click outside element in the small screen ([9b7e5f5](https://github.com/docsifyjs/docsify/commit/9b7e5f5814119a22742867084c33e8f7ac894d5f))
+* **external-script:** detect more than one script dom, fixed [#146](https://github.com/docsifyjs/docsify/issues/146) ([94d6603](https://github.com/docsifyjs/docsify/commit/94d6603c06a37f88daca25359cc1d1f6cf604014))
+
+
+
+# [3.6.0](https://github.com/docsifyjs/docsify/compare/v3.5.2...v3.6.0) (2017-04-09)
+
+
+### Features
+
+* **render:** add mergeNavbar option, close [#125](https://github.com/docsifyjs/docsify/issues/125), [#124](https://github.com/docsifyjs/docsify/issues/124) ([#145](https://github.com/docsifyjs/docsify/issues/145)) ([9220523](https://github.com/docsifyjs/docsify/commit/9220523a40494fa2687ac3f7f722db2909f9e814))
+
+
+
+## [3.5.2](https://github.com/docsifyjs/docsify/compare/v3.5.1...v3.5.2) (2017-04-05)
+
+
+
+## [3.5.1](https://github.com/docsifyjs/docsify/compare/v3.5.0...v3.5.1) (2017-03-25)
+
+
+### Bug Fixes
+
+* .md file extension regex ([594299f](https://github.com/docsifyjs/docsify/commit/594299ffbd04018dfab610091d959fa86a2db2af))
+
+
+
+# [3.5.0](https://github.com/docsifyjs/docsify/compare/v3.4.4...v3.5.0) (2017-03-25)
+
+
+### Bug Fixes
+
+* adjust display on small screens ([bf35471](https://github.com/docsifyjs/docsify/commit/bf35471a2b88d681d84ed1a34cf26f0dc3839a22))
+* navbar labels for German ([b022aaf](https://github.com/docsifyjs/docsify/commit/b022aaf14e7276400d69c14e2519cab31a5b4986))
+
+
+### Features
+
+* **route:** auto remove .md extension ([8f11653](https://github.com/docsifyjs/docsify/commit/8f11653b415cbf978578213113f19ec0cf6d3d9a))
+
+
+
+## [3.4.4](https://github.com/docsifyjs/docsify/compare/v3.4.3...v3.4.4) (2017-03-17)
+
+
+### Bug Fixes
+
+* **search:** fix input style ([2d6a51b](https://github.com/docsifyjs/docsify/commit/2d6a51b057ae5fe299e5adb488b87aed820f28c0))
+
+
+
+## [3.4.3](https://github.com/docsifyjs/docsify/compare/v3.4.2...v3.4.3) (2017-03-16)
+
+
+
+## [3.4.2](https://github.com/docsifyjs/docsify/compare/v3.4.1...v3.4.2) (2017-03-11)
+
+
+### Features
+
+* **emojify:** add no-emoji option ([3aef37a](https://github.com/docsifyjs/docsify/commit/3aef37a445a0b68bf1bd525f0e8d10f63d08b562))
+
+
+
+## [3.4.1](https://github.com/docsifyjs/docsify/compare/v3.4.0...v3.4.1) (2017-03-10)
+
+
+### Bug Fixes
+
+* **dom:** Disable the dom cache when vue is present, fixed [#119](https://github.com/docsifyjs/docsify/issues/119) ([b9a7275](https://github.com/docsifyjs/docsify/commit/b9a7275c8f08f0d6810be831b36a5d7ecdff0e4c))
+
+
+
+# [3.4.0](https://github.com/docsifyjs/docsify/compare/v3.3.0...v3.4.0) (2017-03-09)
+
+
+### Features
+
+* **zoom-image:** add plugin ([50fa6fc](https://github.com/docsifyjs/docsify/commit/50fa6fcb89fc575687cededc670abef7c20bbbee))
+
+
+
+# [3.3.0](https://github.com/docsifyjs/docsify/compare/v3.2.0...v3.3.0) (2017-03-07)
+
+
+
+# [3.2.0](https://github.com/docsifyjs/docsify/compare/v3.1.2...v3.2.0) (2017-02-28)
+
+
+### Bug Fixes
+
+* **fetch:** load sidebar and navbar for parent path, fixed [#100](https://github.com/docsifyjs/docsify/issues/100) ([f3fc596](https://github.com/docsifyjs/docsify/commit/f3fc5969512941416fb5082654f146153943715b))
+* **render:** Toc rendering error, fixed [#106](https://github.com/docsifyjs/docsify/issues/106) ([0d59ee9](https://github.com/docsifyjs/docsify/commit/0d59ee939fac6b0a8980c0e24d2da5f654227052))
+
+
+### Features
+
+* **search:** Localization for no data tip, close [#103](https://github.com/docsifyjs/docsify/issues/103) ([d3c9fbd](https://github.com/docsifyjs/docsify/commit/d3c9fbd124b4cec16293e93a6c2f000d767e163a))
+
+
+
+## [3.1.2](https://github.com/docsifyjs/docsify/compare/v3.1.1...v3.1.2) (2017-02-27)
+
+
+
+## [3.1.1](https://github.com/docsifyjs/docsify/compare/v3.1.0...v3.1.1) (2017-02-24)
+
+
+### Bug Fixes
+
+* **render:** custom cover background image ([8f9bf29](https://github.com/docsifyjs/docsify/commit/8f9bf29ee5a75f8774897294ca639f7efb55d43c))
+* **search:** dont search nameLink, fixed [#102](https://github.com/docsifyjs/docsify/issues/102) ([507d9e8](https://github.com/docsifyjs/docsify/commit/507d9e834c2867676c31b1bfb43517b79089f88a))
+* **tpl:** extra character, fixed [#101](https://github.com/docsifyjs/docsify/issues/101) ([d67d25f](https://github.com/docsifyjs/docsify/commit/d67d25fed4b1509562db03d9576c2538c6b311ab))
+
+
+
+# [3.1.0](https://github.com/docsifyjs/docsify/compare/v3.0.5...v3.1.0) (2017-02-22)
+
+
+### Bug Fixes
+
+* **search:** incorrect anchor link, fixed [#90](https://github.com/docsifyjs/docsify/issues/90) ([b8a3d8f](https://github.com/docsifyjs/docsify/commit/b8a3d8f38094f7270bb37fde38d278fe43b6b827))
+* **sw:** update white list ([f2975a5](https://github.com/docsifyjs/docsify/commit/f2975a5e5e40105d57a2885e416eef31fcb4e2f5))
+
+
+### Features
+
+* **emoji:** add emoji plugin ([855c450](https://github.com/docsifyjs/docsify/commit/855c450a97615b0ff0087c4cf0d2366bf0bae82c))
+
+
+
+## [3.0.5](https://github.com/docsifyjs/docsify/compare/v3.0.4...v3.0.5) (2017-02-21)
+
+
+### Bug Fixes
+
+* **event:** highlight sidebar when clicked, fixed [#86](https://github.com/docsifyjs/docsify/issues/86) ([2a1157a](https://github.com/docsifyjs/docsify/commit/2a1157a70679be86cda09a5ecca8004316ae95fb))
+* **gen-tree:** cache toc list, fixed [#88](https://github.com/docsifyjs/docsify/issues/88) ([3394ebb](https://github.com/docsifyjs/docsify/commit/3394ebb9a5eef54920fea3b5f0c6ebd8272322f7))
+* **layout.css:** loading style ([42b2dba](https://github.com/docsifyjs/docsify/commit/42b2dba589410fe35fb42306d540c933f7e07887))
+
+
+### Features
+
+* **pwa:** add sw.js ([f7111b5](https://github.com/docsifyjs/docsify/commit/f7111b59038645a5fb50839add67f0c871278e40))
+
+
+
+## [3.0.4](https://github.com/docsifyjs/docsify/compare/v3.0.3...v3.0.4) (2017-02-20)
+
+
+### Bug Fixes
+
+* **render:** disable rendering sub list when loadSidebar is false ([35dd2e1](https://github.com/docsifyjs/docsify/commit/35dd2e16fab460bfc77d836f607c374c57ec8426))
+* **render:** execute script ([780c1e5](https://github.com/docsifyjs/docsify/commit/780c1e580e6c598703cfae381cb537b8c5849c7d))
+
+
+
+## [3.0.3](https://github.com/docsifyjs/docsify/compare/v3.0.2...v3.0.3) (2017-02-19)
+
+
+
+## [3.0.2](https://github.com/docsifyjs/docsify/compare/v3.0.1...v3.0.2) (2017-02-19)
+
+
+### Bug Fixes
+
+* **compiler:** link ([3b127a1](https://github.com/docsifyjs/docsify/commit/3b127a161c3f33f9817eb834f778eb3382653ec4))
+* **search:** add lazy input ([bf593a7](https://github.com/docsifyjs/docsify/commit/bf593a77ad4884275921abefc1f78e897b292172))
+
+
+
+## [3.0.1](https://github.com/docsifyjs/docsify/compare/v3.0.0...v3.0.1) (2017-02-19)
+
+
+### Bug Fixes
+
+* **route:** empty alias ([cd99b52](https://github.com/docsifyjs/docsify/commit/cd99b522e79a611fe6de6344c1a3b5cc9176f6f9))
+
+
+
+# [3.0.0](https://github.com/docsifyjs/docsify/compare/v2.4.3...v3.0.0) (2017-02-19)
+
+
+### Bug Fixes
+
+* **compiler:** link ([c7e09c3](https://github.com/docsifyjs/docsify/commit/c7e09c34a719180d9a752d9fa44835a5de37dc3d))
+* **render:** support html file ([7b6a2ac](https://github.com/docsifyjs/docsify/commit/7b6a2ac404110b153b5fc2ee60adf19a0270f22c))
+* **search:** escape html ([fcb66e8](https://github.com/docsifyjs/docsify/commit/fcb66e8bc78884c38cf96cb328ad07f50cdb4a5e))
+* **search:** fix default config ([2efd859](https://github.com/docsifyjs/docsify/commit/2efd859f71d14904c8fda0fb24a8f2d2bda66705))
+
+
+### Features
+
+* **front-matter:** add front matter[WIP] ([dbb9278](https://github.com/docsifyjs/docsify/commit/dbb92782cf6a0a6e551e64d7eaef4609823ce355))
+* **render:** add auto header ([b7768b1](https://github.com/docsifyjs/docsify/commit/b7768b1b3c1a9914427c7219351ae1d8c60650a5))
+* **search:** Localization for search placeholder, close [#80](https://github.com/docsifyjs/docsify/issues/80) ([2351c3e](https://github.com/docsifyjs/docsify/commit/2351c3e68c4b77ddd0cd62dcf2164df6d46b0e66))
+* **themes:** add loading info ([86594a3](https://github.com/docsifyjs/docsify/commit/86594a31184c2247d01d453a15cb2bb221493598))
+
+
+
+## [2.4.3](https://github.com/docsifyjs/docsify/compare/v2.4.2...v2.4.3) (2017-02-15)
+
+
+
+## [2.4.2](https://github.com/docsifyjs/docsify/compare/v2.4.1...v2.4.2) (2017-02-14)
+
+
+### Bug Fixes
+
+* **index:** load file path error ([dc536a3](https://github.com/docsifyjs/docsify/commit/dc536a39301ae2853c8ac9b9fc68da33d2b2ae91))
+
+
+
+## [2.4.1](https://github.com/docsifyjs/docsify/compare/v2.4.0...v2.4.1) (2017-02-13)
+
+
+### Bug Fixes
+
+* **index:** cover page ([dd0c84b](https://github.com/docsifyjs/docsify/commit/dd0c84bb40b1956310611b005d7cfd77d2cba459))
+
+
+
+# [2.4.0](https://github.com/docsifyjs/docsify/compare/v2.3.0...v2.4.0) (2017-02-13)
+
+
+### Features
+
+* **hook:** add doneEach ([c6f7602](https://github.com/docsifyjs/docsify/commit/c6f760275cb703a5d2ab024bdc8abef9c468769a))
+
+
+
+# [2.3.0](https://github.com/docsifyjs/docsify/compare/v2.2.1...v2.3.0) (2017-02-13)
+
+
+### Bug Fixes
+
+* **event:** has no effect on a FF mobile browser, fixed [#67](https://github.com/docsifyjs/docsify/issues/67) ([0ff36c2](https://github.com/docsifyjs/docsify/commit/0ff36c22bbf3f8de1647abc5b283259917edf065))
+* **render:** custom marked renderer ([bf559b4](https://github.com/docsifyjs/docsify/commit/bf559b44dc6fe043890874df01b49f5a19eb7305))
+* **render:** fix render link ([a866744](https://github.com/docsifyjs/docsify/commit/a866744c4517e9ab6449bc3ca936fd6c7366309a))
+* **render:** image url ([6f87529](https://github.com/docsifyjs/docsify/commit/6f8752925672c8288fc4a8d68a99d14edfdd402f))
+* **render:** render link ([38ea660](https://github.com/docsifyjs/docsify/commit/38ea660b78ede460e0760abbc6b2db3d5b0c2766))
+* **src:** fix route ([324301a](https://github.com/docsifyjs/docsify/commit/324301aaff4dc1e84e046235e6f490aec44d20b8))
+* **src:** get alias ([784173e](https://github.com/docsifyjs/docsify/commit/784173e4c874ce6ff39f718d30625a268024f4d5))
+* **src:** get alias ([ce99a04](https://github.com/docsifyjs/docsify/commit/ce99a04f2e8e95c694424fe45fb969b02192b75b))
+* **themes:** fix navbar style ([fa54b52](https://github.com/docsifyjs/docsify/commit/fa54b52048b63bafa4dd134544f4cb46cbb22ba0))
+* **themes:** update navbar style ([4864d1b](https://github.com/docsifyjs/docsify/commit/4864d1b26f03b1c5607448ea8402e3037c2b294b))
+
+
+### Features
+
+* **hook:** support custom plugin ([9e81a59](https://github.com/docsifyjs/docsify/commit/9e81a5975f42a7dde64e4085c6389029f22c85d0))
+* **src:** add alias feature ([24412cd](https://github.com/docsifyjs/docsify/commit/24412cdaf0dbe241aeab0bb97d0847b8245a5aca))
+* **src:** dynamic title and fix sidebar style ([6b30eb6](https://github.com/docsifyjs/docsify/commit/6b30eb65eb40a9636455ec078e644382e1d7e7aa))
+
+
+
+## [2.2.1](https://github.com/docsifyjs/docsify/compare/v2.2.0...v2.2.1) (2017-02-11)
+
+
+### Bug Fixes
+
+* **event:** scroll active sidebar ([50f5fc2](https://github.com/docsifyjs/docsify/commit/50f5fc2b224859c413b372a0ae63a8dc917dd082))
+* **search:** crash when not content, fixed [#68](https://github.com/docsifyjs/docsify/issues/68) ([9d3cc89](https://github.com/docsifyjs/docsify/commit/9d3cc89aa93c025fac224ec7c868693592f2c4f7))
+* **search:** not work in mobile ([3941304](https://github.com/docsifyjs/docsify/commit/3941304fda681dfee1df03577dec8b829ac270ad))
+
+
+
+# [2.2.0](https://github.com/docsifyjs/docsify/compare/v2.1.0...v2.2.0) (2017-02-09)
+
+
+### Features
+
+* **plugins:** add Google Analytics plugin ([#66](https://github.com/docsifyjs/docsify/issues/66)) ([ac61bb0](https://github.com/docsifyjs/docsify/commit/ac61bb0e75d72e6ecd1b0b7be9f4506cc6f7354a))
+
+
+
+# [2.1.0](https://github.com/docsifyjs/docsify/compare/v2.0.3...v2.1.0) (2017-02-09)
+
+
+### Bug Fixes
+
+* render name ([12e2479](https://github.com/docsifyjs/docsify/commit/12e24790142cfa9792700d3fc89abe4cf92205e7))
+* **vue.css:** update sidebar style ([fc140ef](https://github.com/docsifyjs/docsify/commit/fc140ef957565c4fc5f49d1873a77d0ee8f0abbd))
+
+
+### Features
+
+* add search, close [#43](https://github.com/docsifyjs/docsify/issues/43) ([eb5ff3e](https://github.com/docsifyjs/docsify/commit/eb5ff3e987f0275f6e2ddcedfa57768f2976eae1))
+
+
+
+## [2.0.3](https://github.com/docsifyjs/docsify/compare/v2.0.2...v2.0.3) (2017-02-07)
+
+
+### Bug Fixes
+
+* css var polyfill ([8cd386a](https://github.com/docsifyjs/docsify/commit/8cd386ae4970c569e2b76a44e57e5066fc9c3db2))
+* css var polyfill ([cbaee21](https://github.com/docsifyjs/docsify/commit/cbaee21deddf4a568de3a408c74a380a383ef88a))
+* rendering emojis ([8c7e4d7](https://github.com/docsifyjs/docsify/commit/8c7e4d7866049db20871624140640e08dc5f55b7))
+
+
+
+## [2.0.2](https://github.com/docsifyjs/docsify/compare/v2.0.1...v2.0.2) (2017-02-05)
+
+
+### Bug Fixes
+
+* button style in cover page ([4470855](https://github.com/docsifyjs/docsify/commit/44708554f74b4a29059bc89baa6e001637b972c0))
+
+
+
+## [2.0.1](https://github.com/docsifyjs/docsify/compare/v2.0.0...v2.0.1) (2017-02-05)
+
+
+
+# [2.0.0](https://github.com/docsifyjs/docsify/compare/v1.10.5...v2.0.0) (2017-02-05)
+
+
+### Features
+
+* customize the theme color ([5cc9f05](https://github.com/docsifyjs/docsify/commit/5cc9f0514c04805cf1d9ec324a634644ba28a145))
+
+
+
+## [1.10.5](https://github.com/docsifyjs/docsify/compare/v1.10.4...v1.10.5) (2017-01-28)
+
+
+
+## [1.10.4](https://github.com/docsifyjs/docsify/compare/v1.10.3...v1.10.4) (2017-01-27)
+
+
+
+## [1.10.3](https://github.com/docsifyjs/docsify/compare/v1.10.2...v1.10.3) (2017-01-27)
+
+
+
+## [1.10.2](https://github.com/docsifyjs/docsify/compare/v1.10.1...v1.10.2) (2017-01-25)
+
+
+
+## [1.10.1](https://github.com/docsifyjs/docsify/compare/v1.10.0...v1.10.1) (2017-01-25)
+
+
+
+# [1.10.0](https://github.com/docsifyjs/docsify/compare/v1.9.0...v1.10.0) (2017-01-25)
+
+
+
+# [1.9.0](https://github.com/docsifyjs/docsify/compare/v1.8.0...v1.9.0) (2017-01-24)
+
+
+
+# [1.8.0](https://github.com/docsifyjs/docsify/compare/v1.7.4...v1.8.0) (2017-01-24)
+
+
+
+## [1.7.4](https://github.com/docsifyjs/docsify/compare/v1.7.3...v1.7.4) (2017-01-13)
+
+
+
+## [1.7.3](https://github.com/docsifyjs/docsify/compare/v1.7.2...v1.7.3) (2017-01-13)
+
+
+
+## [1.7.2](https://github.com/docsifyjs/docsify/compare/v1.7.1...v1.7.2) (2017-01-12)
+
+
+
+## [1.7.1](https://github.com/docsifyjs/docsify/compare/v1.7.0...v1.7.1) (2017-01-12)
+
+
+
+# [1.7.0](https://github.com/docsifyjs/docsify/compare/v1.6.1...v1.7.0) (2017-01-12)
+
+
+
+## [1.6.1](https://github.com/docsifyjs/docsify/compare/v1.6.0...v1.6.1) (2017-01-10)
+
+
+
+# [1.6.0](https://github.com/docsifyjs/docsify/compare/v1.5.2...v1.6.0) (2017-01-10)
+
+
+
+## [1.5.2](https://github.com/docsifyjs/docsify/compare/v1.5.1...v1.5.2) (2017-01-10)
+
+
+
+## [1.5.1](https://github.com/docsifyjs/docsify/compare/v1.5.0...v1.5.1) (2017-01-09)
+
+
+
+# [1.5.0](https://github.com/docsifyjs/docsify/compare/v1.4.3...v1.5.0) (2017-01-04)
+
+
+### Features
+
+* Markdown parser is configurable, [#42](https://github.com/docsifyjs/docsify/issues/42) ([8b1000a](https://github.com/docsifyjs/docsify/commit/8b1000a4a55532419d8f8e41b797c15e2a5442cc))
+
+
+
+## [1.4.3](https://github.com/docsifyjs/docsify/compare/v1.4.2...v1.4.3) (2017-01-01)
+
+
+
+## [1.4.2](https://github.com/docsifyjs/docsify/compare/v1.4.1...v1.4.2) (2016-12-31)
+
+
+
+## [1.4.1](https://github.com/docsifyjs/docsify/compare/v1.4.0...v1.4.1) (2016-12-31)
+
+
+
+# [1.4.0](https://github.com/docsifyjs/docsify/compare/v1.3.5...v1.4.0) (2016-12-31)
+
+
+
+## [1.3.5](https://github.com/docsifyjs/docsify/compare/v1.3.4...v1.3.5) (2016-12-25)
+
+
+
+## [1.3.4](https://github.com/docsifyjs/docsify/compare/v1.3.3...v1.3.4) (2016-12-25)
+
+
+
+## [1.3.3](https://github.com/docsifyjs/docsify/compare/v1.3.2...v1.3.3) (2016-12-23)
+
+
+
+## [1.3.2](https://github.com/docsifyjs/docsify/compare/v1.3.1...v1.3.2) (2016-12-22)
+
+
+
+## [1.3.1](https://github.com/docsifyjs/docsify/compare/v1.3.0...v1.3.1) (2016-12-22)
+
+
+
+# [1.3.0](https://github.com/docsifyjs/docsify/compare/v1.2.0...v1.3.0) (2016-12-21)
+
+
+
+# [1.2.0](https://github.com/docsifyjs/docsify/compare/v1.1.7...v1.2.0) (2016-12-20)
+
+
+
+## [1.1.7](https://github.com/docsifyjs/docsify/compare/v1.1.6...v1.1.7) (2016-12-19)
+
+
+
+## [1.1.6](https://github.com/docsifyjs/docsify/compare/v1.1.5...v1.1.6) (2016-12-18)
+
+
+
+## [1.1.5](https://github.com/docsifyjs/docsify/compare/v1.1.4...v1.1.5) (2016-12-18)
+
+
+
+## [1.1.4](https://github.com/docsifyjs/docsify/compare/v1.1.3...v1.1.4) (2016-12-17)
+
+
+
+## [1.1.3](https://github.com/docsifyjs/docsify/compare/v1.1.2...v1.1.3) (2016-12-17)
+
+
+
+## [1.1.2](https://github.com/docsifyjs/docsify/compare/v1.1.1...v1.1.2) (2016-12-17)
+
+
+
+## [1.1.1](https://github.com/docsifyjs/docsify/compare/v1.1.0...v1.1.1) (2016-12-17)
+
+
+
+# [1.1.0](https://github.com/docsifyjs/docsify/compare/v1.0.3...v1.1.0) (2016-12-16)
+
+
+
+## [1.0.3](https://github.com/docsifyjs/docsify/compare/v1.0.2...v1.0.3) (2016-12-13)
+
+
+
+## [1.0.2](https://github.com/docsifyjs/docsify/compare/v1.0.1...v1.0.2) (2016-12-13)
+
+
+
+## [1.0.1](https://github.com/docsifyjs/docsify/compare/v1.0.0...v1.0.1) (2016-12-08)
+
+
+
+# [1.0.0](https://github.com/docsifyjs/docsify/compare/v0.7.0...v1.0.0) (2016-12-08)
+
+
+
+# [0.7.0](https://github.com/docsifyjs/docsify/compare/v0.6.1...v0.7.0) (2016-11-30)
+
+
+
+## [0.6.1](https://github.com/docsifyjs/docsify/compare/v0.6.0...v0.6.1) (2016-11-29)
+
+
+
+# [0.6.0](https://github.com/docsifyjs/docsify/compare/v0.5.0...v0.6.0) (2016-11-29)
+
+
+
+# [0.5.0](https://github.com/docsifyjs/docsify/compare/v0.4.2...v0.5.0) (2016-11-28)
+
+
+
+## [0.4.2](https://github.com/docsifyjs/docsify/compare/v0.4.1...v0.4.2) (2016-11-28)
+
+
+
+## [0.4.1](https://github.com/docsifyjs/docsify/compare/v0.4.0...v0.4.1) (2016-11-28)
+
+
+
+# [0.4.0](https://github.com/docsifyjs/docsify/compare/v0.3.1...v0.4.0) (2016-11-27)
+
+
+### Features
+
+* custom sidebar, [#4](https://github.com/docsifyjs/docsify/issues/4) ([#5](https://github.com/docsifyjs/docsify/issues/5)) ([37e7984](https://github.com/docsifyjs/docsify/commit/37e7984e7efab3767badb9d940b7368b2b6f8493))
+
+
+
+## [0.3.1](https://github.com/docsifyjs/docsify/compare/v0.3.0...v0.3.1) (2016-11-27)
+
+
+
+# [0.3.0](https://github.com/docsifyjs/docsify/compare/v0.2.1...v0.3.0) (2016-11-27)
+
+
+
+## [0.2.1](https://github.com/docsifyjs/docsify/compare/v0.2.0...v0.2.1) (2016-11-26)
+
+
+
+# [0.2.0](https://github.com/docsifyjs/docsify/compare/v0.1.0...v0.2.0) (2016-11-26)
+
+
+
+# [0.1.0](https://github.com/docsifyjs/docsify/compare/v0.0.5...v0.1.0) (2016-11-26)
+
+
+
+## [0.0.5](https://github.com/docsifyjs/docsify/compare/v0.0.4...v0.0.5) (2016-11-24)
+
+
+
+## [0.0.4](https://github.com/docsifyjs/docsify/compare/v0.0.3...v0.0.4) (2016-11-22)
+
+
+
+## [0.0.3](https://github.com/docsifyjs/docsify/compare/v0.0.2...v0.0.3) (2016-11-20)
+
+
+
+## [0.0.2](https://github.com/docsifyjs/docsify/compare/v0.0.1...v0.0.2) (2016-11-20)
+
+
+
+## 0.0.1 (2016-11-20)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 77d2ce780f..ea63c9c7d9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -4,21 +4,60 @@
First, thank you for considering contributing to docsify! It's people like you that make the open source community such a great community! 😊
-We welcome any type of contribution, not only code. You can help with
+We welcome any type of contribution, not only code. You can help with
+
- **QA**: file bug reports, the more details you can give the better (e.g. screenshots with the console open)
- **Marketing**: writing blog posts, howto's, printing stickers, ...
- **Community**: presenting the project at meetups, organizing a dedicated meetup for the local community, ...
-- **Code**: take a look at the [open issues](issues). Even if you can't write code, commenting on them, showing that you care about a given issue matters. It helps us triage them.
+- **Code**: take a look at the [open issues](https://github.com/docsifyjs/docsify/issues). Even if you can't write code, commenting on them, showing that you care about a given issue matters. It helps us triage them.
- **Money**: we welcome financial contributions in full transparency on our [open collective](https://opencollective.com/docsify).
## Your First Contribution
-Working on your first Pull Request? You can learn how from this *free* series, [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github).
+Working on your first Pull Request ever? You can learn how from this _free_ series, [How to Contribute to an Open Source Project on GitHub](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github).
+
+## Online one-click setup for Contributing
+
+You can use Gitpod (a free online VS Code-like IDE) for contributing. With a single click it'll launch a workspace and automatically:
+
+- clone the docsify repo.
+- install the dependencies.
+- start `npm run dev`.
+
+```bash
+npm install && npm run dev
+```
+
+So that you can start straight away.
+
+[](https://gitpod.io/#https://github.com/docsifyjs/docsify)
+
+- Fork it!
+- Create your feature branch: `git checkout -b my-new-feature`
+- Commit your changes: `git add . && git commit -m 'Add some feature'`
+- Push to the branch: `git push origin my-new-feature`
+- Submit a pull request
## Submitting code
Any code change should be submitted as a pull request. The description should explain what the code does and give steps to execute it. The pull request should also contain tests.
+## Testing
+
+Ensure that things work by running:
+
+```sh
+npm test
+```
+
+## Test Snapshots
+
+If a snapshot fails, or to add new snapshots, run:
+
+```sh
+npx jest --updateSnapshot
+```
+
## Code review process
The bigger the pull request, the longer it will take to review and merge. Try to break down large pull requests in smaller chunks that are easier to review and merge.
@@ -31,7 +70,7 @@ Anyone can file an expense. If the expense makes sense for the development of th
## Questions
-If you have any questions, create an [issue](issue) (protip: do a quick search first to see if someone else didn't ask the same question before!).
+If you have any questions, create an [issue](https://github.com/docsifyjs/docsify/issues) (protip: do a quick search first to see if someone else didn't ask the same question before!).
You can also reach us at hello@docsify.opencollective.com.
## Credits
@@ -41,14 +80,12 @@ You can also reach us at hello@docsify.opencollective.com.
Thank you to all the people who have already contributed to docsify!
-
### Backers
Thank you to all our backers! [[Become a backer](https://opencollective.com/docsify#backer)]
-
### Sponsors
Thank you to all our sponsors! (please ask your company to also support this open source project by [becoming a sponsor](https://opencollective.com/docsify#sponsor))
@@ -64,4 +101,4 @@ Thank you to all our sponsors! (please ask your company to also support this ope
-
\ No newline at end of file
+
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000..b07a97ce3f
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,9 @@
+FROM mcr.microsoft.com/playwright:focal
+WORKDIR /app
+COPY . .
+RUN rm package-lock.json
+RUN npm install
+RUN npx playwright install
+RUN npm run build
+ENTRYPOINT ["npm", "run"]
+CMD ["test"]
\ No newline at end of file
diff --git a/HISTORY.md b/HISTORY.md
deleted file mode 100644
index fb720fdddd..0000000000
--- a/HISTORY.md
+++ /dev/null
@@ -1,736 +0,0 @@
-
-
-## [3.7.3](https://github.com/QingWei-Li/docsify/compare/v3.7.2...v3.7.3) (2017-05-22)
-
-
-### Bug Fixes
-
-* **render:** find => filter ([eca3368](https://github.com/QingWei-Li/docsify/commit/eca3368))
-
-
-
-
-## [3.7.2](https://github.com/QingWei-Li/docsify/compare/v3.7.1...v3.7.2) (2017-05-19)
-
-
-
-
-## [3.7.1](https://github.com/QingWei-Li/docsify/compare/v3.7.0...v3.7.1) (2017-05-19)
-
-
-### Bug Fixes
-
-* docsify-updated is undefined ([b2b4742](https://github.com/QingWei-Li/docsify/commit/b2b4742))
-
-
-
-
-# [3.7.0](https://github.com/QingWei-Li/docsify/compare/v3.6.6...v3.7.0) (2017-05-16)
-
-
-### Features
-
-* add docsify-updated, close [#158](https://github.com/QingWei-Li/docsify/issues/158) ([d2be5ae](https://github.com/QingWei-Li/docsify/commit/d2be5ae))
-* add externalLinkTarget, close [#149](https://github.com/QingWei-Li/docsify/issues/149) ([2d73285](https://github.com/QingWei-Li/docsify/commit/2d73285))
-
-
-
-
-## [3.6.6](https://github.com/QingWei-Li/docsify/compare/v3.6.5...v3.6.6) (2017-05-06)
-
-
-### Features
-
-* support query string for the search, fixed [#156](https://github.com/QingWei-Li/docsify/issues/156) ([da75d70](https://github.com/QingWei-Li/docsify/commit/da75d70))
-
-
-
-
-## [3.6.5](https://github.com/QingWei-Li/docsify/compare/v3.6.4...v3.6.5) (2017-04-28)
-
-
-### Bug Fixes
-
-* **util:** fix crash, fixed [#154](https://github.com/QingWei-Li/docsify/issues/154) ([51832d3](https://github.com/QingWei-Li/docsify/commit/51832d3))
-
-
-
-
-## [3.6.4](https://github.com/QingWei-Li/docsify/compare/v3.6.3...v3.6.4) (2017-04-28)
-
-
-### Bug Fixes
-
-* **util:** correctly clean up duplicate slashes, fixed [#153](https://github.com/QingWei-Li/docsify/issues/153) ([76c041a](https://github.com/QingWei-Li/docsify/commit/76c041a))
-
-
-
-
-## [3.6.3](https://github.com/QingWei-Li/docsify/compare/v3.6.2...v3.6.3) (2017-04-25)
-
-
-### Bug Fixes
-
-* **external-script:** script attrs ([2653849](https://github.com/QingWei-Li/docsify/commit/2653849))
-
-
-
-
-## [3.6.2](https://github.com/QingWei-Li/docsify/compare/v3.6.0...v3.6.2) (2017-04-12)
-
-
-### Features
-
-* **event:** Collapse the sidebar when click outside element in the small screen ([9b7e5f5](https://github.com/QingWei-Li/docsify/commit/9b7e5f5))
-* **external-script:** detect more than one script dom, fixed [#146](https://github.com/QingWei-Li/docsify/issues/146) ([94d6603](https://github.com/QingWei-Li/docsify/commit/94d6603))
-
-
-
-
-# [3.6.0](https://github.com/QingWei-Li/docsify/compare/v3.5.2...v3.6.0) (2017-04-09)
-
-
-### Features
-
-* **render:** add mergeNavbar option, close [#125](https://github.com/QingWei-Li/docsify/issues/125), [#124](https://github.com/QingWei-Li/docsify/issues/124) ([#145](https://github.com/QingWei-Li/docsify/issues/145)) ([9220523](https://github.com/QingWei-Li/docsify/commit/9220523))
-
-
-
-
-## [3.5.2](https://github.com/QingWei-Li/docsify/compare/v3.5.1...v3.5.2) (2017-04-05)
-
-
-
-
-## [3.5.1](https://github.com/QingWei-Li/docsify/compare/v3.5.0...v3.5.1) (2017-03-25)
-
-
-### Bug Fixes
-
-* .md file extension regex ([594299f](https://github.com/QingWei-Li/docsify/commit/594299f))
-
-
-
-
-# [3.5.0](https://github.com/QingWei-Li/docsify/compare/v3.4.4...v3.5.0) (2017-03-25)
-
-
-### Bug Fixes
-
-* adjust display on small screens ([bf35471](https://github.com/QingWei-Li/docsify/commit/bf35471))
-* navbar labels for German ([b022aaf](https://github.com/QingWei-Li/docsify/commit/b022aaf))
-
-
-### Features
-
-* **route:** auto remove .md extension ([8f11653](https://github.com/QingWei-Li/docsify/commit/8f11653))
-
-
-
-
-## [3.4.4](https://github.com/QingWei-Li/docsify/compare/v3.4.3...v3.4.4) (2017-03-17)
-
-
-### Bug Fixes
-
-* **search:** fix input style ([2d6a51b](https://github.com/QingWei-Li/docsify/commit/2d6a51b))
-
-
-
-
-## [3.4.3](https://github.com/QingWei-Li/docsify/compare/v3.4.2...v3.4.3) (2017-03-16)
-
-
-
-
-## [3.4.2](https://github.com/QingWei-Li/docsify/compare/v3.4.1...v3.4.2) (2017-03-11)
-
-
-### Features
-
-* **emojify:** add no-emoji option ([3aef37a](https://github.com/QingWei-Li/docsify/commit/3aef37a))
-
-
-
-
-## [3.4.1](https://github.com/QingWei-Li/docsify/compare/v3.4.0...v3.4.1) (2017-03-10)
-
-
-### Bug Fixes
-
-* **dom:** Disable the dom cache when vue is present, fixed [#119](https://github.com/QingWei-Li/docsify/issues/119) ([b9a7275](https://github.com/QingWei-Li/docsify/commit/b9a7275))
-
-
-
-
-# [3.4.0](https://github.com/QingWei-Li/docsify/compare/v3.3.0...v3.4.0) (2017-03-09)
-
-
-### Features
-
-* **zoom-image:** add plugin ([50fa6fc](https://github.com/QingWei-Li/docsify/commit/50fa6fc))
-
-
-
-
-# [3.3.0](https://github.com/QingWei-Li/docsify/compare/v3.2.0...v3.3.0) (2017-03-07)
-
-
-
-
-# [3.2.0](https://github.com/QingWei-Li/docsify/compare/v3.1.2...v3.2.0) (2017-02-28)
-
-
-### Bug Fixes
-
-* **fetch:** load sidebar and navbar for parent path, fixed [#100](https://github.com/QingWei-Li/docsify/issues/100) ([f3fc596](https://github.com/QingWei-Li/docsify/commit/f3fc596))
-* **render:** Toc rendering error, fixed [#106](https://github.com/QingWei-Li/docsify/issues/106) ([0d59ee9](https://github.com/QingWei-Li/docsify/commit/0d59ee9))
-
-
-### Features
-
-* **search:** Localization for no data tip, close [#103](https://github.com/QingWei-Li/docsify/issues/103) ([d3c9fbd](https://github.com/QingWei-Li/docsify/commit/d3c9fbd))
-
-
-
-
-## [3.1.2](https://github.com/QingWei-Li/docsify/compare/v3.1.1...v3.1.2) (2017-02-27)
-
-
-
-
-## [3.1.1](https://github.com/QingWei-Li/docsify/compare/v3.1.0...v3.1.1) (2017-02-24)
-
-
-### Bug Fixes
-
-* **render:** custom cover background image ([8f9bf29](https://github.com/QingWei-Li/docsify/commit/8f9bf29))
-* **search:** don't search nameLink, fixed [#102](https://github.com/QingWei-Li/docsify/issues/102) ([507d9e8](https://github.com/QingWei-Li/docsify/commit/507d9e8))
-* **tpl:** extra character, fixed [#101](https://github.com/QingWei-Li/docsify/issues/101) ([d67d25f](https://github.com/QingWei-Li/docsify/commit/d67d25f))
-
-
-
-
-# [3.1.0](https://github.com/QingWei-Li/docsify/compare/v3.0.5...v3.1.0) (2017-02-22)
-
-
-### Bug Fixes
-
-* **search:** incorrect anchor link, fixed [#90](https://github.com/QingWei-Li/docsify/issues/90) ([b8a3d8f](https://github.com/QingWei-Li/docsify/commit/b8a3d8f))
-* **sw:** update white list ([f2975a5](https://github.com/QingWei-Li/docsify/commit/f2975a5))
-
-
-### Features
-
-* **emoji:** add emoji plugin ([855c450](https://github.com/QingWei-Li/docsify/commit/855c450))
-
-
-
-
-## [3.0.5](https://github.com/QingWei-Li/docsify/compare/v3.0.4...v3.0.5) (2017-02-21)
-
-
-### Bug Fixes
-
-* **event:** highlight sidebar when clicked, fixed [#86](https://github.com/QingWei-Li/docsify/issues/86) ([2a1157a](https://github.com/QingWei-Li/docsify/commit/2a1157a))
-* **gen-tree:** cache toc list, fixed [#88](https://github.com/QingWei-Li/docsify/issues/88) ([3394ebb](https://github.com/QingWei-Li/docsify/commit/3394ebb))
-* **layout.css:** loading style ([42b2dba](https://github.com/QingWei-Li/docsify/commit/42b2dba))
-
-
-### Features
-
-* **pwa:** add sw.js ([f7111b5](https://github.com/QingWei-Li/docsify/commit/f7111b5))
-
-
-
-
-## [3.0.4](https://github.com/QingWei-Li/docsify/compare/v3.0.3...v3.0.4) (2017-02-20)
-
-
-### Bug Fixes
-
-* **render:** disable rendering sub list when loadSidebar is false ([35dd2e1](https://github.com/QingWei-Li/docsify/commit/35dd2e1))
-* **render:** execute script ([780c1e5](https://github.com/QingWei-Li/docsify/commit/780c1e5))
-
-
-
-
-## [3.0.3](https://github.com/QingWei-Li/docsify/compare/v3.0.2...v3.0.3) (2017-02-19)
-
-
-
-
-## [3.0.2](https://github.com/QingWei-Li/docsify/compare/v3.0.1...v3.0.2) (2017-02-19)
-
-
-### Bug Fixes
-
-* **compiler:** link ([3b127a1](https://github.com/QingWei-Li/docsify/commit/3b127a1))
-* **search:** add lazy input ([bf593a7](https://github.com/QingWei-Li/docsify/commit/bf593a7))
-
-
-
-
-## [3.0.1](https://github.com/QingWei-Li/docsify/compare/v3.0.0...v3.0.1) (2017-02-19)
-
-
-### Bug Fixes
-
-* **route:** empty alias ([cd99b52](https://github.com/QingWei-Li/docsify/commit/cd99b52))
-
-
-
-
-# [3.0.0](https://github.com/QingWei-Li/docsify/compare/v2.4.3...v3.0.0) (2017-02-19)
-
-
-### Bug Fixes
-
-* **compiler:** link ([c7e09c3](https://github.com/QingWei-Li/docsify/commit/c7e09c3))
-* **render:** support html file ([7b6a2ac](https://github.com/QingWei-Li/docsify/commit/7b6a2ac))
-* **search:** escape html ([fcb66e8](https://github.com/QingWei-Li/docsify/commit/fcb66e8))
-* **search:** fix default config ([2efd859](https://github.com/QingWei-Li/docsify/commit/2efd859))
-
-
-### Features
-
-* **front-matter:** add front matter[WIP] ([dbb9278](https://github.com/QingWei-Li/docsify/commit/dbb9278))
-* **render:** add auto header ([b7768b1](https://github.com/QingWei-Li/docsify/commit/b7768b1))
-* **search:** Localization for search placeholder, close [#80](https://github.com/QingWei-Li/docsify/issues/80) ([2351c3e](https://github.com/QingWei-Li/docsify/commit/2351c3e))
-* **themes:** add loading info ([86594a3](https://github.com/QingWei-Li/docsify/commit/86594a3))
-
-
-
-
-## [2.4.3](https://github.com/QingWei-Li/docsify/compare/v2.4.2...v2.4.3) (2017-02-15)
-
-
-
-
-## [2.4.2](https://github.com/QingWei-Li/docsify/compare/v2.4.1...v2.4.2) (2017-02-14)
-
-
-### Bug Fixes
-
-* **index:** load file path error ([dc536a3](https://github.com/QingWei-Li/docsify/commit/dc536a3))
-
-
-
-
-## [2.4.1](https://github.com/QingWei-Li/docsify/compare/v2.4.0...v2.4.1) (2017-02-13)
-
-
-### Bug Fixes
-
-* **index:** cover page ([dd0c84b](https://github.com/QingWei-Li/docsify/commit/dd0c84b))
-
-
-
-
-# [2.4.0](https://github.com/QingWei-Li/docsify/compare/v2.3.0...v2.4.0) (2017-02-13)
-
-
-### Features
-
-* **hook:** add doneEach ([c6f7602](https://github.com/QingWei-Li/docsify/commit/c6f7602))
-
-
-
-
-# [2.3.0](https://github.com/QingWei-Li/docsify/compare/v2.2.1...v2.3.0) (2017-02-13)
-
-
-### Bug Fixes
-
-* **event:** has no effect on a FF mobile browser, fixed [#67](https://github.com/QingWei-Li/docsify/issues/67) ([0ff36c2](https://github.com/QingWei-Li/docsify/commit/0ff36c2))
-* **render:** custom marked renderer ([bf559b4](https://github.com/QingWei-Li/docsify/commit/bf559b4))
-* **render:** fix render link ([a866744](https://github.com/QingWei-Li/docsify/commit/a866744))
-* **render:** image url ([6f87529](https://github.com/QingWei-Li/docsify/commit/6f87529))
-* **render:** render link ([38ea660](https://github.com/QingWei-Li/docsify/commit/38ea660))
-* **src:** fix route ([324301a](https://github.com/QingWei-Li/docsify/commit/324301a))
-* **src:** get alias ([784173e](https://github.com/QingWei-Li/docsify/commit/784173e))
-* **src:** get alias ([ce99a04](https://github.com/QingWei-Li/docsify/commit/ce99a04))
-* **themes:** fix navbar style ([fa54b52](https://github.com/QingWei-Li/docsify/commit/fa54b52))
-* **themes:** update navbar style ([4864d1b](https://github.com/QingWei-Li/docsify/commit/4864d1b))
-
-
-### Features
-
-* **hook:** support custom plugin ([9e81a59](https://github.com/QingWei-Li/docsify/commit/9e81a59))
-* **src:** add alias feature ([24412cd](https://github.com/QingWei-Li/docsify/commit/24412cd))
-* **src:** dynamic title and fix sidebar style ([6b30eb6](https://github.com/QingWei-Li/docsify/commit/6b30eb6))
-
-
-
-
-## [2.2.1](https://github.com/QingWei-Li/docsify/compare/v2.2.0...v2.2.1) (2017-02-11)
-
-
-### Bug Fixes
-
-* **event:** scroll active sidebar ([50f5fc2](https://github.com/QingWei-Li/docsify/commit/50f5fc2))
-* **search:** crash when not content, fixed [#68](https://github.com/QingWei-Li/docsify/issues/68) ([9d3cc89](https://github.com/QingWei-Li/docsify/commit/9d3cc89))
-* **search:** not work in mobile ([3941304](https://github.com/QingWei-Li/docsify/commit/3941304))
-
-
-
-
-# [2.2.0](https://github.com/QingWei-Li/docsify/compare/v2.1.0...v2.2.0) (2017-02-09)
-
-
-### Features
-
-* **plugins:** add Google Analytics plugin ([#66](https://github.com/QingWei-Li/docsify/issues/66)) ([ac61bb0](https://github.com/QingWei-Li/docsify/commit/ac61bb0))
-
-
-
-
-# [2.1.0](https://github.com/QingWei-Li/docsify/compare/v2.0.3...v2.1.0) (2017-02-09)
-
-
-### Bug Fixes
-
-* render name ([12e2479](https://github.com/QingWei-Li/docsify/commit/12e2479))
-* **vue.css:** update sidebar style ([fc140ef](https://github.com/QingWei-Li/docsify/commit/fc140ef))
-
-
-### Features
-
-* add search, close [#43](https://github.com/QingWei-Li/docsify/issues/43) ([eb5ff3e](https://github.com/QingWei-Li/docsify/commit/eb5ff3e))
-
-
-
-
-## [2.0.3](https://github.com/QingWei-Li/docsify/compare/v2.0.2...v2.0.3) (2017-02-07)
-
-
-### Bug Fixes
-
-* css var polyfill ([8cd386a](https://github.com/QingWei-Li/docsify/commit/8cd386a))
-* css var polyfill ([cbaee21](https://github.com/QingWei-Li/docsify/commit/cbaee21))
-* rendering emojis ([8c7e4d7](https://github.com/QingWei-Li/docsify/commit/8c7e4d7))
-
-
-
-
-## [2.0.2](https://github.com/QingWei-Li/docsify/compare/v2.0.1...v2.0.2) (2017-02-05)
-
-
-### Bug Fixes
-
-* button style in cover page ([4470855](https://github.com/QingWei-Li/docsify/commit/4470855))
-
-
-
-
-## [2.0.1](https://github.com/QingWei-Li/docsify/compare/v2.0.0...v2.0.1) (2017-02-05)
-
-
-
-
-# [2.0.0](https://github.com/QingWei-Li/docsify/compare/v1.10.5...v2.0.0) (2017-02-05)
-
-
-### Features
-
-* customize the theme color ([5cc9f05](https://github.com/QingWei-Li/docsify/commit/5cc9f05))
-
-
-
-
-## [1.10.5](https://github.com/QingWei-Li/docsify/compare/v1.10.4...v1.10.5) (2017-01-28)
-
-
-
-
-## [1.10.4](https://github.com/QingWei-Li/docsify/compare/v1.10.3...v1.10.4) (2017-01-27)
-
-
-
-
-## [1.10.3](https://github.com/QingWei-Li/docsify/compare/v1.10.2...v1.10.3) (2017-01-27)
-
-
-
-
-## [1.10.2](https://github.com/QingWei-Li/docsify/compare/v1.10.1...v1.10.2) (2017-01-25)
-
-
-
-
-## [1.10.1](https://github.com/QingWei-Li/docsify/compare/v1.10.0...v1.10.1) (2017-01-25)
-
-
-
-
-# [1.10.0](https://github.com/QingWei-Li/docsify/compare/v1.9.0...v1.10.0) (2017-01-25)
-
-
-
-
-# [1.9.0](https://github.com/QingWei-Li/docsify/compare/v1.8.0...v1.9.0) (2017-01-24)
-
-
-
-
-# [1.8.0](https://github.com/QingWei-Li/docsify/compare/v1.7.4...v1.8.0) (2017-01-24)
-
-
-
-
-## [1.7.4](https://github.com/QingWei-Li/docsify/compare/v1.7.3...v1.7.4) (2017-01-13)
-
-
-
-
-## [1.7.3](https://github.com/QingWei-Li/docsify/compare/v1.7.2...v1.7.3) (2017-01-13)
-
-
-
-
-## [1.7.2](https://github.com/QingWei-Li/docsify/compare/v1.7.1...v1.7.2) (2017-01-12)
-
-
-
-
-## [1.7.1](https://github.com/QingWei-Li/docsify/compare/v1.7.0...v1.7.1) (2017-01-12)
-
-
-
-
-# [1.7.0](https://github.com/QingWei-Li/docsify/compare/v1.6.1...v1.7.0) (2017-01-12)
-
-
-
-
-## [1.6.1](https://github.com/QingWei-Li/docsify/compare/v1.6.0...v1.6.1) (2017-01-10)
-
-
-
-
-# [1.6.0](https://github.com/QingWei-Li/docsify/compare/v1.5.2...v1.6.0) (2017-01-10)
-
-
-
-
-## [1.5.2](https://github.com/QingWei-Li/docsify/compare/v1.5.1...v1.5.2) (2017-01-10)
-
-
-
-
-## [1.5.1](https://github.com/QingWei-Li/docsify/compare/v1.5.0...v1.5.1) (2017-01-09)
-
-
-
-
-# [1.5.0](https://github.com/QingWei-Li/docsify/compare/v1.4.3...v1.5.0) (2017-01-04)
-
-
-### Features
-
-* Markdown parser is configurable, [#42](https://github.com/QingWei-Li/docsify/issues/42) ([8b1000a](https://github.com/QingWei-Li/docsify/commit/8b1000a))
-
-
-
-
-## [1.4.3](https://github.com/QingWei-Li/docsify/compare/v1.4.2...v1.4.3) (2017-01-01)
-
-
-
-
-## [1.4.2](https://github.com/QingWei-Li/docsify/compare/v1.4.1...v1.4.2) (2016-12-31)
-
-
-
-
-## [1.4.1](https://github.com/QingWei-Li/docsify/compare/v1.4.0...v1.4.1) (2016-12-31)
-
-
-
-
-# [1.4.0](https://github.com/QingWei-Li/docsify/compare/v1.3.5...v1.4.0) (2016-12-31)
-
-
-
-
-## [1.3.5](https://github.com/QingWei-Li/docsify/compare/v1.3.4...v1.3.5) (2016-12-25)
-
-
-
-
-## [1.3.4](https://github.com/QingWei-Li/docsify/compare/v1.3.3...v1.3.4) (2016-12-25)
-
-
-
-
-## [1.3.3](https://github.com/QingWei-Li/docsify/compare/v1.3.2...v1.3.3) (2016-12-23)
-
-
-
-
-## [1.3.2](https://github.com/QingWei-Li/docsify/compare/v1.3.1...v1.3.2) (2016-12-22)
-
-
-
-
-## [1.3.1](https://github.com/QingWei-Li/docsify/compare/v1.3.0...v1.3.1) (2016-12-22)
-
-
-
-
-# [1.3.0](https://github.com/QingWei-Li/docsify/compare/v1.2.0...v1.3.0) (2016-12-21)
-
-
-
-
-# [1.2.0](https://github.com/QingWei-Li/docsify/compare/v1.1.7...v1.2.0) (2016-12-20)
-
-
-
-
-## [1.1.7](https://github.com/QingWei-Li/docsify/compare/v1.1.6...v1.1.7) (2016-12-19)
-
-
-
-
-## [1.1.6](https://github.com/QingWei-Li/docsify/compare/v1.1.5...v1.1.6) (2016-12-18)
-
-
-
-
-## [1.1.5](https://github.com/QingWei-Li/docsify/compare/v1.1.4...v1.1.5) (2016-12-18)
-
-
-
-
-## [1.1.4](https://github.com/QingWei-Li/docsify/compare/v1.1.3...v1.1.4) (2016-12-17)
-
-
-
-
-## [1.1.3](https://github.com/QingWei-Li/docsify/compare/v1.1.2...v1.1.3) (2016-12-17)
-
-
-
-
-## [1.1.2](https://github.com/QingWei-Li/docsify/compare/v1.1.1...v1.1.2) (2016-12-17)
-
-
-
-
-## [1.1.1](https://github.com/QingWei-Li/docsify/compare/v1.1.0...v1.1.1) (2016-12-17)
-
-
-
-
-# [1.1.0](https://github.com/QingWei-Li/docsify/compare/v1.0.3...v1.1.0) (2016-12-16)
-
-
-
-
-## [1.0.3](https://github.com/QingWei-Li/docsify/compare/v1.0.2...v1.0.3) (2016-12-13)
-
-
-
-
-## [1.0.2](https://github.com/QingWei-Li/docsify/compare/v1.0.1...v1.0.2) (2016-12-13)
-
-
-
-
-## [1.0.1](https://github.com/QingWei-Li/docsify/compare/v1.0.0...v1.0.1) (2016-12-08)
-
-
-
-
-# [1.0.0](https://github.com/QingWei-Li/docsify/compare/v0.7.0...v1.0.0) (2016-12-08)
-
-
-
-
-# [0.7.0](https://github.com/QingWei-Li/docsify/compare/v0.6.1...v0.7.0) (2016-11-30)
-
-
-
-
-## [0.6.1](https://github.com/QingWei-Li/docsify/compare/v0.6.0...v0.6.1) (2016-11-29)
-
-
-
-
-# [0.6.0](https://github.com/QingWei-Li/docsify/compare/v0.5.0...v0.6.0) (2016-11-29)
-
-
-
-
-# [0.5.0](https://github.com/QingWei-Li/docsify/compare/v0.4.2...v0.5.0) (2016-11-28)
-
-
-
-
-## [0.4.2](https://github.com/QingWei-Li/docsify/compare/v0.4.1...v0.4.2) (2016-11-28)
-
-
-
-
-## [0.4.1](https://github.com/QingWei-Li/docsify/compare/v0.4.0...v0.4.1) (2016-11-28)
-
-
-
-
-# [0.4.0](https://github.com/QingWei-Li/docsify/compare/v0.3.1...v0.4.0) (2016-11-27)
-
-
-### Features
-
-* custom sidebar, [#4](https://github.com/QingWei-Li/docsify/issues/4) ([#5](https://github.com/QingWei-Li/docsify/issues/5)) ([37e7984](https://github.com/QingWei-Li/docsify/commit/37e7984))
-
-
-
-
-## [0.3.1](https://github.com/QingWei-Li/docsify/compare/v0.3.0...v0.3.1) (2016-11-27)
-
-
-
-
-# [0.3.0](https://github.com/QingWei-Li/docsify/compare/v0.2.1...v0.3.0) (2016-11-27)
-
-
-
-
-## [0.2.1](https://github.com/QingWei-Li/docsify/compare/v0.2.0...v0.2.1) (2016-11-26)
-
-
-
-
-# [0.2.0](https://github.com/QingWei-Li/docsify/compare/v0.1.0...v0.2.0) (2016-11-26)
-
-
-
-
-# [0.1.0](https://github.com/QingWei-Li/docsify/compare/v0.0.5...v0.1.0) (2016-11-26)
-
-
-
-
-## [0.0.5](https://github.com/QingWei-Li/docsify/compare/v0.0.4...v0.0.5) (2016-11-24)
-
-
-
-
-## [0.0.4](https://github.com/QingWei-Li/docsify/compare/v0.0.3...v0.0.4) (2016-11-22)
-
-
-
-
-## [0.0.3](https://github.com/QingWei-Li/docsify/compare/v0.0.2...v0.0.3) (2016-11-20)
-
-
-
-
-## [0.0.2](https://github.com/QingWei-Li/docsify/compare/v0.0.1...v0.0.2) (2016-11-20)
-
-
-
-
-## 0.0.1 (2016-11-20)
diff --git a/LICENSE b/LICENSE
index 37a4ac5b86..a2155380ac 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2016 - present cinwell.li
+Copyright (c) 2016 - present Docsify Contributors (https://github.com/docsifyjs/docsify/graphs/contributors)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/README.md b/README.md
index b8da0d8e52..5813199be6 100644
--- a/README.md
+++ b/README.md
@@ -10,102 +10,74 @@
-
-
+
+
+
-
-
+
+
Gold Sponsor via Open Collective
-
+
-## Links
-
-- [`develop` branch preview](https://docsifyjs.netlify.com/)
-- [Documentation](https://docsify.js.org)
-- [CLI](https://github.com/docsifyjs/docsify-cli)
-- CDN: [UNPKG](https://unpkg.com/docsify/) | [jsDelivr](https://cdn.jsdelivr.net/npm/docsify/) | [cdnjs](https://cdnjs.com/libraries/docsify)
-- [Awesome docsify](https://github.com/docsifyjs/awesome-docsify)
-- [Community chat](https://gitter.im/docsifyjs/Lobby)
+Docsify turns one or more Markdown files into a Website, with no build process required.
## Features
-- No statically built html files
-- Simple and lightweight (~21kB gzipped)
+- No statically built HTML files
+- Simple and lightweight
- Smart full-text search plugin
- Multiple themes
- Useful plugin API
-- Compatible with IE11
-- Support SSR ([example](https://github.com/docsifyjs/docsify-ssr-demo))
-- Support embedded files
+- Emoji support
-## Quick start
+## Quick Start
-Look at [this tutorial](https://docsify.js.org/#/quickstart)
+Get going fast by using a static web server or GitHub Pages with this ready-to-use [Docsify Template](https://github.com/docsifyjs/docsify-template), review the [quick start tutorial](https://docsify.js.org/#/quickstart) or jump right into a CodeSandbox example site with the button below.
-[](https://codesandbox.io/s/307qqv236)
+[](https://sandbox.docsifyjs.org/)
## Showcase
-These projects are using docsify to generate their sites. Pull requests welcome :blush:
-
-Move to [awesome-docsify](https://github.com/docsifyjs/awesome-docsify#showcase)
+A large collection of showcase projects are included in [awesome-docsify](https://github.com/docsifyjs/awesome-docsify#showcase).
-## Similar projects
+## Links
-| Project | Description |
-| ------------------------------------------------ | ---------------------------------------- |
-| [docute](https://github.com/egoist/docute) | 📜 Effortlessly documentation done right |
-| [docpress](https://github.com/docpress/docpress) | Documentation website generator |
+- [Documentation](https://docsify.js.org)
+- [Docsify CLI (Command Line Interface)](https://github.com/docsifyjs/docsify-cli)
+- CDN: [UNPKG](https://unpkg.com/docsify/) | [jsDelivr](https://cdn.jsdelivr.net/npm/docsify/) | [cdnjs](https://cdnjs.com/libraries/docsify)
+- [`develop` branch preview](https://docsify-preview.vercel.app/)
+- [Awesome docsify](https://github.com/docsifyjs/awesome-docsify)
+- [Community chat](https://discord.gg/3NwKFyR)
## Contributing
-- Fork it!
-- Create your feature branch: `git checkout -b my-new-feature`
-- Commit your changes: `git commit -am 'Add some feature'`
-- Push to the branch: `git push origin my-new-feature`
-- Submit a pull request
-
-## Development
-
-```bash
-npm run bootstrap && npm run dev
-```
+See [CONTRIBUTING.md](CONTRIBUTING.md).
## Backers
-Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/docsify#backers)]
+Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/docsify/contribute)]
## Sponsors
-Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/docsify#silver-sponsors)]
+Thank you for supporting this project! ❤️ [[Become a sponsor](https://opencollective.com/docsify/contribute)]
-
-
-
-
-
-
-
-
-
-
+
## Contributors
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
+
## License
[MIT](LICENSE)
-
-[](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fdocsifyjs%2Fdocsify?ref=badge_large)
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000000..f57d273a08
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,23 @@
+# Security Policy
+
+If you believe you have found a security vulnerability in docsify, please report it to us asap.
+
+## Reporting a Vulnerability
+
+**Please do not report security vulnerabilities through our public GitHub issues.**
+
+Send email to us via :email: maintainers@docsifyjs.org.
+
+Please include as much of the following information as possible to help us better understand the possible issue:
+
+- Type of issue (e.g. cross-site scripting)
+- Full paths of source file(s) related to the manifestation of the issue
+- The location of the affected source code (tag/branch/commit or direct URL)
+- Any special configuration required to reproduce the issue
+- Step-by-step instructions to reproduce the issue
+- Proof-of-concept or exploit code
+- Impact of the issue, including how an attacker might exploit the issue
+
+This information will help us triage your report more quickly.
+
+Thank you in advance.
diff --git a/babel.config.json b/babel.config.json
new file mode 100644
index 0000000000..889d319973
--- /dev/null
+++ b/babel.config.json
@@ -0,0 +1,10 @@
+{
+ "presets": [
+ [
+ "@babel/preset-env",
+ {
+ "targets": "defaults"
+ }
+ ]
+ ]
+}
diff --git a/build/build.js b/build/build.js
deleted file mode 100644
index 7b61224066..0000000000
--- a/build/build.js
+++ /dev/null
@@ -1,119 +0,0 @@
-const rollup = require('rollup')
-const buble = require('rollup-plugin-buble')
-const commonjs = require('rollup-plugin-commonjs')
-const nodeResolve = require('rollup-plugin-node-resolve')
-const uglify = require('rollup-plugin-uglify')
-const replace = require('rollup-plugin-replace')
-const isProd = process.env.NODE_ENV === 'production'
-const version = process.env.VERSION || require('../package.json').version
-const chokidar = require('chokidar')
-const path = require('path')
-
-const build = function (opts) {
- rollup
- .rollup({
- input: opts.input,
- plugins: (opts.plugins || []).concat([
- buble(),
- commonjs(),
- nodeResolve(),
- replace({
- __VERSION__: version,
- 'process.env.SSR': false
- })
- ])
- })
- .then(function (bundle) {
- var dest = 'lib/' + (opts.output || opts.input)
-
- console.log(dest)
- bundle.write({
- format: 'iife',
- file: dest,
- strict: false
- })
- })
- .catch(function (err) {
- console.error(err)
- })
-}
-const buildCore = function () {
- build({
- input: 'src/core/index.js',
- output: 'docsify.js'
- })
-
- if (isProd) {
- build({
- input: 'src/core/index.js',
- output: 'docsify.min.js',
- plugins: [uglify()]
- })
- }
-}
-const buildAllPlugin = function () {
- var plugins = [
- {name: 'search', input: 'search/index.js'},
- {name: 'ga', input: 'ga.js'},
- {name: 'matomo', input: 'matomo.js'},
- {name: 'emoji', input: 'emoji.js'},
- {name: 'external-script', input: 'external-script.js'},
- {name: 'front-matter', input: 'front-matter/index.js'},
- {name: 'zoom-image', input: 'zoom-image.js'},
- {name: 'disqus', input: 'disqus.js'},
- {name: 'gitalk', input: 'gitalk.js'}
- ]
-
- plugins.forEach(item => {
- build({
- input: 'src/plugins/' + item.input,
- output: 'plugins/' + item.name + '.js'
- })
- })
-
- if (isProd) {
- plugins.forEach(item => {
- build({
- input: 'src/plugins/' + item.input,
- output: 'plugins/' + item.name + '.min.js',
- plugins: [uglify()]
- })
- })
- }
-}
-
-if (!isProd) {
- chokidar
- .watch(['src/core', 'src/plugins'], {
- atomic: true,
- awaitWriteFinish: {
- stabilityThreshold: 1000,
- pollInterval: 100
- }
- })
- .on('change', p => {
- console.log('[watch] ', p)
- const dirs = p.split(path.sep)
- if (dirs[1] === 'core') {
- buildCore()
- } else if (dirs[2]) {
- const name = path.basename(dirs[2], '.js')
- const input = `src/plugins/${name}${
- /\.js/.test(dirs[2]) ? '' : '/index'
- }.js`
-
- build({
- input,
- output: 'plugins/' + name + '.js'
- })
- }
- })
- .on('ready', () => {
- console.log('[start]')
- buildCore()
- buildAllPlugin()
- })
-} else {
- buildCore()
- buildAllPlugin()
-}
diff --git a/build/cover.js b/build/cover.js
index fbd27f7422..6282fd4ea7 100644
--- a/build/cover.js
+++ b/build/cover.js
@@ -1,14 +1,18 @@
-var fs = require('fs')
-var read = fs.readFileSync
-var write = fs.writeFileSync
-var version = process.env.VERSION || require('../package.json').version
+import fs from 'fs';
+import { relative } from './util.js';
-var file = __dirname + '/../docs/_coverpage.md'
-var cover = read(file, 'utf8').toString()
+const read = fs.readFileSync;
+const write = fs.writeFileSync;
+const pkgPath = relative(import.meta, '..', 'package.json');
+const pkg = JSON.parse(read(pkgPath).toString());
+const version = process.env.VERSION || pkg.version;
-console.log('Replace version number in cover page...')
+const file = relative(import.meta, '..', 'docs', '_coverpage.md');
+let cover = read(file, 'utf8').toString();
+
+console.log('Replace version number in cover page...');
cover = cover.replace(
/(\S+)?<\/small>/g,
- '' + version + ' '
-)
-write(file, cover)
+ /* html */ `${version} `,
+);
+write(file, cover);
diff --git a/build/emoji.js b/build/emoji.js
new file mode 100644
index 0000000000..0b019b7d7a
--- /dev/null
+++ b/build/emoji.js
@@ -0,0 +1,102 @@
+import fs from 'fs';
+import path from 'path';
+import axios from 'axios';
+
+const filePaths = {
+ emojiMarkdown: path.resolve(process.cwd(), 'docs', 'emoji.md'),
+ emojiJS: path.resolve(
+ process.cwd(),
+ 'src',
+ 'core',
+ 'render',
+ 'emoji-data.js',
+ ),
+};
+
+async function getEmojiData() {
+ const emojiDataURL = 'https://api.github.com/emojis';
+
+ console.info(`- Fetching emoji data from ${emojiDataURL}`);
+
+ const response = await axios.get(emojiDataURL);
+ const baseURL = Object.values(response.data)
+ .find(url => /unicode\//)
+ .split('unicode/')[0];
+ const data = { ...response.data };
+
+ // Remove base URL from emoji URLs
+ Object.entries(data).forEach(
+ ([key, value]) => (data[key] = value.replace(baseURL, '')),
+ );
+
+ console.info(`- Retrieved ${Object.keys(data).length} emoji entries`);
+
+ return {
+ baseURL,
+ data,
+ };
+}
+
+function writeEmojiPage(emojiData) {
+ const isExistingPage = fs.existsSync(filePaths.emojiMarkdown);
+ const emojiPage =
+ (isExistingPage && fs.readFileSync(filePaths.emojiMarkdown, 'utf8')) ||
+ '\n\n';
+ const emojiRegEx = /(\n)([\s\S]*)(\n)/;
+ const emojiMatch = emojiPage.match(emojiRegEx);
+ const emojiMarkdownStart = emojiMatch[1].trim();
+ const emojiMarkdown = emojiMatch[2].trim();
+ const emojiMarkdownEnd = emojiMatch[3].trim();
+ const newEmojiMarkdown = Object.keys(emojiData.data)
+ .reduce(
+ (preVal, curVal) =>
+ (preVal += `:${curVal}: ` + '`' + `:${curVal}:` + '`' + '\n\n'),
+ '',
+ )
+ .trim();
+
+ if (emojiMarkdown !== newEmojiMarkdown) {
+ const newEmojiPage = emojiPage.replace(
+ emojiMatch[0],
+ `${emojiMarkdownStart}\n\n${newEmojiMarkdown}\n\n${emojiMarkdownEnd}`,
+ );
+
+ fs.writeFileSync(filePaths.emojiMarkdown, newEmojiPage);
+
+ console.info(
+ `- ${!isExistingPage ? 'Created' : 'Updated'}: ${filePaths.emojiMarkdown}`,
+ );
+ } else {
+ console.info(`- No changes: ${filePaths.emojiMarkdown}`);
+ }
+}
+
+function writeEmojiJS(emojiData) {
+ const isExistingPage = fs.existsSync(filePaths.emojiJS);
+ const emojiJS = isExistingPage && fs.readFileSync(filePaths.emojiJS, 'utf8');
+ const newEmojiJS = [
+ '// =============================================================================',
+ '// DO NOT EDIT: This file is auto-generated by an /build/emoji.js',
+ '// =============================================================================\n',
+ `export default ${JSON.stringify(emojiData, {}, 2)}`,
+ ].join('\n');
+
+ if (!emojiJS || emojiJS !== newEmojiJS) {
+ fs.writeFileSync(filePaths.emojiJS, newEmojiJS);
+
+ console.info(
+ `- ${!isExistingPage ? 'Created' : 'Updated'}: ${filePaths.emojiJS}`,
+ );
+ } else {
+ console.info(`- No changes: ${filePaths.emojiJS}`);
+ }
+}
+
+console.info('Build emoji');
+
+const emojiData = await getEmojiData();
+
+writeEmojiPage(emojiData);
+writeEmojiJS(emojiData);
+
+console.info('Finish update');
diff --git a/build/mincss.js b/build/mincss.js
deleted file mode 100644
index f6c5ec215b..0000000000
--- a/build/mincss.js
+++ /dev/null
@@ -1,12 +0,0 @@
-const cssnano = require('cssnano').process
-const path = require('path')
-const fs = require('fs')
-
-files = fs.readdirSync(path.resolve('lib/themes'))
-
-files.forEach(file => {
- file = path.resolve('lib/themes', file)
- cssnano(fs.readFileSync(file)).then(result => {
- fs.writeFileSync(file, result.css)
- })
-})
diff --git a/build/release.sh b/build/release.sh
index a3283225d5..1d379ea6b7 100755
--- a/build/release.sh
+++ b/build/release.sh
@@ -7,44 +7,48 @@ else
VERSION=$1
fi
+RELEASE_TAG=${RELEASE_TAG:-""}
+
+if [[ -n "$RELEASE_TAG" && "$VERSION" != *"$RELEASE_TAG"* ]]; then
+ RELEASE_MSG="$VERSION ($RELEASE_TAG)"
+else
+ RELEASE_MSG="$VERSION"
+fi
+
read -p "Releasing $VERSION $RELEASE_TAG - are you sure? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "Releasing $VERSION ..."
- npm run test
+ # Update version (don't commit or tag yet)
+ npm --no-git-tag-version version "$VERSION"
- # build
- VERSION=$VERSION npm run build
+ # Build and test
+ npm run build
+ npm run test:update:snapshot
+ npm run test
+ git stash
+ npm run build:v4 # builds legacy v4 lib/ and themes/ folders for backwards compat while people transition to v5.
+ git stash pop
- # update packages
- cd packages/docsify-server-renderer
- npm version $VERSION
- if [[ -z $RELEASE_TAG ]]; then
- npm publish
- else
- npm publish --tag $RELEASE_TAG
- fi
- cd -
+ # Changelog
+ npx standard-version --skip.bump --skip.commit --skip.tag
- # commit
+ # Commit all changes
git add -A
- git commit -m "[build] $VERSION $RELEASE_TAG"
- npm --no-git-tag-version version $VERSION --message "[release] $VERSION $RELEASE_TAG"
-
- # changelog
- node_modules/.bin/conventional-changelog -p angular -i CHANGELOG.md -s
+ git commit -m "[release] $RELEASE_MSG"
- git add .
- git commit -m "chore: add changelog $VERSION"
-
- # publish
- git tag v$VERSION
- git push origin refs/tags/v$VERSION
+ # Tag and push
+ git tag "v$VERSION"
+ git push origin "v$VERSION"
git push
+
+ # Publish to npm
if [[ -z $RELEASE_TAG ]]; then
npm publish
else
- npm publish --tag $RELEASE_TAG
+ npm publish --tag "$RELEASE_TAG"
fi
+
+ npm run clean:v4 # clean up legacy v4 build files
fi
diff --git a/build/ssr.js b/build/ssr.js
deleted file mode 100644
index 16b93cac40..0000000000
--- a/build/ssr.js
+++ /dev/null
@@ -1,34 +0,0 @@
-var rollup = require('rollup')
-var buble = require('rollup-plugin-buble')
-var async = require('rollup-plugin-async')
-var replace = require('rollup-plugin-replace')
-
-rollup
- .rollup({
- input: 'packages/docsify-server-renderer/index.js',
- plugins: [
- async(),
- replace({
- __VERSION__: process.env.VERSION || require('../package.json').version,
- 'process.env.SSR': true
- }),
- buble({
- transforms: {
- generator: false
- }
- })
- ],
- onwarn: function () {}
- })
- .then(function (bundle) {
- var dest = 'packages/docsify-server-renderer/build.js'
-
- console.log(dest)
- bundle.write({
- format: 'cjs',
- file: dest
- })
- })
- .catch(function (err) {
- console.error(err)
- })
diff --git a/build/util.js b/build/util.js
new file mode 100644
index 0000000000..0dad7d3a6a
--- /dev/null
+++ b/build/util.js
@@ -0,0 +1,6 @@
+import url from 'url';
+import path from 'path';
+
+/** Get a new path relative to the current module (pass import.meta). */
+export const relative = (meta, ...to) =>
+ path.resolve(path.dirname(url.fileURLToPath(meta.url)), ...to);
diff --git a/docs/README.md b/docs/README.md
index e625420322..48fb465889 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,23 +1,19 @@
-## docsify
+# docsify
> A magical documentation site generator.
## What it is
-docsify generates your documentation website on the fly. Unlike GitBook, it does not generate static html files. Instead, it smartly loads and parses your Markdown files and displays them as a website. To start using it, all you need to do is create an `index.html` and [deploy it on GitHub Pages](deploy.md).
-
-See the [Quick start](quickstart.md) guide for more details.
+Docsify turns your Markdown files into a documentation website instantly. Unlike most other documentation site generator tools, it doesn't need to build HTML files. Instead, it dynamically loads and parses your Markdown files and displays them as a website. To get started, create an `index.html` file and [deploy it on GitHub Pages](deploy.md) (for more details see the [Quick start](quickstart.md) guide).
## Features
-- No statically built html files
-- Simple and lightweight (~21kB gzipped)
+- No statically built HTML files
+- Simple and lightweight
- Smart full-text search plugin
- Multiple themes
- Useful plugin API
- Emoji support
-- Compatible with IE11
-- Support server-side rendering ([example](https://github.com/docsifyjs/docsify-ssr-demo))
## Examples
@@ -29,4 +25,4 @@ Please consider donating if you think docsify is helpful to you or that my work
## Community
-Users and the development team are usually in the [Gitter chat room](https://gitter.im/docsifyjs/Lobby).
+Users and the development team are usually in the [Discord server](https://discord.gg/3NwKFyR).
diff --git a/docs/_coverpage.md b/docs/_coverpage.md
index 1decbd626f..5f92964d6f 100644
--- a/docs/_coverpage.md
+++ b/docs/_coverpage.md
@@ -1,12 +1,17 @@
+
+

-# docsify 4.9.4
+# docsify 5.0.0 :id=docsify
-> A magical documentation site generator.
+> A magical documentation site generator
-- Simple and lightweight (~21kB gzipped)
-- No statically built html files
+- Simple and lightweight
+- No statically built HTML files
- Multiple themes
+[Get Started](#docsify)
[GitHub](https://github.com/docsifyjs/docsify/)
-[Getting Started](#docsify)
+
+
+
diff --git a/docs/_media/example-with-yaml.md b/docs/_media/example-with-yaml.md
new file mode 100644
index 0000000000..bfb280d742
--- /dev/null
+++ b/docs/_media/example-with-yaml.md
@@ -0,0 +1,6 @@
+---
+author: John Smith
+date: 2020-1-1
+---
+
+> This is from the `example-with-yaml.md`
diff --git a/docs/_media/example.html b/docs/_media/example.html
index d35ee1624c..d2df380de3 100644
--- a/docs/_media/example.html
+++ b/docs/_media/example.html
@@ -1 +1,31 @@
-To infinity and Beyond!
\ No newline at end of file
+
+
+
+ Example HTML Page
+
diff --git a/docs/_media/example.js b/docs/_media/example.js
index 7b6f668cc7..33bdf862c5 100644
--- a/docs/_media/example.js
+++ b/docs/_media/example.js
@@ -1,16 +1,16 @@
-import fetch from 'fetch'
+import fetch from 'fetch';
-const URL = 'https://example.com'
-const PORT = 8080
+const URL = 'https://example.com';
+const PORT = 8080;
/// [demo]
const result = fetch(`${URL}:${PORT}`)
- .then(function(response) {
+ .then(response => {
return response.json();
})
- .then(function(myJson) {
+ .then(myJson => {
console.log(JSON.stringify(myJson));
});
/// [demo]
-result.then(console.log).catch(console.error)
+result.then(console.log).catch(console.error);
diff --git a/docs/_media/moon.svg b/docs/_media/moon.svg
new file mode 100644
index 0000000000..200b874d14
--- /dev/null
+++ b/docs/_media/moon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/_media/powered-by-vercel.svg b/docs/_media/powered-by-vercel.svg
new file mode 100644
index 0000000000..8778286845
--- /dev/null
+++ b/docs/_media/powered-by-vercel.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/docs/_media/sun.svg b/docs/_media/sun.svg
new file mode 100644
index 0000000000..5c406d8fc4
--- /dev/null
+++ b/docs/_media/sun.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/_media/vercel_logo.svg b/docs/_media/vercel_logo.svg
new file mode 100644
index 0000000000..50a17b35ec
--- /dev/null
+++ b/docs/_media/vercel_logo.svg
@@ -0,0 +1 @@
+
diff --git a/docs/_navbar.md b/docs/_navbar.md
index 47a2356a96..c1e263e1a5 100644
--- a/docs/_navbar.md
+++ b/docs/_navbar.md
@@ -1,6 +1,6 @@
+
+
- Translations
- - [:uk: English](/)
- - [:cn: 中文](/zh-cn/)
- - [:de: Deutsch](/de-de/)
- - [:es: Spanish](/es/)
- - [:ru: Russian](/ru/)
+
+ - [English](/)
+ - [简体中文](/zh-cn/)
diff --git a/docs/_sidebar.md b/docs/_sidebar.md
index 051514bcb1..8344e6873d 100644
--- a/docs/_sidebar.md
+++ b/docs/_sidebar.md
@@ -1,9 +1,11 @@
+
+
- Getting started
- [Quick start](quickstart.md)
- - [Writing more pages](more-pages.md)
- - [Custom navbar](custom-navbar.md)
+ - [Adding pages](adding-pages.md)
- [Cover page](cover.md)
+ - [Custom navbar](custom-navbar.md)
- Customization
@@ -13,6 +15,7 @@
- [Write a Plugin](write-a-plugin.md)
- [Markdown configuration](markdown.md)
- [Language highlighting](language-highlight.md)
+ - [Emoji](emoji.md)
- Guide
@@ -20,9 +23,13 @@
- [Helpers](helpers.md)
- [Vue compatibility](vue.md)
- [CDN](cdn.md)
- - [Offline Mode(PWA)](pwa.md)
- - [Server-Side Rendering(SSR)](ssr.md)
+ - [Offline Mode (PWA)](pwa.md)
- [Embed Files](embed-files.md)
+ - [UI Kit](ui-kit.md)
+
+- Upgrading
+
+ - [v4 to v5](v5-upgrade.md)
-- [Awesome docsify](awesome.md)
-- [Changelog](changelog.md)
+* [Awesome docsify](awesome.md)
+* [Changelog](changelog.md)
diff --git a/docs/more-pages.md b/docs/adding-pages.md
similarity index 51%
rename from docs/more-pages.md
rename to docs/adding-pages.md
index 46e7df8d69..fde7872d5b 100644
--- a/docs/more-pages.md
+++ b/docs/adding-pages.md
@@ -1,4 +1,4 @@
-# More pages
+# Adding pages
If you need more pages, you can simply create more markdown files in your docsify directory. If you create a file named `guide.md`, then it is accessible via `/#/guide`.
@@ -18,26 +18,26 @@ Matching routes
```text
docs/README.md => http://domain.com
-docs/guide.md => http://domain.com/guide
-docs/zh-cn/README.md => http://domain.com/zh-cn/
-docs/zh-cn/guide.md => http://domain.com/zh-cn/guide
+docs/guide.md => http://domain.com/#/guide
+docs/zh-cn/README.md => http://domain.com/#/zh-cn/
+docs/zh-cn/guide.md => http://domain.com/#/zh-cn/guide
```
## Sidebar
-In order to have sidebar, then you can create your own `_sidebar.md` (see [this documentation's sidebar](https://github.com/docsifyjs/docsify/blob/master/docs/_sidebar.md) for an example):
+In order to have a sidebar, you can create your own `_sidebar.md` (see [this documentation's sidebar](https://github.com/docsifyjs/docsify/blob/main/docs/_sidebar.md) for an example):
-First, you need to set `loadSidebar` to **true**. Details are available in the [configuration paragraph](configuration.md#loadsidebar).
+First, you need to set `loadSidebar` to **true**. Details are available in the [configuration paragraph](configuration#loadsidebar).
```html
-
+
```
Create the `_sidebar.md`:
@@ -45,15 +45,43 @@ Create the `_sidebar.md`:
```markdown
-* [Home](/)
-* [Guide](guide.md)
+- [Home](/)
+- [Page 1](page-1.md)
+```
+
+To create section headers:
+
+```markdown
+
+
+- Section Header 1
+
+ - [Home](/)
+ - [Page 1](page-1.md)
+
+- Section Header 2
+
+ - [Page 2](page-2.md)
+ - [Page 3](page-3.md)
```
You need to create a `.nojekyll` in `./docs` to prevent GitHub Pages from ignoring files that begin with an underscore.
+> [!IMPORTANT] Docsify only looks for `_sidebar.md` in the current folder, and uses that, otherwise it falls back to the one configured using `window.$docsify.loadSidebar` config.
+
+Example file structure:
+
+```text
+└── docs/
+ ├── _sidebar.md
+ ├── index.md
+ ├── getting-started.md
+ └── running-services.md
+```
+
## Nested Sidebars
-You may want the sidebar to update with only navigation to reflect the current directory. This can be done by adding a `_sidebar.md` file to each folder.
+You may want the sidebar to update after navigation to reflect the current directory. This can be done by adding a `_sidebar.md` file to each folder.
`_sidebar.md` is loaded from each level directory. If the current directory doesn't have `_sidebar.md`, it will fall back to the parent directory. If, for example, the current path is `/guide/quick-start`, the `_sidebar.md` will be loaded from `/guide/_sidebar.md`.
@@ -64,13 +92,13 @@ You can specify `alias` to avoid unnecessary fallback.
window.$docsify = {
loadSidebar: true,
alias: {
- '/.*/_sidebar.md': '/_sidebar.md'
- }
- }
+ '/.*/_sidebar.md': '/_sidebar.md',
+ },
+ };
```
-!> You can create a `README.md` file in a subdirectory to use it as the landing page for the route.
+> [!IMPORTANT] You can create a `README.md` file in a subdirectory to use it as the landing page for the route.
## Set Page Titles from Sidebar Selection
@@ -78,15 +106,16 @@ A page's `title` tag is generated from the _selected_ sidebar item name. For bet
```markdown
-* [Home](/)
-* [Guide](guide.md "The greatest guide in the world")
+
+- [Home](/)
+- [Guide](guide.md 'The greatest guide in the world')
```
## Table of Contents
Once you've created `_sidebar.md`, the sidebar content is automatically generated based on the headers in the markdown files.
-A custom sidebar can also automatically generate a table of contents by setting a `subMaxLevel`, compare [subMaxLevel configuration](configuration.md#submaxlevel).
+A custom sidebar can also automatically generate a table of contents by setting a `subMaxLevel`, compare [subMaxLevel configuration](configuration#submaxlevel).
```html
@@ -94,32 +123,34 @@ A custom sidebar can also automatically generate a table of contents by setting
-
+
```
## Ignoring Subheaders
-When `subMaxLevel` is set, each header is automatically added to the table of contents by default. If you want to ignore a specific header, add `{docsify-ignore}` to it.
+When `subMaxLevel` is set, each header is automatically added to the table of contents by default. If you want to ignore a specific header, add `` to it.
```markdown
# Getting Started
-## Header {docsify-ignore}
+## Header
This header won't appear in the sidebar table of contents.
```
-To ignore all headers on a specific page, you can use `{docsify-ignore-all}` on the first header of the page.
+To ignore all headers on a specific page, you can use `` on the first header of the page.
```markdown
-# Getting Started {docsify-ignore-all}
+# Getting Started
## Header
This header won't appear in the sidebar table of contents.
```
-Both `{docsify-ignore}` and `{docsify-ignore-all}` will not be rendered on the page when used.
+Both `` and `` will not be rendered on the page when used.
+
+And the `{docsify-ignore}` and `{docsify-ignore-all}` can do the samething as well.
diff --git a/docs/cdn.md b/docs/cdn.md
index eba77a8457..e4d38752ec 100644
--- a/docs/cdn.md
+++ b/docs/cdn.md
@@ -1,50 +1,56 @@
# CDN
-Recommended: [unpkg](//unpkg.com), which will reflect the latest version as soon as it is published to npm. You can also browse the source of the npm package at [unpkg.com/docsify/](//unpkg.com/docsify/).
+The docsify [npm package](https://www.npmjs.com/package/docsify) is auto-published to CDNs with each release. The contents can be viewed on each CDN.
-## Latest version
+Docsify recommends [jsDelivr](//cdn.jsdelivr.net) as its preferred CDN:
-```html
-
-
+- https://cdn.jsdelivr.net/npm/docsify/
-
-
-```
+Other CDNs are available and may be required in locations where jsDelivr is not available:
-Alternatively, use [compressed files](#compressed-file).
+- https://cdnjs.com/libraries/docsify
+- https://unpkg.com/browse/docsify/
+- https://www.bootcdn.cn/docsify/
-## Specific version
+## Specifying versions
-```html
-
-
+Note the `@` version lock in the CDN URLs below. This allows specifying the latest major, minor, patch, or specific [semver](https://semver.org) version number.
-
-
-```
+- MAJOR versions include breaking changes
+ `1.0.0` → `2.0.0`
+- MINOR versions include non-breaking new functionality
+ `1.0.0` → `1.1.0`
+- PATCH versions include non-breaking bug fixes
+ `1.0.0` → `1.0.1`
-## Compressed file
+Uncompressed resources are available by omitting the `.min` from the filename.
-```html
-
-
+## Latest "major" version
-
-
-```
+Specifying the latest major version allows your site to receive all non-breaking enhancements ("minor" updates) and bug fixes ("patch" updates) as they are released. This is good option for those who prefer a zero-maintenance way of keeping their site up to date with minimal risk as new versions are published.
+> [!TIP] When a new major version is released, you will need to manually update the major version number after the `@` symbol in your CDN URLs.
+
+
```html
-
-
+
+
-
-
+
+
```
-## Other CDN
+## Specific version
-- http://www.bootcdn.cn/docsify
-- https://cdn.jsdelivr.net/npm/docsify/
-- https://cdnjs.com/libraries/docsify
+Specifying an exact version prevents any future updates from affecting your site. This is good option for those who prefer to manually update their resources as new versions are published.
+> [!TIP] When a new version is released, you will need to manually update the version number after the `@` symbol in your CDN URLs.
+
+
+```html
+
+
+
+
+
+```
diff --git a/docs/configuration.md b/docs/configuration.md
index ba48475988..7b61752984 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -1,104 +1,58 @@
# Configuration
-You can configure the `window.$docsify`.
+You can configure Docsify by defining `window.$docsify` as an object:
```html
```
-## el
-
-- Type: `String`
-- Default: `#app`
-
-The DOM element to be mounted on initialization. It can be a CSS selector string or an actual HTMLElement.
-
-```js
-window.$docsify = {
- el: '#app'
-};
-```
-
-## repo
-
-- Type: `String`
-- Default: `null`
-
-Configure the repository url or a string of `username/repo` can add the [GitHub Corner](http://tholman.com/github-corners/) widget in the top right corner of the site.
-
-```js
-window.$docsify = {
- repo: 'docsifyjs/docsify',
- // or
- repo: 'https://github.com/docsifyjs/docsify/'
-};
-```
-
-## maxLevel
-
-- Type: `Number`
-- Default: `6`
-
-Maximum Table of content level.
-
-```js
-window.$docsify = {
- maxLevel: 4
-};
-```
-
-## loadNavbar
-
-- Type: `Boolean|String`
-- Default: `false`
-
-Loads navbar from the Markdown file `_navbar.md` if **true**, or else from the path specified.
-
-```js
-window.$docsify = {
- // load from _navbar.md
- loadNavbar: true,
+The config can also be defined as a function, in which case the first argument is the Docsify `vm` instance. The function should return a config object. This can be useful for referencing `vm` in places like the markdown configuration:
- // load from nav.md
- loadNavbar: 'nav.md'
-};
+```html
+
```
-## loadSidebar
+## alias
-- Type: `Boolean|String`
-- Default: `false`
+- Type: `Object`
-Loads sidebar from the Markdown file `_sidebar.md` if **true**, or else from the path specified.
+Set the route alias. You can freely manage routing rules. Supports RegExp.
+Do note that order matters! If a route can be matched by multiple aliases, the one you declared first takes precedence.
```js
window.$docsify = {
- // load from _sidebar.md
- loadSidebar: true,
+ alias: {
+ '/foo/(.*)': '/bar/$1', // supports regexp
+ '/zh-cn/changelog': '/changelog',
+ '/changelog':
+ 'https://raw.githubusercontent.com/docsifyjs/docsify/main/CHANGELOG',
- // load from summary.md
- loadSidebar: 'summary.md'
+ // You may need this if you use routerMode:'history'.
+ '/.*/_sidebar.md': '/_sidebar.md', // See #301
+ },
};
```
-## subMaxLevel
-
-- Type: `Number`
-- Default: `0`
-
-Add table of contents (TOC) in custom sidebar.
-
-```js
-window.$docsify = {
- subMaxLevel: 2
-};
-```
+> **Note** If you change [`routerMode`](#routermode) to `'history'`, you may
+> want to configure an alias for your `_sidebar.md` and `_navbar.md` files.
## auto2top
@@ -109,25 +63,23 @@ Scrolls to the top of the screen when the route is changed.
```js
window.$docsify = {
- auto2top: true
+ auto2top: true,
};
```
-## homepage
+## autoHeader
-- Type: `String`
-- Default: `README.md`
+- Type: `Boolean`
+- Default: `false`
-`README.md` in your docs folder will be treated as homepage for your website, but sometimes you may need to serve another file as your homepage.
+If `loadSidebar` and `autoHeader` are both enabled, for each link in `_sidebar.md`, prepend a header to the page before converting it to HTML — but only if the page does not already contain an H1 heading.
+
+For more details, see [#78](https://github.com/docsifyjs/docsify/issues/78).
```js
window.$docsify = {
- // Change to /home.md
- homepage: 'home.md',
-
- // Or use the readme in your repo
- homepage:
- 'https://raw.githubusercontent.com/docsifyjs/docsify/master/README.md'
+ loadSidebar: true,
+ autoHeader: true,
};
```
@@ -146,47 +98,27 @@ window.$docsify = {
// Even can load files from other repo
basePath:
- 'https://raw.githubusercontent.com/ryanmcdermott/clean-code-javascript/master/'
+ 'https://raw.githubusercontent.com/ryanmcdermott/clean-code-javascript/master/',
};
```
-## relativePath
+## catchPluginErrors
- Type: `Boolean`
-- Default: `false`
-
-If **true** links are relative to the current context.
+- Default: `true`
-For example, the directory structure is as follows:
+Determines if Docsify should handle uncaught _synchronous_ plugin errors automatically. This can prevent plugin errors from affecting docsify's ability to properly render live site content.
-```text
-.
-└── docs
- ├── README.md
- ├── guide.md
- └── zh-cn
- ├── README.md
- ├── guide.md
- └── config
- └── example.md
-```
+## cornerExternalLinkTarget
-With relative path **enabled** and current URL `http://domain.com/zh-cn/README`, given links will resolve to:
+- Type: `String`
+- Default: `'_blank'`
-```text
-guide.md => http://domain.com/zh-cn/guide
-config/example.md => http://domain.com/zh-cn/config/example
-../README.md => http://domain.com/README
-/README.md => http://domain.com/README
-```
+Target to open external link at the top right corner. Default `'_blank'` (new window/tab)
```js
window.$docsify = {
- // Relative path enabled
- relativePath: true,
-
- // Relative path disabled (default value)
- relativePath: false
+ cornerExternalLinkTarget: '_self', // default: '_blank'
};
```
@@ -204,315 +136,978 @@ window.$docsify = {
// Custom file name
coverpage: 'cover.md',
- // mutiple covers
+ // multiple covers
coverpage: ['/', '/zh-cn/'],
- // mutiple covers and custom file name
+ // multiple covers and custom file name
coverpage: {
'/': 'cover.md',
- '/zh-cn/': 'cover.md'
- }
+ '/zh-cn/': 'cover.md',
+ },
};
```
-## logo
+## el
- Type: `String`
+- Default: `'#app'`
-Website logo as it appears in the sidebar, you can resize by CSS.
+The DOM element to be mounted on initialization. It can be a CSS selector string or an actual [HTMLElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement).
```js
window.$docsify = {
- logo: '/_media/icon.svg'
+ el: '#app',
};
```
-## name
+## executeScript
-- Type: `String`
+- Type: `Boolean`
+- Default: `null`
-Website name as it appears in the sidebar.
+Execute the script on the page. Only parses the first script tag ([demo](themes)). If Vue is detected, this is `true` by default.
```js
window.$docsify = {
- name: 'docsify'
+ executeScript: true,
};
```
-## nameLink
+```markdown
+## This is test
+
+
+```
+
+Note that if you are running an external script, e.g. an embedded jsfiddle demo, make sure to include the [external-script](plugins.md?id=external-script) plugin.
+
+## ext
- Type: `String`
-- Default: `window.location.pathname`
+- Default: `'.md'`
-The name of the link.
+Request file extension.
```js
window.$docsify = {
- nameLink: '/',
-
- // For each route
- nameLink: {
- '/zh-cn/': '/zh-cn/',
- '/': '/'
- }
+ ext: '.md',
};
```
-## markdown
+## externalLinkRel
-- Type: `Function`
+- Type: `String`
+- Default: `'noopener'`
-See [Markdown configuration](markdown.md).
+Default `'noopener'` (no opener) prevents the newly opened external page (when [externalLinkTarget](#externallinktarget) is `'_blank'`) from having the ability to control our page. No `rel` is set when it's not `'_blank'`. See [this post](https://mathiasbynens.github.io/rel-noopener/) for more information about why you may want to use this option.
```js
window.$docsify = {
- // object
- markdown: {
- smartypants: true,
- renderer: {
- link: function() {
- // ...
- }
- }
- },
-
- // function
- markdown: function(marked, renderer) {
- // ...
- return marked;
- }
+ externalLinkRel: '', // default: 'noopener'
};
```
-## themeColor
+## externalLinkTarget
- Type: `String`
+- Default: `'_blank'`
-Customize the theme color. Use [CSS3 variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables) feature and polyfill in old browser.
+Target to open external links inside the markdown. Default `'_blank'` (new window/tab)
```js
window.$docsify = {
- themeColor: '#3F51B5'
+ externalLinkTarget: '_self', // default: '_blank'
};
```
-## alias
+## fallbackLanguages
-- Type: `Object`
+- Type: `Array`
-Set the route alias. You can freely manage routing rules. Supports RegExp.
+List of languages that will fallback to the default language when a page is requested and it doesn't exist for the given locale.
+
+Example:
+
+- try to fetch the page of `/de/overview`. If this page exists, it'll be displayed.
+- then try to fetch the default page `/overview` (depending on the default language). If this page exists, it'll be displayed.
+- then display the 404 page.
```js
window.$docsify = {
- alias: {
- '/foo/(+*)': '/bar/$1', // supports regexp
- '/zh-cn/changelog': '/changelog',
- '/changelog':
- 'https://raw.githubusercontent.com/docsifyjs/docsify/master/CHANGELOG',
- '/.*/_sidebar.md': '/_sidebar.md' // See #301
- }
+ fallbackLanguages: ['fr', 'de'],
};
```
-## autoHeader
+## fallbackDefaultLanguage
-- type: `Boolean`
+- Type: `String`
+- Default: `''`
+
+When a page is requested and it doesn't exist for the given locale, Docsify will fallback to the language specified by this option.
-If `loadSidebar` and `autoHeader` are both enabled, for each link in `_sidebar.md`, prepend a header to the page before converting it to html. Compare [#78](https://github.com/docsifyjs/docsify/issues/78).
+For example, in the scenario described above, if `/de/overview` does not exist and `fallbackDefaultLanguage` is configured as `zh-cn`, Docsify will fetch `/zh-cn/overview` instead of `/overview`.
```js
window.$docsify = {
- loadSidebar: true,
- autoHeader: true
+ fallbackLanguages: ['fr', 'de'],
+ fallbackDefaultLanguage: 'zh-cn', // default: ''
};
```
-## executeScript
+## formatUpdated
-- type: `Boolean`
+- Type: `String|Function`
-Execute the script on the page. Only parse the first script tag([demo](themes)). If Vue is present, it is turned on by default.
+We can display the file update date through **{docsify-updated} ** variable. And format it by `formatUpdated`.
+See https://github.com/lukeed/tinydate#patterns
```js
window.$docsify = {
- executeScript: true
-};
-```
+ formatUpdated: '{MM}/{DD} {HH}:{mm}',
-```markdown
-## This is test
+ formatUpdated(time) {
+ // ...
-
+ return time;
+ },
+};
```
-Note that if you are running an external script, e.g. an embedded jsfiddle demo, make sure to include the [external-script](plugins.md?id=external-script) plugin.
+## pageTitleFormatter
-## noEmoji
+- Type: `Function`
+- Default: `null`
-- type: `Boolean`
+Optional function to customize how the site `name` is used when composing the document title. If provided, Docsify will call this function with the configured `name` (which may contain HTML) and use the returned string as the title portion for the site name — Docsify will not automatically strip HTML or otherwise modify the value. If not provided, Docsify falls back to the default behavior of stripping HTML tags from `name`.
-Disabled emoji parse.
+Basic example — strip HTML and trim (equivalent to Docsify's default behavior):
```js
window.$docsify = {
- noEmoji: true
+ name: 'My Site ',
+ pageTitleFormatter(name) {
+ return name ? name.replace(/<[^>]+>/g, '').trim() : '';
+ },
};
```
-## mergeNavbar
+## hideSidebar
-- type: `Boolean`
+- Type : `Boolean`
+- Default: `false`
-Navbar will be merged with the sidebar on smaller screens.
+This option will completely hide your sidebar and won't render any content on the side.
```js
window.$docsify = {
- mergeNavbar: true
+ hideSidebar: true,
};
```
-## formatUpdated
+## homepage
-- type: `String|Function`
+- Type: `String`
+- Default: `'README.md'`
-We can display the file update date through **{docsify-updated} ** variable. And format it by `formatUpdated`.
-See https://github.com/lukeed/tinydate#patterns
+`README.md` in your docs folder will be treated as the homepage for your website, but sometimes you may need to serve another file as your homepage.
```js
window.$docsify = {
- formatUpdated: '{MM}/{DD} {HH}:{mm}',
-
- formatUpdated: function(time) {
- // ...
+ // Change to /home.md
+ homepage: 'home.md',
- return time;
- }
+ // Or use the readme in your repo
+ homepage:
+ 'https://raw.githubusercontent.com/docsifyjs/docsify/main/README.md',
};
```
-## externalLinkTarget
+## keyBindings
-- type: `String`
-- default: `_blank`
+- Type: `Boolean|Object`
+- Default: `Object`
+ - \\ Toggle the sidebar menu
+ - / Focus on [search](plugins#full-text-search) field. Also supports alt / ctrl + k .
-Target to open external links. Default `'_blank'` (new window/tab)
+Binds key combination(s) to a custom callback function.
-```js
-window.$docsify = {
- externalLinkTarget: '_self' // default: '_blank'
-};
-```
+Key `bindings` are defined as case insensitive string values separated by `+`. Modifier key values include `alt`, `ctrl`, `meta`, and `shift`. Non-modifier key values should match the keyboard event's [key](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key) or [code](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code) value.
-## routerMode
+The `callback` function receive a [keydown event](https://developer.mozilla.org/en-US/docs/Web/API/Element/keydown_event) as an argument.
-- type: `String`
-- default: `hash`
+> [!IMPORTANT] Let site visitors know your custom key bindings are available! If a binding is associated with a DOM element, consider inserting a `` element as a visual cue (e.g., alt + a ) or adding [title](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/title) and [aria-keyshortcuts](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-keyshortcuts) attributes for hover/focus hints.
```js
window.$docsify = {
- routerMode: 'history' // default: 'hash'
+ keyBindings: {
+ // Custom key binding
+ myCustomBinding: {
+ bindings: ['alt+a', 'shift+a'],
+ callback(event) {
+ alert('Hello, World!');
+ },
+ },
+ },
};
```
-## noCompileLinks
-
-- type: `Array`
-
-Sometimes we do not want docsify to handle our links. See [#203](https://github.com/docsifyjs/docsify/issues/203)
+Key bindings can be disabled entirely or individually by setting the binding configuration to `false`.
```js
window.$docsify = {
- noCompileLinks: ['/foo', '/bar/.*']
+ // Disable all key bindings
+ keyBindings: false,
};
```
-## onlyCover
-
-- type: `Boolean`
-
-Only coverpage is loaded when visiting the home page.
-
```js
window.$docsify = {
- onlyCover: false
+ keyBindings: {
+ // Disable individual key bindings
+ focusSearch: false,
+ toggleSidebar: false,
+ },
};
```
-## requestHeaders
+## loadNavbar
-- type: `Object`
+- Type: `Boolean|String`
+- Default: `false`
-Set the request resource headers.
+Loads navbar from the Markdown file `_navbar.md` if **true**, else loads it from the path specified.
```js
window.$docsify = {
- requestHeaders: {
- 'x-token': 'xxx'
- }
+ // load from _navbar.md
+ loadNavbar: true,
+
+ // load from nav.md
+ loadNavbar: 'nav.md',
};
```
-## ext
+## loadSidebar
-- type: `String`
+- Type: `Boolean|String`
+- Default: `false`
-Request file extension.
+Loads sidebar from the Markdown file `_sidebar.md` if **true**, else loads it from the path specified.
```js
window.$docsify = {
- ext: '.md'
+ // load from _sidebar.md
+ loadSidebar: true,
+
+ // load from summary.md
+ loadSidebar: 'summary.md',
};
```
-## fallbackLanguages
-
-- type: `Array`
+## logo
-List of languages that will fallback to the default language when a page is request and didn't exists for the given local.
+- Type: `String`
-Example:
+Website logo as it appears in the sidebar. You can resize it using CSS.
-- try to fetch the page of `/de/overview`. If this page exists, it'll be displayed
-- then try to fetch the default page `/overview` (depending on the default language). If this page exists, it'll be displayed
-- then display 404 page.
+> [!IMPORTANT] Logo will only be visible if `name` prop is also set. See [name](#name) configuration.
```js
window.$docsify = {
- fallbackLanguages: ['fr', 'de']
+ logo: '/_media/icon.svg',
};
```
-## notFoundPage
+## markdown
-- type: `Boolean` | `String` | `Object`
+- Type: `Function`
+
+See [Markdown configuration](markdown.md).
+
+```js
+window.$docsify = {
+ // object
+ markdown: {
+ smartypants: true,
+ renderer: {
+ link() {
+ // ...
+ },
+ },
+ },
+
+ // function
+ markdown(marked, renderer) {
+ // ...
+ return marked;
+ },
+};
+```
+
+## maxLevel
+
+- Type: `Number`
+- Default: `6`
+
+Maximum Table of content level.
+
+```js
+window.$docsify = {
+ maxLevel: 4,
+};
+```
+
+## mergeNavbar
+
+- Type: `Boolean`
+- Default: `false`
+
+Navbar will be merged with the sidebar on smaller screens.
+
+```js
+window.$docsify = {
+ mergeNavbar: true,
+};
+```
+
+## name
+
+- Type: `Boolean|String`
+
+Website name as it appears in the sidebar.
+
+```js
+window.$docsify = {
+ name: 'docsify',
+};
+```
+
+The name field can also contain custom HTML for easier customization:
+
+```js
+window.$docsify = {
+ name: 'docsify ',
+};
+```
+
+If `true`, the website name will be inferred from the document's `` tag.
+
+```js
+window.$docsify = {
+ name: true,
+};
+```
+
+If `false` or empty, no name will be displayed.
+
+```js
+window.$docsify = {
+ name: false,
+};
+```
+
+## nameLink
+
+- Type: `String`
+- Default: `'window.location.pathname'`
+
+The URL that the website `name` links to.
+
+```js
+window.$docsify = {
+ nameLink: '/',
+
+ // For each route
+ nameLink: {
+ '/zh-cn/': '#/zh-cn/',
+ '/': '#/',
+ },
+};
+```
+
+## nativeEmoji
+
+- Type: `Boolean`
+- Default: `false`
+
+Render emoji shorthand codes using GitHub-style emoji images or native emoji characters.
+
+```js
+window.$docsify = {
+ nativeEmoji: true,
+};
+```
+
+```markdown
+:smile:
+:partying_face:
+:joy:
+:+1:
+:-1:
+```
+
+GitHub-style images when `false`:
+
+
+
+
+
+
+
+
+
+Native characters when `true`:
+
+
+ 😄︎
+ 🥳︎
+ 😂︎
+ 👍︎
+ 👎︎
+
+
+To render shorthand codes as text, replace `:` characters with the `:` HTML entity.
+
+```markdown
+:100:
+```
+
+
+
+:100:
+
+
+
+## noCompileLinks
+
+- Type: `Array`
+
+Sometimes we do not want docsify to handle our links. See [#203](https://github.com/docsifyjs/docsify/issues/203). We can skip compiling of certain links by specifying an array of strings. Each string is converted into to a regular expression (`RegExp`) and the _whole_ href of a link is matched against it.
+
+```js
+window.$docsify = {
+ noCompileLinks: ['/foo', '/bar/.*'],
+};
+```
+
+## noEmoji
+
+- Type: `Boolean`
+- Default: `false`
+
+Disabled emoji parsing and render all emoji shorthand as text.
+
+```js
+window.$docsify = {
+ noEmoji: true,
+};
+```
+
+```markdown
+:100:
+```
+
+
+
+:100:
+
+
+
+To disable emoji parsing of individual shorthand codes, replace `:` characters with the `:` HTML entity.
+
+```markdown
+:100:
+
+:100:
+```
+
+
+
+:100:
+
+:100:
+
+
+
+## notFoundPage
+
+- Type: `Boolean|String|Object`
+- Default: `false`
+
+Display default "404 - Not Found" message:
+
+```js
+window.$docsify = {
+ notFoundPage: false,
+};
+```
Load the `_404.md` file:
```js
window.$docsify = {
- notFoundPage: true
+ notFoundPage: true,
};
```
-Load the customised path of the 404 page:
+Load the customized path of the 404 page:
```js
window.$docsify = {
- notFoundPage: 'my404.md'
+ notFoundPage: 'my404.md',
};
```
-Load the right 404 page according to the localisation:
+Load the right 404 page according to the localization:
```js
window.$docsify = {
notFoundPage: {
'/': '_404.md',
- '/de': 'de/_404.md'
+ '/de': 'de/_404.md',
+ },
+};
+```
+
+> Note: The options for fallbackLanguages don't work with the `notFoundPage` options.
+
+## onlyCover
+
+- Type: `Boolean`
+- Default: `false`
+
+Only coverpage is loaded when visiting the home page.
+
+```js
+window.$docsify = {
+ onlyCover: false,
+};
+```
+
+## plugins
+
+See [Plugins](./plugins.md).
+
+## relativePath
+
+- Type: `Boolean`
+- Default: `false`
+
+If **true**, links are relative to the current context.
+
+For example, the directory structure is as follows:
+
+```text
+.
+└── docs
+ ├── README.md
+ ├── guide.md
+ └── zh-cn
+ ├── README.md
+ ├── guide.md
+ └── config
+ └── example.md
+```
+
+With relative path **enabled** and current URL `http://domain.com/zh-cn/README`, given links will resolve to:
+
+```text
+guide.md => http://domain.com/zh-cn/guide
+config/example.md => http://domain.com/zh-cn/config/example
+../README.md => http://domain.com/README
+/README.md => http://domain.com/README
+```
+
+```js
+window.$docsify = {
+ // Relative path enabled
+ relativePath: true,
+
+ // Relative path disabled (default value)
+ relativePath: false,
+};
+```
+
+## repo
+
+- Type: `String`
+
+Configure the repository url, or a string of `username/repo`, to add the [GitHub Corner](http://tholman.com/github-corners/) widget in the top right corner of the site.
+
+```js
+window.$docsify = {
+ repo: 'docsifyjs/docsify',
+ // or
+ repo: 'https://github.com/docsifyjs/docsify/',
+};
+```
+
+If undefined or empty, no GitHub corner will be displayed.
+
+## requestHeaders
+
+- Type: `Object`
+
+Set the request resource headers.
+
+```js
+window.$docsify = {
+ requestHeaders: {
+ 'x-token': 'xxx',
+ },
+};
+```
+
+Such as setting the cache
+
+```js
+window.$docsify = {
+ requestHeaders: {
+ 'cache-control': 'max-age=600',
+ },
+};
+```
+
+## routerMode
+
+Configure the URL format that the paths of your site will use.
+
+- Type: `String`
+- Default: `'hash'`
+
+```js
+window.$docsify = {
+ routerMode: 'history', // default: 'hash'
+};
+```
+
+For statically-deployed sites (f.e. on GitHub Pages) hash-based routing is
+simpler to set up. For websites that can re-write URLs, the history-based format
+is better (especially for search-engine optimization, hash-based routing is not
+so search-engine friendly)
+
+Hash-based routing means all URL paths will be prefixed with `/#/` in the
+address bar. This is a trick that allows the site to load `/index.html`, then it
+uses the path that follows the `#` to determine what markdown files to load. For
+example, a complete hash-based URL may look like this:
+`https://example.com/#/path/to/page`. The browser will actually load
+`https://example.com` (assuming your static server serves
+`index.html` by default, as most do), and then the Docsify JavaScript code will
+look at the `/#/...` and determine the markdown file to load and render.
+Additionally, when clicking on a link, the Docsify router will change the
+content after the hash dynamically. The value of `location.pathname` will still be
+`/` no matter what. The parts of a hash path are _not_ sent to the server when
+visiting such a URL in a browser.
+
+On the other hand, history-based routing means the Docsify JavaScript will use
+the [History API](https://developer.mozilla.org/en-US/docs/Web/API/History_API)
+to dynamically change the URL without using a `#`. This means that all URLs will
+be considered "real" by search engines, and the full path will be sent to the
+server when visiting the URL in your browser. For example, a URL may look like
+`https://example.com/path/to/page`. The browser will try to load that full URL
+directly from the server, not just `https://example.com`. The upside of this is
+that these types of URLs are much more friendly for search engines, and can be
+indexed (yay!). The downside, however, is that your server, or the place where
+you host your site files, has to be able to handle these URLs. Various static
+website hosting services allow "rewrite rules" to be configured, such that a
+server can be configured to always send back `/index.html` no matter what path
+is visited. The value of `location.pathname` will show `/path/to/page`, because
+it was actually sent to the server.
+
+TLDR: start with `hash` routing (the default). If you feel adventurous, learn
+how to configure a server, then switch to `history` mode for better experience
+without the `#` in the URL and SEO optimization.
+
+> **Note** If you use `routerMode: 'history'`, you may want to add an
+> [`alias`](#alias) to make your `_sidebar.md` and `_navbar.md` files always be
+> loaded no matter which path is being visited.
+>
+> ```js
+> window.$docsify = {
+> routerMode: 'history',
+> alias: {
+> '/.*/_sidebar.md': '/_sidebar.md',
+> '/.*/_navbar.md': '/_navbar.md',
+> },
+> };
+> ```
+
+## routes
+
+- Type: `Object`
+
+Define "virtual" routes that can provide content dynamically. A route is a map between the expected path, to either a string or a function. If the mapped value is a string, it is treated as markdown and parsed accordingly. If it is a function, it is expected to return markdown content.
+
+A route function receives up to three parameters:
+
+1. `route` - the path of the route that was requested (e.g. `/bar/baz`)
+2. `matched` - the [`RegExpMatchArray`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match) that was matched by the route (e.g. for `/bar/(.+)`, you get `['/bar/baz', 'baz']`)
+3. `next` - this is a callback that you may call when your route function is async
+
+Do note that order matters! Routes are matched the same order you declare them in, which means that in cases where you have overlapping routes, you might want to list the more specific ones first.
+
+```js
+window.$docsify = {
+ routes: {
+ // Basic match w/ return string
+ '/foo': '# Custom Markdown',
+
+ // RegEx match w/ synchronous function
+ '/bar/(.*)'(route, matched) {
+ return '# Custom Markdown';
+ },
+
+ // RegEx match w/ asynchronous function
+ '/baz/(.*)'(route, matched, next) {
+ fetch('/api/users?id=12345')
+ .then(response => {
+ next('# Custom Markdown');
+ })
+ .catch(err => {
+ // Handle error...
+ });
+ },
+ },
+};
+```
+
+Other than strings, route functions can return a falsy value (`null` \ `undefined`) to indicate that they ignore the current request:
+
+```js
+window.$docsify = {
+ routes: {
+ // accepts everything other than dogs (synchronous)
+ '/pets/(.+)'(route, matched) {
+ if (matched[0] === 'dogs') {
+ return null;
+ } else {
+ return 'I like all pets but dogs';
+ }
+ }
+
+ // accepts everything other than cats (asynchronous)
+ '/pets/(.*)'(route, matched, next) {
+ if (matched[0] === 'cats') {
+ next();
+ } else {
+ // Async task(s)...
+ next('I like all pets but cats');
+ }
+ }
+ }
+}
+```
+
+Finally, if you have a specific path that has a real markdown file (and therefore should not be matched by your route), you can opt it out by returning an explicit `false` value:
+
+```js
+window.$docsify = {
+ routes: {
+ // if you look up /pets/cats, docsify will skip all routes and look for "pets/cats.md"
+ '/pets/cats'(route, matched) {
+ return false;
+ }
+
+ // but any other pet should generate dynamic content right here
+ '/pets/(.+)'(route, matched) {
+ const pet = matched[0];
+ return `your pet is ${pet} (but not a cat)`;
+ }
}
+}
+```
+
+## skipLink
+
+- Type: `Boolean|String|Object`
+- Default: `'Skip to main content'`
+
+Determines if/how the site's [skip navigation link](https://webaim.org/techniques/skipnav/) will be rendered.
+
+```js
+// Render skip link for all routes
+window.$docsify = {
+ skipLink: 'Skip to content',
};
```
-> Note: The options with fallbackLanguages didn't work with the `notFoundPage` options.
+```js
+// Render localized skip links based on route paths
+window.$docsify = {
+ skipLink: {
+ '/es/': 'Saltar al contenido principal',
+ '/de-de/': 'Ga naar de hoofdinhoud',
+ '/ru-ru/': 'Перейти к основному содержанию',
+ '/zh-cn/': '跳到主要内容',
+ },
+};
+```
+
+```js
+// Do not render skip link
+window.$docsify = {
+ skipLink: false,
+};
+```
+
+```js
+// Use default
+window.$docsify = {
+ skipLink: true, // "Skip to main content"
+};
+```
+
+## subMaxLevel
+
+- Type: `Number`
+- Default: `0`
+
+Add table of contents (TOC) in custom sidebar.
+
+```js
+window.$docsify = {
+ subMaxLevel: 2,
+};
+```
+
+If you have a link to the homepage in the sidebar and want it to be shown as active when accessing the root url, make sure to update your sidebar accordingly:
+
+```markdown
+- Sidebar
+ - [Home](/)
+ - [Another page](another.md)
+```
+
+For more details, see [#1131](https://github.com/docsifyjs/docsify/issues/1131).
+
+## themeColor ⚠️ :id=themecolor
+
+> [!IMPORTANT] Deprecated as of v5. Use the `--theme-color` [theme property](themes#theme-properties) to [customize](themes#customization) your theme color.
+
+- Type: `String`
+
+Customize the theme color.
+
+```js
+window.$docsify = {
+ themeColor: '#3F51B5',
+};
+```
+
+## topMargin ⚠️ :id=topmargin
+
+> [!IMPORTANT] Deprecated as of v5. Use the `--scroll-padding-top` [theme property](themes#theme-properties) to specify a scroll margin when using a sticky navbar.
+
+- Type: `Number|String`
+- Default: `0`
+
+Adds scroll padding to the top of the viewport. This is useful when you have added a sticky or "fixed" element and would like auto scrolling to align with the bottom of your element.
+
+```js
+window.$docsify = {
+ topMargin: 90, // 90, '90px', '2rem', etc.
+};
+```
+
+## vueComponents
+
+- Type: `Object`
+
+Creates and registers global [Vue](https://vuejs.org/guide/essentials/component-basics.html). Components are specified using the component name as the key with an object containing Vue options as the value. Component `data` is unique for each instance and will not persist as users navigate the site.
+
+```js
+window.$docsify = {
+ vueComponents: {
+ 'button-counter': {
+ template: `
+
+ You clicked me {{ count }} times
+
+ `,
+ data() {
+ return {
+ count: 0,
+ };
+ },
+ },
+ },
+};
+```
+
+```markdown
+
+```
+
+
+
+
+
+## vueGlobalOptions
+
+- Type: `Object`
+
+Specifies global Vue options for use with Vue content not explicitly mounted with [vueMounts](#mounting-dom-elements), [vueComponents](#components), or a [markdown script](#markdown-script). Changes to global `data` will persist and be reflected anywhere global references are used.
+
+```js
+window.$docsify = {
+ vueGlobalOptions: {
+ data() {
+ return {
+ count: 0,
+ };
+ },
+ },
+};
+```
+
+```markdown
+
+ -
+ {{ count }}
+ +
+
+```
+
+
+
+ -
+ {{ count }}
+ +
+
+
+
+## vueMounts
+
+- Type: `Object`
+
+Specifies DOM elements to mount as Vue instances and their associated options. Mount elements are specified using a [CSS selector](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) as the key with an object containing Vue options as their value. Docsify will mount the first matching element in the main content area each time a new page is loaded. Mount element `data` is unique for each instance and will not persist as users navigate the site.
+
+```js
+window.$docsify = {
+ vueMounts: {
+ '#counter': {
+ data() {
+ return {
+ count: 0,
+ };
+ },
+ },
+ },
+};
+```
+
+```markdown
+
+ -
+ {{ count }}
+ +
+
+```
+
+
+ -
+ {{ count }}
+ +
+
diff --git a/docs/cover.md b/docs/cover.md
index 555f4ff7a3..a992831fef 100644
--- a/docs/cover.md
+++ b/docs/cover.md
@@ -1,20 +1,15 @@
# Cover
-Activate the cover feature by setting `coverpage` to **true**, compare [coverpage configuration](configuration.md#coverpage).
+Activate the cover feature by setting `coverpage` to **true**. See [coverpage configuration](configuration#coverpage).
## Basic usage
Set `coverpage` to **true**, and create a `_coverpage.md`:
-```html
-
-
-
-
+```js
+window.$docsify = {
+ coverpage: true,
+};
```
```markdown
@@ -22,44 +17,50 @@ Set `coverpage` to **true**, and create a `_coverpage.md`:

-# docsify 3.5
+# docsify
-> A magical documentation site generator.
+> A magical documentation site generator
-- Simple and lightweight (~21kB gzipped)
-- No statically built html files
+- Simple and lightweight
+- No statically built HTML files
- Multiple themes
[GitHub](https://github.com/docsifyjs/docsify/)
[Get Started](#docsify)
```
-!> A document site can have only one coverpage!
+## Customization
-## Custom background
+The cover page can be customized using [theme properties](themes#theme-properties):
-The background color is generated randomly by default. You can customize the background color or a background image:
+
+```css
+:root {
+ --cover-bg : url('path/to/image.png');
+ --cover-bg-overlay : rgba(0, 0, 0, 0.5);
+ --cover-color : #fff;
+ --cover-title-color: var(--theme-color);
+ --cover-title-font : 600 var(--font-size-xxxl) var(--font-family);
+}
+```
-```markdown
-
+Alternatively, a background color or image can be specified in the cover page markdown.
-# docsify 3.5
+```markdown
+
-[GitHub](https://github.com/docsifyjs/docsify/)
-[Get Started](#quick-start)
+
+```
+```markdown

-
-
-
-
```
## Coverpage as homepage
-Normally, the coverpage and the homepage appear at the same time. Of course, you can also separate the coverpage by [onlyCover option](configuration.md#onlycover).
+Normally, the coverpage and the homepage appear at the same time. Of course, you can also separate the coverpage by [`onlyCover`](configuration#onlycover) option.
## Multiple covers
@@ -83,7 +84,7 @@ Now, you can set
```js
window.$docsify = {
- coverpage: ['/', '/zh-cn/']
+ coverpage: ['/', '/zh-cn/'],
};
```
@@ -93,7 +94,7 @@ Or a special file name
window.$docsify = {
coverpage: {
'/': 'cover.md',
- '/zh-cn/': 'cover.md'
- }
+ '/zh-cn/': 'cover.md',
+ },
};
```
diff --git a/docs/custom-navbar.md b/docs/custom-navbar.md
index 324ad81042..8f2ad880fb 100644
--- a/docs/custom-navbar.md
+++ b/docs/custom-navbar.md
@@ -4,7 +4,7 @@
If you need custom navigation, you can create a HTML-based navigation bar.
-!> Note that documentation links begin with `#/`.
+> [!IMPORTANT] Note that documentation links begin with `#/`.
```html
@@ -12,7 +12,7 @@ If you need custom navigation, you can create a HTML-based navigation bar.
EN
- 中文
+ 简体中文
@@ -20,27 +20,38 @@ If you need custom navigation, you can create a HTML-based navigation bar.
## Markdown
-Alternatively, you can create a custom markdown-based navigation file by setting `loadNavbar` to **true** and creating `_navbar.md`, compare [loadNavbar configuration](configuration.md#loadnavbar).
+Alternatively, you can create a custom markdown-based navigation file by setting `loadNavbar` to **true** and creating `_navbar.md`, compare [loadNavbar configuration](configuration#loadnavbar).
```html
-
+
```
```markdown
-* [En](/)
-* [chinese](/zh-cn/)
+- [En](/)
+- [chinese](/zh-cn/)
```
-!> You need to create a `.nojekyll` in `./docs` to prevent GitHub Pages from ignoring files that begin with an underscore.
+To create drop-down menus:
+
+```markdown
+
+
+- Translations
+
+ - [En](/)
+ - [chinese](/zh-cn/)
+```
+
+> [!IMPORTANT] You need to create a `.nojekyll` in `./docs` to prevent GitHub Pages from ignoring files that begin with an underscore.
`_navbar.md` is loaded from each level directory. If the current directory doesn't have `_navbar.md`, it will fall back to the parent directory. If, for example, the current path is `/guide/quick-start`, the `_navbar.md` will be loaded from `/guide/_navbar.md`.
@@ -51,19 +62,20 @@ You can create sub-lists by indenting items that are under a certain parent.
```markdown
-* Getting started
+- Getting started
+
+ - [Quick start](quickstart.md)
+ - [Writing more pages](more-pages.md)
+ - [Custom navbar](custom-navbar.md)
+ - [Cover page](cover.md)
- * [Quick start](quickstart.md)
- * [Writing more pages](more-pages.md)
- * [Custom navbar](custom-navbar.md)
- * [Cover page](cover.md)
+- Configuration
-* Configuration
- * [Configuration](configuration.md)
- * [Themes](themes.md)
- * [Using plugins](plugins.md)
- * [Markdown configuration](markdown.md)
- * [Language highlight](language-highlight.md)
+ - [Configuration](configuration.md)
+ - [Themes](themes.md)
+ - [Using plugins](plugins.md)
+ - [Markdown configuration](markdown.md)
+ - [Language highlight](language-highlight.md)
```
renders as
@@ -80,10 +92,10 @@ If you use the [emoji plugin](plugins#emoji):
-
-
+
+
```
you could, for example, use flag emojis in your custom navbar Markdown file:
@@ -91,6 +103,6 @@ you could, for example, use flag emojis in your custom navbar Markdown file:
```markdown
-* [:us:, :uk:](/)
-* [:cn:](/zh-cn/)
+- [:us:, :uk:](/)
+- [:cn:](/zh-cn/)
```
diff --git a/docs/deploy.md b/docs/deploy.md
index a879f2eaa0..a806b82a1d 100644
--- a/docs/deploy.md
+++ b/docs/deploy.md
@@ -4,24 +4,24 @@ Similar to [GitBook](https://www.gitbook.com), you can deploy files to GitHub Pa
## GitHub Pages
-There're three places to populate your docs for your Github repository:
+There are three places to populate your docs for your GitHub repository:
- `docs/` folder
-- master branch
+- main branch
- gh-pages branch
-It is recommended that you save your files to the `./docs` subfolder of the `master` branch of your repository. Then select `master branch /docs folder` as your Github Pages source in your repositories' settings page.
+It is recommended that you save your files to the `./docs` subfolder of the `main` branch of your repository. Then select `main branch /docs folder` as your GitHub Pages source in your repository's settings page.
-
+
-!> You can also save files in the root directory and select `master branch`.
-You'll need to place a `.nojekyll` file in the deploy location (such as `/docs` or the gh-pages branch)
+> [!IMPORTANT] You can also save files in the root directory and select `main branch`.
+> You'll need to place a `.nojekyll` file in the deploy location (such as `/docs` or the gh-pages branch)
## GitLab Pages
-If you are deploying your master branch, include `.gitlab-ci.yml` with the following script:
+If you are deploying your master branch, create a `.gitlab-ci.yml` with the following script:
-?> The `.public` workaround is so `cp` doesn't also copy `public/` to itself in an infinite loop.
+> [!TIP] The `.public` workaround is so `cp` doesn't also copy `public/` to itself in an infinite loop.
```YAML
pages:
@@ -37,15 +37,15 @@ pages:
- master
```
-!> You can replace script with `- cp -r docs/. public`, if `./docs` is your Docsify subfolder.
+> [!IMPORTANT] You can replace script with `- cp -r docs/. public`, if `./docs` is your Docsify subfolder.
## Firebase Hosting
-!> You'll need to install the Firebase CLI using `npm i -g firebase-tools` after signing into the [Firebase Console](https://console.firebase.google.com) using a Google Account.
+> [!IMPORTANT] You'll need to install the Firebase CLI using `npm i -g firebase-tools` after signing into the [Firebase Console](https://console.firebase.google.com) using a Google Account.
-Using Terminal determine and navigate to the directory for your Firebase Project - this could be `~/Projects/Docs` etc. From there, run `firebase init`, choosing `Hosting` from the menu (use **space** to select, **arrow keys** to change options and **enter** to confirm). Follow the setup instructions.
+Using a terminal, determine and navigate to the directory for your Firebase Project. This could be `~/Projects/Docs`, etc. From there, run `firebase init` and choose `Hosting` from the menu (use **space** to select, **arrow keys** to change options and **enter** to confirm). Follow the setup instructions.
-You should have your `firebase.json` file looking similar to this (I changed the deployment directory from `public` to `site`):
+Your `firebase.json` file should look similar to this (I changed the deployment directory from `public` to `site`):
```json
{
@@ -56,16 +56,16 @@ You should have your `firebase.json` file looking similar to this (I changed the
}
```
-Once finished, build the starting template by running `docsify init ./site` (replacing site with the deployment directory you determined when running `firebase init` - public by default). Add/edit the documentation, then run `firebase deploy` from the base project directory.
+Once finished, build the starting template by running `docsify init ./site` (replacing site with the deployment directory you determined when running `firebase init` - public by default). Add/edit the documentation, then run `firebase deploy` from the root project directory.
-## VPS
+## Nginx
-Try following nginx config.
+Use the following Nginx configuration.
```nginx
server {
listen 80;
- server_name your.domain.com;
+ server_name your.domain.com;
location / {
alias /path/to/dir/of/docs/;
@@ -74,30 +74,56 @@ server {
}
```
+If [`routerMode`](configuration.md#routermode) is set to `history`, use this configuration instead:
+
+```nginx
+server {
+ listen 80;
+ server_name your.domain.com;
+
+ root /path/to/dir/of/docs;
+ index index.html;
+
+ location / {
+ try_files $uri $uri/ /index.html;
+ }
+}
+```
+
## Netlify
1. Login to your [Netlify](https://www.netlify.com/) account.
-2. In the [dashboard](https://app.netlify.com/) page, click **New site from Git**.
-3. Choose a repository where you store your docs, leave the **Build Command** area blank, fill in the Publish directory area with the directory of your `index.html`, for example it should be docs if you populated it at `docs/index.html`.
+2. In the [dashboard](https://app.netlify.com/) page, click **Add New Site**.
+3. Select GitHub.
+4. Choose the repository where you store your docs, in the **Base Directory** add the subfolder where the files are stored. For example, it should be `docs`.
+5. In the **Build Command** area leave it blank.
+6. In the **Publish directory** area, if you have added the `docs` in the **Base Directory** you will see the publish directory populated with `docs/`
+7. Netlify is smart enough to look for the the `index.html` file inside the `docs/` folder.
### HTML5 router
-When using the HTML5 router, you need to set up redirect rules that redirect all requests to your `index.html`, it's pretty simple when you're using Netlify, populate a `\redirects` file in the docs directory and you're all set:
+When using the HTML5 router, you need to set up redirect rules that redirect all requests to your `index.html`. It's pretty simple when you're using Netlify. Just create a file named `_redirects` in the docs directory, add this snippet to the file, and you're all set:
```sh
/* /index.html 200
```
+## Vercel
+
+1. Install [Vercel CLI](https://vercel.com/download), `npm i -g vercel`
+2. Change directory to your docsify website, for example `cd docs`
+3. Deploy with a single command, `vercel`
+
## AWS Amplify
-1. Set the routerMode in the Docsify project `index.html` to *history* mode.
+1. Set the routerMode in the Docsify project `index.html` to _history_ mode.
```html
```
@@ -111,7 +137,7 @@ version: 0.1
frontend:
phases:
build:
- commands:
+ commands:
- echo "Nothing to build"
artifacts:
baseDirectory: /docs
@@ -119,13 +145,114 @@ frontend:
- '**/*'
cache:
paths: []
-
```
-6. Add the following Redirect rules in their displayed order.
+6. Add the following Redirect rules in their displayed order. Note that the second record is a PNG image where you can change it with any image format you are using.
| Source address | Target address | Type |
-|----------------|----------------|---------------|
-| /<*>.md | /<*>.md | 200 (Rewrite) |
-| /<*> | /index.html | 200 (Rewrite) |
+| -------------- | -------------- | ------------- |
+| /<\*>.md | /<\*>.md | 200 (Rewrite) |
+| /<\*>.png | /<\*>.png | 200 (Rewrite) |
+| /<\*> | /index.html | 200 (Rewrite) |
+
+## Stormkit
+
+1. Login to your [Stormkit](https://www.stormkit.io) account.
+2. Using the user interface, import your docsify project from one of the three supported Git providers (GitHub, GitLab, or Bitbucket).
+3. Navigate to the project’s production environment in Stormkit or create a new environment if needed.
+4. Verify the build command in your Stormkit configuration. By default, Stormkit CI will run `npm run build` but you can specify a custom build command on this page.
+5. Set output folder to `docs`
+6. Click the “Deploy Now” button to deploy your site.
+
+Read more in the [Stormkit Documentation](https://stormkit.io/docs).
+
+## Docker
+
+- Create docsify files
+
+ You need prepare the initial files instead of making them inside the container.
+ See the [Quickstart](https://docsify.js.org/#/quickstart) section for instructions on how to create these files manually or using [docsify-cli](https://github.com/docsifyjs/docsify-cli).
+
+ ```sh
+ index.html
+ README.md
+ ```
+
+- Create Dockerfile
+
+ ```Dockerfile
+ FROM node:latest
+ LABEL description="A demo Dockerfile for build Docsify."
+ WORKDIR /docs
+ RUN npm install -g docsify-cli@latest
+ EXPOSE 3000/tcp
+ ENTRYPOINT docsify serve .
+
+ ```
+
+ The current directory structure should be this:
+
+ ```sh
+ index.html
+ README.md
+ Dockerfile
+ ```
+
+- Build docker image
+
+ ```sh
+ docker build -f Dockerfile -t docsify/demo .
+ ```
+
+- Run docker image
+
+ ```sh
+ docker run -itp 3000:3000 --name=docsify -v $(pwd):/docs docsify/demo
+ ```
+
+## Kinsta Static Site Hosting
+
+You can deploy **Docsify** as a Static Site on [Kinsta](https://kinsta.com/static-site-hosting/).
+
+1. Login or create an account to view your [MyKinsta](https://my.kinsta.com/) dashboard.
+
+2. Authorize Kinsta with your Git provider.
+
+3. Select **Static Sites** from the left sidebar and press **Add sites**.
+
+4. Select the repository and branch you want to deploy.
+
+5. During the build settings, Kinsta will automatically try to fill out the **Build command**, **Node version**, and **Publish directory**. If it won't, fill out the following:
+
+ - Build command: leave empty
+ - Node version: leave on default selection or a specific version (e.g. `18.16.0`)
+ - Publish directory: `docs`
+
+6. Click the **Create site**.
+
+## DeployHQ
+
+[DeployHQ](https://www.deployhq.com/) is a deployment automation platform that deploys your code to SSH/SFTP servers, FTP servers, cloud storage (Amazon S3, Cloudflare R2), and modern hosting platforms (Netlify, Heroku).
+
+> [!IMPORTANT] DeployHQ does not host your site. It automates deploying your Docsify files to your chosen hosting provider or server.
+
+To deploy your Docsify site using DeployHQ:
+
+1. Sign up for a [DeployHQ account](https://www.deployhq.com/) and verify your email.
+
+2. Create your first project by clicking on **Projects** and **New Project**. Connect your Git repository (GitHub, GitLab, Bitbucket, or any private repository). Authorize DeployHQ to access your repository.
+
+3. Add a server and enter your server details:
+
+ - Give your server a name
+ - Select your protocol (SSH/SFTP, FTP, or cloud platform)
+ - Enter your server hostname, username, and password/SSH key
+ - Set **Deployment Path** to your web root (e.g., `public_html/`)
+
+4. Since Docsify doesn't require a build step, you can deploy your files directly. If your Docsify files are in a `docs/` folder, configure the **Source Path** in your server settings to `docs/`.
+
+5. Click **Deploy Project**, then select your server and click **Deploy** to start your first deployment.
+
+Your Docsify site will be deployed to your server. You can enable automatic deployments to deploy on every Git push, or schedule deployments for specific times.
+For more information on advanced deployment features, see [DeployHQ's documentation](https://www.deployhq.com/support).
diff --git a/docs/embed-files.md b/docs/embed-files.md
index dab2efe4ea..1fdbedae04 100644
--- a/docs/embed-files.md
+++ b/docs/embed-files.md
@@ -1,63 +1,102 @@
# Embed files
With docsify 4.6 it is now possible to embed any type of file.
+
You can embed these files as video, audio, iframes, or code blocks, and even Markdown files can even be embedded directly into the document.
-For example, here embedded a Markdown file. You only need to do this:
+For example, here is an embedded Markdown file. You only need to do this:
```markdown
[filename](_media/example.md ':include')
```
-Then the content of `example.md` will be displayed directly here
+Then the content of `example.md` will be displayed directly here:
[filename](_media/example.md ':include')
You can check the original content for [example.md](_media/example.md ':ignore').
-Normally, this will compiled into a link, but in docsify, if you add `:include` it will be embedded.
+Normally, this will be compiled into a link, but in docsify, if you add `:include` it will be embedded. You can use single or double quotation marks around as you like.
+
+External links can be used too - just replace the target. If you want to use a gist URL, see [Embed a gist](#embed-a-gist) section.
## Embedded file type
-Currently, file extension are automatically recognized and embedded in different ways.
+Currently, file extensions are automatically recognized and embedded in different ways.
-This is a supported embedding type:
+These types are supported:
-* **iframe** `.html`, `.htm`
-* **markdown** `.markdown`, `.md`
-* **audio** `.mp3`
-* **video** `.mp4`, `.ogg`
-* **code** other file extension
+- **iframe** `.html`, `.htm`
+- **markdown** `.markdown`, `.md`
+- **audio** `.mp3`
+- **video** `.mp4`, `.ogg`
+- **code** other file extension
-Of course, you can force the specified. For example, you want to Markdown file as code block embedded.
+Of course, you can force the specified type. For example, a Markdown file can be embedded as a code block by setting `:type=code`.
```markdown
[filename](_media/example.md ':include :type=code')
```
-You will get it
+You will get:
[filename](_media/example.md ':include :type=code')
+## Markdown with YAML Front Matter
+
+Front Matter, commonly utilized in blogging systems like Jekyll, serves to define metadata for a document. The [front-matter.js](https://www.npmjs.com/package/front-matter) package facilitates the extraction of metadata (front matter) from documents.
+
+When using Markdown, YAML front matter will be stripped from the rendered content. The attributes cannot be used in this case.
+
+```html
+
+```
+
+```markdown
+[filename](_media/example-with-yaml.md ':include')
+```
+
+You will get just the content
+
+[filename](_media/example-with-yaml.md ':include')
+
## Embedded code fragments
+
Sometimes you don't want to embed a whole file. Maybe because you need just a few lines but you want to compile and test the file in CI.
```markdown
[filename](_media/example.js ':include :type=code :fragment=demo')
```
-In your code file you need to surround the fragment between `/// [demo]` lines (before and after the fragment).
-Alternatively you can use `### [demo]`.
+In your code file you need to surround the fragment between `/// [demo]` lines (before and after the fragment).
+Alternatively you can use `### [demo]`. By default, only identifiers are omitted. To omit the entire line containing the identifier in the fragment output, add the `:omitFragmentLine` option. This is useful if your code fragment is e.g. HTML and you want to hide the Docsify fragment identifier from showing in your HTML source. `` in your source file and `:omitFragmentLine` will make the `-->` not show up in your Docsify code fragment section.
+
+Example: In the source file \_media/example.js, `/// [demo]` identifiers have been included:
+
+```markdown
+[filename](_media/example.js ':include :type=code')
+```
+
+[filename](_media/example.js ':include :type=code')
-Example:
+Adding the `:fragment=demo` results in the following:
+```markdown
[filename](_media/example.js ':include :type=code :fragment=demo')
+```
+[filename](_media/example.js ':include :type=code :fragment=demo')
## Tag attribute
If you embed the file as `iframe`, `audio` and `video`, then you may need to set the attributes of these tags.
+> [!TIP] Note, for the `audio` and `video` types, docsify adds the `controls` attribute by default. When you want add more attributes, the `controls` attribute need to be added manually if need be.
+
+```md
+[filename](_media/example.mp4 ':include :type=video controls width=100%')
+```
+
```markdown
[cinwell website](https://cinwell.com ':include :type=iframe width=100% height=400px')
```
@@ -78,4 +117,79 @@ Embedding any type of source code file, you can specify the highlighted language
[](_media/example.html ':include :type=code text')
-?> How to set highlight? You can see [here](language-highlight.md).
+> [!TIP] How to set highlight? You can see [here](language-highlight.md).
+
+## Embed a gist
+
+You can embed a gist as markdown content or as a code block - this is based on the approach at the start of [Embed Files](#embed-files) section, but uses a raw gist URL as the target.
+
+> [!TIP] **No** plugin or app config change is needed here to make this work. In fact, the "Embed" `script` tag that is copied from a gist will _not_ load even if you make plugin or config changes to allow an external script.
+
+### Identify the gist's metadata
+
+Start by viewing a gist on `gist.github.com`. For the purposes of this guide, we use this gist:
+
+- https://gist.github.com/anikethsaha/f88893bb563bb7229d6e575db53a8c15
+
+Identify the following items from the gist:
+
+| Field | Example | Description |
+| ------------ | ---------------------------------- | -------------------------------------------------------------------------------------------------- |
+| **Username** | `anikethsaha` | The gist's owner. |
+| **Gist ID** | `c2bece08f27c4277001f123898d16a7c` | Identifier for the gist. This is fixed for the gist's lifetime. |
+| **Filename** | `content.md` | Select a name of a file in the gist. This needed even on a single-file gist for embedding to work. |
+
+You will need those to build the _raw gist URL_ for the target file. This has the following format:
+
+- `https://gist.githubusercontent.com/USERNAME/GIST_ID/raw/FILENAME`
+
+Here are two examples based on the sample gist:
+
+- https://gist.githubusercontent.com/anikethsaha/f88893bb563bb7229d6e575db53a8c15/raw/content.md
+- https://gist.githubusercontent.com/anikethsaha/f88893bb563bb7229d6e575db53a8c15/raw/script.js
+
+> [!TIP] Alternatively, you can get a raw URL directly clicking the _Raw_ button on a gist file. But, if you use that approach, just be sure to **remove** the revision number between `raw/` and the filename so that the URL matches the pattern above instead. Otherwise your embedded gist will **not** show the latest content when the gist is updated.
+
+Continue with one of the sections below to embed the gist on a Docsify page.
+
+### Render markdown content from a gist
+
+This is a great way to embed content **seamlessly** in your docs, without sending someone to an external link. This approach is well-suited to reusing a gist of say installation instructions across doc sites of multiple repos. This approach works equally well with a gist owned by your account or by another user.
+
+Here is the format:
+
+```markdown
+[LABEL](https://gist.githubusercontent.com/USERNAME/GIST_ID/raw/FILENAME ':include')
+```
+
+For example:
+
+```markdown
+[gist: content.md](https://gist.githubusercontent.com/anikethsaha/f88893bb563bb7229d6e575db53a8c15/raw/content.md ':include')
+```
+
+Which renders as:
+
+[gist: content.md](https://gist.githubusercontent.com/anikethsaha/f88893bb563bb7229d6e575db53a8c15/raw/content.md ':include')
+
+The `LABEL` can be any text you want. It acts as a _fallback_ message if the link is broken - so it is useful to repeat the filename here in case you need to fix a broken link. It also makes an embedded element easy to read at a glance.
+
+### Render a codeblock from a gist
+
+The format is the same as the previous section, but with `:type=code` added to the alt text. As with the [Embedded file type](#embedded-file-type) section, the syntax highlighting will be **inferred** from the extension (e.g. `.js` or `.py`), so you can leave the `type` set as `code`.
+
+Here is the format:
+
+```markdown
+[LABEL](https://gist.githubusercontent.com/USERNAME/GIST_ID/raw/FILENAME ':include :type=code')
+```
+
+For example:
+
+```markdown
+[gist: script.js](https://gist.githubusercontent.com/anikethsaha/f88893bb563bb7229d6e575db53a8c15/raw/script.js ':include :type=code')
+```
+
+Which renders as:
+
+[gist: script.js](https://gist.githubusercontent.com/anikethsaha/f88893bb563bb7229d6e575db53a8c15/raw/script.js ':include :type=code')
diff --git a/docs/emoji.md b/docs/emoji.md
new file mode 100644
index 0000000000..84a4fd56f3
--- /dev/null
+++ b/docs/emoji.md
@@ -0,0 +1,3883 @@
+# Emoji
+
+Below is a complete list of emoji shorthand codes. Docsify can be configured to render emoji using GitHub-style emoji images or native emoji characters using the [`nativeEmoji`](configuration#nativeemoji) configuration option.
+
+
+
+
+
+:100: `:100:`
+
+:1234: `:1234:`
+
+:+1: `:+1:`
+
+:-1: `:-1:`
+
+:1st_place_medal: `:1st_place_medal:`
+
+:2nd_place_medal: `:2nd_place_medal:`
+
+:3rd_place_medal: `:3rd_place_medal:`
+
+:8ball: `:8ball:`
+
+:a: `:a:`
+
+:ab: `:ab:`
+
+:abacus: `:abacus:`
+
+:abc: `:abc:`
+
+:abcd: `:abcd:`
+
+:accept: `:accept:`
+
+:accessibility: `:accessibility:`
+
+:accordion: `:accordion:`
+
+:adhesive_bandage: `:adhesive_bandage:`
+
+:adult: `:adult:`
+
+:aerial_tramway: `:aerial_tramway:`
+
+:afghanistan: `:afghanistan:`
+
+:airplane: `:airplane:`
+
+:aland_islands: `:aland_islands:`
+
+:alarm_clock: `:alarm_clock:`
+
+:albania: `:albania:`
+
+:alembic: `:alembic:`
+
+:algeria: `:algeria:`
+
+:alien: `:alien:`
+
+:ambulance: `:ambulance:`
+
+:american_samoa: `:american_samoa:`
+
+:amphora: `:amphora:`
+
+:anatomical_heart: `:anatomical_heart:`
+
+:anchor: `:anchor:`
+
+:andorra: `:andorra:`
+
+:angel: `:angel:`
+
+:anger: `:anger:`
+
+:angola: `:angola:`
+
+:angry: `:angry:`
+
+:anguilla: `:anguilla:`
+
+:anguished: `:anguished:`
+
+:ant: `:ant:`
+
+:antarctica: `:antarctica:`
+
+:antigua_barbuda: `:antigua_barbuda:`
+
+:apple: `:apple:`
+
+:aquarius: `:aquarius:`
+
+:argentina: `:argentina:`
+
+:aries: `:aries:`
+
+:armenia: `:armenia:`
+
+:arrow_backward: `:arrow_backward:`
+
+:arrow_double_down: `:arrow_double_down:`
+
+:arrow_double_up: `:arrow_double_up:`
+
+:arrow_down: `:arrow_down:`
+
+:arrow_down_small: `:arrow_down_small:`
+
+:arrow_forward: `:arrow_forward:`
+
+:arrow_heading_down: `:arrow_heading_down:`
+
+:arrow_heading_up: `:arrow_heading_up:`
+
+:arrow_left: `:arrow_left:`
+
+:arrow_lower_left: `:arrow_lower_left:`
+
+:arrow_lower_right: `:arrow_lower_right:`
+
+:arrow_right: `:arrow_right:`
+
+:arrow_right_hook: `:arrow_right_hook:`
+
+:arrow_up: `:arrow_up:`
+
+:arrow_up_down: `:arrow_up_down:`
+
+:arrow_up_small: `:arrow_up_small:`
+
+:arrow_upper_left: `:arrow_upper_left:`
+
+:arrow_upper_right: `:arrow_upper_right:`
+
+:arrows_clockwise: `:arrows_clockwise:`
+
+:arrows_counterclockwise: `:arrows_counterclockwise:`
+
+:art: `:art:`
+
+:articulated_lorry: `:articulated_lorry:`
+
+:artificial_satellite: `:artificial_satellite:`
+
+:artist: `:artist:`
+
+:aruba: `:aruba:`
+
+:ascension_island: `:ascension_island:`
+
+:asterisk: `:asterisk:`
+
+:astonished: `:astonished:`
+
+:astronaut: `:astronaut:`
+
+:athletic_shoe: `:athletic_shoe:`
+
+:atm: `:atm:`
+
+:atom: `:atom:`
+
+:atom_symbol: `:atom_symbol:`
+
+:australia: `:australia:`
+
+:austria: `:austria:`
+
+:auto_rickshaw: `:auto_rickshaw:`
+
+:avocado: `:avocado:`
+
+:axe: `:axe:`
+
+:azerbaijan: `:azerbaijan:`
+
+:b: `:b:`
+
+:baby: `:baby:`
+
+:baby_bottle: `:baby_bottle:`
+
+:baby_chick: `:baby_chick:`
+
+:baby_symbol: `:baby_symbol:`
+
+:back: `:back:`
+
+:bacon: `:bacon:`
+
+:badger: `:badger:`
+
+:badminton: `:badminton:`
+
+:bagel: `:bagel:`
+
+:baggage_claim: `:baggage_claim:`
+
+:baguette_bread: `:baguette_bread:`
+
+:bahamas: `:bahamas:`
+
+:bahrain: `:bahrain:`
+
+:balance_scale: `:balance_scale:`
+
+:bald_man: `:bald_man:`
+
+:bald_woman: `:bald_woman:`
+
+:ballet_shoes: `:ballet_shoes:`
+
+:balloon: `:balloon:`
+
+:ballot_box: `:ballot_box:`
+
+:ballot_box_with_check: `:ballot_box_with_check:`
+
+:bamboo: `:bamboo:`
+
+:banana: `:banana:`
+
+:bangbang: `:bangbang:`
+
+:bangladesh: `:bangladesh:`
+
+:banjo: `:banjo:`
+
+:bank: `:bank:`
+
+:bar_chart: `:bar_chart:`
+
+:barbados: `:barbados:`
+
+:barber: `:barber:`
+
+:baseball: `:baseball:`
+
+:basecamp: `:basecamp:`
+
+:basecampy: `:basecampy:`
+
+:basket: `:basket:`
+
+:basketball: `:basketball:`
+
+:basketball_man: `:basketball_man:`
+
+:basketball_woman: `:basketball_woman:`
+
+:bat: `:bat:`
+
+:bath: `:bath:`
+
+:bathtub: `:bathtub:`
+
+:battery: `:battery:`
+
+:beach_umbrella: `:beach_umbrella:`
+
+:beans: `:beans:`
+
+:bear: `:bear:`
+
+:bearded_person: `:bearded_person:`
+
+:beaver: `:beaver:`
+
+:bed: `:bed:`
+
+:bee: `:bee:`
+
+:beer: `:beer:`
+
+:beers: `:beers:`
+
+:beetle: `:beetle:`
+
+:beginner: `:beginner:`
+
+:belarus: `:belarus:`
+
+:belgium: `:belgium:`
+
+:belize: `:belize:`
+
+:bell: `:bell:`
+
+:bell_pepper: `:bell_pepper:`
+
+:bellhop_bell: `:bellhop_bell:`
+
+:benin: `:benin:`
+
+:bento: `:bento:`
+
+:bermuda: `:bermuda:`
+
+:beverage_box: `:beverage_box:`
+
+:bhutan: `:bhutan:`
+
+:bicyclist: `:bicyclist:`
+
+:bike: `:bike:`
+
+:biking_man: `:biking_man:`
+
+:biking_woman: `:biking_woman:`
+
+:bikini: `:bikini:`
+
+:billed_cap: `:billed_cap:`
+
+:biohazard: `:biohazard:`
+
+:bird: `:bird:`
+
+:birthday: `:birthday:`
+
+:bison: `:bison:`
+
+:biting_lip: `:biting_lip:`
+
+:black_bird: `:black_bird:`
+
+:black_cat: `:black_cat:`
+
+:black_circle: `:black_circle:`
+
+:black_flag: `:black_flag:`
+
+:black_heart: `:black_heart:`
+
+:black_joker: `:black_joker:`
+
+:black_large_square: `:black_large_square:`
+
+:black_medium_small_square: `:black_medium_small_square:`
+
+:black_medium_square: `:black_medium_square:`
+
+:black_nib: `:black_nib:`
+
+:black_small_square: `:black_small_square:`
+
+:black_square_button: `:black_square_button:`
+
+:blond_haired_man: `:blond_haired_man:`
+
+:blond_haired_person: `:blond_haired_person:`
+
+:blond_haired_woman: `:blond_haired_woman:`
+
+:blonde_woman: `:blonde_woman:`
+
+:blossom: `:blossom:`
+
+:blowfish: `:blowfish:`
+
+:blue_book: `:blue_book:`
+
+:blue_car: `:blue_car:`
+
+:blue_heart: `:blue_heart:`
+
+:blue_square: `:blue_square:`
+
+:blueberries: `:blueberries:`
+
+:blush: `:blush:`
+
+:boar: `:boar:`
+
+:boat: `:boat:`
+
+:bolivia: `:bolivia:`
+
+:bomb: `:bomb:`
+
+:bone: `:bone:`
+
+:book: `:book:`
+
+:bookmark: `:bookmark:`
+
+:bookmark_tabs: `:bookmark_tabs:`
+
+:books: `:books:`
+
+:boom: `:boom:`
+
+:boomerang: `:boomerang:`
+
+:boot: `:boot:`
+
+:bosnia_herzegovina: `:bosnia_herzegovina:`
+
+:botswana: `:botswana:`
+
+:bouncing_ball_man: `:bouncing_ball_man:`
+
+:bouncing_ball_person: `:bouncing_ball_person:`
+
+:bouncing_ball_woman: `:bouncing_ball_woman:`
+
+:bouquet: `:bouquet:`
+
+:bouvet_island: `:bouvet_island:`
+
+:bow: `:bow:`
+
+:bow_and_arrow: `:bow_and_arrow:`
+
+:bowing_man: `:bowing_man:`
+
+:bowing_woman: `:bowing_woman:`
+
+:bowl_with_spoon: `:bowl_with_spoon:`
+
+:bowling: `:bowling:`
+
+:bowtie: `:bowtie:`
+
+:boxing_glove: `:boxing_glove:`
+
+:boy: `:boy:`
+
+:brain: `:brain:`
+
+:brazil: `:brazil:`
+
+:bread: `:bread:`
+
+:breast_feeding: `:breast_feeding:`
+
+:bricks: `:bricks:`
+
+:bride_with_veil: `:bride_with_veil:`
+
+:bridge_at_night: `:bridge_at_night:`
+
+:briefcase: `:briefcase:`
+
+:british_indian_ocean_territory: `:british_indian_ocean_territory:`
+
+:british_virgin_islands: `:british_virgin_islands:`
+
+:broccoli: `:broccoli:`
+
+:broken_heart: `:broken_heart:`
+
+:broom: `:broom:`
+
+:brown_circle: `:brown_circle:`
+
+:brown_heart: `:brown_heart:`
+
+:brown_square: `:brown_square:`
+
+:brunei: `:brunei:`
+
+:bubble_tea: `:bubble_tea:`
+
+:bubbles: `:bubbles:`
+
+:bucket: `:bucket:`
+
+:bug: `:bug:`
+
+:building_construction: `:building_construction:`
+
+:bulb: `:bulb:`
+
+:bulgaria: `:bulgaria:`
+
+:bullettrain_front: `:bullettrain_front:`
+
+:bullettrain_side: `:bullettrain_side:`
+
+:burkina_faso: `:burkina_faso:`
+
+:burrito: `:burrito:`
+
+:burundi: `:burundi:`
+
+:bus: `:bus:`
+
+:business_suit_levitating: `:business_suit_levitating:`
+
+:busstop: `:busstop:`
+
+:bust_in_silhouette: `:bust_in_silhouette:`
+
+:busts_in_silhouette: `:busts_in_silhouette:`
+
+:butter: `:butter:`
+
+:butterfly: `:butterfly:`
+
+:cactus: `:cactus:`
+
+:cake: `:cake:`
+
+:calendar: `:calendar:`
+
+:call_me_hand: `:call_me_hand:`
+
+:calling: `:calling:`
+
+:cambodia: `:cambodia:`
+
+:camel: `:camel:`
+
+:camera: `:camera:`
+
+:camera_flash: `:camera_flash:`
+
+:cameroon: `:cameroon:`
+
+:camping: `:camping:`
+
+:canada: `:canada:`
+
+:canary_islands: `:canary_islands:`
+
+:cancer: `:cancer:`
+
+:candle: `:candle:`
+
+:candy: `:candy:`
+
+:canned_food: `:canned_food:`
+
+:canoe: `:canoe:`
+
+:cape_verde: `:cape_verde:`
+
+:capital_abcd: `:capital_abcd:`
+
+:capricorn: `:capricorn:`
+
+:car: `:car:`
+
+:card_file_box: `:card_file_box:`
+
+:card_index: `:card_index:`
+
+:card_index_dividers: `:card_index_dividers:`
+
+:caribbean_netherlands: `:caribbean_netherlands:`
+
+:carousel_horse: `:carousel_horse:`
+
+:carpentry_saw: `:carpentry_saw:`
+
+:carrot: `:carrot:`
+
+:cartwheeling: `:cartwheeling:`
+
+:cat: `:cat:`
+
+:cat2: `:cat2:`
+
+:cayman_islands: `:cayman_islands:`
+
+:cd: `:cd:`
+
+:central_african_republic: `:central_african_republic:`
+
+:ceuta_melilla: `:ceuta_melilla:`
+
+:chad: `:chad:`
+
+:chains: `:chains:`
+
+:chair: `:chair:`
+
+:champagne: `:champagne:`
+
+:chart: `:chart:`
+
+:chart_with_downwards_trend: `:chart_with_downwards_trend:`
+
+:chart_with_upwards_trend: `:chart_with_upwards_trend:`
+
+:checkered_flag: `:checkered_flag:`
+
+:cheese: `:cheese:`
+
+:cherries: `:cherries:`
+
+:cherry_blossom: `:cherry_blossom:`
+
+:chess_pawn: `:chess_pawn:`
+
+:chestnut: `:chestnut:`
+
+:chicken: `:chicken:`
+
+:child: `:child:`
+
+:children_crossing: `:children_crossing:`
+
+:chile: `:chile:`
+
+:chipmunk: `:chipmunk:`
+
+:chocolate_bar: `:chocolate_bar:`
+
+:chopsticks: `:chopsticks:`
+
+:christmas_island: `:christmas_island:`
+
+:christmas_tree: `:christmas_tree:`
+
+:church: `:church:`
+
+:cinema: `:cinema:`
+
+:circus_tent: `:circus_tent:`
+
+:city_sunrise: `:city_sunrise:`
+
+:city_sunset: `:city_sunset:`
+
+:cityscape: `:cityscape:`
+
+:cl: `:cl:`
+
+:clamp: `:clamp:`
+
+:clap: `:clap:`
+
+:clapper: `:clapper:`
+
+:classical_building: `:classical_building:`
+
+:climbing: `:climbing:`
+
+:climbing_man: `:climbing_man:`
+
+:climbing_woman: `:climbing_woman:`
+
+:clinking_glasses: `:clinking_glasses:`
+
+:clipboard: `:clipboard:`
+
+:clipperton_island: `:clipperton_island:`
+
+:clock1: `:clock1:`
+
+:clock10: `:clock10:`
+
+:clock1030: `:clock1030:`
+
+:clock11: `:clock11:`
+
+:clock1130: `:clock1130:`
+
+:clock12: `:clock12:`
+
+:clock1230: `:clock1230:`
+
+:clock130: `:clock130:`
+
+:clock2: `:clock2:`
+
+:clock230: `:clock230:`
+
+:clock3: `:clock3:`
+
+:clock330: `:clock330:`
+
+:clock4: `:clock4:`
+
+:clock430: `:clock430:`
+
+:clock5: `:clock5:`
+
+:clock530: `:clock530:`
+
+:clock6: `:clock6:`
+
+:clock630: `:clock630:`
+
+:clock7: `:clock7:`
+
+:clock730: `:clock730:`
+
+:clock8: `:clock8:`
+
+:clock830: `:clock830:`
+
+:clock9: `:clock9:`
+
+:clock930: `:clock930:`
+
+:closed_book: `:closed_book:`
+
+:closed_lock_with_key: `:closed_lock_with_key:`
+
+:closed_umbrella: `:closed_umbrella:`
+
+:cloud: `:cloud:`
+
+:cloud_with_lightning: `:cloud_with_lightning:`
+
+:cloud_with_lightning_and_rain: `:cloud_with_lightning_and_rain:`
+
+:cloud_with_rain: `:cloud_with_rain:`
+
+:cloud_with_snow: `:cloud_with_snow:`
+
+:clown_face: `:clown_face:`
+
+:clubs: `:clubs:`
+
+:cn: `:cn:`
+
+:coat: `:coat:`
+
+:cockroach: `:cockroach:`
+
+:cocktail: `:cocktail:`
+
+:coconut: `:coconut:`
+
+:cocos_islands: `:cocos_islands:`
+
+:coffee: `:coffee:`
+
+:coffin: `:coffin:`
+
+:coin: `:coin:`
+
+:cold_face: `:cold_face:`
+
+:cold_sweat: `:cold_sweat:`
+
+:collision: `:collision:`
+
+:colombia: `:colombia:`
+
+:comet: `:comet:`
+
+:comoros: `:comoros:`
+
+:compass: `:compass:`
+
+:computer: `:computer:`
+
+:computer_mouse: `:computer_mouse:`
+
+:confetti_ball: `:confetti_ball:`
+
+:confounded: `:confounded:`
+
+:confused: `:confused:`
+
+:congo_brazzaville: `:congo_brazzaville:`
+
+:congo_kinshasa: `:congo_kinshasa:`
+
+:congratulations: `:congratulations:`
+
+:construction: `:construction:`
+
+:construction_worker: `:construction_worker:`
+
+:construction_worker_man: `:construction_worker_man:`
+
+:construction_worker_woman: `:construction_worker_woman:`
+
+:control_knobs: `:control_knobs:`
+
+:convenience_store: `:convenience_store:`
+
+:cook: `:cook:`
+
+:cook_islands: `:cook_islands:`
+
+:cookie: `:cookie:`
+
+:cool: `:cool:`
+
+:cop: `:cop:`
+
+:copilot: `:copilot:`
+
+:copyright: `:copyright:`
+
+:coral: `:coral:`
+
+:corn: `:corn:`
+
+:costa_rica: `:costa_rica:`
+
+:cote_divoire: `:cote_divoire:`
+
+:couch_and_lamp: `:couch_and_lamp:`
+
+:couple: `:couple:`
+
+:couple_with_heart: `:couple_with_heart:`
+
+:couple_with_heart_man_man: `:couple_with_heart_man_man:`
+
+:couple_with_heart_woman_man: `:couple_with_heart_woman_man:`
+
+:couple_with_heart_woman_woman: `:couple_with_heart_woman_woman:`
+
+:couplekiss: `:couplekiss:`
+
+:couplekiss_man_man: `:couplekiss_man_man:`
+
+:couplekiss_man_woman: `:couplekiss_man_woman:`
+
+:couplekiss_woman_woman: `:couplekiss_woman_woman:`
+
+:cow: `:cow:`
+
+:cow2: `:cow2:`
+
+:cowboy_hat_face: `:cowboy_hat_face:`
+
+:crab: `:crab:`
+
+:crayon: `:crayon:`
+
+:credit_card: `:credit_card:`
+
+:crescent_moon: `:crescent_moon:`
+
+:cricket: `:cricket:`
+
+:cricket_game: `:cricket_game:`
+
+:croatia: `:croatia:`
+
+:crocodile: `:crocodile:`
+
+:croissant: `:croissant:`
+
+:crossed_fingers: `:crossed_fingers:`
+
+:crossed_flags: `:crossed_flags:`
+
+:crossed_swords: `:crossed_swords:`
+
+:crown: `:crown:`
+
+:crutch: `:crutch:`
+
+:cry: `:cry:`
+
+:crying_cat_face: `:crying_cat_face:`
+
+:crystal_ball: `:crystal_ball:`
+
+:cuba: `:cuba:`
+
+:cucumber: `:cucumber:`
+
+:cup_with_straw: `:cup_with_straw:`
+
+:cupcake: `:cupcake:`
+
+:cupid: `:cupid:`
+
+:curacao: `:curacao:`
+
+:curling_stone: `:curling_stone:`
+
+:curly_haired_man: `:curly_haired_man:`
+
+:curly_haired_woman: `:curly_haired_woman:`
+
+:curly_loop: `:curly_loop:`
+
+:currency_exchange: `:currency_exchange:`
+
+:curry: `:curry:`
+
+:cursing_face: `:cursing_face:`
+
+:custard: `:custard:`
+
+:customs: `:customs:`
+
+:cut_of_meat: `:cut_of_meat:`
+
+:cyclone: `:cyclone:`
+
+:cyprus: `:cyprus:`
+
+:czech_republic: `:czech_republic:`
+
+:dagger: `:dagger:`
+
+:dancer: `:dancer:`
+
+:dancers: `:dancers:`
+
+:dancing_men: `:dancing_men:`
+
+:dancing_women: `:dancing_women:`
+
+:dango: `:dango:`
+
+:dark_sunglasses: `:dark_sunglasses:`
+
+:dart: `:dart:`
+
+:dash: `:dash:`
+
+:date: `:date:`
+
+:de: `:de:`
+
+:deaf_man: `:deaf_man:`
+
+:deaf_person: `:deaf_person:`
+
+:deaf_woman: `:deaf_woman:`
+
+:deciduous_tree: `:deciduous_tree:`
+
+:deer: `:deer:`
+
+:denmark: `:denmark:`
+
+:department_store: `:department_store:`
+
+:dependabot: `:dependabot:`
+
+:derelict_house: `:derelict_house:`
+
+:desert: `:desert:`
+
+:desert_island: `:desert_island:`
+
+:desktop_computer: `:desktop_computer:`
+
+:detective: `:detective:`
+
+:diamond_shape_with_a_dot_inside: `:diamond_shape_with_a_dot_inside:`
+
+:diamonds: `:diamonds:`
+
+:diego_garcia: `:diego_garcia:`
+
+:disappointed: `:disappointed:`
+
+:disappointed_relieved: `:disappointed_relieved:`
+
+:disguised_face: `:disguised_face:`
+
+:diving_mask: `:diving_mask:`
+
+:diya_lamp: `:diya_lamp:`
+
+:dizzy: `:dizzy:`
+
+:dizzy_face: `:dizzy_face:`
+
+:djibouti: `:djibouti:`
+
+:dna: `:dna:`
+
+:do_not_litter: `:do_not_litter:`
+
+:dodo: `:dodo:`
+
+:dog: `:dog:`
+
+:dog2: `:dog2:`
+
+:dollar: `:dollar:`
+
+:dolls: `:dolls:`
+
+:dolphin: `:dolphin:`
+
+:dominica: `:dominica:`
+
+:dominican_republic: `:dominican_republic:`
+
+:donkey: `:donkey:`
+
+:door: `:door:`
+
+:dotted_line_face: `:dotted_line_face:`
+
+:doughnut: `:doughnut:`
+
+:dove: `:dove:`
+
+:dragon: `:dragon:`
+
+:dragon_face: `:dragon_face:`
+
+:dress: `:dress:`
+
+:dromedary_camel: `:dromedary_camel:`
+
+:drooling_face: `:drooling_face:`
+
+:drop_of_blood: `:drop_of_blood:`
+
+:droplet: `:droplet:`
+
+:drum: `:drum:`
+
+:duck: `:duck:`
+
+:dumpling: `:dumpling:`
+
+:dvd: `:dvd:`
+
+:e-mail: `:e-mail:`
+
+:eagle: `:eagle:`
+
+:ear: `:ear:`
+
+:ear_of_rice: `:ear_of_rice:`
+
+:ear_with_hearing_aid: `:ear_with_hearing_aid:`
+
+:earth_africa: `:earth_africa:`
+
+:earth_americas: `:earth_americas:`
+
+:earth_asia: `:earth_asia:`
+
+:ecuador: `:ecuador:`
+
+:egg: `:egg:`
+
+:eggplant: `:eggplant:`
+
+:egypt: `:egypt:`
+
+:eight: `:eight:`
+
+:eight_pointed_black_star: `:eight_pointed_black_star:`
+
+:eight_spoked_asterisk: `:eight_spoked_asterisk:`
+
+:eject_button: `:eject_button:`
+
+:el_salvador: `:el_salvador:`
+
+:electric_plug: `:electric_plug:`
+
+:electron: `:electron:`
+
+:elephant: `:elephant:`
+
+:elevator: `:elevator:`
+
+:elf: `:elf:`
+
+:elf_man: `:elf_man:`
+
+:elf_woman: `:elf_woman:`
+
+:email: `:email:`
+
+:empty_nest: `:empty_nest:`
+
+:end: `:end:`
+
+:england: `:england:`
+
+:envelope: `:envelope:`
+
+:envelope_with_arrow: `:envelope_with_arrow:`
+
+:equatorial_guinea: `:equatorial_guinea:`
+
+:eritrea: `:eritrea:`
+
+:es: `:es:`
+
+:estonia: `:estonia:`
+
+:ethiopia: `:ethiopia:`
+
+:eu: `:eu:`
+
+:euro: `:euro:`
+
+:european_castle: `:european_castle:`
+
+:european_post_office: `:european_post_office:`
+
+:european_union: `:european_union:`
+
+:evergreen_tree: `:evergreen_tree:`
+
+:exclamation: `:exclamation:`
+
+:exploding_head: `:exploding_head:`
+
+:expressionless: `:expressionless:`
+
+:eye: `:eye:`
+
+:eye_speech_bubble: `:eye_speech_bubble:`
+
+:eyeglasses: `:eyeglasses:`
+
+:eyes: `:eyes:`
+
+:face_exhaling: `:face_exhaling:`
+
+:face_holding_back_tears: `:face_holding_back_tears:`
+
+:face_in_clouds: `:face_in_clouds:`
+
+:face_with_diagonal_mouth: `:face_with_diagonal_mouth:`
+
+:face_with_head_bandage: `:face_with_head_bandage:`
+
+:face_with_open_eyes_and_hand_over_mouth: `:face_with_open_eyes_and_hand_over_mouth:`
+
+:face_with_peeking_eye: `:face_with_peeking_eye:`
+
+:face_with_spiral_eyes: `:face_with_spiral_eyes:`
+
+:face_with_thermometer: `:face_with_thermometer:`
+
+:facepalm: `:facepalm:`
+
+:facepunch: `:facepunch:`
+
+:factory: `:factory:`
+
+:factory_worker: `:factory_worker:`
+
+:fairy: `:fairy:`
+
+:fairy_man: `:fairy_man:`
+
+:fairy_woman: `:fairy_woman:`
+
+:falafel: `:falafel:`
+
+:falkland_islands: `:falkland_islands:`
+
+:fallen_leaf: `:fallen_leaf:`
+
+:family: `:family:`
+
+:family_man_boy: `:family_man_boy:`
+
+:family_man_boy_boy: `:family_man_boy_boy:`
+
+:family_man_girl: `:family_man_girl:`
+
+:family_man_girl_boy: `:family_man_girl_boy:`
+
+:family_man_girl_girl: `:family_man_girl_girl:`
+
+:family_man_man_boy: `:family_man_man_boy:`
+
+:family_man_man_boy_boy: `:family_man_man_boy_boy:`
+
+:family_man_man_girl: `:family_man_man_girl:`
+
+:family_man_man_girl_boy: `:family_man_man_girl_boy:`
+
+:family_man_man_girl_girl: `:family_man_man_girl_girl:`
+
+:family_man_woman_boy: `:family_man_woman_boy:`
+
+:family_man_woman_boy_boy: `:family_man_woman_boy_boy:`
+
+:family_man_woman_girl: `:family_man_woman_girl:`
+
+:family_man_woman_girl_boy: `:family_man_woman_girl_boy:`
+
+:family_man_woman_girl_girl: `:family_man_woman_girl_girl:`
+
+:family_woman_boy: `:family_woman_boy:`
+
+:family_woman_boy_boy: `:family_woman_boy_boy:`
+
+:family_woman_girl: `:family_woman_girl:`
+
+:family_woman_girl_boy: `:family_woman_girl_boy:`
+
+:family_woman_girl_girl: `:family_woman_girl_girl:`
+
+:family_woman_woman_boy: `:family_woman_woman_boy:`
+
+:family_woman_woman_boy_boy: `:family_woman_woman_boy_boy:`
+
+:family_woman_woman_girl: `:family_woman_woman_girl:`
+
+:family_woman_woman_girl_boy: `:family_woman_woman_girl_boy:`
+
+:family_woman_woman_girl_girl: `:family_woman_woman_girl_girl:`
+
+:farmer: `:farmer:`
+
+:faroe_islands: `:faroe_islands:`
+
+:fast_forward: `:fast_forward:`
+
+:fax: `:fax:`
+
+:fearful: `:fearful:`
+
+:feather: `:feather:`
+
+:feelsgood: `:feelsgood:`
+
+:feet: `:feet:`
+
+:female_detective: `:female_detective:`
+
+:female_sign: `:female_sign:`
+
+:ferris_wheel: `:ferris_wheel:`
+
+:ferry: `:ferry:`
+
+:field_hockey: `:field_hockey:`
+
+:fiji: `:fiji:`
+
+:file_cabinet: `:file_cabinet:`
+
+:file_folder: `:file_folder:`
+
+:film_projector: `:film_projector:`
+
+:film_strip: `:film_strip:`
+
+:finland: `:finland:`
+
+:finnadie: `:finnadie:`
+
+:fire: `:fire:`
+
+:fire_engine: `:fire_engine:`
+
+:fire_extinguisher: `:fire_extinguisher:`
+
+:firecracker: `:firecracker:`
+
+:firefighter: `:firefighter:`
+
+:fireworks: `:fireworks:`
+
+:first_quarter_moon: `:first_quarter_moon:`
+
+:first_quarter_moon_with_face: `:first_quarter_moon_with_face:`
+
+:fish: `:fish:`
+
+:fish_cake: `:fish_cake:`
+
+:fishing_pole_and_fish: `:fishing_pole_and_fish:`
+
+:fishsticks: `:fishsticks:`
+
+:fist: `:fist:`
+
+:fist_left: `:fist_left:`
+
+:fist_oncoming: `:fist_oncoming:`
+
+:fist_raised: `:fist_raised:`
+
+:fist_right: `:fist_right:`
+
+:five: `:five:`
+
+:flags: `:flags:`
+
+:flamingo: `:flamingo:`
+
+:flashlight: `:flashlight:`
+
+:flat_shoe: `:flat_shoe:`
+
+:flatbread: `:flatbread:`
+
+:fleur_de_lis: `:fleur_de_lis:`
+
+:flight_arrival: `:flight_arrival:`
+
+:flight_departure: `:flight_departure:`
+
+:flipper: `:flipper:`
+
+:floppy_disk: `:floppy_disk:`
+
+:flower_playing_cards: `:flower_playing_cards:`
+
+:flushed: `:flushed:`
+
+:flute: `:flute:`
+
+:fly: `:fly:`
+
+:flying_disc: `:flying_disc:`
+
+:flying_saucer: `:flying_saucer:`
+
+:fog: `:fog:`
+
+:foggy: `:foggy:`
+
+:folding_hand_fan: `:folding_hand_fan:`
+
+:fondue: `:fondue:`
+
+:foot: `:foot:`
+
+:football: `:football:`
+
+:footprints: `:footprints:`
+
+:fork_and_knife: `:fork_and_knife:`
+
+:fortune_cookie: `:fortune_cookie:`
+
+:fountain: `:fountain:`
+
+:fountain_pen: `:fountain_pen:`
+
+:four: `:four:`
+
+:four_leaf_clover: `:four_leaf_clover:`
+
+:fox_face: `:fox_face:`
+
+:fr: `:fr:`
+
+:framed_picture: `:framed_picture:`
+
+:free: `:free:`
+
+:french_guiana: `:french_guiana:`
+
+:french_polynesia: `:french_polynesia:`
+
+:french_southern_territories: `:french_southern_territories:`
+
+:fried_egg: `:fried_egg:`
+
+:fried_shrimp: `:fried_shrimp:`
+
+:fries: `:fries:`
+
+:frog: `:frog:`
+
+:frowning: `:frowning:`
+
+:frowning_face: `:frowning_face:`
+
+:frowning_man: `:frowning_man:`
+
+:frowning_person: `:frowning_person:`
+
+:frowning_woman: `:frowning_woman:`
+
+:fu: `:fu:`
+
+:fuelpump: `:fuelpump:`
+
+:full_moon: `:full_moon:`
+
+:full_moon_with_face: `:full_moon_with_face:`
+
+:funeral_urn: `:funeral_urn:`
+
+:gabon: `:gabon:`
+
+:gambia: `:gambia:`
+
+:game_die: `:game_die:`
+
+:garlic: `:garlic:`
+
+:gb: `:gb:`
+
+:gear: `:gear:`
+
+:gem: `:gem:`
+
+:gemini: `:gemini:`
+
+:genie: `:genie:`
+
+:genie_man: `:genie_man:`
+
+:genie_woman: `:genie_woman:`
+
+:georgia: `:georgia:`
+
+:ghana: `:ghana:`
+
+:ghost: `:ghost:`
+
+:gibraltar: `:gibraltar:`
+
+:gift: `:gift:`
+
+:gift_heart: `:gift_heart:`
+
+:ginger_root: `:ginger_root:`
+
+:giraffe: `:giraffe:`
+
+:girl: `:girl:`
+
+:globe_with_meridians: `:globe_with_meridians:`
+
+:gloves: `:gloves:`
+
+:goal_net: `:goal_net:`
+
+:goat: `:goat:`
+
+:goberserk: `:goberserk:`
+
+:godmode: `:godmode:`
+
+:goggles: `:goggles:`
+
+:golf: `:golf:`
+
+:golfing: `:golfing:`
+
+:golfing_man: `:golfing_man:`
+
+:golfing_woman: `:golfing_woman:`
+
+:goose: `:goose:`
+
+:gorilla: `:gorilla:`
+
+:grapes: `:grapes:`
+
+:greece: `:greece:`
+
+:green_apple: `:green_apple:`
+
+:green_book: `:green_book:`
+
+:green_circle: `:green_circle:`
+
+:green_heart: `:green_heart:`
+
+:green_salad: `:green_salad:`
+
+:green_square: `:green_square:`
+
+:greenland: `:greenland:`
+
+:grenada: `:grenada:`
+
+:grey_exclamation: `:grey_exclamation:`
+
+:grey_heart: `:grey_heart:`
+
+:grey_question: `:grey_question:`
+
+:grimacing: `:grimacing:`
+
+:grin: `:grin:`
+
+:grinning: `:grinning:`
+
+:guadeloupe: `:guadeloupe:`
+
+:guam: `:guam:`
+
+:guard: `:guard:`
+
+:guardsman: `:guardsman:`
+
+:guardswoman: `:guardswoman:`
+
+:guatemala: `:guatemala:`
+
+:guernsey: `:guernsey:`
+
+:guide_dog: `:guide_dog:`
+
+:guinea: `:guinea:`
+
+:guinea_bissau: `:guinea_bissau:`
+
+:guitar: `:guitar:`
+
+:gun: `:gun:`
+
+:guyana: `:guyana:`
+
+:hair_pick: `:hair_pick:`
+
+:haircut: `:haircut:`
+
+:haircut_man: `:haircut_man:`
+
+:haircut_woman: `:haircut_woman:`
+
+:haiti: `:haiti:`
+
+:hamburger: `:hamburger:`
+
+:hammer: `:hammer:`
+
+:hammer_and_pick: `:hammer_and_pick:`
+
+:hammer_and_wrench: `:hammer_and_wrench:`
+
+:hamsa: `:hamsa:`
+
+:hamster: `:hamster:`
+
+:hand: `:hand:`
+
+:hand_over_mouth: `:hand_over_mouth:`
+
+:hand_with_index_finger_and_thumb_crossed: `:hand_with_index_finger_and_thumb_crossed:`
+
+:handbag: `:handbag:`
+
+:handball_person: `:handball_person:`
+
+:handshake: `:handshake:`
+
+:hankey: `:hankey:`
+
+:hash: `:hash:`
+
+:hatched_chick: `:hatched_chick:`
+
+:hatching_chick: `:hatching_chick:`
+
+:headphones: `:headphones:`
+
+:headstone: `:headstone:`
+
+:health_worker: `:health_worker:`
+
+:hear_no_evil: `:hear_no_evil:`
+
+:heard_mcdonald_islands: `:heard_mcdonald_islands:`
+
+:heart: `:heart:`
+
+:heart_decoration: `:heart_decoration:`
+
+:heart_eyes: `:heart_eyes:`
+
+:heart_eyes_cat: `:heart_eyes_cat:`
+
+:heart_hands: `:heart_hands:`
+
+:heart_on_fire: `:heart_on_fire:`
+
+:heartbeat: `:heartbeat:`
+
+:heartpulse: `:heartpulse:`
+
+:hearts: `:hearts:`
+
+:heavy_check_mark: `:heavy_check_mark:`
+
+:heavy_division_sign: `:heavy_division_sign:`
+
+:heavy_dollar_sign: `:heavy_dollar_sign:`
+
+:heavy_equals_sign: `:heavy_equals_sign:`
+
+:heavy_exclamation_mark: `:heavy_exclamation_mark:`
+
+:heavy_heart_exclamation: `:heavy_heart_exclamation:`
+
+:heavy_minus_sign: `:heavy_minus_sign:`
+
+:heavy_multiplication_x: `:heavy_multiplication_x:`
+
+:heavy_plus_sign: `:heavy_plus_sign:`
+
+:hedgehog: `:hedgehog:`
+
+:helicopter: `:helicopter:`
+
+:herb: `:herb:`
+
+:hibiscus: `:hibiscus:`
+
+:high_brightness: `:high_brightness:`
+
+:high_heel: `:high_heel:`
+
+:hiking_boot: `:hiking_boot:`
+
+:hindu_temple: `:hindu_temple:`
+
+:hippopotamus: `:hippopotamus:`
+
+:hocho: `:hocho:`
+
+:hole: `:hole:`
+
+:honduras: `:honduras:`
+
+:honey_pot: `:honey_pot:`
+
+:honeybee: `:honeybee:`
+
+:hong_kong: `:hong_kong:`
+
+:hook: `:hook:`
+
+:horse: `:horse:`
+
+:horse_racing: `:horse_racing:`
+
+:hospital: `:hospital:`
+
+:hot_face: `:hot_face:`
+
+:hot_pepper: `:hot_pepper:`
+
+:hotdog: `:hotdog:`
+
+:hotel: `:hotel:`
+
+:hotsprings: `:hotsprings:`
+
+:hourglass: `:hourglass:`
+
+:hourglass_flowing_sand: `:hourglass_flowing_sand:`
+
+:house: `:house:`
+
+:house_with_garden: `:house_with_garden:`
+
+:houses: `:houses:`
+
+:hugs: `:hugs:`
+
+:hungary: `:hungary:`
+
+:hurtrealbad: `:hurtrealbad:`
+
+:hushed: `:hushed:`
+
+:hut: `:hut:`
+
+:hyacinth: `:hyacinth:`
+
+:ice_cream: `:ice_cream:`
+
+:ice_cube: `:ice_cube:`
+
+:ice_hockey: `:ice_hockey:`
+
+:ice_skate: `:ice_skate:`
+
+:icecream: `:icecream:`
+
+:iceland: `:iceland:`
+
+:id: `:id:`
+
+:identification_card: `:identification_card:`
+
+:ideograph_advantage: `:ideograph_advantage:`
+
+:imp: `:imp:`
+
+:inbox_tray: `:inbox_tray:`
+
+:incoming_envelope: `:incoming_envelope:`
+
+:index_pointing_at_the_viewer: `:index_pointing_at_the_viewer:`
+
+:india: `:india:`
+
+:indonesia: `:indonesia:`
+
+:infinity: `:infinity:`
+
+:information_desk_person: `:information_desk_person:`
+
+:information_source: `:information_source:`
+
+:innocent: `:innocent:`
+
+:interrobang: `:interrobang:`
+
+:iphone: `:iphone:`
+
+:iran: `:iran:`
+
+:iraq: `:iraq:`
+
+:ireland: `:ireland:`
+
+:isle_of_man: `:isle_of_man:`
+
+:israel: `:israel:`
+
+:it: `:it:`
+
+:izakaya_lantern: `:izakaya_lantern:`
+
+:jack_o_lantern: `:jack_o_lantern:`
+
+:jamaica: `:jamaica:`
+
+:japan: `:japan:`
+
+:japanese_castle: `:japanese_castle:`
+
+:japanese_goblin: `:japanese_goblin:`
+
+:japanese_ogre: `:japanese_ogre:`
+
+:jar: `:jar:`
+
+:jeans: `:jeans:`
+
+:jellyfish: `:jellyfish:`
+
+:jersey: `:jersey:`
+
+:jigsaw: `:jigsaw:`
+
+:jordan: `:jordan:`
+
+:joy: `:joy:`
+
+:joy_cat: `:joy_cat:`
+
+:joystick: `:joystick:`
+
+:jp: `:jp:`
+
+:judge: `:judge:`
+
+:juggling_person: `:juggling_person:`
+
+:kaaba: `:kaaba:`
+
+:kangaroo: `:kangaroo:`
+
+:kazakhstan: `:kazakhstan:`
+
+:kenya: `:kenya:`
+
+:key: `:key:`
+
+:keyboard: `:keyboard:`
+
+:keycap_ten: `:keycap_ten:`
+
+:khanda: `:khanda:`
+
+:kick_scooter: `:kick_scooter:`
+
+:kimono: `:kimono:`
+
+:kiribati: `:kiribati:`
+
+:kiss: `:kiss:`
+
+:kissing: `:kissing:`
+
+:kissing_cat: `:kissing_cat:`
+
+:kissing_closed_eyes: `:kissing_closed_eyes:`
+
+:kissing_heart: `:kissing_heart:`
+
+:kissing_smiling_eyes: `:kissing_smiling_eyes:`
+
+:kite: `:kite:`
+
+:kiwi_fruit: `:kiwi_fruit:`
+
+:kneeling_man: `:kneeling_man:`
+
+:kneeling_person: `:kneeling_person:`
+
+:kneeling_woman: `:kneeling_woman:`
+
+:knife: `:knife:`
+
+:knot: `:knot:`
+
+:koala: `:koala:`
+
+:koko: `:koko:`
+
+:kosovo: `:kosovo:`
+
+:kr: `:kr:`
+
+:kuwait: `:kuwait:`
+
+:kyrgyzstan: `:kyrgyzstan:`
+
+:lab_coat: `:lab_coat:`
+
+:label: `:label:`
+
+:lacrosse: `:lacrosse:`
+
+:ladder: `:ladder:`
+
+:lady_beetle: `:lady_beetle:`
+
+:lantern: `:lantern:`
+
+:laos: `:laos:`
+
+:large_blue_circle: `:large_blue_circle:`
+
+:large_blue_diamond: `:large_blue_diamond:`
+
+:large_orange_diamond: `:large_orange_diamond:`
+
+:last_quarter_moon: `:last_quarter_moon:`
+
+:last_quarter_moon_with_face: `:last_quarter_moon_with_face:`
+
+:latin_cross: `:latin_cross:`
+
+:latvia: `:latvia:`
+
+:laughing: `:laughing:`
+
+:leafy_green: `:leafy_green:`
+
+:leaves: `:leaves:`
+
+:lebanon: `:lebanon:`
+
+:ledger: `:ledger:`
+
+:left_luggage: `:left_luggage:`
+
+:left_right_arrow: `:left_right_arrow:`
+
+:left_speech_bubble: `:left_speech_bubble:`
+
+:leftwards_arrow_with_hook: `:leftwards_arrow_with_hook:`
+
+:leftwards_hand: `:leftwards_hand:`
+
+:leftwards_pushing_hand: `:leftwards_pushing_hand:`
+
+:leg: `:leg:`
+
+:lemon: `:lemon:`
+
+:leo: `:leo:`
+
+:leopard: `:leopard:`
+
+:lesotho: `:lesotho:`
+
+:level_slider: `:level_slider:`
+
+:liberia: `:liberia:`
+
+:libra: `:libra:`
+
+:libya: `:libya:`
+
+:liechtenstein: `:liechtenstein:`
+
+:light_blue_heart: `:light_blue_heart:`
+
+:light_rail: `:light_rail:`
+
+:link: `:link:`
+
+:lion: `:lion:`
+
+:lips: `:lips:`
+
+:lipstick: `:lipstick:`
+
+:lithuania: `:lithuania:`
+
+:lizard: `:lizard:`
+
+:llama: `:llama:`
+
+:lobster: `:lobster:`
+
+:lock: `:lock:`
+
+:lock_with_ink_pen: `:lock_with_ink_pen:`
+
+:lollipop: `:lollipop:`
+
+:long_drum: `:long_drum:`
+
+:loop: `:loop:`
+
+:lotion_bottle: `:lotion_bottle:`
+
+:lotus: `:lotus:`
+
+:lotus_position: `:lotus_position:`
+
+:lotus_position_man: `:lotus_position_man:`
+
+:lotus_position_woman: `:lotus_position_woman:`
+
+:loud_sound: `:loud_sound:`
+
+:loudspeaker: `:loudspeaker:`
+
+:love_hotel: `:love_hotel:`
+
+:love_letter: `:love_letter:`
+
+:love_you_gesture: `:love_you_gesture:`
+
+:low_battery: `:low_battery:`
+
+:low_brightness: `:low_brightness:`
+
+:luggage: `:luggage:`
+
+:lungs: `:lungs:`
+
+:luxembourg: `:luxembourg:`
+
+:lying_face: `:lying_face:`
+
+:m: `:m:`
+
+:macau: `:macau:`
+
+:macedonia: `:macedonia:`
+
+:madagascar: `:madagascar:`
+
+:mag: `:mag:`
+
+:mag_right: `:mag_right:`
+
+:mage: `:mage:`
+
+:mage_man: `:mage_man:`
+
+:mage_woman: `:mage_woman:`
+
+:magic_wand: `:magic_wand:`
+
+:magnet: `:magnet:`
+
+:mahjong: `:mahjong:`
+
+:mailbox: `:mailbox:`
+
+:mailbox_closed: `:mailbox_closed:`
+
+:mailbox_with_mail: `:mailbox_with_mail:`
+
+:mailbox_with_no_mail: `:mailbox_with_no_mail:`
+
+:malawi: `:malawi:`
+
+:malaysia: `:malaysia:`
+
+:maldives: `:maldives:`
+
+:male_detective: `:male_detective:`
+
+:male_sign: `:male_sign:`
+
+:mali: `:mali:`
+
+:malta: `:malta:`
+
+:mammoth: `:mammoth:`
+
+:man: `:man:`
+
+:man_artist: `:man_artist:`
+
+:man_astronaut: `:man_astronaut:`
+
+:man_beard: `:man_beard:`
+
+:man_cartwheeling: `:man_cartwheeling:`
+
+:man_cook: `:man_cook:`
+
+:man_dancing: `:man_dancing:`
+
+:man_facepalming: `:man_facepalming:`
+
+:man_factory_worker: `:man_factory_worker:`
+
+:man_farmer: `:man_farmer:`
+
+:man_feeding_baby: `:man_feeding_baby:`
+
+:man_firefighter: `:man_firefighter:`
+
+:man_health_worker: `:man_health_worker:`
+
+:man_in_manual_wheelchair: `:man_in_manual_wheelchair:`
+
+:man_in_motorized_wheelchair: `:man_in_motorized_wheelchair:`
+
+:man_in_tuxedo: `:man_in_tuxedo:`
+
+:man_judge: `:man_judge:`
+
+:man_juggling: `:man_juggling:`
+
+:man_mechanic: `:man_mechanic:`
+
+:man_office_worker: `:man_office_worker:`
+
+:man_pilot: `:man_pilot:`
+
+:man_playing_handball: `:man_playing_handball:`
+
+:man_playing_water_polo: `:man_playing_water_polo:`
+
+:man_scientist: `:man_scientist:`
+
+:man_shrugging: `:man_shrugging:`
+
+:man_singer: `:man_singer:`
+
+:man_student: `:man_student:`
+
+:man_teacher: `:man_teacher:`
+
+:man_technologist: `:man_technologist:`
+
+:man_with_gua_pi_mao: `:man_with_gua_pi_mao:`
+
+:man_with_probing_cane: `:man_with_probing_cane:`
+
+:man_with_turban: `:man_with_turban:`
+
+:man_with_veil: `:man_with_veil:`
+
+:mandarin: `:mandarin:`
+
+:mango: `:mango:`
+
+:mans_shoe: `:mans_shoe:`
+
+:mantelpiece_clock: `:mantelpiece_clock:`
+
+:manual_wheelchair: `:manual_wheelchair:`
+
+:maple_leaf: `:maple_leaf:`
+
+:maracas: `:maracas:`
+
+:marshall_islands: `:marshall_islands:`
+
+:martial_arts_uniform: `:martial_arts_uniform:`
+
+:martinique: `:martinique:`
+
+:mask: `:mask:`
+
+:massage: `:massage:`
+
+:massage_man: `:massage_man:`
+
+:massage_woman: `:massage_woman:`
+
+:mate: `:mate:`
+
+:mauritania: `:mauritania:`
+
+:mauritius: `:mauritius:`
+
+:mayotte: `:mayotte:`
+
+:meat_on_bone: `:meat_on_bone:`
+
+:mechanic: `:mechanic:`
+
+:mechanical_arm: `:mechanical_arm:`
+
+:mechanical_leg: `:mechanical_leg:`
+
+:medal_military: `:medal_military:`
+
+:medal_sports: `:medal_sports:`
+
+:medical_symbol: `:medical_symbol:`
+
+:mega: `:mega:`
+
+:melon: `:melon:`
+
+:melting_face: `:melting_face:`
+
+:memo: `:memo:`
+
+:men_wrestling: `:men_wrestling:`
+
+:mending_heart: `:mending_heart:`
+
+:menorah: `:menorah:`
+
+:mens: `:mens:`
+
+:mermaid: `:mermaid:`
+
+:merman: `:merman:`
+
+:merperson: `:merperson:`
+
+:metal: `:metal:`
+
+:metro: `:metro:`
+
+:mexico: `:mexico:`
+
+:microbe: `:microbe:`
+
+:micronesia: `:micronesia:`
+
+:microphone: `:microphone:`
+
+:microscope: `:microscope:`
+
+:middle_finger: `:middle_finger:`
+
+:military_helmet: `:military_helmet:`
+
+:milk_glass: `:milk_glass:`
+
+:milky_way: `:milky_way:`
+
+:minibus: `:minibus:`
+
+:minidisc: `:minidisc:`
+
+:mirror: `:mirror:`
+
+:mirror_ball: `:mirror_ball:`
+
+:mobile_phone_off: `:mobile_phone_off:`
+
+:moldova: `:moldova:`
+
+:monaco: `:monaco:`
+
+:money_mouth_face: `:money_mouth_face:`
+
+:money_with_wings: `:money_with_wings:`
+
+:moneybag: `:moneybag:`
+
+:mongolia: `:mongolia:`
+
+:monkey: `:monkey:`
+
+:monkey_face: `:monkey_face:`
+
+:monocle_face: `:monocle_face:`
+
+:monorail: `:monorail:`
+
+:montenegro: `:montenegro:`
+
+:montserrat: `:montserrat:`
+
+:moon: `:moon:`
+
+:moon_cake: `:moon_cake:`
+
+:moose: `:moose:`
+
+:morocco: `:morocco:`
+
+:mortar_board: `:mortar_board:`
+
+:mosque: `:mosque:`
+
+:mosquito: `:mosquito:`
+
+:motor_boat: `:motor_boat:`
+
+:motor_scooter: `:motor_scooter:`
+
+:motorcycle: `:motorcycle:`
+
+:motorized_wheelchair: `:motorized_wheelchair:`
+
+:motorway: `:motorway:`
+
+:mount_fuji: `:mount_fuji:`
+
+:mountain: `:mountain:`
+
+:mountain_bicyclist: `:mountain_bicyclist:`
+
+:mountain_biking_man: `:mountain_biking_man:`
+
+:mountain_biking_woman: `:mountain_biking_woman:`
+
+:mountain_cableway: `:mountain_cableway:`
+
+:mountain_railway: `:mountain_railway:`
+
+:mountain_snow: `:mountain_snow:`
+
+:mouse: `:mouse:`
+
+:mouse2: `:mouse2:`
+
+:mouse_trap: `:mouse_trap:`
+
+:movie_camera: `:movie_camera:`
+
+:moyai: `:moyai:`
+
+:mozambique: `:mozambique:`
+
+:mrs_claus: `:mrs_claus:`
+
+:muscle: `:muscle:`
+
+:mushroom: `:mushroom:`
+
+:musical_keyboard: `:musical_keyboard:`
+
+:musical_note: `:musical_note:`
+
+:musical_score: `:musical_score:`
+
+:mute: `:mute:`
+
+:mx_claus: `:mx_claus:`
+
+:myanmar: `:myanmar:`
+
+:nail_care: `:nail_care:`
+
+:name_badge: `:name_badge:`
+
+:namibia: `:namibia:`
+
+:national_park: `:national_park:`
+
+:nauru: `:nauru:`
+
+:nauseated_face: `:nauseated_face:`
+
+:nazar_amulet: `:nazar_amulet:`
+
+:neckbeard: `:neckbeard:`
+
+:necktie: `:necktie:`
+
+:negative_squared_cross_mark: `:negative_squared_cross_mark:`
+
+:nepal: `:nepal:`
+
+:nerd_face: `:nerd_face:`
+
+:nest_with_eggs: `:nest_with_eggs:`
+
+:nesting_dolls: `:nesting_dolls:`
+
+:netherlands: `:netherlands:`
+
+:neutral_face: `:neutral_face:`
+
+:new: `:new:`
+
+:new_caledonia: `:new_caledonia:`
+
+:new_moon: `:new_moon:`
+
+:new_moon_with_face: `:new_moon_with_face:`
+
+:new_zealand: `:new_zealand:`
+
+:newspaper: `:newspaper:`
+
+:newspaper_roll: `:newspaper_roll:`
+
+:next_track_button: `:next_track_button:`
+
+:ng: `:ng:`
+
+:ng_man: `:ng_man:`
+
+:ng_woman: `:ng_woman:`
+
+:nicaragua: `:nicaragua:`
+
+:niger: `:niger:`
+
+:nigeria: `:nigeria:`
+
+:night_with_stars: `:night_with_stars:`
+
+:nine: `:nine:`
+
+:ninja: `:ninja:`
+
+:niue: `:niue:`
+
+:no_bell: `:no_bell:`
+
+:no_bicycles: `:no_bicycles:`
+
+:no_entry: `:no_entry:`
+
+:no_entry_sign: `:no_entry_sign:`
+
+:no_good: `:no_good:`
+
+:no_good_man: `:no_good_man:`
+
+:no_good_woman: `:no_good_woman:`
+
+:no_mobile_phones: `:no_mobile_phones:`
+
+:no_mouth: `:no_mouth:`
+
+:no_pedestrians: `:no_pedestrians:`
+
+:no_smoking: `:no_smoking:`
+
+:non-potable_water: `:non-potable_water:`
+
+:norfolk_island: `:norfolk_island:`
+
+:north_korea: `:north_korea:`
+
+:northern_mariana_islands: `:northern_mariana_islands:`
+
+:norway: `:norway:`
+
+:nose: `:nose:`
+
+:notebook: `:notebook:`
+
+:notebook_with_decorative_cover: `:notebook_with_decorative_cover:`
+
+:notes: `:notes:`
+
+:nut_and_bolt: `:nut_and_bolt:`
+
+:o: `:o:`
+
+:o2: `:o2:`
+
+:ocean: `:ocean:`
+
+:octocat: `:octocat:`
+
+:octopus: `:octopus:`
+
+:oden: `:oden:`
+
+:office: `:office:`
+
+:office_worker: `:office_worker:`
+
+:oil_drum: `:oil_drum:`
+
+:ok: `:ok:`
+
+:ok_hand: `:ok_hand:`
+
+:ok_man: `:ok_man:`
+
+:ok_person: `:ok_person:`
+
+:ok_woman: `:ok_woman:`
+
+:old_key: `:old_key:`
+
+:older_adult: `:older_adult:`
+
+:older_man: `:older_man:`
+
+:older_woman: `:older_woman:`
+
+:olive: `:olive:`
+
+:om: `:om:`
+
+:oman: `:oman:`
+
+:on: `:on:`
+
+:oncoming_automobile: `:oncoming_automobile:`
+
+:oncoming_bus: `:oncoming_bus:`
+
+:oncoming_police_car: `:oncoming_police_car:`
+
+:oncoming_taxi: `:oncoming_taxi:`
+
+:one: `:one:`
+
+:one_piece_swimsuit: `:one_piece_swimsuit:`
+
+:onion: `:onion:`
+
+:open_book: `:open_book:`
+
+:open_file_folder: `:open_file_folder:`
+
+:open_hands: `:open_hands:`
+
+:open_mouth: `:open_mouth:`
+
+:open_umbrella: `:open_umbrella:`
+
+:ophiuchus: `:ophiuchus:`
+
+:orange: `:orange:`
+
+:orange_book: `:orange_book:`
+
+:orange_circle: `:orange_circle:`
+
+:orange_heart: `:orange_heart:`
+
+:orange_square: `:orange_square:`
+
+:orangutan: `:orangutan:`
+
+:orthodox_cross: `:orthodox_cross:`
+
+:otter: `:otter:`
+
+:outbox_tray: `:outbox_tray:`
+
+:owl: `:owl:`
+
+:ox: `:ox:`
+
+:oyster: `:oyster:`
+
+:package: `:package:`
+
+:page_facing_up: `:page_facing_up:`
+
+:page_with_curl: `:page_with_curl:`
+
+:pager: `:pager:`
+
+:paintbrush: `:paintbrush:`
+
+:pakistan: `:pakistan:`
+
+:palau: `:palau:`
+
+:palestinian_territories: `:palestinian_territories:`
+
+:palm_down_hand: `:palm_down_hand:`
+
+:palm_tree: `:palm_tree:`
+
+:palm_up_hand: `:palm_up_hand:`
+
+:palms_up_together: `:palms_up_together:`
+
+:panama: `:panama:`
+
+:pancakes: `:pancakes:`
+
+:panda_face: `:panda_face:`
+
+:paperclip: `:paperclip:`
+
+:paperclips: `:paperclips:`
+
+:papua_new_guinea: `:papua_new_guinea:`
+
+:parachute: `:parachute:`
+
+:paraguay: `:paraguay:`
+
+:parasol_on_ground: `:parasol_on_ground:`
+
+:parking: `:parking:`
+
+:parrot: `:parrot:`
+
+:part_alternation_mark: `:part_alternation_mark:`
+
+:partly_sunny: `:partly_sunny:`
+
+:partying_face: `:partying_face:`
+
+:passenger_ship: `:passenger_ship:`
+
+:passport_control: `:passport_control:`
+
+:pause_button: `:pause_button:`
+
+:paw_prints: `:paw_prints:`
+
+:pea_pod: `:pea_pod:`
+
+:peace_symbol: `:peace_symbol:`
+
+:peach: `:peach:`
+
+:peacock: `:peacock:`
+
+:peanuts: `:peanuts:`
+
+:pear: `:pear:`
+
+:pen: `:pen:`
+
+:pencil: `:pencil:`
+
+:pencil2: `:pencil2:`
+
+:penguin: `:penguin:`
+
+:pensive: `:pensive:`
+
+:people_holding_hands: `:people_holding_hands:`
+
+:people_hugging: `:people_hugging:`
+
+:performing_arts: `:performing_arts:`
+
+:persevere: `:persevere:`
+
+:person_bald: `:person_bald:`
+
+:person_curly_hair: `:person_curly_hair:`
+
+:person_feeding_baby: `:person_feeding_baby:`
+
+:person_fencing: `:person_fencing:`
+
+:person_in_manual_wheelchair: `:person_in_manual_wheelchair:`
+
+:person_in_motorized_wheelchair: `:person_in_motorized_wheelchair:`
+
+:person_in_tuxedo: `:person_in_tuxedo:`
+
+:person_red_hair: `:person_red_hair:`
+
+:person_white_hair: `:person_white_hair:`
+
+:person_with_crown: `:person_with_crown:`
+
+:person_with_probing_cane: `:person_with_probing_cane:`
+
+:person_with_turban: `:person_with_turban:`
+
+:person_with_veil: `:person_with_veil:`
+
+:peru: `:peru:`
+
+:petri_dish: `:petri_dish:`
+
+:philippines: `:philippines:`
+
+:phone: `:phone:`
+
+:pick: `:pick:`
+
+:pickup_truck: `:pickup_truck:`
+
+:pie: `:pie:`
+
+:pig: `:pig:`
+
+:pig2: `:pig2:`
+
+:pig_nose: `:pig_nose:`
+
+:pill: `:pill:`
+
+:pilot: `:pilot:`
+
+:pinata: `:pinata:`
+
+:pinched_fingers: `:pinched_fingers:`
+
+:pinching_hand: `:pinching_hand:`
+
+:pineapple: `:pineapple:`
+
+:ping_pong: `:ping_pong:`
+
+:pink_heart: `:pink_heart:`
+
+:pirate_flag: `:pirate_flag:`
+
+:pisces: `:pisces:`
+
+:pitcairn_islands: `:pitcairn_islands:`
+
+:pizza: `:pizza:`
+
+:placard: `:placard:`
+
+:place_of_worship: `:place_of_worship:`
+
+:plate_with_cutlery: `:plate_with_cutlery:`
+
+:play_or_pause_button: `:play_or_pause_button:`
+
+:playground_slide: `:playground_slide:`
+
+:pleading_face: `:pleading_face:`
+
+:plunger: `:plunger:`
+
+:point_down: `:point_down:`
+
+:point_left: `:point_left:`
+
+:point_right: `:point_right:`
+
+:point_up: `:point_up:`
+
+:point_up_2: `:point_up_2:`
+
+:poland: `:poland:`
+
+:polar_bear: `:polar_bear:`
+
+:police_car: `:police_car:`
+
+:police_officer: `:police_officer:`
+
+:policeman: `:policeman:`
+
+:policewoman: `:policewoman:`
+
+:poodle: `:poodle:`
+
+:poop: `:poop:`
+
+:popcorn: `:popcorn:`
+
+:portugal: `:portugal:`
+
+:post_office: `:post_office:`
+
+:postal_horn: `:postal_horn:`
+
+:postbox: `:postbox:`
+
+:potable_water: `:potable_water:`
+
+:potato: `:potato:`
+
+:potted_plant: `:potted_plant:`
+
+:pouch: `:pouch:`
+
+:poultry_leg: `:poultry_leg:`
+
+:pound: `:pound:`
+
+:pouring_liquid: `:pouring_liquid:`
+
+:pout: `:pout:`
+
+:pouting_cat: `:pouting_cat:`
+
+:pouting_face: `:pouting_face:`
+
+:pouting_man: `:pouting_man:`
+
+:pouting_woman: `:pouting_woman:`
+
+:pray: `:pray:`
+
+:prayer_beads: `:prayer_beads:`
+
+:pregnant_man: `:pregnant_man:`
+
+:pregnant_person: `:pregnant_person:`
+
+:pregnant_woman: `:pregnant_woman:`
+
+:pretzel: `:pretzel:`
+
+:previous_track_button: `:previous_track_button:`
+
+:prince: `:prince:`
+
+:princess: `:princess:`
+
+:printer: `:printer:`
+
+:probing_cane: `:probing_cane:`
+
+:puerto_rico: `:puerto_rico:`
+
+:punch: `:punch:`
+
+:purple_circle: `:purple_circle:`
+
+:purple_heart: `:purple_heart:`
+
+:purple_square: `:purple_square:`
+
+:purse: `:purse:`
+
+:pushpin: `:pushpin:`
+
+:put_litter_in_its_place: `:put_litter_in_its_place:`
+
+:qatar: `:qatar:`
+
+:question: `:question:`
+
+:rabbit: `:rabbit:`
+
+:rabbit2: `:rabbit2:`
+
+:raccoon: `:raccoon:`
+
+:racehorse: `:racehorse:`
+
+:racing_car: `:racing_car:`
+
+:radio: `:radio:`
+
+:radio_button: `:radio_button:`
+
+:radioactive: `:radioactive:`
+
+:rage: `:rage:`
+
+:rage1: `:rage1:`
+
+:rage2: `:rage2:`
+
+:rage3: `:rage3:`
+
+:rage4: `:rage4:`
+
+:railway_car: `:railway_car:`
+
+:railway_track: `:railway_track:`
+
+:rainbow: `:rainbow:`
+
+:rainbow_flag: `:rainbow_flag:`
+
+:raised_back_of_hand: `:raised_back_of_hand:`
+
+:raised_eyebrow: `:raised_eyebrow:`
+
+:raised_hand: `:raised_hand:`
+
+:raised_hand_with_fingers_splayed: `:raised_hand_with_fingers_splayed:`
+
+:raised_hands: `:raised_hands:`
+
+:raising_hand: `:raising_hand:`
+
+:raising_hand_man: `:raising_hand_man:`
+
+:raising_hand_woman: `:raising_hand_woman:`
+
+:ram: `:ram:`
+
+:ramen: `:ramen:`
+
+:rat: `:rat:`
+
+:razor: `:razor:`
+
+:receipt: `:receipt:`
+
+:record_button: `:record_button:`
+
+:recycle: `:recycle:`
+
+:red_car: `:red_car:`
+
+:red_circle: `:red_circle:`
+
+:red_envelope: `:red_envelope:`
+
+:red_haired_man: `:red_haired_man:`
+
+:red_haired_woman: `:red_haired_woman:`
+
+:red_square: `:red_square:`
+
+:registered: `:registered:`
+
+:relaxed: `:relaxed:`
+
+:relieved: `:relieved:`
+
+:reminder_ribbon: `:reminder_ribbon:`
+
+:repeat: `:repeat:`
+
+:repeat_one: `:repeat_one:`
+
+:rescue_worker_helmet: `:rescue_worker_helmet:`
+
+:restroom: `:restroom:`
+
+:reunion: `:reunion:`
+
+:revolving_hearts: `:revolving_hearts:`
+
+:rewind: `:rewind:`
+
+:rhinoceros: `:rhinoceros:`
+
+:ribbon: `:ribbon:`
+
+:rice: `:rice:`
+
+:rice_ball: `:rice_ball:`
+
+:rice_cracker: `:rice_cracker:`
+
+:rice_scene: `:rice_scene:`
+
+:right_anger_bubble: `:right_anger_bubble:`
+
+:rightwards_hand: `:rightwards_hand:`
+
+:rightwards_pushing_hand: `:rightwards_pushing_hand:`
+
+:ring: `:ring:`
+
+:ring_buoy: `:ring_buoy:`
+
+:ringed_planet: `:ringed_planet:`
+
+:robot: `:robot:`
+
+:rock: `:rock:`
+
+:rocket: `:rocket:`
+
+:rofl: `:rofl:`
+
+:roll_eyes: `:roll_eyes:`
+
+:roll_of_paper: `:roll_of_paper:`
+
+:roller_coaster: `:roller_coaster:`
+
+:roller_skate: `:roller_skate:`
+
+:romania: `:romania:`
+
+:rooster: `:rooster:`
+
+:rose: `:rose:`
+
+:rosette: `:rosette:`
+
+:rotating_light: `:rotating_light:`
+
+:round_pushpin: `:round_pushpin:`
+
+:rowboat: `:rowboat:`
+
+:rowing_man: `:rowing_man:`
+
+:rowing_woman: `:rowing_woman:`
+
+:ru: `:ru:`
+
+:rugby_football: `:rugby_football:`
+
+:runner: `:runner:`
+
+:running: `:running:`
+
+:running_man: `:running_man:`
+
+:running_shirt_with_sash: `:running_shirt_with_sash:`
+
+:running_woman: `:running_woman:`
+
+:rwanda: `:rwanda:`
+
+:sa: `:sa:`
+
+:safety_pin: `:safety_pin:`
+
+:safety_vest: `:safety_vest:`
+
+:sagittarius: `:sagittarius:`
+
+:sailboat: `:sailboat:`
+
+:sake: `:sake:`
+
+:salt: `:salt:`
+
+:saluting_face: `:saluting_face:`
+
+:samoa: `:samoa:`
+
+:san_marino: `:san_marino:`
+
+:sandal: `:sandal:`
+
+:sandwich: `:sandwich:`
+
+:santa: `:santa:`
+
+:sao_tome_principe: `:sao_tome_principe:`
+
+:sari: `:sari:`
+
+:sassy_man: `:sassy_man:`
+
+:sassy_woman: `:sassy_woman:`
+
+:satellite: `:satellite:`
+
+:satisfied: `:satisfied:`
+
+:saudi_arabia: `:saudi_arabia:`
+
+:sauna_man: `:sauna_man:`
+
+:sauna_person: `:sauna_person:`
+
+:sauna_woman: `:sauna_woman:`
+
+:sauropod: `:sauropod:`
+
+:saxophone: `:saxophone:`
+
+:scarf: `:scarf:`
+
+:school: `:school:`
+
+:school_satchel: `:school_satchel:`
+
+:scientist: `:scientist:`
+
+:scissors: `:scissors:`
+
+:scorpion: `:scorpion:`
+
+:scorpius: `:scorpius:`
+
+:scotland: `:scotland:`
+
+:scream: `:scream:`
+
+:scream_cat: `:scream_cat:`
+
+:screwdriver: `:screwdriver:`
+
+:scroll: `:scroll:`
+
+:seal: `:seal:`
+
+:seat: `:seat:`
+
+:secret: `:secret:`
+
+:see_no_evil: `:see_no_evil:`
+
+:seedling: `:seedling:`
+
+:selfie: `:selfie:`
+
+:senegal: `:senegal:`
+
+:serbia: `:serbia:`
+
+:service_dog: `:service_dog:`
+
+:seven: `:seven:`
+
+:sewing_needle: `:sewing_needle:`
+
+:seychelles: `:seychelles:`
+
+:shaking_face: `:shaking_face:`
+
+:shallow_pan_of_food: `:shallow_pan_of_food:`
+
+:shamrock: `:shamrock:`
+
+:shark: `:shark:`
+
+:shaved_ice: `:shaved_ice:`
+
+:sheep: `:sheep:`
+
+:shell: `:shell:`
+
+:shield: `:shield:`
+
+:shinto_shrine: `:shinto_shrine:`
+
+:ship: `:ship:`
+
+:shipit: `:shipit:`
+
+:shirt: `:shirt:`
+
+:shit: `:shit:`
+
+:shoe: `:shoe:`
+
+:shopping: `:shopping:`
+
+:shopping_cart: `:shopping_cart:`
+
+:shorts: `:shorts:`
+
+:shower: `:shower:`
+
+:shrimp: `:shrimp:`
+
+:shrug: `:shrug:`
+
+:shushing_face: `:shushing_face:`
+
+:sierra_leone: `:sierra_leone:`
+
+:signal_strength: `:signal_strength:`
+
+:singapore: `:singapore:`
+
+:singer: `:singer:`
+
+:sint_maarten: `:sint_maarten:`
+
+:six: `:six:`
+
+:six_pointed_star: `:six_pointed_star:`
+
+:skateboard: `:skateboard:`
+
+:ski: `:ski:`
+
+:skier: `:skier:`
+
+:skull: `:skull:`
+
+:skull_and_crossbones: `:skull_and_crossbones:`
+
+:skunk: `:skunk:`
+
+:sled: `:sled:`
+
+:sleeping: `:sleeping:`
+
+:sleeping_bed: `:sleeping_bed:`
+
+:sleepy: `:sleepy:`
+
+:slightly_frowning_face: `:slightly_frowning_face:`
+
+:slightly_smiling_face: `:slightly_smiling_face:`
+
+:slot_machine: `:slot_machine:`
+
+:sloth: `:sloth:`
+
+:slovakia: `:slovakia:`
+
+:slovenia: `:slovenia:`
+
+:small_airplane: `:small_airplane:`
+
+:small_blue_diamond: `:small_blue_diamond:`
+
+:small_orange_diamond: `:small_orange_diamond:`
+
+:small_red_triangle: `:small_red_triangle:`
+
+:small_red_triangle_down: `:small_red_triangle_down:`
+
+:smile: `:smile:`
+
+:smile_cat: `:smile_cat:`
+
+:smiley: `:smiley:`
+
+:smiley_cat: `:smiley_cat:`
+
+:smiling_face_with_tear: `:smiling_face_with_tear:`
+
+:smiling_face_with_three_hearts: `:smiling_face_with_three_hearts:`
+
+:smiling_imp: `:smiling_imp:`
+
+:smirk: `:smirk:`
+
+:smirk_cat: `:smirk_cat:`
+
+:smoking: `:smoking:`
+
+:snail: `:snail:`
+
+:snake: `:snake:`
+
+:sneezing_face: `:sneezing_face:`
+
+:snowboarder: `:snowboarder:`
+
+:snowflake: `:snowflake:`
+
+:snowman: `:snowman:`
+
+:snowman_with_snow: `:snowman_with_snow:`
+
+:soap: `:soap:`
+
+:sob: `:sob:`
+
+:soccer: `:soccer:`
+
+:socks: `:socks:`
+
+:softball: `:softball:`
+
+:solomon_islands: `:solomon_islands:`
+
+:somalia: `:somalia:`
+
+:soon: `:soon:`
+
+:sos: `:sos:`
+
+:sound: `:sound:`
+
+:south_africa: `:south_africa:`
+
+:south_georgia_south_sandwich_islands: `:south_georgia_south_sandwich_islands:`
+
+:south_sudan: `:south_sudan:`
+
+:space_invader: `:space_invader:`
+
+:spades: `:spades:`
+
+:spaghetti: `:spaghetti:`
+
+:sparkle: `:sparkle:`
+
+:sparkler: `:sparkler:`
+
+:sparkles: `:sparkles:`
+
+:sparkling_heart: `:sparkling_heart:`
+
+:speak_no_evil: `:speak_no_evil:`
+
+:speaker: `:speaker:`
+
+:speaking_head: `:speaking_head:`
+
+:speech_balloon: `:speech_balloon:`
+
+:speedboat: `:speedboat:`
+
+:spider: `:spider:`
+
+:spider_web: `:spider_web:`
+
+:spiral_calendar: `:spiral_calendar:`
+
+:spiral_notepad: `:spiral_notepad:`
+
+:sponge: `:sponge:`
+
+:spoon: `:spoon:`
+
+:squid: `:squid:`
+
+:sri_lanka: `:sri_lanka:`
+
+:st_barthelemy: `:st_barthelemy:`
+
+:st_helena: `:st_helena:`
+
+:st_kitts_nevis: `:st_kitts_nevis:`
+
+:st_lucia: `:st_lucia:`
+
+:st_martin: `:st_martin:`
+
+:st_pierre_miquelon: `:st_pierre_miquelon:`
+
+:st_vincent_grenadines: `:st_vincent_grenadines:`
+
+:stadium: `:stadium:`
+
+:standing_man: `:standing_man:`
+
+:standing_person: `:standing_person:`
+
+:standing_woman: `:standing_woman:`
+
+:star: `:star:`
+
+:star2: `:star2:`
+
+:star_and_crescent: `:star_and_crescent:`
+
+:star_of_david: `:star_of_david:`
+
+:star_struck: `:star_struck:`
+
+:stars: `:stars:`
+
+:station: `:station:`
+
+:statue_of_liberty: `:statue_of_liberty:`
+
+:steam_locomotive: `:steam_locomotive:`
+
+:stethoscope: `:stethoscope:`
+
+:stew: `:stew:`
+
+:stop_button: `:stop_button:`
+
+:stop_sign: `:stop_sign:`
+
+:stopwatch: `:stopwatch:`
+
+:straight_ruler: `:straight_ruler:`
+
+:strawberry: `:strawberry:`
+
+:stuck_out_tongue: `:stuck_out_tongue:`
+
+:stuck_out_tongue_closed_eyes: `:stuck_out_tongue_closed_eyes:`
+
+:stuck_out_tongue_winking_eye: `:stuck_out_tongue_winking_eye:`
+
+:student: `:student:`
+
+:studio_microphone: `:studio_microphone:`
+
+:stuffed_flatbread: `:stuffed_flatbread:`
+
+:sudan: `:sudan:`
+
+:sun_behind_large_cloud: `:sun_behind_large_cloud:`
+
+:sun_behind_rain_cloud: `:sun_behind_rain_cloud:`
+
+:sun_behind_small_cloud: `:sun_behind_small_cloud:`
+
+:sun_with_face: `:sun_with_face:`
+
+:sunflower: `:sunflower:`
+
+:sunglasses: `:sunglasses:`
+
+:sunny: `:sunny:`
+
+:sunrise: `:sunrise:`
+
+:sunrise_over_mountains: `:sunrise_over_mountains:`
+
+:superhero: `:superhero:`
+
+:superhero_man: `:superhero_man:`
+
+:superhero_woman: `:superhero_woman:`
+
+:supervillain: `:supervillain:`
+
+:supervillain_man: `:supervillain_man:`
+
+:supervillain_woman: `:supervillain_woman:`
+
+:surfer: `:surfer:`
+
+:surfing_man: `:surfing_man:`
+
+:surfing_woman: `:surfing_woman:`
+
+:suriname: `:suriname:`
+
+:sushi: `:sushi:`
+
+:suspect: `:suspect:`
+
+:suspension_railway: `:suspension_railway:`
+
+:svalbard_jan_mayen: `:svalbard_jan_mayen:`
+
+:swan: `:swan:`
+
+:swaziland: `:swaziland:`
+
+:sweat: `:sweat:`
+
+:sweat_drops: `:sweat_drops:`
+
+:sweat_smile: `:sweat_smile:`
+
+:sweden: `:sweden:`
+
+:sweet_potato: `:sweet_potato:`
+
+:swim_brief: `:swim_brief:`
+
+:swimmer: `:swimmer:`
+
+:swimming_man: `:swimming_man:`
+
+:swimming_woman: `:swimming_woman:`
+
+:switzerland: `:switzerland:`
+
+:symbols: `:symbols:`
+
+:synagogue: `:synagogue:`
+
+:syria: `:syria:`
+
+:syringe: `:syringe:`
+
+:t-rex: `:t-rex:`
+
+:taco: `:taco:`
+
+:tada: `:tada:`
+
+:taiwan: `:taiwan:`
+
+:tajikistan: `:tajikistan:`
+
+:takeout_box: `:takeout_box:`
+
+:tamale: `:tamale:`
+
+:tanabata_tree: `:tanabata_tree:`
+
+:tangerine: `:tangerine:`
+
+:tanzania: `:tanzania:`
+
+:taurus: `:taurus:`
+
+:taxi: `:taxi:`
+
+:tea: `:tea:`
+
+:teacher: `:teacher:`
+
+:teapot: `:teapot:`
+
+:technologist: `:technologist:`
+
+:teddy_bear: `:teddy_bear:`
+
+:telephone: `:telephone:`
+
+:telephone_receiver: `:telephone_receiver:`
+
+:telescope: `:telescope:`
+
+:tennis: `:tennis:`
+
+:tent: `:tent:`
+
+:test_tube: `:test_tube:`
+
+:thailand: `:thailand:`
+
+:thermometer: `:thermometer:`
+
+:thinking: `:thinking:`
+
+:thong_sandal: `:thong_sandal:`
+
+:thought_balloon: `:thought_balloon:`
+
+:thread: `:thread:`
+
+:three: `:three:`
+
+:thumbsdown: `:thumbsdown:`
+
+:thumbsup: `:thumbsup:`
+
+:ticket: `:ticket:`
+
+:tickets: `:tickets:`
+
+:tiger: `:tiger:`
+
+:tiger2: `:tiger2:`
+
+:timer_clock: `:timer_clock:`
+
+:timor_leste: `:timor_leste:`
+
+:tipping_hand_man: `:tipping_hand_man:`
+
+:tipping_hand_person: `:tipping_hand_person:`
+
+:tipping_hand_woman: `:tipping_hand_woman:`
+
+:tired_face: `:tired_face:`
+
+:tm: `:tm:`
+
+:togo: `:togo:`
+
+:toilet: `:toilet:`
+
+:tokelau: `:tokelau:`
+
+:tokyo_tower: `:tokyo_tower:`
+
+:tomato: `:tomato:`
+
+:tonga: `:tonga:`
+
+:tongue: `:tongue:`
+
+:toolbox: `:toolbox:`
+
+:tooth: `:tooth:`
+
+:toothbrush: `:toothbrush:`
+
+:top: `:top:`
+
+:tophat: `:tophat:`
+
+:tornado: `:tornado:`
+
+:tr: `:tr:`
+
+:trackball: `:trackball:`
+
+:tractor: `:tractor:`
+
+:traffic_light: `:traffic_light:`
+
+:train: `:train:`
+
+:train2: `:train2:`
+
+:tram: `:tram:`
+
+:transgender_flag: `:transgender_flag:`
+
+:transgender_symbol: `:transgender_symbol:`
+
+:triangular_flag_on_post: `:triangular_flag_on_post:`
+
+:triangular_ruler: `:triangular_ruler:`
+
+:trident: `:trident:`
+
+:trinidad_tobago: `:trinidad_tobago:`
+
+:tristan_da_cunha: `:tristan_da_cunha:`
+
+:triumph: `:triumph:`
+
+:troll: `:troll:`
+
+:trolleybus: `:trolleybus:`
+
+:trollface: `:trollface:`
+
+:trophy: `:trophy:`
+
+:tropical_drink: `:tropical_drink:`
+
+:tropical_fish: `:tropical_fish:`
+
+:truck: `:truck:`
+
+:trumpet: `:trumpet:`
+
+:tshirt: `:tshirt:`
+
+:tulip: `:tulip:`
+
+:tumbler_glass: `:tumbler_glass:`
+
+:tunisia: `:tunisia:`
+
+:turkey: `:turkey:`
+
+:turkmenistan: `:turkmenistan:`
+
+:turks_caicos_islands: `:turks_caicos_islands:`
+
+:turtle: `:turtle:`
+
+:tuvalu: `:tuvalu:`
+
+:tv: `:tv:`
+
+:twisted_rightwards_arrows: `:twisted_rightwards_arrows:`
+
+:two: `:two:`
+
+:two_hearts: `:two_hearts:`
+
+:two_men_holding_hands: `:two_men_holding_hands:`
+
+:two_women_holding_hands: `:two_women_holding_hands:`
+
+:u5272: `:u5272:`
+
+:u5408: `:u5408:`
+
+:u55b6: `:u55b6:`
+
+:u6307: `:u6307:`
+
+:u6708: `:u6708:`
+
+:u6709: `:u6709:`
+
+:u6e80: `:u6e80:`
+
+:u7121: `:u7121:`
+
+:u7533: `:u7533:`
+
+:u7981: `:u7981:`
+
+:u7a7a: `:u7a7a:`
+
+:uganda: `:uganda:`
+
+:uk: `:uk:`
+
+:ukraine: `:ukraine:`
+
+:umbrella: `:umbrella:`
+
+:unamused: `:unamused:`
+
+:underage: `:underage:`
+
+:unicorn: `:unicorn:`
+
+:united_arab_emirates: `:united_arab_emirates:`
+
+:united_nations: `:united_nations:`
+
+:unlock: `:unlock:`
+
+:up: `:up:`
+
+:upside_down_face: `:upside_down_face:`
+
+:uruguay: `:uruguay:`
+
+:us: `:us:`
+
+:us_outlying_islands: `:us_outlying_islands:`
+
+:us_virgin_islands: `:us_virgin_islands:`
+
+:uzbekistan: `:uzbekistan:`
+
+:v: `:v:`
+
+:vampire: `:vampire:`
+
+:vampire_man: `:vampire_man:`
+
+:vampire_woman: `:vampire_woman:`
+
+:vanuatu: `:vanuatu:`
+
+:vatican_city: `:vatican_city:`
+
+:venezuela: `:venezuela:`
+
+:vertical_traffic_light: `:vertical_traffic_light:`
+
+:vhs: `:vhs:`
+
+:vibration_mode: `:vibration_mode:`
+
+:video_camera: `:video_camera:`
+
+:video_game: `:video_game:`
+
+:vietnam: `:vietnam:`
+
+:violin: `:violin:`
+
+:virgo: `:virgo:`
+
+:volcano: `:volcano:`
+
+:volleyball: `:volleyball:`
+
+:vomiting_face: `:vomiting_face:`
+
+:vs: `:vs:`
+
+:vulcan_salute: `:vulcan_salute:`
+
+:waffle: `:waffle:`
+
+:wales: `:wales:`
+
+:walking: `:walking:`
+
+:walking_man: `:walking_man:`
+
+:walking_woman: `:walking_woman:`
+
+:wallis_futuna: `:wallis_futuna:`
+
+:waning_crescent_moon: `:waning_crescent_moon:`
+
+:waning_gibbous_moon: `:waning_gibbous_moon:`
+
+:warning: `:warning:`
+
+:wastebasket: `:wastebasket:`
+
+:watch: `:watch:`
+
+:water_buffalo: `:water_buffalo:`
+
+:water_polo: `:water_polo:`
+
+:watermelon: `:watermelon:`
+
+:wave: `:wave:`
+
+:wavy_dash: `:wavy_dash:`
+
+:waxing_crescent_moon: `:waxing_crescent_moon:`
+
+:waxing_gibbous_moon: `:waxing_gibbous_moon:`
+
+:wc: `:wc:`
+
+:weary: `:weary:`
+
+:wedding: `:wedding:`
+
+:weight_lifting: `:weight_lifting:`
+
+:weight_lifting_man: `:weight_lifting_man:`
+
+:weight_lifting_woman: `:weight_lifting_woman:`
+
+:western_sahara: `:western_sahara:`
+
+:whale: `:whale:`
+
+:whale2: `:whale2:`
+
+:wheel: `:wheel:`
+
+:wheel_of_dharma: `:wheel_of_dharma:`
+
+:wheelchair: `:wheelchair:`
+
+:white_check_mark: `:white_check_mark:`
+
+:white_circle: `:white_circle:`
+
+:white_flag: `:white_flag:`
+
+:white_flower: `:white_flower:`
+
+:white_haired_man: `:white_haired_man:`
+
+:white_haired_woman: `:white_haired_woman:`
+
+:white_heart: `:white_heart:`
+
+:white_large_square: `:white_large_square:`
+
+:white_medium_small_square: `:white_medium_small_square:`
+
+:white_medium_square: `:white_medium_square:`
+
+:white_small_square: `:white_small_square:`
+
+:white_square_button: `:white_square_button:`
+
+:wilted_flower: `:wilted_flower:`
+
+:wind_chime: `:wind_chime:`
+
+:wind_face: `:wind_face:`
+
+:window: `:window:`
+
+:wine_glass: `:wine_glass:`
+
+:wing: `:wing:`
+
+:wink: `:wink:`
+
+:wireless: `:wireless:`
+
+:wolf: `:wolf:`
+
+:woman: `:woman:`
+
+:woman_artist: `:woman_artist:`
+
+:woman_astronaut: `:woman_astronaut:`
+
+:woman_beard: `:woman_beard:`
+
+:woman_cartwheeling: `:woman_cartwheeling:`
+
+:woman_cook: `:woman_cook:`
+
+:woman_dancing: `:woman_dancing:`
+
+:woman_facepalming: `:woman_facepalming:`
+
+:woman_factory_worker: `:woman_factory_worker:`
+
+:woman_farmer: `:woman_farmer:`
+
+:woman_feeding_baby: `:woman_feeding_baby:`
+
+:woman_firefighter: `:woman_firefighter:`
+
+:woman_health_worker: `:woman_health_worker:`
+
+:woman_in_manual_wheelchair: `:woman_in_manual_wheelchair:`
+
+:woman_in_motorized_wheelchair: `:woman_in_motorized_wheelchair:`
+
+:woman_in_tuxedo: `:woman_in_tuxedo:`
+
+:woman_judge: `:woman_judge:`
+
+:woman_juggling: `:woman_juggling:`
+
+:woman_mechanic: `:woman_mechanic:`
+
+:woman_office_worker: `:woman_office_worker:`
+
+:woman_pilot: `:woman_pilot:`
+
+:woman_playing_handball: `:woman_playing_handball:`
+
+:woman_playing_water_polo: `:woman_playing_water_polo:`
+
+:woman_scientist: `:woman_scientist:`
+
+:woman_shrugging: `:woman_shrugging:`
+
+:woman_singer: `:woman_singer:`
+
+:woman_student: `:woman_student:`
+
+:woman_teacher: `:woman_teacher:`
+
+:woman_technologist: `:woman_technologist:`
+
+:woman_with_headscarf: `:woman_with_headscarf:`
+
+:woman_with_probing_cane: `:woman_with_probing_cane:`
+
+:woman_with_turban: `:woman_with_turban:`
+
+:woman_with_veil: `:woman_with_veil:`
+
+:womans_clothes: `:womans_clothes:`
+
+:womans_hat: `:womans_hat:`
+
+:women_wrestling: `:women_wrestling:`
+
+:womens: `:womens:`
+
+:wood: `:wood:`
+
+:woozy_face: `:woozy_face:`
+
+:world_map: `:world_map:`
+
+:worm: `:worm:`
+
+:worried: `:worried:`
+
+:wrench: `:wrench:`
+
+:wrestling: `:wrestling:`
+
+:writing_hand: `:writing_hand:`
+
+:x: `:x:`
+
+:x_ray: `:x_ray:`
+
+:yarn: `:yarn:`
+
+:yawning_face: `:yawning_face:`
+
+:yellow_circle: `:yellow_circle:`
+
+:yellow_heart: `:yellow_heart:`
+
+:yellow_square: `:yellow_square:`
+
+:yemen: `:yemen:`
+
+:yen: `:yen:`
+
+:yin_yang: `:yin_yang:`
+
+:yo_yo: `:yo_yo:`
+
+:yum: `:yum:`
+
+:zambia: `:zambia:`
+
+:zany_face: `:zany_face:`
+
+:zap: `:zap:`
+
+:zebra: `:zebra:`
+
+:zero: `:zero:`
+
+:zimbabwe: `:zimbabwe:`
+
+:zipper_mouth_face: `:zipper_mouth_face:`
+
+:zombie: `:zombie:`
+
+:zombie_man: `:zombie_man:`
+
+:zombie_woman: `:zombie_woman:`
+
+:zzz: `:zzz:`
+
+
+
+
diff --git a/docs/helpers.md b/docs/helpers.md
index b047d36733..32ddae19a9 100644
--- a/docs/helpers.md
+++ b/docs/helpers.md
@@ -2,70 +2,110 @@
docsify extends Markdown syntax to make your documents more readable.
-## important content
+> Note: For the special code syntax cases, it's better to put them within code backticks to avoid any conflict from configurations or emojis.
-Important content like:
+## Callouts
+Docsify supports [GitHub style](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#alerts) callouts (also known as "admonitions" or "alerts").
+
+
+> [!CAUTION]
+> **Caution** callouts communicate negative potential consequences of an action.
+
+
+> [!IMPORTANT]
+> **Important** callouts communicate information necessary for users to succeed.
+
+
+> [!NOTE]
+> **Note** callouts communicate information that users should take into account.
+
+
+> [!TIP]
+> **Tip** callouts communicate optional information to help a user be more successful.
+
+
+> [!WARNING]
+> **Warning** callouts communicate potential risks user should be aware of.
+
+**Markdown**
+
+
```markdown
-!> **Time** is money, my friend!
+> [!CAUTION]
+> **Caution** callouts communicate negative potential consequences of an action.
+
+> [!IMPORTANT]
+> **Important** callouts communicate information necessary for users to succeed.
+
+> [!NOTE]
+> **Note** callouts communicate information that users should take into account.
+
+> [!TIP]
+> **Tip** callouts communicate optional information to help a user be more successful.
+
+> [!WARNING]
+> **Warning** callouts communicate potential risks user should be aware of.
```
-is rendered as:
+### Legacy Style ⚠️
-!> **Time** is money, my friend!
+The following Docsify v4 callout syntax has been deprecated and will be removed in a future version.
-## General tips
+!> Legacy **Important** callouts are deprecated.
-General tips like:
+?> Legacy **Tip** callouts are deprecated.
+
+**Markdown**
```markdown
-?> _TODO_ unit test
+!> Legacy **Important** callouts are deprecated.
+
+?> Legacy **Tip** callouts are deprecated.
```
-are rendered as:
+## Link attributes
+
+### disabled
-?> _TODO_ unit test
+```markdown
+[link](/demo ':disabled')
+```
-## Ignore to compile link
+### href
-Some time we will put some other relative path to the link, you have to need to tell docsify you don't need to compile this link. For example
+Sometimes we will use some other relative path for the link, and we have to tell docsify that we don't need to compile this link. For example:
-```md
+```markdown
[link](/demo/)
```
-It will be compiled to `link ` and will be loaded `/demo/README.md`. Maybe you want to jump to `/demo/index.html`.
+It will be compiled to `link ` and will load `/demo/README.md`. Maybe you want to jump to `/demo/index.html`.
Now you can do that
-```md
+```markdown
[link](/demo/ ':ignore')
```
-You will get `link `html. Do not worry, you can still set title for link.
+You will get `link `html. Do not worry, you can still set the title for the link.
-```md
+```markdown
[link](/demo/ ':ignore title')
link
```
-## Set target attribute for link
+### target
-```md
+```markdown
[link](/demo ':target=_blank')
[link](/demo2 ':target=_self')
```
-## Disable link
-
-```md
-[link](/demo ':disabled')
-```
-
-## Github Task Lists
+## Task lists
-```md
+```markdown
- [ ] foo
- bar
- [x] baz
@@ -81,9 +121,28 @@ You will get `link `html. Do not worry, you can still set ti
- [ ] bim
- [ ] lim
-## Image resizing
+## Images
+
+### Class names
+
+```markdown
+
+
+
+
+
+```
+
+### IDs
-```md
+```markdown
+
+```
+
+### Sizes
+
+```markdown
+


@@ -96,13 +155,13 @@ You will get `link `html. Do not worry, you can still set ti


-## Customise ID for headings
+## Heading IDs
-```md
-### 你好,世界! :id=hello-world
+```markdown
+### Hello, world! :id=hello-world
```
-## Markdown in html tag
+## Markdown + HTML
You need to insert a space between the html and markdown content.
This is useful for rendering markdown content in the details element.
@@ -125,7 +184,7 @@ This is useful for rendering markdown content in the details element.
-Or markdown content can be wrapped in html tag.
+Markdown content can also be wrapped in html tags.
```markdown
@@ -139,7 +198,8 @@ Or markdown content can be wrapped in html tag.
-- Abc
-- Abc
+- listitem
+- listitem
+- listitem
diff --git a/docs/index.html b/docs/index.html
index 6d0e008b23..cb9ee980d5 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -1,104 +1,252 @@
-
+
+
+
+
docsify
+
+
+
+
+
-
-
-
docsify
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
Loading ...
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+ vueMounts: {
+ '#counter': {
+ data() {
+ return {
+ count: 0,
+ };
+ },
+ },
+ },
+ plugins: [
+ DocsifyCarbon.create('CEBI6KQE', 'docsifyjsorg'),
+ // Plugin: Footer
+ function (hook, vm) {
+ hook.beforeEach(html => {
+ if (/githubusercontent\.com/.test(vm.route.file)) {
+ url = vm.route.file
+ .replace('raw.githubusercontent.com', 'github.com')
+ .replace(/\/master/, '/blob/master')
+ .replace(/\/main/, '/blob/main');
+ } else if (/jsdelivr\.net/.test(vm.route.file)) {
+ url = vm.route.file
+ .replace('cdn.jsdelivr.net/gh', 'github.com')
+ .replace('@main', '/blob/main');
+ } else {
+ url =
+ 'https://github.com/docsifyjs/docsify/blob/develop/docs/' +
+ vm.route.file;
+ }
+
+ const footerHTML = [
+ '
',
+ '
',
+ ].join('\n');
+
+ return html + footerHTML;
+ });
+ },
+ ],
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/language-highlight.md b/docs/language-highlight.md
index 793a39ed3b..f26c779b8d 100644
--- a/docs/language-highlight.md
+++ b/docs/language-highlight.md
@@ -1,11 +1,140 @@
-# language highlight
+# Language highlighting
-**docsify** uses [Prism](https://github.com/PrismJS/prism) to highlight code blocks in your pages. By default it only supports CSS, JavaScript and HTML. You can make **Prism** load additional languages:
+## Prism
+
+Docsify uses [Prism](https://prismjs.com) for syntax highlighting within code blocks. Prism supports the following languages by default (additional [language support](#language-support) also available):
+
+- Markup: HTML, XML, SVG, MathML, SSML, Atom, RSS
+- CSS
+- C-like
+- JavaScript
+
+To enable syntax highlighting, create a markdown codeblock using backticks (` ``` `) with a [language](https://prismjs.com/#supported-languages) specified on the first line (e.g., `html`, `css`, `js`):
+
+````text
+```html
+
This is a paragraph
+
Docsify
+```
+````
+
+````text
+```css
+p {
+ color: red;
+}
+```
+````
+
+````text
+```js
+function add(a, b) {
+ return a + b;
+}
+```
+````
+
+The above markdown will be rendered as:
+
+```html
+
This is a paragraph
+
Docsify
+```
+
+```css
+p {
+ color: red;
+}
+```
+
+```js
+function add(a, b) {
+ return a + b;
+}
+```
+
+## Language support
+
+Support for additional [languages](https://prismjs.com/#supported-languages) is available by loading the Prism [grammar files](https://cdn.jsdelivr.net/npm/prismjs@1/components/):
+
+> [!IMPORTANT] Prism grammar files must be loaded after Docsify.
```html
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
```
-?> Check the [component files](https://github.com/PrismJS/prism/tree/gh-pages/components) list for more options.
+## Theme support
+
+Docsify's official [themes](themes) are compatible with Prism syntax highlighting themes.
+
+> [!IMPORTANT] Prism themes must be loaded after Docsify themes.
+
+```html
+
+
+```
+
+Themes can be applied in light and/or dark mode
+
+```html
+
+
+
+
+
+```
+
+The following Docsify [theme properties](themes#theme-properties) will override Prism theme styles by default:
+
+```text
+--border-radius
+--font-family-mono
+--font-size-mono
+```
+
+To use the values specified in the Prism theme, set the desired theme property to `unset`:
+
+
+```html
+
+```
+
+## Dynamic content
+
+Dynamically generated Code blocks can be highlighted using Prism's [`highlightElement()`](https://prismjs.com/docs/Prism.html#.highlightElement) method:
+
+```js
+const code = document.createElement('code');
+code.innerHTML = "console.log('Hello World!')";
+code.setAttribute('class', 'language-javascript');
+Prism.highlightElement(code);
+```
diff --git a/docs/markdown.md b/docs/markdown.md
index c506e17c5a..0857667762 100644
--- a/docs/markdown.md
+++ b/docs/markdown.md
@@ -7,50 +7,54 @@ window.$docsify = {
markdown: {
smartypants: true,
renderer: {
- link: function() {
+ link() {
// ...
- }
- }
- }
-}
+ },
+ },
+ },
+};
```
-?> Configuration Options Reference [marked documentation](https://marked.js.org/#/USING_ADVANCED.md)
+> [!TIP] Configuration Options Reference: [marked documentation](https://marked.js.org/#/USING_ADVANCED.md)
-Even you can completely customize the parsing rules.
+You can completely customize the parsing rules.
```js
window.$docsify = {
- markdown: function(marked, renderer) {
+ markdown(marked, renderer) {
// ...
- return marked
- }
-}
+ return marked;
+ },
+};
```
## Supports mermaid
+> [!IMPORTANT] Currently, docsify doesn't support the async mermaid render (the latest mermaid version supported is `v9.3.0`).
+
```js
-// Import mermaid
//
-//
+//
-var num = 0;
+let num = 0;
mermaid.initialize({ startOnLoad: false });
window.$docsify = {
markdown: {
renderer: {
- code: function(code, lang) {
- if (lang === "mermaid") {
- return (
- '
' + mermaid.render('mermaid-svg-' + num++, code) + "
"
- );
+ code({ text, lang }) {
+ if (lang === 'mermaid') {
+ return /* html */ `
+
${mermaid.render(
+ 'mermaid-svg-' + num++,
+ text,
+ )}
+ `;
}
return this.origin.code.apply(this, arguments);
- }
- }
- }
-}
+ },
+ },
+ },
+};
```
diff --git a/docs/plugins.md b/docs/plugins.md
index 3706b897a2..00da722c81 100644
--- a/docs/plugins.md
+++ b/docs/plugins.md
@@ -1,31 +1,41 @@
# List of Plugins
+These are built-in and external plugins for Docsify.
+
+See also how to [Write a Plugin](./write-a-plugin.md).
+
## Full text search
-By default, the hyperlink on the current page is recognized and the content is saved in `localStorage`. You can also specify the path to the files.
+By default, the hyperlink on the current page is recognized and the content is saved in `IndexedDB`. You can also specify the path to the files.
+
```html
-
-
+
+
```
+This plugin ignores diacritical marks when performing a full text search (e.g., "cafe" will also match "café").
+
## Google Analytics
+> Google's Universal Analytics service will no longer process new data in standard properties beginning July 1, 2023. Prepare now by setting up and switching over to a Google Analytics 4 property and docsify's gtag.js plugin.
+
Install the plugin and configure the track id.
```html
-
-
+
+
```
Configure by `data-ga`.
+
```html
-
-
+
+
+```
+
+## Google Analytics 4 (GA4)
+
+Install the plugin and configure the track id.
+
+```html
+
+
+
```
-## emoji
+## Emoji
+
+Renders a larger collection of emoji shorthand codes. Without this plugin, Docsify is able to render only a limited number of emoji shorthand codes.
-The default is to support parsing emoji. For example `:100:` will be parsed to :100:. But it is not precise because there is no matching non-emoji string. If you need to correctly parse the emoji string, you need install this plugin.
+> [!IMPORTANT] Deprecated as of v4.13. Docsify no longer requires this plugin for full emoji support.
```html
-
+
```
## External Script
@@ -85,7 +138,7 @@ The default is to support parsing emoji. For example `:100:` will be parsed to :
If the script on the page is an external one (imports a js file via `src` attribute), you'll need this plugin to make it work.
```html
-
+
```
## Zoom image
@@ -93,18 +146,18 @@ If the script on the page is an external one (imports a js file via `src` attrib
Medium's image zoom. Based on [medium-zoom](https://github.com/francoischalifour/medium-zoom).
```html
-
+
```
Exclude the special image
```markdown
-
+
```
## Edit on github
-Add `Edit on github` button on every pages. Provided by [@njleonzhang](https://github.com/njleonzhang), check [document](https://github.com/njleonzhang/docsify-edit-on-github)
+Add `Edit on github` button on every page. Provided by [@njleonzhang](https://github.com/njleonzhang), see this [document](https://github.com/njleonzhang/docsify-edit-on-github)
## Demo code with instant preview and jsfiddle integration
@@ -119,7 +172,7 @@ When readers expand the demo box, the source code and description are shown ther
Add a simple `Click to copy` button to all preformatted code blocks to effortlessly allow users to copy example code from your docs. Provided by [@jperasmus](https://github.com/jperasmus)
```html
-
+
```
See [here](https://github.com/jperasmus/docsify-copy-code/blob/master/README.md) for more details.
@@ -131,31 +184,33 @@ Disqus comments. https://disqus.com/
```html
-
+
```
## Gitalk
-[Gitalk](https://github.com/gitalk/gitalk) is a modern comment component based on Github Issue and Preact.
+[Gitalk](https://github.com/gitalk/gitalk) is a modern comment component based on GitHub Issue and Preact.
```html
-
+
-
-
+
+
```
@@ -164,25 +219,11 @@ Disqus comments. https://disqus.com/
Pagination for docsify. By [@imyelo](https://github.com/imyelo)
```html
-
-
+
+
```
-## codefund
-
-a [plugin](https://github.com/njleonzhang/docsify-plugin-codefund) to make it easy to join up [codefund](https://codefund.io/)
-
-> codefund is formerly known as "codesponsor"
-
-```
-
-
-window.$docsify = {
- plugins: [
- DocsifyCodefund.create('xxxx-xxx-xxx') // change to your codefund id
- ]
-}
-```
+Click [here](https://github.com/imyelo/docsify-pagination#readme) to get more information.
## Tabs
diff --git a/docs/pwa.md b/docs/pwa.md
index e8d1c74dcf..294b222803 100644
--- a/docs/pwa.md
+++ b/docs/pwa.md
@@ -2,13 +2,13 @@
[Progressive Web Apps](https://developers.google.com/web/progressive-web-apps/) (PWA) are experiences that combine the best of the web with the best of apps. We can enhance our website with service workers to work **offline** or on low-quality networks.
-It is also very easy to use it.
+It is also very easy to use.
## Create serviceWorker
-Create a `sw.js` file in your documents root directory and copy the following code:
+Create a `sw.js` file in your project's root directory and copy the following code:
-*sw.js*
+_sw.js_
```js
/* ===========================================================
@@ -19,35 +19,35 @@ Create a `sw.js` file in your documents root directory and copy the following co
* Register service worker.
* ========================================================== */
-const RUNTIME = 'docsify'
+const RUNTIME = 'docsify';
const HOSTNAME_WHITELIST = [
self.location.hostname,
'fonts.gstatic.com',
'fonts.googleapis.com',
- 'unpkg.com'
-]
+ 'cdn.jsdelivr.net',
+];
// The Util Function to hack URLs of intercepted requests
-const getFixedUrl = (req) => {
- var now = Date.now()
- var url = new URL(req.url)
+const getFixedUrl = req => {
+ const now = Date.now();
+ const url = new URL(req.url);
// 1. fixed http URL
// Just keep syncing with location.protocol
// fetch(httpURL) belongs to active mixed content.
// And fetch(httpRequest) is not supported yet.
- url.protocol = self.location.protocol
+ url.protocol = self.location.protocol;
// 2. add query for caching-busting.
- // Github Pages served with Cache-Control: max-age=600
+ // GitHub Pages served with Cache-Control: max-age=600
// max-age on mutable content is error-prone, with SW life of bugs can even extend.
// Until cache mode of Fetch API landed, we have to workaround cache-busting with query string.
// Cache-Control-Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=453190
if (url.hostname === self.location.hostname) {
- url.search += (url.search ? '&' : '?') + 'cache-bust=' + now
+ url.search += (url.search ? '&' : '?') + 'cache-bust=' + now;
}
- return url.href
-}
+ return url.href;
+};
/**
* @Lifecycle Activate
@@ -56,8 +56,8 @@ const getFixedUrl = (req) => {
* waitUntil(): activating ====> activated
*/
self.addEventListener('activate', event => {
- event.waitUntil(self.clients.claim())
-})
+ event.waitUntil(self.clients.claim());
+});
/**
* @Functional Fetch
@@ -71,10 +71,10 @@ self.addEventListener('fetch', event => {
// Stale-while-revalidate
// similar to HTTP's stale-while-revalidate: https://www.mnot.net/blog/2007/12/12/stale
// Upgrade from Jake's to Surma's: https://gist.github.com/surma/eb441223daaedf880801ad80006389f1
- const cached = caches.match(event.request)
- const fixedUrl = getFixedUrl(event.request)
- const fetched = fetch(fixedUrl, { cache: 'no-store' })
- const fetchedCopy = fetched.then(resp => resp.clone())
+ const cached = caches.match(event.request);
+ const fixedUrl = getFixedUrl(event.request);
+ const fetched = fetch(fixedUrl, { cache: 'no-store' });
+ const fetchedCopy = fetched.then(resp => resp.clone());
// Call respondWith() with whatever we get first.
// If the fetch fails (e.g disconnected), wait for the cache.
@@ -83,33 +83,40 @@ self.addEventListener('fetch', event => {
event.respondWith(
Promise.race([fetched.catch(_ => cached), cached])
.then(resp => resp || fetched)
- .catch(_ => { /* eat any errors */ })
- )
+ .catch(_ => {
+ /* eat any errors */
+ }),
+ );
// Update the cache with the version we fetched (only for ok status)
event.waitUntil(
Promise.all([fetchedCopy, caches.open(RUNTIME)])
- .then(([response, cache]) => response.ok && cache.put(event.request, response))
- .catch(_ => { /* eat any errors */ })
- )
+ .then(
+ ([response, cache]) =>
+ response.ok && cache.put(event.request, response),
+ )
+ .catch(_ => {
+ /* eat any errors */
+ }),
+ );
}
-})
+});
```
## Register
-Now, register it in your `index.html`. It only works on some modern browsers, so we need to judge:
+Now, register it in your `index.html`. It only works on some modern browsers, so we need to check:
-*index.html*
+_index.html_
```html
```
## Enjoy it
-Release your website and start experiencing magical offline feature. :ghost: You can turn off Wi-Fi and refresh the current site to experience it.
+Release your website and start experiencing the magical offline feature.
diff --git a/docs/quickstart.md b/docs/quickstart.md
index 08666d2e55..482bbae4d4 100644
--- a/docs/quickstart.md
+++ b/docs/quickstart.md
@@ -18,11 +18,11 @@ docsify init ./docs
After the `init` is complete, you can see the file list in the `./docs` subdirectory.
-* `index.html` as the entry file
-* `README.md` as the home page
-* `.nojekyll` prevents GitHub Pages from ignoring files that begin with an underscore
+- `index.html` as the entry file
+- `README.md` as the home page
+- `.nojekyll` prevents GitHub Pages from ignoring files that begin with an underscore
-You can easily update the documentation in `./docs/README.md`, of course you can add [more pages](more-pages.md).
+You can easily update the documentation in `./docs/README.md`, and of course you can add [more pages](adding-pages.md).
## Preview your site
@@ -32,63 +32,111 @@ Run the local server with `docsify serve`. You can preview your site in your bro
docsify serve docs
```
-?> For more use cases of `docsify-cli`, head over to the [docsify-cli documentation](https://github.com/docsifyjs/docsify-cli).
+> [!TIP] For more use cases of `docsify-cli`, head over to the [docsify-cli documentation](https://github.com/docsifyjs/docsify-cli).
## Manual initialization
-If you don't like `npm` or have trouble installing the tool, you can manually create `index.html`:
+Download or create an `index.html` template using the following markup:
-```html
-
+
+
+
Download Template
-
+
+```html
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
```
-If you installed python on your system, you can easily use it to run a static server to preview your site.
+
-```bash
-cd docs && python -m SimpleHTTPServer 3000
-```
+### Specifying docsify versions
-## Loading dialog
+> [!TIP] Note that in both of the examples below, docsify URLs will need to be
+> manually updated when a new major version of docsify is released (e.g. `v5.x.x`
+> => `v6.x.x`). Check the docsify website periodically to see if a new major
+> version has been released.
-If you want, you can show a loading dialog before docsify starts to render your documentation:
+Specifying a major version in the URL (`@5`) will allow your site to receive
+non-breaking enhancements (i.e. "minor" updates) and bug fixes (i.e. "patch"
+updates) automatically. This is the recommended way to load docsify resources.
+
```html
-
+
+
-
Please wait...
+
+
```
-You should set the `data-app` attribute if you changed `el`:
+If you'd like to ensure absolutely no possibility of changes that will break
+your site (non-major updates can unintentionally introduce breaking changes
+despite that they aim not to), specify the full version after the `@` symbol in
+the URL. This is the safest way to ensure your site will look and behave the
+same way regardless of any changes made to future versions of docsify.
+
```html
-
+
+
+
+
+
+```
+
+JSDelivr supports [npm-compatible semver ranges](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#dependencies),
+so you can also use version syntax such as `@^5.0.0` for the latest v5 release,
+`@5.0.x` for the latest v5.0 patch release (f.e. you will receive 5.0.4 but
+not 5.1.0), `@5.x` for the latest v5 minor and patch releases (which is
+effectively the same as `@5` and `@^5.0.0`), etc.
-
Please wait...
+### Manually preview your site
-
+If you have Python installed on your system, you can easily use it to run a
+static server to preview your site instead of using `docsify serve` from
+`docsify-cli`.
+
+```python
+# Python 2
+cd docs && python -m SimpleHTTPServer 3000
```
-Compare [el configuration](configuration.md#el).
+```python
+# Python 3
+cd docs && python -m http.server 3000
+```
+
+
diff --git a/docs/ssr.md b/docs/ssr.md
deleted file mode 100644
index e9c435f961..0000000000
--- a/docs/ssr.md
+++ /dev/null
@@ -1,124 +0,0 @@
-# Server-Side Rendering
-
-See https://docsify.now.sh
-
-Repo in https://github.com/docsifyjs/docsify-ssr-demo
-
-## Why SSR?
-- Better SEO
-- Feeling cool
-
-## Quick start
-
-Install `now` and `docsify-cli` in your project.
-
-```bash
-npm i now docsify-cli -D
-```
-
-Edit `package.json`. If the documentation in `./docs` subdirectory.
-
-```json
-{
- "name": "my-project",
- "scripts": {
- "start": "docsify start . -c ssr.config.js",
- "deploy": "now -p"
- },
- "files": [
- "docs"
- ],
- "docsify": {
- "config": {
- "basePath": "https://docsify.js.org/",
- "loadSidebar": true,
- "loadNavbar": true,
- "coverpage": true,
- "name": "docsify"
- }
- }
-}
-```
-
-!> The `basePath` just like webpack `publicPath`. We can use local or remote files.
-
-We can preview in the local to see if it works.
-
-```bash
-npm start
-
-# open http://localhost:4000
-```
-
-Publish it!
-
-```bash
-now -p
-```
-
-Now, You have a support for SSR the docs site.
-
-## Custom template
-
-You can provide a template for entire page's HTML. such as
-
-```html
-
-
-
-
-
docsify
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-The template should contain these comments for rendered app content.
- - ``
- - ``
-
-## Configuration
-
-You can configure it in a special config file, or `package.json`.
-
-```js
-module.exports = {
- template: './ssr.html',
- maxAge: 60 * 60 * 1000, // lru-cache config
- config: {
- // docsify config
- }
-}
-```
-
-## Deploy for your VPS
-
-You can run `docsify start` directly on your Node server, or write your own server app with `docsify-server-renderer`.
-
-```js
-var Renderer = require('docsify-server-renderer')
-var readFileSync = require('fs').readFileSync
-
-// init
-var renderer = new Renderer({
- template: readFileSync('./docs/index.template.html', 'utf-8'),
- config: {
- name: 'docsify',
- repo: 'docsifyjs/docsify'
- }
-})
-
-renderer.renderToString(url)
- .then(html => {})
- .catch(err => {})
-```
diff --git a/docs/themes.md b/docs/themes.md
index 1de9125057..6eb436bfd1 100644
--- a/docs/themes.md
+++ b/docs/themes.md
@@ -1,60 +1,417 @@
# Themes
-There are currently three themes available. Copy [Vue](//vuejs.org) and [buble](//buble.surge.sh) website custom theme and [@liril-net](https://github.com/liril-net) contribution to the theme of the black style.
+## Core theme
+The Docsify "core" theme contains all of the styles and [theme properties](#theme-properties) needed to render a Docsify site. This theme is designed to serve as a minimalist theme on its own, in combination with [theme add-ons](#theme-add-ons), modified using core [classes](#classes), and as a starting point for [customization](#customization).
+
+
+```html
+
+
+```
+
+## Theme add-ons
+
+Theme add-ons are used in combination with the [core theme](#core-theme). Add-ons contain CSS rules that modify [theme properties](#theme-properties) values and/or add custom style declarations. They can often (but not always) be used with other add-ons.
+
+> [!IMPORTANT] Theme add-ons must be loaded after the [core theme](#core-theme).
+
+
+```html
+
+
+
+
+
+```
+
+### Core Dark (Add-on)
+
+Dark mode styles for the [core theme](#core-theme). Styles can applied only when an operating system's dark mode is active by specifying a `media` attribute.
+
+
+
+ Preview Core Dark
+
+
+
+
+ Preview Core Dark (Dark Mode Only)
+
+
+
+```html
+
+
+```
+
+
+```html
+
+
+```
+
+### Vue theme (Add-on)
+
+The popular Docsify v4 theme.
+
+
+
+ Preview Vue
+
+
+
+```html
+
+
+```
+
+## Classes
+
+The [core theme](#core-theme) provides several CSS classes for customizing your Docsify site. These classes should be applied to the `` element within your `index.html` page.
+
+
+```html
+
+```
+
+### Loading
+
+Display a loading animation while waiting for Docsify to initialize.
+
+
+```html
+
+```
+
+
+
+
+
+### Sidebar chevrons
+
+Display expand/collapse icons on page links in the sidebar.
+
+
+ Preview sidebar-chevron-right
+
+
+
+ Preview sidebar-chevron-left
+
+
+
+```html
+
+```
+
+
+```html
+
+```
+
+To prevent chevrons from displaying for specific page links, add a `no-chevron` class as follows:
+
+```md
+[My Page](page.md ':class=no-chevron')
+```
+
+**Theme properties**
+
+
+```css
+:root {
+ --sidebar-chevron-collapsed-color: var(--color-mono-3);
+ --sidebar-chevron-expanded-color : var(--theme-color);
+}
+```
+
+### Sidebar groups
+
+Add visual distinction between groups of links in the sidebar.
+
+
+ Preview sidebar-group-box
+
+
+
+ Preview sidebar-group-underline
+
+
+
+```html
+
+```
+
+
+```html
+
+```
+
+### Sidebar link clamp
+
+Limit multi-line sidebar links to a single line followed by an ellipses.
+
+
+
+ Preview sidebar-link-clamp
+
+
+
```html
-
-
-
-
+
```
-!> Compressed files are available in `/lib/themes/`.
+### Sidebar toggle
+
+Display a "hamburger" icon (three lines) in the sidebar toggle button instead of the default "kebab" icon.
+
+
+ Preview sidebar-toggle-chevron
+
+
+
+
+ Preview sidebar-toggle-hamburger
+
+
+
```html
-
+
+```
-
-
-
-
+
+```html
+
```
-If you have any ideas or would like to develop a new theme, you are welcome to submit a [pull request](https://github.com/docsifyjs/docsify/pulls).
+## Customization
+
+Docsify provides [theme properties](#theme-properties) for simplified customization of frequently modified styles.
+
+1. Add a `
+ ```
+
+ Theme properties can also be set on a per-page basis in markdown.
+
+ ```markdown
+ # My Heading
+
+ Hello, World!
+
+
+ ```
+
+2. Set custom [theme properties](#theme-properties) within a `:root` declaration.
+
+
+ ```css
+ :root {
+ --theme-color: red;
+ --font-size : 15px;
+ --line-height: 1.5;
+ }
+ ```
+
+ Custom [theme properties](#theme-properties) can be conditionally applied in light and/or dark mode.
+
+
+ ```css
+ /* Light and dark mode */
+ :root {
+ --theme-color: pink;
+ }
+
+ /* Light mode only */
+ @media (prefers-color-scheme: light) {
+ :root {
+ --color-bg : #eee;
+ --color-text: #444;
+ }
+ }
-#### Click to preview
+ /* Dark mode only */
+ @media screen and (prefers-color-scheme: dark) {
+ :root {
+ --color-bg : #222;
+ --color-text: #ddd;
+ }
+ }
+ ```
-
+3. Custom fonts can be used by adding web font resources and modifying `--font-family` properties as needed:
-
+ :root {
+ --font-family : 'Noto Sans', sans-serif;
+ --font-family-emoji: 'Noto Color Emoji', sans-serif;
+ --font-family-mono : 'Noto Sans Mono', monospace;
+ }
+ ```
+
+ > [!TIP] **Theme authors**: Consider providing instructions for loading your recommended web fonts manually instead of including them in your theme using `@import`. This allows users who prefer a different font to avoid loading your recommended web font(s) unnecessarily.
+
+4. Advanced styling may require custom CSS declarations. This is expected, however custom CSS declarations may break when new versions of Docsify are released. When possible, leverage [theme properties](#theme-properties) instead of custom declarations or lock your [CDN](cdn) URLs to a [specific version](cdn#specific-version) to avoid potential issues when using custom CSS declarations.
+
+ ```css
+ .sidebar li.active > a {
+ border-right: 3px solid var(--theme-color);
+ }
+ ```
+
+## Theme properties
+
+The following properties are available in all official Docsify themes. Default values for the "Core" theme are shown.
+
+> [!TIP] **Theme and plugin authors**: We encourage you to leverage these custom theme properties and to offer similar customization options in your projects.
+
+### Common
+
+Below are the most commonly modified theme properties. [Advanced](#advanced) theme properties are also available for use but typically do not need to be modified.
+
+[\_vars.css](https://raw.githubusercontent.com/docsifyjs/docsify/refs/heads/develop/src/themes/shared/_vars.css ':include')
+
+### Advanced
+
+Advanced theme properties are also available for use but typically do not need to be modified. Values derived from [common](#common) theme properties but can be set explicitly if preferred.
+
+[\_vars-advanced.css](https://raw.githubusercontent.com/docsifyjs/docsify/refs/heads/develop/src/themes/shared/_vars-advanced.css ':include')
+
+## Community
+
+See [Awesome Docsify](awesome) for additional community themes.
+ // Toggle class
+ if (elm.matches('[data-class]')) {
+ document.body.classList.toggle(value, elm.checked);
+ }
+ // Toggle sheet
+ else {
+ const themeSheet = previewSheets.find(
+ sheet => sheet.getAttribute('data-sheet') === value,
+ );
+
+ themeSheet && (themeSheet.disabled = !elm.checked);
+ }
+
+ if (!elm.checked || (!groupVal && !radioGroupName)) {
+ return;
+ }
+
+ // Group elements & values
+ const groupElms = toggleElms.filter(elm =>
+ groupVal
+ ? groupVal === elm.getAttribute('data-group')
+ : radioGroupName === elm.name,
+ );
+ const groupVals = groupElms.map(elm => elm.value);
+
+ if (groupElms.length <= 1) {
+ return;
+ }
+
+ if (groupVal) {
+ // Uncheck other group elements
+ groupElms.forEach(groupElm => {
+ if (groupElm !== elm) {
+ groupElm.checked = false;
+ }
+ });
+ }
-## Other themes
+ // Remove group classes
+ if (elm.matches('[data-class]')) {
+ groupVals.forEach(className => {
+ if (className !== value) {
+ document.body.classList.remove(className);
+ }
+ });
+ }
+ // Disable group sheets
+ else {
+ const otherSheets = groupVals
+ .map(val =>
+ previewSheets.find(sheet => sheet.getAttribute('data-sheet') === val),
+ )
+ .filter(sheet => sheet && sheet.getAttribute('data-sheet') !== value);
+ const disableSheets = otherSheets.length ? otherSheets : previewSheets;
-- [docsify-themeable](https://jhildenbiddle.github.io/docsify-themeable/#/) A delightfully simple theme system for docsify.
+ disableSheets.forEach(sheet => sheet.disabled = true);
+ }
+ }
+
+ // Toggle active elms
+ toggleElms.forEach(elm => {
+ const value = elm.value;
+
+ // Class toggle
+ if (elm.matches('[data-class]')) {
+ elm.checked = document.body.classList.contains(value);
+ }
+ // Sheet toggle
+ else {
+ const previewSheet = previewSheets.find(
+ sheet => sheet.getAttribute('data-sheet') === value,
+ );
+
+ elm.checked = previewSheet && !previewSheet.disabled;
+ }
+ });
+
+ toggleElms.forEach(elm => elm.addEventListener('change', handleChange));
+ })();
+
diff --git a/docs/ui-kit.md b/docs/ui-kit.md
new file mode 100644
index 0000000000..55739665c4
--- /dev/null
+++ b/docs/ui-kit.md
@@ -0,0 +1,543 @@
+
+
+# UI Kit
+
+
+ View the markdown source for this page
+
+
+[ui-kit.md](ui-kit.md ':include :type=code')
+
+
+
+
+## Blockquotes
+
+> Cras aliquet nulla quis metus tincidunt, sed placerat enim cursus. Etiam
+> turpis nisl, posuere eu condimentum ut, interdum a risus. Sed non luctus mi.
+> Quisque malesuada risus sit amet tortor aliquet, a posuere ex iaculis. Vivamus
+> ultrices enim dui, eleifend porttitor elit aliquet sed.
+>
+> _- Quote Source_
+
+#### Nested
+
+
+> Level 1
+> > Level 2
+> > > Level 3
+
+## Buttons
+
+#### Default
+
+
Button
+
+#### Basic
+
+
Button
+
Link Button
+
+
+#### Primary
+
+
Button
+
Link Button
+
+
+#### Secondary
+
+
Button
+
Link Button
+
+
+## Callouts
+
+
+> [!CAUTION]
+> **Caution** callout with `inline code`.
+
+
+> [!IMPORTANT]
+> **Important** callout with `inline code`.
+
+
+> [!NOTE]
+> **Note** callout with `inline code`.
+
+
+> [!TIP]
+> **Tip** callout with `inline code`.
+
+
+> [!WARNING]
+> **Warning** callout with `inline code`.
+
+**Multi Line**
+
+
+> [!NOTE]
+> - List item 1
+> - List item 2
+>
+> Text
+>
+> ```html
+>
Hello, World!
+> ```
+
+**Nested**
+
+
+> [!NOTE]
+> Level 1
+> > [!NOTE]
+> > Level 2
+> > > [!NOTE]
+> > > Level 3
+
+**Legacy Style**
+
+!> Legacy **Important** callout with `inline code`.
+
+?> Legacy **Tip** with `inline code`.
+
+## Code
+
+This is `inline code`
+
+```javascript
+const add = (num1, num2) => num1 + num2;
+const total = add(1, 2);
+
+console.log(total); // 3
+```
+
+```html
+
+
Hello
+
+```
+
+## Colors
+
+#### Theme
+
+
+
+
+ 1
+
+
+
+ 2
+
+
+
+ 3
+
+
+
+ 4
+
+
+
+ Theme Color
+
+
+
+ 5
+
+
+
+ 6
+
+
+
+ 7
+
+
+
+ 8
+
+
+
+#### Monochromatic
+
+
+
+
+ Min
+
+
+
+ 1
+
+
+
+ 2
+
+
+
+ 3
+
+
+
+ 4
+
+
+
+ 5
+
+
+
+ 6
+
+
+
+ 7
+
+
+
+ 8
+
+
+
+ 9
+
+
+
+ Max
+
+
+
+## Details
+
+
+ Details (click to open)
+
+Suscipit nemo aut ex suscipit voluptatem laboriosam odio velit. Ipsum eveniet labore sequi non optio vel. Ut culpa ad accusantium est aut harum ipsam voluptatum. Velit eum incidunt non sint. Et molestiae veniam natus autem vel assumenda ut numquam esse. Non nisi id qui vero corrupti quos et.
+
+
+
+
+ Details (open by default)
+
+Suscipit nemo aut ex suscipit voluptatem laboriosam odio velit. Ipsum eveniet labore sequi non optio vel. Ut culpa ad accusantium est aut harum ipsam voluptatum. Velit eum incidunt non sint. Et molestiae veniam natus autem vel assumenda ut numquam esse. Non nisi id qui vero corrupti quos et.
+
+
+
+## Form Elements
+
+### Fieldset
+
+
+
+### Input
+
+#### Checkbox
+
+
+
+#### Datalist
+
+
+
+#### Radio
+
+
+
+#### Text
+
+
+
+#### Toggles
+
+
+
+### Select
+
+
+
+### Textarea
+
+
+
+## Headings
+
+# Heading 1 {docsify-ignore}
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse luctus nulla eu ex varius, a varius elit tincidunt. Aenean arcu magna, gravida id purus a, interdum convallis turpis. Aenean id ipsum eu tortor sollicitudin scelerisque in quis elit.
+
+## Heading 2 {docsify-ignore}
+
+Vestibulum lobortis laoreet nunc vel vulputate. In et augue non lectus pellentesque molestie et ac justo. Sed sed turpis ut diam gravida sagittis nec at neque. Vivamus id tellus est. Nam ac dignissim mi. Vestibulum nec sem convallis, condimentum augue at, commodo diam.
+
+### Heading 3 {docsify-ignore}
+
+Suspendisse sit amet tincidunt nibh, ac interdum velit. Ut orci diam, dignissim at enim sit amet, placerat rutrum magna. Mauris consectetur nibh eget sem feugiat, sit amet congue quam laoreet. Curabitur sed massa metus.
+
+#### Heading 4 {docsify-ignore}
+
+Donec odio orci, facilisis ac vehicula in, vestibulum ut urna. Ut bibendum ullamcorper risus, ac euismod leo maximus sed. In pulvinar sagittis rutrum. Morbi quis cursus diam. Cras ac laoreet nulla, rhoncus sodales dui.
+
+##### Heading 5 {docsify-ignore}
+
+Commodo sit veniam nulla cillum labore ullamco aliquip quis. Consequat nulla fugiat consequat ex duis proident. Adipisicing excepteur tempor exercitation ad. Consectetur voluptate Lorem sint elit exercitation ullamco dolor.
+
+###### Heading 6 {docsify-ignore}
+
+Ipsum ea amet dolore mollit incididunt fugiat nulla laboris est sint voluptate. Ex culpa id amet ipsum amet pariatur ipsum officia sit laborum irure ullamco deserunt. Consequat qui tempor occaecat nostrud proident.
+
+## Horizontal Rule
+
+Text before rule.
+
+---
+
+Text after rule.
+
+## IFrame
+
+[Example](_media/example.html ':include height=200px')
+
+## Images
+
+#### Inline-style
+
+
+
+#### Reference-style
+
+![Docsify Logo][logo]
+
+[logo]: /_media/icon.svg 'This is the Docsify logo!'
+
+#### Light / Dark Theme
+
+
+
+
+
+
+
+## Keyboard
+
+#### Default
+
+
⌃ ⌥ ⌫
+
+
Ctrl Alt Del
+
+
⌃ Control ⌥ Alt ⌫ Delete
+
+#### Alternate
+
+
⌃ ⌥ ⌫
+
+
Ctrl Alt Del
+
+
⌃ Control ⌥ Alt ⌫ Delete
+
+#### Entities
+
+
+
↑
↑
Arrow Up
+
↓
↓
Arrow Down
+
←
←
Arrow Left
+
→
→
Arrow Right
+
⇪
⇪
Caps Lock
+
⌘
⌘
Command
+
⌃
⌃
Control
+
⌫
⌫
Delete
+
⌦
⌦
Delete (Forward)
+
↘
↘
End
+
⌤
⌤
Enter
+
⎋
⎋
Escape
+
↖
↖
Home
+
⇞
⇞
Page Up
+
⇟
⇟
Page Down
+
⌥
⌥
Option, Alt
+
↵
↵
Return
+
⇧
⇧
Shift
+
␣
␣
Space
+
⇥
⇥
Tab
+
⇤
⇤
Tab + Shift
+
+
+## Links
+
+[Inline link](https://google.com)
+
+[Inline link with title](https://google.com 'Google')
+
+[Reference link by name][link1]
+
+[Reference link by number][1]
+
+[Reference link by self]
+
+[link1]: https://google.com
+[1]: https://google.com
+[Reference link by self]: https://google.com
+
+## Lists
+
+### Ordered List
+
+1. Ordered
+1. Ordered
+ 1. Nested
+ 1. Nested (Wrapping): Similique tempora et. Voluptatem consequuntur ut. Rerum minus et sed beatae. Consequatur ut nemo laboriosam quo architecto quia qui. Corrupti aut omnis velit.
+1. Ordered (Wrapping): Error minima modi rem sequi facere voluptatem. Est nihil veritatis doloribus et corporis ipsam. Pariatur eos ipsam qui odit labore est voluptatem enim. Veritatis est qui ut pariatur inventore.
+
+### Unordered List
+
+- Unordered
+- Unordered
+ - Nested
+ - Nested (Wrapping): Quia consectetur sint vel ut excepturi ipsa voluptatum suscipit hic. Ipsa error qui molestiae harum laboriosam. Rerum non amet illo voluptatem odio pariatur. Ut minus enim.
+- Unordered (Wrapping): Fugiat qui tempore ratione amet repellendus repudiandae non. Rerum nisi officia enim. Itaque est alias voluptatibus id molestiae accusantium. Cupiditate sequi qui omnis sed facere aliquid quia ut.
+
+### Task List
+
+- [x] Task
+- [ ] Task
+ - [ ] Subtask
+ - [ ] Subtask
+ - [x] Subtask
+- [ ] Task (Wrapping): Earum consequuntur itaque numquam sunt error omnis ipsum repudiandae. Est assumenda neque eum quia quisquam laborum beatae autem ad. Fuga fugiat perspiciatis harum quia dignissimos molestiae. Officia quo eveniet tempore modi voluptates consequatur. Eum odio adipisci labore.
+ - [x] Subtask (Wrapping): Vel possimus eaque laborum. Voluptates qui debitis quaerat atque molestiae quia explicabo doloremque. Reprehenderit perspiciatis a aut impedit temporibus aut quasi quia. Incidunt sed recusandae vitae asperiores sit in.
+
+## Output
+
+
+ Et cum fugiat nesciunt voluptates. A atque quos doloribus dolorem quo. Et dignissimos omnis nam. Recusandae voluptatem nam. Tenetur veniam et qui consequatur. Aut sequi atque fuga itaque iusto eum nihil quod iure.
+
+ Item
+ Item
+ Item
+
+
+
+## Tables
+
+### Alignment
+
+| Left Align | Center Align | Right Align | Non‑Breaking Header |
+| ---------- | :----------: | ----------: | ------------------------------ |
+| A1 | A2 | A3 | A4 |
+| B1 | B2 | B3 | B4 |
+| C1 | C2 | C3 | C4 |
+
+### Headerless
+
+| | | | |
+| --- | --- | --- | --- |
+| A1 | A2 | A3 | A4 |
+| B1 | B2 | B3 | B4 |
+| C1 | C2 | C3 | C4 |
+
+### Scrolling
+
+| Header |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| Dicta in nobis dolor adipisci qui. Accusantium voluptates est dolor laboriosam qui voluptatibus. Veritatis eos aspernatur iusto et dicta quas. Fugit voluptatem dolorum qui quisquam. nihil |
+| Aut praesentium officia aut delectus. Quas atque reprehenderit saepe. Et voluptatibus qui dolores rem facere in dignissimos id aut. Debitis excepturi delectus et quos numquam magnam. |
+| Sed eum atque at laborum aut et repellendus ullam dolor. Cupiditate saepe voluptatibus odit est pariatur qui. Hic sunt nihil optio enim eum laudantium. Repellendus voluptate. |
+
+## Text Elements
+
+
Marked text
+
+
Preformatted text
+
+
Sample Output
+
+
Small Text
+
+This is
subscript
+
+This is
superscript
+
+
Underlined Text
+
+## Text Styles
+
+Body text
+
+**Bold text**
+
+_Italic text_
+
+**_Bold and italic text_**
+
+~~Strikethrough~~
diff --git a/docs/v5-upgrade.md b/docs/v5-upgrade.md
new file mode 100644
index 0000000000..cd30ce455d
--- /dev/null
+++ b/docs/v5-upgrade.md
@@ -0,0 +1,129 @@
+# Upgrading v4 to v5
+
+The main changes when upgrading a Docsify v4 site to v5 involve updating CDN URLs and theme files. Your configuration settings remain mostly the same, so the upgrade is fairly straightforward.
+
+## Before You Begin
+
+Some older Docsify sites may use non-version-locked URLs like:
+
+```html
+
+```
+
+If your site uses URLs without `@4` or a specific version number, follow the same steps below. You'll need to update both the version specifier and the path structure.
+
+## Step-by-Step Instructions
+
+### 1. Update the Theme CSS
+
+**Replace the theme (v4):**
+
+```html
+
+
+
+```
+
+**With this (v5):**
+
+```html
+
+
+
+
+```
+
+**Note:** If you were using a different v4 theme (buble, dark, pure), the v5 core theme replaces these, though Vue and Dark themes are available as add-ons if preferred.
+
+View [Themes](themes.md) for more details.
+
+### 2. Add Optional Body Class (for styling)
+
+**Update your opening body tag:**
+
+```html
+
+```
+
+This adds a chevron indicator to the sidebar. You can omit this if you prefer.
+
+View [Theme Classes](themes.md?id=classes) for more details.
+
+### 3. Update the Main Docsify Script
+
+**Change:**
+
+```html
+
+
+
+```
+
+**To:**
+
+```html
+
+```
+
+### 4. Update Plugin URLs
+
+**Search Plugin:**
+
+```html
+
+
+
+
+
+
+
+```
+
+**Zoom Plugin:**
+
+```html
+
+
+
+
+
+
+
+```
+
+**Note:** If you're using additional Docsify plugins (such as emoji, external-script, front-matter, etc.), you'll need to update those URLs as well following the same pattern:
+
+- Change `/lib/plugins/` to `/dist/plugins/`
+- Update version from `@4` (or non-versioned) to `@5`
+- Example: `//cdn.jsdelivr.net/npm/docsify/lib/plugins/emoji.min.js` becomes `//cdn.jsdelivr.net/npm/docsify@5/dist/plugins/emoji.min.js`
+
+## Key Differences Summary
+
+- **CDN Path**: Changed from `/lib/` to `/dist/`
+- **Version**: Updated from `@4` to `@5`
+- **Themes**: v5 uses a core theme (with optional add-ons available)
+- **Plugin Names**: `zoom-image` → `zoom`
+
+## Additional Notes
+
+- Your configuration in `window.$docsify` stays the same
+- All your markdown content remains unchanged
+- The upgrade is non-breaking for most sites (however, legacy browsers like Internet Explorer 11 are no longer supported)
+- To maintain the same visual styling as Docsify v4, the [Vue theme (Add-on)](themes.md?id=vue-theme-add-on) is available
+- Custom CSS targeting v4 theme-specific classes or elements may need to be updated for v5
+- The v5 core theme can be customized using CSS variables - view [Theme Customization](themes.md?id=customization) for more details
+
+That's it! Your Docsify site should now be running on v5.
diff --git a/docs/vue.md b/docs/vue.md
index a1b5683b63..191a7347ef 100644
--- a/docs/vue.md
+++ b/docs/vue.md
@@ -1,99 +1,342 @@
-# Compatible with Vue
+# Vue compatibility
-You can write Vue components directly in the Markdown file, and it will be parsed. You can use this feature to write vue demo and documentation together.
+Docsify allows [Vue.js](https://vuejs.org) content to be added directly to your markdown pages. This can greatly simplify working with data and adding reactivity to your site.
-## Basic usage
+Vue [template syntax](https://vuejs.org/guide/essentials/template-syntax) can be used to add dynamic content to your pages. Vue content becomes more interesting when [data](#data), [computed properties](#computed-properties), [methods](#methods), and [lifecycle hooks](#lifecycle-hooks) are used. These options can be specified as [global options](#global-options) or within DOM [mounts](#mounts) and [components](#components).
-Load the Vue in `./index.html`.
+## Setup
+
+To get started, add Vue.js to your `index.html` file. Choose the production version for your live site or the development version for helpful console warnings and [Vue.js devtools](https://github.com/vuejs/vue-devtools) support.
```html
-
-
+
+
-
-
-
+
+
```
-Then you can immediately write Vue code at Markdown file. `new Vue({ el: '#main' })` script is executed by default to create instance.
-
-*README.md*
+## Template syntax
-````markdown
-# Vue guide
+Vue [template syntax](https://vuejs.org/guide/essentials/template-syntax) offers several useful features like support for [JavaScript expressions](https://vuejs.org/guide/essentials/template-syntax.html#using-javascript-expressions) and Vue [directives](https://vuejs.org/guide/essentials/template-syntax.html#directives) for loops and conditional rendering.
-`v-for` usage.
+```markdown
+
+
Text for GitHub
-```html
+
+
+
+
2 + 2 = {{ 2 + 2 }}
```
-
+
+ Text for GitHub
+
+
+
+ 2 + 2 = {{ 2 + 2 }}
+
+
+[View output on GitHub](https://github.com/docsifyjs/docsify/blob/develop/docs/vue.md#template-syntax)
+
+## Code Blocks
+
+Docsify ignores Vue template syntax within code blocks by default:
+
+````markdown
+```
+{{ message }}
+```
````
-You can manually initialize a Vue instance.
+To process Vue template syntax within a code block, wrap the code block in an element with a `v-template` attribute:
-*README.md*
+````markdown
+
-```markdown
-# Vue demo
+```
+{{ message }}
+```
-
hello {{ msg }}
+
+````
-
+## Data
+
+```js
+{
+ data() {
+ return {
+ message: 'Hello, World!'
+ };
+ }
+}
```
-!> In a Markdown file, only the script within the first script tag is executed.
+
+```markdown
+
+{{ message }}
-## Combine Vuep to write playground
+
+
+```
+
-[Vuep](https://github.com/QingWei-Li/vuep) is a component for rendering Vue components with live editor and preview. Supports Vue component spec and JSX.
+
+ {{ message }}
-*index.html*
+
+
-```html
-
-
+[View output on GitHub](https://github.com/docsifyjs/docsify/blob/develop/docs/vue.md#data)
+
+## Computed properties
-
-
-
-
+```js
+{
+ computed: {
+ timeOfDay() {
+ const date = new Date();
+ const hours = date.getHours();
-
-
-
-
+ if (hours < 12) {
+ return 'morning';
+ }
+ else if (hours < 18) {
+ return 'afternoon';
+ }
+ else {
+ return 'evening'
+ }
+ }
+ },
+}
```
-*README.md*
```markdown
-# Vuep
+Good {{ timeOfDay }}!
+```
-
+
-
+ },
+}
+```
+
+```markdown
+Say Hello
+```
+
+
+ Say Hello
+
+
+## Lifecycle Hooks
+
+```js
+{
+ data() {
+ return {
+ images: null,
+ };
+ },
+ created() {
+ fetch('https://api.domain.com/')
+ .then(response => response.json())
+ .then(data => (this.images = data))
+ .catch(err => console.log(err));
+ }
+}
+
+// API response:
+// [
+// { title: 'Image 1', url: 'https://domain.com/1.jpg' },
+// { title: 'Image 2', url: 'https://domain.com/2.jpg' },
+// { title: 'Image 3', url: 'https://domain.com/3.jpg' },
+// ];
+```
+
+```markdown
+
+
+
+ {{ image.title }}
+
+
+```
+
+
+
+
+
+ {{ image.title }}
+
+
+
+
+## Global options
+
+Use `vueGlobalOptions` to specify global Vue options for use with Vue content not explicitly mounted with [vueMounts](#mounts), [vueComponents](#components), or a [markdown script](#markdown-script). Changes to global `data` will persist and be reflected anywhere global references are used.
+
+```js
+window.$docsify = {
+ vueGlobalOptions: {
+ data() {
+ return {
+ count: 0,
+ };
+ },
+ },
+};
+```
+
+```markdown
+
+ +
+ {{ count }}
+ -
+
+```
+
+
+
+ +
+ {{ count }}
+ -
+
+
+
+Notice the behavior when multiple global counters are rendered:
+
+
+
+ +
+ {{ count }}
+ -
+
+
+
+Changes made to one counter affect the both counters. This is because both instances reference the same global `count` value. Now, navigate to a new page and return to this section to see how changes made to global data persist between page loads.
+
+## Mounts
+
+Use `vueMounts` to specify DOM elements to mount as Vue instances and their associated options. Mount elements are specified using a [CSS selector](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors) as the key with an object containing Vue options as their value. Docsify will mount the first matching element in the main content area each time a new page is loaded. Mount element `data` is unique for each instance and will not persist as users navigate the site.
+
+```js
+window.$docsify = {
+ vueMounts: {
+ '#counter': {
+ data() {
+ return {
+ count: 0,
+ };
+ },
+ },
+ },
+};
+```
+
+```markdown
+
+ +
+ {{ count }}
+ -
+
+```
+
+
+ +
+ {{ count }}
+ -
+
+
+## Components
+
+Use `vueComponents` to create and register global [Vue components](https://vuejs.org/guide/essentials/component-basics.html). Components are specified using the component name as the key with an object containing Vue options as the value. Component `data` is unique for each instance and will not persist as users navigate the site.
+
+```js
+window.$docsify = {
+ vueComponents: {
+ 'button-counter': {
+ template: `
+
+ You clicked me {{ count }} times
+
+ `,
+ data() {
+ return {
+ count: 0,
+ };
+ },
+ },
+ },
+};
+```
+
+```markdown
+
+
+```
+
+
+
+
+
+
+## Markdown script
+
+Vue content can mounted using a `
```
-?> Example Refer to the [Vuep documentation](https://qingwei-li.github.io/vuep/).
+## Technical Notes
+
+- Docsify processes Vue content in the following order on each page load:
+ 1. Execute markdown `
+```
+
+## Template
+
+Below is a plugin template with placeholders for all available lifecycle hooks.
+
+1. Copy the template
+1. Modify the `myPlugin` name as appropriate
+1. Add your plugin logic
+1. Remove unused lifecycle hooks
+1. Save the file as `docsify-plugin-[name].js`
+1. Load your plugin using a standard `
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000000..9a5df7ee2a
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,79 @@
+import eslintConfigPrettier from 'eslint-config-prettier';
+import playwrightPlugin from 'eslint-plugin-playwright';
+import jestPlugin from 'eslint-plugin-jest';
+import globals from 'globals';
+import js from '@eslint/js';
+
+export default [
+ // Ignore (Must be first item in array)
+ {
+ ignores: [
+ // Directories
+ '_playwright-*',
+ 'dist',
+ 'docs',
+ 'lib',
+ 'node_modules',
+ // Files
+ '**/*.md',
+ 'CHANGELOG.md',
+ 'emoji-data.*',
+ 'HISTORY.md',
+ ],
+ },
+ // ESLint Recommended
+ js.configs.recommended,
+ // Configuration: Prettier
+ eslintConfigPrettier,
+ // All Files
+ {
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ ...globals.node,
+ $docsify: 'readonly',
+ Docsify: 'readonly',
+ },
+ },
+ rules: {
+ 'array-callback-return': ['error'],
+ 'block-scoped-var': ['error'],
+ curly: ['error'],
+ 'dot-notation': ['error'],
+ eqeqeq: ['error'],
+ 'no-implicit-coercion': ['error', { boolean: false }],
+ 'no-implicit-globals': ['error'],
+ 'no-loop-func': ['error'],
+ 'no-return-assign': ['error'],
+ 'no-template-curly-in-string': ['error'],
+ 'no-unneeded-ternary': ['error'],
+ 'no-unused-vars': ['error', { args: 'none' }],
+ 'no-useless-computed-key': ['error'],
+ 'no-useless-return': ['error'],
+ 'no-var': ['error'],
+ 'prefer-const': [
+ 'error',
+ {
+ destructuring: 'all',
+ },
+ ],
+ },
+ },
+ // Source Files
+ {
+ files: ['src/**'],
+ rules: {
+ 'no-console': ['warn'],
+ },
+ },
+ // Tests: E2E (Playwright)
+ {
+ files: ['test/e2e/**'],
+ ...playwrightPlugin.configs['flat/recommended'],
+ },
+ // Tests: Integration & Unit (Jest)
+ {
+ files: ['test/{integration,unit}/**'],
+ ...jestPlugin.configs['flat/recommended'],
+ },
+];
diff --git a/index.html b/index.html
deleted file mode 100644
index 59e6911bd3..0000000000
--- a/index.html
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
- docsify
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 0000000000..9caaa0e075
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,37 @@
+import { testConfig } from './server.configs.js';
+
+const { hostname, port } = testConfig;
+const TEST_HOST = `http://${hostname}:${port}`;
+const sharedConfig = {
+ errorOnDeprecated: true,
+ globalSetup: './test/config/jest.setup.js',
+ globalTeardown: './test/config/jest.teardown.js',
+ prettierPath: null, // Fix for Jest v29 and Prettier v3 (https://github.com/jestjs/jest/issues/14305)
+ resetModules: true,
+ restoreMocks: true,
+ setupFilesAfterEnv: ['/test/config/jest.setup-tests.js'],
+ testEnvironment: 'jest-environment-jsdom',
+ testEnvironmentOptions: {
+ url: `${TEST_HOST}/_blank.html`,
+ },
+};
+
+process.env.TEST_HOST = TEST_HOST;
+
+export default {
+ transform: {},
+ projects: [
+ // Unit Tests
+ {
+ displayName: 'unit',
+ ...sharedConfig,
+ testMatch: ['/test/unit/*.test.js'],
+ },
+ // Integration Tests
+ {
+ displayName: 'integration',
+ ...sharedConfig,
+ testMatch: ['/test/integration/*.test.js'],
+ },
+ ],
+};
diff --git a/lerna.json b/lerna.json
deleted file mode 100644
index 26fa22a6bd..0000000000
--- a/lerna.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "lerna": "2.0.0-rc.5",
- "packages": [
- "packages/*"
- ],
- "version": "0.0.0"
-}
diff --git a/middleware.js b/middleware.js
new file mode 100644
index 0000000000..0861d65e05
--- /dev/null
+++ b/middleware.js
@@ -0,0 +1,53 @@
+// Exports
+// =============================================================================
+export const config = {
+ matcher: ['/preview/(index.html)?'],
+};
+
+// Rewrite rules shared with local server configurations
+export const rewriteRules = [
+ // Replace CDN URLs with local paths
+ {
+ match: /https?.*\/CHANGELOG.md/g,
+ replace: '/CHANGELOG.md',
+ },
+ {
+ // CDN versioned default
+ // Ex1: //cdn.com/package-name
+ // Ex2: http://cdn.com/package-name@1.0.0
+ // Ex3: https://cdn.com/package-name@latest
+ match: /(?:https?:)*\/\/.*cdn.*docsify[@\d.latest]*(?=["'])/g,
+ replace: '/dist/docsify.min.js',
+ },
+ {
+ // CDN paths to local paths
+ // Ex1: //cdn.com/package-name/path/file.js => /path/file.js
+ // Ex2: http://cdn.com/package-name@1.0.0/dist/file.js => /dist/file.js
+ // Ex3: https://cdn.com/package-name@latest/dist/file.js => /dist/file.js
+ match: /(?:https?:)*\/\/.*cdn.*docsify[@\d.latest]*\/(?:dist\/)/g,
+ replace: '/dist/',
+ },
+];
+
+// Serve virtual /preview/index.html
+// Note: See vercel.json for preview routing configuration
+// 1. Fetch index.html from /docs/ directory
+// 2. Replace CDN URLs with local paths (see rewriteRules)
+// 3. Return preview HTML
+export default async function middleware(request) {
+ const { origin } = new URL(request.url);
+ const indexURL = `${origin}/docs/index.html`;
+ const indexHTML = await fetch(indexURL).then(res => res.text());
+ const previewHTML = rewriteRules.reduce(
+ (html, rule) => html.replace(rule.match, rule.replace),
+ indexHTML,
+ );
+
+ return new Response(previewHTML, {
+ status: 200,
+ headers: {
+ 'content-type': 'text/html',
+ 'x-robots-tag': 'noindex',
+ },
+ });
+}
diff --git a/package-lock.json b/package-lock.json
index bb18bcb53b..387390f197 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,8913 +1,19898 @@
{
"name": "docsify",
- "version": "4.9.4",
- "lockfileVersion": 1,
+ "version": "5.0.0",
+ "lockfileVersion": 3,
"requires": true,
- "dependencies": {
- "JSONStream": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.4.tgz",
- "integrity": "sha512-Y7vfi3I5oMOYIr+WxV8NZxDSwcbNgzdKYsTNInmycOq9bUYwGg9ryu57Wg5NLmCjqdFPNUmpMBo3kSJN9tCbXg==",
+ "packages": {
+ "": {
+ "name": "docsify",
+ "version": "5.0.0",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "common-tags": "^1.8.0",
+ "dexie": "^4.0.11",
+ "marked": "^18.0.3",
+ "medium-zoom": "^1.1.0",
+ "opencollective-postinstall": "^2.0.2",
+ "prismjs": "^1.29.0",
+ "tinydate": "^1.3.0"
+ },
+ "devDependencies": {
+ "@babel/eslint-parser": "^7.24.5",
+ "@babel/preset-env": "^7.11.5",
+ "@eslint/js": "^10.0.0",
+ "@playwright/test": "^1.60.0",
+ "@rollup/plugin-babel": "^7.0.0",
+ "@rollup/plugin-commonjs": "^29.0.0",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-replace": "^6.0.1",
+ "@rollup/plugin-terser": "^1.0.0",
+ "@types/common-tags": "^1.8.4",
+ "@types/eslint": "^8.40.2",
+ "@types/prismjs": "^1.26.5",
+ "axios": "^1.5.0",
+ "browser-sync": "^3.0.2",
+ "cross-env": "^10.0.0",
+ "cssnano": "^8.0.2",
+ "eslint": "^9.3.0",
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-plugin-jest": "^29.2.1",
+ "eslint-plugin-playwright": "^2.1.0",
+ "eslint-plugin-prettier": "^5.1.3",
+ "glob": "^13.0.0",
+ "globals": "^17.1.0",
+ "husky": "^9.0.11",
+ "jest": "^30.0.4",
+ "jest-environment-jsdom": "^30.0.5",
+ "lint-staged": "^17.0.8",
+ "npm-run-all": "^4.1.5",
+ "postcss-cli": "^11.0.0",
+ "postcss-import": "^16.1.0",
+ "postcss-nesting": "^14.0.0",
+ "prettier": "^3.2.5",
+ "rimraf": "^6.1.0",
+ "rollup": "^4.17.2",
+ "rollup-plugin-import-css": "^4.0.1",
+ "standard-version": "^9.5.0",
+ "typescript": "^5.9.3",
+ "vue": "^3.4.27",
+ "xhr-mock": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=20.11.0"
+ }
+ },
+ "node_modules/@asamuzakjp/css-color": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz",
+ "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==",
"dev": true,
- "requires": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/css-calc": "^2.1.3",
+ "@csstools/css-color-parser": "^3.0.9",
+ "@csstools/css-parser-algorithms": "^3.0.4",
+ "@csstools/css-tokenizer": "^3.0.3",
+ "lru-cache": "^10.4.3"
}
},
- "abab": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
- "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==",
- "dev": true
+ "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
},
- "accepts": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "node_modules/@babel/code-frame": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
+ "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
"dev": true,
- "requires": {
- "mime-types": "~2.1.18",
- "negotiator": "0.6.1"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "acorn": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
- "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
- "dev": true
+ "node_modules/@babel/compat-data": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
+ "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "acorn-globals": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz",
- "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==",
+ "node_modules/@babel/core": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
+ "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
"dev": true,
- "requires": {
- "acorn": "^6.0.1",
- "acorn-walk": "^6.0.1"
- },
+ "license": "MIT",
"dependencies": {
- "acorn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz",
- "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==",
- "dev": true
- }
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-compilation-targets": "^7.29.7",
+ "@babel/helper-module-transforms": "^7.29.7",
+ "@babel/helpers": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
}
},
- "acorn-jsx": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
- "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "node_modules/@babel/eslint-parser": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.7.tgz",
+ "integrity": "sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==",
"dev": true,
- "requires": {
- "acorn": "^3.0.4"
- },
"dependencies": {
- "acorn": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
- "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
- "dev": true
- }
+ "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
+ "eslint-visitor-keys": "^2.1.0",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || >=14.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.11.0",
+ "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0"
}
},
- "acorn-walk": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz",
- "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==",
- "dev": true
- },
- "acorn5-object-spread": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/acorn5-object-spread/-/acorn5-object-spread-4.0.0.tgz",
- "integrity": "sha1-1XWAge7ZcSGrC+R+Mcqu8qo5lpc=",
+ "node_modules/@babel/generator": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz",
+ "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==",
"dev": true,
- "requires": {
- "acorn": "^5.1.2"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "add-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
- "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=",
- "dev": true
- },
- "ajv": {
- "version": "5.5.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
- "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+ "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
"dev": true,
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "ajv-keywords": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
- "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
- "dev": true
- },
- "alphanum-sort": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
- "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
- "dev": true
- },
- "amdefine": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
- "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
- "dev": true
- },
- "ansi-escapes": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
- "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
- },
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz",
+ "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==",
"dev": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "apache-crypt": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.1.tgz",
- "integrity": "sha1-1vxyqm0n2ZyVqU/RiNcx7v/6Zjw=",
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
+ "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
"dev": true,
- "requires": {
- "unix-crypt-td-js": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.29.7",
+ "@babel/helper-validator-option": "^7.29.7",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "apache-md5": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.2.tgz",
- "integrity": "sha1-7klza2ObTxCLbp5ibG2pkwa0FpI=",
- "dev": true
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz",
+ "integrity": "sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==",
"dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-member-expression-to-functions": "^7.24.7",
+ "@babel/helper-optimise-call-expression": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz",
+ "integrity": "sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==",
"dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "regexpu-core": "^5.3.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
- "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
- "dev": true
- },
- "array-filter": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
- "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
- "dev": true
- },
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
- "dev": true
- },
- "array-ify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
- "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=",
- "dev": true
- },
- "array-map": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
- "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
- "dev": true
- },
- "array-reduce": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
- "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
- "dev": true
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz",
+ "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==",
"dev": true,
- "requires": {
- "array-uniq": "^1.0.1"
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.22.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "arrify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
+ "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
+ "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
"dev": true,
- "requires": {
- "safer-buffer": "~2.1.0"
+ "dependencies": {
+ "@babel/template": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "dev": true
+ "node_modules/@babel/helper-globals": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
+ "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz",
+ "integrity": "sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
+ "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
- "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
+ "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
"dev": true,
- "requires": {
- "lodash": "^4.17.10"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7",
+ "@babel/traverse": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "async-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
- "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
- "dev": true
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz",
+ "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "async-limiter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
- "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
- "dev": true
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "async-to-gen": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/async-to-gen/-/async-to-gen-1.4.0.tgz",
- "integrity": "sha1-+BV/kBPgxIfh6UAVCk0aG3iy3Ws=",
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz",
+ "integrity": "sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==",
"dev": true,
- "requires": {
- "babylon": "^6.14.0",
- "magic-string": "^0.22.0",
- "pirates": "^3.0.2"
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-wrap-function": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz",
+ "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-member-expression-to-functions": "^7.24.7",
+ "@babel/helper-optimise-call-expression": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
},
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+ "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "autoprefixer": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.1.0.tgz",
- "integrity": "sha1-rkkTrcIh+mylrTpvgDn2pcBrOHc=",
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz",
+ "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==",
"dev": true,
- "requires": {
- "browserslist": "^2.1.2",
- "caniuse-lite": "^1.0.30000669",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "postcss": "^6.0.1",
- "postcss-value-parser": "^3.2.3"
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "autoprefixer-stylus": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/autoprefixer-stylus/-/autoprefixer-stylus-0.14.0.tgz",
- "integrity": "sha1-HOk7xMHYyPKbOlZM+7oyQgQu/OA=",
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
+ "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
"dev": true,
- "requires": {
- "autoprefixer": "7.1.0",
- "multi-stage-sourcemap": "0.2.1",
- "postcss": "6.0.1"
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "dev": true
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+ "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "aws4": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
- "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
- "dev": true
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+ "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "babel-code-frame": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
+ "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
"dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "babel-polyfill": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz",
- "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=",
- "requires": {
- "babel-runtime": "^6.22.0",
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.10.0"
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz",
+ "integrity": "sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/template": "^7.24.7",
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "babel-runtime": {
- "version": "6.26.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
- "requires": {
- "core-js": "^2.4.0",
- "regenerator-runtime": "^0.11.0"
+ "node_modules/@babel/helpers": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
+ "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7"
},
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz",
+ "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "regenerator-runtime": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
- }
+ "@babel/types": "^7.29.7"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "babylon": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
- "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
- "dev": true
+ "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz",
+ "integrity": "sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
},
- "balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
- "dev": true
+ "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz",
+ "integrity": "sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
},
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz",
+ "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.13.0"
}
},
- "basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz",
+ "integrity": "sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==",
"dev": true,
- "requires": {
- "safe-buffer": "5.1.2"
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
- "dev": true
+ "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
- "requires": {
- "tweetnacl": "^0.14.3"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "bcryptjs": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
- "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=",
- "dev": true
+ "node_modules/@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
+ "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "binary-extensions": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
- "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
- "dev": true
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
"dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
},
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dev": true,
"dependencies": {
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- }
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "node_modules/@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "browser-process-hrtime": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
- "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==",
- "dev": true
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "browserslist": {
- "version": "2.11.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
- "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30000792",
- "electron-to-chromium": "^1.3.30"
- }
- },
- "buble": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/buble/-/buble-0.18.0.tgz",
- "integrity": "sha512-U3NJxUiSz0H1EB54PEHAuBTxdXgQH4DaQkvkINFXf9kEKCDWSn67EgQfFKbkTzsok4xRrIPsoxWDl2czCHR65g==",
- "dev": true,
- "requires": {
- "acorn": "^5.1.2",
- "acorn-jsx": "^3.0.1",
- "acorn5-object-spread": "^4.0.0",
- "chalk": "^2.1.0",
- "magic-string": "^0.22.4",
- "minimist": "^1.2.0",
- "os-homedir": "^1.0.1",
- "vlq": "^0.2.2"
- },
- "dependencies": {
- "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,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "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,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
+ "node_modules/@babel/plugin-syntax-import-assertions": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz",
+ "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
- "dev": true
- },
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
- },
- "byline": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
- "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=",
- "dev": true
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "caller-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
- "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
+ "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
"dev": true,
- "requires": {
- "callsites": "^0.2.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "callsites": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
- "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
- "dev": true
- },
- "camelcase": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
- "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz",
- "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "map-obj": "^2.0.0",
- "quick-lru": "^1.0.0"
- }
- },
- "caniuse-api": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
- "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
- "dev": true,
- "requires": {
- "browserslist": "^1.3.6",
- "caniuse-db": "^1.0.30000529",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- },
- "dependencies": {
- "browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "requires": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- }
- }
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
+ "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "caniuse-db": {
- "version": "1.0.30000890",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000890.tgz",
- "integrity": "sha512-aO5uw1Taw8GkNMMXIWOz/WJz3y6tR1ETUAdH/pvO5EoJ3I1Po9vNJd9aMjY1GKucS/OXWMiQbXRbk3O1sgCbRA==",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30000890",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000890.tgz",
- "integrity": "sha512-4NI3s4Y6ROm+SgZN5sLUG4k7nVWQnedis3c/RWkynV5G6cHSY7+a8fwFyn2yoBDE3E6VswhTNNwR3PvzGqlTkg==",
- "dev": true
- },
- "capture-stack-trace": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
- "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
- "dev": true
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
- "dev": true
- },
- "chai": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
- "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "pathval": "^1.1.0",
- "type-detect": "^4.0.5"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- }
- },
- "chardet": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
- "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true
- },
- "chokidar": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
- "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
- "dev": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.0",
- "braces": "^2.3.0",
- "fsevents": "^1.2.2",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.1",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "lodash.debounce": "^4.0.8",
- "normalize-path": "^2.1.1",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.0.0",
- "upath": "^1.0.5"
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
+ "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "ci-info": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
- "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
- "dev": true
- },
- "circular-json": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
- "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
- "dev": true
- },
- "clap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
- "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
- "requires": {
- "chalk": "^1.1.3"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "requires": {
- "restore-cursor": "^2.0.0"
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "cli-width": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
- "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
- },
- "clipboard": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz",
- "integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==",
- "optional": true,
- "requires": {
- "good-listener": "^1.2.2",
- "select": "^1.1.2",
- "tiny-emitter": "^2.0.0"
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
- "dev": true
- },
- "cmd-shim": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz",
- "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=",
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "mkdirp": "~0.5.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
- "dev": true
- },
- "coa": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
- "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
"dev": true,
- "requires": {
- "q": "^1.1.2"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "color": {
- "version": "0.11.4",
- "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
- "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
+ "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
"dev": true,
- "requires": {
- "clone": "^1.0.2",
- "color-convert": "^1.3.0",
- "color-string": "^0.3.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "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==",
+ "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
"dev": true,
- "requires": {
- "color-name": "1.1.3"
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "color-string": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
- "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz",
+ "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==",
"dev": true,
- "requires": {
- "color-name": "^1.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "colormin": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
- "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "node_modules/@babel/plugin-transform-async-generator-functions": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz",
+ "integrity": "sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==",
"dev": true,
- "requires": {
- "color": "^0.11.0",
- "css-color-names": "0.0.4",
- "has": "^1.0.1"
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-remap-async-to-generator": "^7.24.7",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "colors": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
- "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
- "dev": true
- },
- "columnify": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz",
- "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=",
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz",
+ "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==",
"dev": true,
- "requires": {
- "strip-ansi": "^3.0.0",
- "wcwidth": "^1.0.0"
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-remap-async-to-generator": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "combined-stream": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
- "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz",
+ "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==",
"dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "command-join": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/command-join/-/command-join-2.0.0.tgz",
- "integrity": "sha1-Uui5hPSHLZUv8b3IuYOX0nxxRM8=",
- "dev": true
- },
- "commander": {
- "version": "2.17.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
- "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
- "dev": true
- },
- "compare-func": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz",
- "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=",
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz",
+ "integrity": "sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==",
"dev": true,
- "requires": {
- "array-ify": "^1.0.0",
- "dot-prop": "^3.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "component-emitter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
- "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "node_modules/@babel/plugin-transform-class-properties": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
+ "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
"dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "connect": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
- "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+ "node_modules/@babel/plugin-transform-class-static-block": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz",
+ "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==",
"dev": true,
- "requires": {
- "debug": "2.6.9",
- "finalhandler": "1.1.0",
- "parseurl": "~1.3.2",
- "utils-merge": "1.0.1"
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0"
}
},
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
- "conventional-changelog": {
- "version": "1.1.24",
- "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz",
- "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==",
- "dev": true,
- "requires": {
- "conventional-changelog-angular": "^1.6.6",
- "conventional-changelog-atom": "^0.2.8",
- "conventional-changelog-codemirror": "^0.3.8",
- "conventional-changelog-core": "^2.0.11",
- "conventional-changelog-ember": "^0.3.12",
- "conventional-changelog-eslint": "^1.0.9",
- "conventional-changelog-express": "^0.3.6",
- "conventional-changelog-jquery": "^0.1.0",
- "conventional-changelog-jscs": "^0.1.0",
- "conventional-changelog-jshint": "^0.3.8",
- "conventional-changelog-preset-loader": "^1.1.8"
- }
- },
- "conventional-changelog-angular": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz",
- "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==",
- "dev": true,
- "requires": {
- "compare-func": "^1.3.1",
- "q": "^1.5.1"
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz",
+ "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-atom": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz",
- "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==",
+ "node_modules/@babel/plugin-transform-classes/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
- "requires": {
- "q": "^1.5.1"
+ "engines": {
+ "node": ">=4"
}
},
- "conventional-changelog-cli": {
- "version": "1.3.22",
- "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz",
- "integrity": "sha512-pnjdIJbxjkZ5VdAX/H1wndr1G10CY8MuZgnXuJhIHglOXfIrXygb7KZC836GW9uo1u8PjEIvIw/bKX0lOmOzZg==",
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
+ "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==",
"dev": true,
- "requires": {
- "add-stream": "^1.0.0",
- "conventional-changelog": "^1.1.24",
- "lodash": "^4.2.1",
- "meow": "^4.0.0",
- "tempfile": "^1.1.1"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/template": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-codemirror": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz",
- "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==",
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz",
+ "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==",
"dev": true,
- "requires": {
- "q": "^1.5.1"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-core": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz",
- "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==",
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz",
+ "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==",
"dev": true,
- "requires": {
- "conventional-changelog-writer": "^3.0.9",
- "conventional-commits-parser": "^2.1.7",
- "dateformat": "^3.0.0",
- "get-pkg-repo": "^1.0.0",
- "git-raw-commits": "^1.3.6",
- "git-remote-origin-url": "^2.0.0",
- "git-semver-tags": "^1.3.6",
- "lodash": "^4.2.1",
- "normalize-package-data": "^2.3.5",
- "q": "^1.5.1",
- "read-pkg": "^1.1.0",
- "read-pkg-up": "^1.0.1",
- "through2": "^2.0.0"
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-ember": {
- "version": "0.3.12",
- "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz",
- "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==",
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz",
+ "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==",
"dev": true,
- "requires": {
- "q": "^1.5.1"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-eslint": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz",
- "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==",
+ "node_modules/@babel/plugin-transform-dynamic-import": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz",
+ "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==",
"dev": true,
- "requires": {
- "q": "^1.5.1"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-express": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz",
- "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==",
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz",
+ "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==",
"dev": true,
- "requires": {
- "q": "^1.5.1"
+ "dependencies": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-jquery": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz",
- "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=",
+ "node_modules/@babel/plugin-transform-export-namespace-from": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz",
+ "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==",
"dev": true,
- "requires": {
- "q": "^1.4.1"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-jscs": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz",
- "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=",
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz",
+ "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==",
"dev": true,
- "requires": {
- "q": "^1.4.1"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-jshint": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz",
- "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==",
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz",
+ "integrity": "sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==",
"dev": true,
- "requires": {
- "compare-func": "^1.3.1",
- "q": "^1.5.1"
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-changelog-preset-loader": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz",
- "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==",
- "dev": true
+ "node_modules/@babel/plugin-transform-json-strings": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz",
+ "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "conventional-changelog-writer": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz",
- "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==",
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz",
+ "integrity": "sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==",
"dev": true,
- "requires": {
- "compare-func": "^1.3.1",
- "conventional-commits-filter": "^1.1.6",
- "dateformat": "^3.0.0",
- "handlebars": "^4.0.2",
- "json-stringify-safe": "^5.0.1",
- "lodash": "^4.2.1",
- "meow": "^4.0.0",
- "semver": "^5.5.0",
- "split": "^1.0.0",
- "through2": "^2.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-commits-filter": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz",
- "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==",
+ "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz",
+ "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==",
"dev": true,
- "requires": {
- "is-subset": "^0.1.1",
- "modify-values": "^1.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-commits-parser": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz",
- "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==",
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz",
+ "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==",
"dev": true,
- "requires": {
- "JSONStream": "^1.0.4",
- "is-text-path": "^1.0.0",
- "lodash": "^4.2.1",
- "meow": "^4.0.0",
- "split2": "^2.0.0",
- "through2": "^2.0.0",
- "trim-off-newlines": "^1.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "conventional-recommended-bump": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz",
- "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==",
- "dev": true,
- "requires": {
- "concat-stream": "^1.4.10",
- "conventional-commits-filter": "^1.1.1",
- "conventional-commits-parser": "^2.1.1",
- "git-raw-commits": "^1.3.0",
- "git-semver-tags": "^1.3.0",
- "meow": "^3.3.0",
- "object-assign": "^4.0.1"
- },
- "dependencies": {
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dev": true,
- "requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- }
- },
- "indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- },
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- },
- "meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "dev": true,
- "requires": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
- }
- },
- "redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "dev": true,
- "requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- }
- },
- "strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1"
- }
- },
- "trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
- "dev": true
- }
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz",
+ "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "core-js": {
- "version": "2.5.7",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
- "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
- "dev": true
- },
- "cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz",
+ "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==",
"dev": true,
- "requires": {
- "object-assign": "^4",
- "vary": "^1"
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-simple-access": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "create-error-class": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
- "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.29.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz",
+ "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==",
"dev": true,
- "requires": {
- "capture-stack-trace": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helper-plugin-utils": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.29.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "cross-env": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz",
- "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==",
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz",
+ "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==",
"dev": true,
- "requires": {
- "cross-spawn": "^6.0.5",
- "is-windows": "^1.0.0"
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz",
+ "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==",
"dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "css-color-names": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
- "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
- "dev": true
- },
- "css-parse": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
- "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
- "dev": true
- },
- "cssnano": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
- "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
- "dev": true,
- "requires": {
- "autoprefixer": "^6.3.1",
- "decamelize": "^1.1.2",
- "defined": "^1.0.0",
- "has": "^1.0.1",
- "object-assign": "^4.0.1",
- "postcss": "^5.0.14",
- "postcss-calc": "^5.2.0",
- "postcss-colormin": "^2.1.8",
- "postcss-convert-values": "^2.3.4",
- "postcss-discard-comments": "^2.0.4",
- "postcss-discard-duplicates": "^2.0.1",
- "postcss-discard-empty": "^2.0.1",
- "postcss-discard-overridden": "^0.1.1",
- "postcss-discard-unused": "^2.2.1",
- "postcss-filter-plugins": "^2.0.0",
- "postcss-merge-idents": "^2.1.5",
- "postcss-merge-longhand": "^2.0.1",
- "postcss-merge-rules": "^2.0.3",
- "postcss-minify-font-values": "^1.0.2",
- "postcss-minify-gradients": "^1.0.1",
- "postcss-minify-params": "^1.0.4",
- "postcss-minify-selectors": "^2.0.4",
- "postcss-normalize-charset": "^1.1.0",
- "postcss-normalize-url": "^3.0.7",
- "postcss-ordered-values": "^2.1.0",
- "postcss-reduce-idents": "^2.2.2",
- "postcss-reduce-initial": "^1.0.0",
- "postcss-reduce-transforms": "^1.0.3",
- "postcss-svgo": "^2.1.1",
- "postcss-unique-selectors": "^2.0.2",
- "postcss-value-parser": "^3.2.3",
- "postcss-zindex": "^2.0.1"
- },
- "dependencies": {
- "autoprefixer": {
- "version": "6.7.7",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
- "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
- "dev": true,
- "requires": {
- "browserslist": "^1.7.6",
- "caniuse-db": "^1.0.30000634",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "postcss": "^5.2.16",
- "postcss-value-parser": "^3.2.3"
- }
- },
- "browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "requires": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- }
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz",
+ "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "csso": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
- "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz",
+ "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==",
"dev": true,
- "requires": {
- "clap": "^1.0.9",
- "source-map": "^0.5.3"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "cssom": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz",
- "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==",
- "dev": true
- },
- "cssstyle": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz",
- "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==",
+ "node_modules/@babel/plugin-transform-numeric-separator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz",
+ "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==",
"dev": true,
- "requires": {
- "cssom": "0.3.x"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "node_modules/@babel/plugin-transform-object-rest-spread": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz",
+ "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==",
"dev": true,
- "requires": {
- "array-find-index": "^1.0.1"
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "dargs": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
- "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz",
+ "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==",
"dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-replace-supers": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "node_modules/@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz",
+ "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==",
"dev": true,
- "requires": {
- "assert-plus": "^1.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "data-urls": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
- "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
+ "node_modules/@babel/plugin-transform-optional-chaining": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz",
+ "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==",
"dev": true,
- "requires": {
- "abab": "^2.0.0",
- "whatwg-mimetype": "^2.2.0",
- "whatwg-url": "^7.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "dateformat": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
- "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
- "dev": true
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz",
+ "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==",
"dev": true,
- "requires": {
- "ms": "2.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=",
+ "node_modules/@babel/plugin-transform-private-methods": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
+ "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
"dev": true,
- "requires": {
- "decamelize": "^1.1.0",
- "map-obj": "^1.0.0"
- },
"dependencies": {
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- }
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
- "dev": true
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "node_modules/@babel/plugin-transform-private-property-in-object": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz",
+ "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==",
"dev": true,
- "requires": {
- "type-detect": "^4.0.0"
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-create-class-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "node_modules/@babel/plugin-transform-property-literals": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz",
+ "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==",
"dev": true,
- "requires": {
- "clone": "^1.0.2"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz",
+ "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==",
"dev": true,
- "requires": {
- "object-keys": "^1.0.12"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "regenerator-transform": "^0.15.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz",
+ "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "defined": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
- "dev": true
- },
- "del": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
- "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
- "dev": true,
- "requires": {
- "globby": "^5.0.0",
- "is-path-cwd": "^1.0.0",
- "is-path-in-cwd": "^1.0.0",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "rimraf": "^2.2.8"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz",
+ "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
- "delegate": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz",
- "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==",
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
- "detect-indent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz",
- "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=",
- "dev": true
+ "node_modules/@babel/plugin-transform-spread": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz",
+ "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
- "dev": true
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz",
+ "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "node_modules/@babel/plugin-transform-template-literals": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz",
+ "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==",
"dev": true,
- "requires": {
- "esutils": "^2.0.2"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "domexception": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
- "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+ "node_modules/@babel/plugin-transform-typeof-symbol": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz",
+ "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==",
"dev": true,
- "requires": {
- "webidl-conversions": "^4.0.2"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "dot-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz",
- "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=",
+ "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz",
+ "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==",
"dev": true,
- "requires": {
- "is-obj": "^1.0.0"
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "duplexer": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
- "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
- "dev": true
+ "node_modules/@babel/plugin-transform-unicode-property-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz",
+ "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
- "dev": true
+ "node_modules/@babel/plugin-transform-unicode-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz",
+ "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
+ "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
"dev": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
+ "node_modules/@babel/preset-env": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz",
+ "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.24.7",
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/helper-validator-option": "^7.24.7",
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.7",
+ "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-import-assertions": "^7.24.7",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.24.7",
+ "@babel/plugin-transform-async-generator-functions": "^7.24.7",
+ "@babel/plugin-transform-async-to-generator": "^7.24.7",
+ "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
+ "@babel/plugin-transform-block-scoping": "^7.24.7",
+ "@babel/plugin-transform-class-properties": "^7.24.7",
+ "@babel/plugin-transform-class-static-block": "^7.24.7",
+ "@babel/plugin-transform-classes": "^7.24.7",
+ "@babel/plugin-transform-computed-properties": "^7.24.7",
+ "@babel/plugin-transform-destructuring": "^7.24.7",
+ "@babel/plugin-transform-dotall-regex": "^7.24.7",
+ "@babel/plugin-transform-duplicate-keys": "^7.24.7",
+ "@babel/plugin-transform-dynamic-import": "^7.24.7",
+ "@babel/plugin-transform-exponentiation-operator": "^7.24.7",
+ "@babel/plugin-transform-export-namespace-from": "^7.24.7",
+ "@babel/plugin-transform-for-of": "^7.24.7",
+ "@babel/plugin-transform-function-name": "^7.24.7",
+ "@babel/plugin-transform-json-strings": "^7.24.7",
+ "@babel/plugin-transform-literals": "^7.24.7",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.24.7",
+ "@babel/plugin-transform-member-expression-literals": "^7.24.7",
+ "@babel/plugin-transform-modules-amd": "^7.24.7",
+ "@babel/plugin-transform-modules-commonjs": "^7.24.7",
+ "@babel/plugin-transform-modules-systemjs": "^7.24.7",
+ "@babel/plugin-transform-modules-umd": "^7.24.7",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7",
+ "@babel/plugin-transform-new-target": "^7.24.7",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
+ "@babel/plugin-transform-numeric-separator": "^7.24.7",
+ "@babel/plugin-transform-object-rest-spread": "^7.24.7",
+ "@babel/plugin-transform-object-super": "^7.24.7",
+ "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.7",
+ "@babel/plugin-transform-parameters": "^7.24.7",
+ "@babel/plugin-transform-private-methods": "^7.24.7",
+ "@babel/plugin-transform-private-property-in-object": "^7.24.7",
+ "@babel/plugin-transform-property-literals": "^7.24.7",
+ "@babel/plugin-transform-regenerator": "^7.24.7",
+ "@babel/plugin-transform-reserved-words": "^7.24.7",
+ "@babel/plugin-transform-shorthand-properties": "^7.24.7",
+ "@babel/plugin-transform-spread": "^7.24.7",
+ "@babel/plugin-transform-sticky-regex": "^7.24.7",
+ "@babel/plugin-transform-template-literals": "^7.24.7",
+ "@babel/plugin-transform-typeof-symbol": "^7.24.7",
+ "@babel/plugin-transform-unicode-escapes": "^7.24.7",
+ "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-regex": "^7.24.7",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
+ "@babel/preset-modules": "0.1.6-no-external-plugins",
+ "babel-plugin-polyfill-corejs2": "^0.4.10",
+ "babel-plugin-polyfill-corejs3": "^0.10.4",
+ "babel-plugin-polyfill-regenerator": "^0.6.1",
+ "core-js-compat": "^3.31.0",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
},
- "electron-to-chromium": {
- "version": "1.3.75",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.75.tgz",
- "integrity": "sha512-nLo03Qpw++8R6BxDZL/B1c8SQvUe/htdgc5LWYHe5YotV2jVvRUMP5AlOmxOsyeOzgMiXrNln2mC05Ixz6vuUQ==",
- "dev": true
+ "node_modules/@babel/preset-modules": {
+ "version": "0.1.6-no-external-plugins",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+ "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
+ }
},
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "node_modules/@babel/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
"dev": true
},
- "encoding": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
- "requires": {
- "iconv-lite": "~0.4.13"
+ "node_modules/@babel/runtime": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz",
+ "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "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==",
+ "node_modules/@babel/template": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
+ "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
"dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/types": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "es-abstract": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
- "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+ "node_modules/@babel/traverse": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz",
+ "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==",
"dev": true,
- "requires": {
- "es-to-primitive": "^1.1.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.7",
+ "@babel/generator": "^7.29.7",
+ "@babel/helper-globals": "^7.29.7",
+ "@babel/parser": "^7.29.7",
+ "@babel/template": "^7.29.7",
+ "@babel/types": "^7.29.7",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "es-to-primitive": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
- "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "node_modules/@babel/types": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz",
+ "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
"dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.29.7",
+ "@babel/helper-validator-identifier": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ "node_modules/@colordx/core": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@colordx/core/-/core-5.5.0.tgz",
+ "integrity": "sha512-3PxTH8itZzltK0U9jTwVVnjLXvnDYuq3m+QXsHkENxWiPRh4WaoLcs1SQjqgZ55kS+QyirpH5BVwzP2gMVG6EQ==",
+ "dev": true,
+ "license": "MIT"
},
- "escodegen": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz",
- "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==",
+ "node_modules/@csstools/color-helpers": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz",
+ "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==",
"dev": true,
- "requires": {
- "esprima": "^3.1.3",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "esprima": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
- "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
- "dev": true
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
},
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
}
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=18"
}
},
- "eslint": {
- "version": "4.19.1",
- "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
- "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
- "dev": true,
- "requires": {
- "ajv": "^5.3.0",
- "babel-code-frame": "^6.22.0",
- "chalk": "^2.1.0",
- "concat-stream": "^1.6.0",
- "cross-spawn": "^5.1.0",
- "debug": "^3.1.0",
- "doctrine": "^2.1.0",
- "eslint-scope": "^3.7.1",
- "eslint-visitor-keys": "^1.0.0",
- "espree": "^3.5.4",
- "esquery": "^1.0.0",
- "esutils": "^2.0.2",
- "file-entry-cache": "^2.0.0",
- "functional-red-black-tree": "^1.0.1",
- "glob": "^7.1.2",
- "globals": "^11.0.1",
- "ignore": "^3.3.3",
- "imurmurhash": "^0.1.4",
- "inquirer": "^3.0.6",
- "is-resolvable": "^1.0.0",
- "js-yaml": "^3.9.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.2",
- "mkdirp": "^0.5.1",
- "natural-compare": "^1.4.0",
- "optionator": "^0.8.2",
- "path-is-inside": "^1.0.2",
- "pluralize": "^7.0.0",
- "progress": "^2.0.0",
- "regexpp": "^1.0.1",
- "require-uncached": "^1.0.3",
- "semver": "^5.3.0",
- "strip-ansi": "^4.0.0",
- "strip-json-comments": "~2.0.1",
- "table": "4.0.2",
- "text-table": "~0.2.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "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,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
+ "node_modules/@csstools/css-calc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz",
+ "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
},
- "debug": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
- "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "js-yaml": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
- "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-color-parser": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz",
+ "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
},
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@csstools/color-helpers": "^5.0.2",
+ "@csstools/css-calc": "^2.1.4"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-parser-algorithms": "^3.0.5",
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-parser-algorithms": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
+ "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
},
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@csstools/css-tokenizer": "^3.0.4"
+ }
+ },
+ "node_modules/@csstools/css-tokenizer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz",
+ "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
},
- "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,
- "requires": {
- "has-flag": "^3.0.0"
- }
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
}
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
}
},
- "eslint-config-xo": {
- "version": "0.20.1",
- "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.20.1.tgz",
- "integrity": "sha512-bhDRezvlbYNZn8SHv0WE8aPsdPtH3sq1IU2SznyOtmRwi6e/XQkzs+Kaw1hA9Pz4xmkG796egIsFY2RD6fwUeQ==",
- "dev": true
+ "node_modules/@emnapi/core": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz",
+ "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.0.2",
+ "tslib": "^2.4.0"
+ }
},
- "eslint-config-xo-space": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/eslint-config-xo-space/-/eslint-config-xo-space-0.18.0.tgz",
- "integrity": "sha512-WtOEyZ4kvs2RDfK2bCQ24qlbJ8Izc/AfkjqD7DqKqXXih2I4brHxIoQwtgDdnbYWgFG4LuS/f6cn7zBE/JVLSw==",
+ "node_modules/@emnapi/runtime": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
+ "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
"dev": true,
- "requires": {
- "eslint-config-xo": "^0.20.0"
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
}
},
- "eslint-scope": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz",
- "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==",
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz",
+ "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==",
"dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
}
},
- "eslint-visitor-keys": {
+ "node_modules/@epic-web/invariant": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
- "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
- "dev": true
- },
- "esm": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/esm/-/esm-3.1.4.tgz",
- "integrity": "sha512-GScwIz0110RTNzBmAQEdqaAYkD9zVhj2Jo+jeizjIcdyTw+C6S0Zv/dlPYgfF41hRTu2f1vQYliubzIkusx2gA==",
- "dev": true
+ "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz",
+ "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==",
+ "dev": true,
+ "license": "MIT"
},
- "espree": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
- "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
+ "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
"dev": true,
- "requires": {
- "acorn": "^5.5.0",
- "acorn-jsx": "^3.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "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"
}
},
- "esprima": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
- "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
- "dev": true
- },
- "esquery": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
- "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "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,
- "requires": {
- "estraverse": "^4.0.0"
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "esrecurse": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
- "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
+ "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==",
"dev": true,
- "requires": {
- "estraverse": "^4.1.0"
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- },
- "estree-walker": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz",
- "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=",
- "dev": true
- },
- "esutils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
- "dev": true
+ "node_modules/@eslint/config-array": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.0.tgz",
+ "integrity": "sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.4",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
},
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+ "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
},
- "event-stream": {
- "version": "3.3.4",
- "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
- "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
- "dev": true,
- "requires": {
- "duplexer": "~0.1.1",
- "from": "~0",
- "map-stream": "~0.1.0",
- "pause-stream": "0.0.11",
- "split": "0.3",
- "stream-combiner": "~0.0.4",
- "through": "~2.3.1"
- },
- "dependencies": {
- "map-stream": {
- "version": "0.1.0",
- "resolved": "http://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
- "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
- "dev": true
- },
- "split": {
- "version": "0.3.3",
- "resolved": "http://registry.npmjs.org/split/-/split-0.3.3.tgz",
- "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
- "dev": true,
- "requires": {
- "through": "2"
- }
- },
- "stream-combiner": {
- "version": "0.0.4",
- "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
- "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
- "dev": true,
- "requires": {
- "duplexer": "~0.1.1"
- }
- }
+ "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,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "execa": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
- "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- }
+ "node_modules/@eslint/js": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.0.tgz",
+ "integrity": "sha512-J2VKrn6YUBegZFzRQVOVA8jk7VViV/MXhQUvXuCUK1I2RGGT2E+bmNGOsgtdO9Wo25Kd3hfZFuCm8LcfsUFV7g==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "expand-brackets": {
+ "node_modules/@eslint/object-schema": {
"version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+ "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "expand-range": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
- "dev": true,
- "requires": {
- "fill-range": "^2.1.0"
- },
- "dependencies": {
- "fill-range": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
- "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
- "dev": true,
- "requires": {
- "is-number": "^2.1.0",
- "isobject": "^2.0.0",
- "randomatic": "^3.0.0",
- "repeat-element": "^1.1.2",
- "repeat-string": "^1.5.2"
- }
- },
- "is-number": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
}
},
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz",
+ "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
},
- "extend-shallow": {
+ "node_modules/@hutson/parse-repository-url": {
"version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
+ "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz",
+ "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "external-editor": {
- "version": "2.2.0",
- "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
- "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
- "requires": {
- "chardet": "^0.4.0",
- "iconv-lite": "^0.4.17",
- "tmp": "^0.0.33"
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
},
- "fast-deep-equal": {
+ "node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
- "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
- "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
- "dev": true
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
},
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
- "faye-websocket": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz",
- "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=",
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz",
+ "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==",
"dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
- "requires": {
- "escape-string-regexp": "^1.0.5"
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "file-entry-cache": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
- "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
- "requires": {
- "flat-cache": "^1.2.1",
- "object-assign": "^4.0.1"
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "filename-regex": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
- "dev": true
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
}
},
- "finalhandler": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
- "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.1",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.2",
- "statuses": "~1.3.1",
- "unpipe": "~1.0.0"
+ "engines": {
+ "node": ">=8"
}
},
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "node_modules/@jest/console": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.4.tgz",
+ "integrity": "sha512-tMLCDvBJBwPqMm4OAiuKm2uF5y5Qe26KgcMn+nrDSWpEW+eeFmqA0iO4zJfL16GP7gE3bUUQ3hIuUJ22AqVRnw==",
"dev": true,
- "requires": {
- "locate-path": "^2.0.0"
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "jest-message-util": "30.0.2",
+ "jest-util": "30.0.2",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "flat-cache": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
- "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
+ "node_modules/@jest/console/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
"dev": true,
- "requires": {
- "circular-json": "^0.3.1",
- "del": "^2.0.2",
- "graceful-fs": "^4.1.2",
- "write": "^0.2.1"
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "flatten": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
- "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=",
- "dev": true
+ "node_modules/@jest/console/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
+ "node_modules/@jest/console/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/console/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
},
- "for-own": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "node_modules/@jest/console/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,
- "requires": {
- "for-in": "^1.0.1"
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "node_modules/@jest/console/node_modules/color-name": {
+ "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
},
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "node_modules/@jest/console/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,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
+ "engines": {
+ "node": ">=8"
}
},
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "node_modules/@jest/console/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
"dev": true,
- "requires": {
- "map-cache": "^0.2.2"
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true
+ "node_modules/@jest/console/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "from": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
- "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
- "dev": true
+ "node_modules/@jest/console/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
},
- "fs-extra": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
- "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "node_modules/@jest/console/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
"dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
+ "node_modules/@jest/console/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
},
- "fsevents": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
- "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "node_modules/@jest/console/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
- "optional": true,
- "requires": {
- "nan": "^2.9.2",
- "node-pre-gyp": "^0.10.0"
+ "dependencies": {
+ "has-flag": "^4.0.0"
},
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/core": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.4.tgz",
+ "integrity": "sha512-MWScSO9GuU5/HoWjpXAOBs6F/iobvK1XlioelgOM9St7S0Z5WTI9kjCQLPeo4eQRRYusyLW25/J7J5lbFkrYXw==",
+ "dev": true,
"dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
+ "@jest/console": "30.0.4",
+ "@jest/pattern": "30.0.1",
+ "@jest/reporters": "30.0.4",
+ "@jest/test-result": "30.0.4",
+ "@jest/transform": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-changed-files": "30.0.2",
+ "jest-config": "30.0.4",
+ "jest-haste-map": "30.0.2",
+ "jest-message-util": "30.0.2",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.0.2",
+ "jest-resolve-dependencies": "30.0.4",
+ "jest-runner": "30.0.4",
+ "jest-runtime": "30.0.4",
+ "jest-snapshot": "30.0.4",
+ "jest-util": "30.0.2",
+ "jest-validate": "30.0.2",
+ "jest-watcher": "30.0.4",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
"optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "2.6.9",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "deep-extend": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.21",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": "^2.1.0"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true,
- "dev": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true
- },
- "minipass": {
- "version": "2.2.4",
- "bundled": true,
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.2.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^2.1.2",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.10.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.0",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.1.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.1.10",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.6.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.0.5"
- }
- },
- "safe-buffer": {
- "version": "5.1.1",
- "bundled": true,
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.5.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.0.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.2.4",
- "minizlib": "^1.1.0",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.1",
- "yallist": "^3.0.2"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true
- },
- "yallist": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true
}
}
},
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
+ "node_modules/@jest/core/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true
- },
- "get-func-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
- "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
- "dev": true
- },
- "get-pkg-repo": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz",
- "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=",
+ "node_modules/@jest/core/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
"dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "meow": "^3.3.0",
- "normalize-package-data": "^2.3.0",
- "parse-github-repo-url": "^1.3.0",
- "through2": "^2.0.0"
- },
"dependencies": {
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dev": true,
- "requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- }
- },
- "indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- },
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
- "dev": true
- },
- "meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
- "dev": true,
- "requires": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
- }
- },
- "redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
- "dev": true,
- "requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- }
- },
- "strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
- "dev": true,
- "requires": {
- "get-stdin": "^4.0.1"
- }
- },
- "trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
- "dev": true
- }
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "get-port": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
- "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=",
- "dev": true
+ "node_modules/@jest/core/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
},
- "get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
- "dev": true
+ "node_modules/@jest/core/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
},
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
- "dev": true
+ "node_modules/@jest/core/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
},
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "node_modules/@jest/core/node_modules/color-name": {
+ "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
},
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "node_modules/@jest/core/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,
- "requires": {
- "assert-plus": "^1.0.0"
+ "engines": {
+ "node": ">=8"
}
},
- "git-raw-commits": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz",
- "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==",
+ "node_modules/@jest/core/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
"dev": true,
- "requires": {
- "dargs": "^4.0.1",
- "lodash.template": "^4.0.2",
- "meow": "^4.0.0",
- "split2": "^2.0.0",
- "through2": "^2.0.0"
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "git-remote-origin-url": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
- "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=",
+ "node_modules/@jest/core/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
"dev": true,
- "requires": {
- "gitconfiglocal": "^1.0.0",
- "pify": "^2.3.0"
- },
"dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "git-semver-tags": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz",
- "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==",
+ "node_modules/@jest/core/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
- "requires": {
- "meow": "^4.0.0",
- "semver": "^5.5.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "gitconfiglocal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
- "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=",
+ "node_modules/@jest/core/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
"dev": true,
- "requires": {
- "ini": "^1.3.2"
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "glob": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
- "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
+ "node_modules/@jest/core/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
+ "node_modules/@jest/diff-sequences": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz",
+ "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==",
+ "dev": true,
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "globals": {
- "version": "11.8.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz",
- "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==",
- "dev": true
- },
- "globby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
- "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "arrify": "^1.0.0",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- }
+ "node_modules/@jest/environment": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.5.tgz",
+ "integrity": "sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/fake-timers": "30.0.5",
+ "@jest/types": "30.0.5",
+ "@types/node": "*",
+ "jest-mock": "30.0.5"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "good-listener": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz",
- "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
- "optional": true,
- "requires": {
- "delegate": "^3.1.2"
- }
- },
- "got": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
- "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
- "dev": true,
- "requires": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
- "dev": true
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true
- },
- "handlebars": {
- "version": "4.0.12",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
- "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
+ "node_modules/@jest/environment-jsdom-abstract": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.0.5.tgz",
+ "integrity": "sha512-gpWwiVxZunkoglP8DCnT3As9x5O8H6gveAOpvaJd2ATAoSh7ZSSCWbr9LQtUMvr8WD3VjG9YnDhsmkCK5WN1rQ==",
"dev": true,
- "requires": {
- "async": "^2.5.0",
- "optimist": "^0.6.1",
- "source-map": "^0.6.1",
- "uglify-js": "^3.1.4"
- },
+ "license": "MIT",
"dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
+ "@jest/environment": "30.0.5",
+ "@jest/fake-timers": "30.0.5",
+ "@jest/types": "30.0.5",
+ "@types/jsdom": "^21.1.7",
+ "@types/node": "*",
+ "jest-mock": "30.0.5",
+ "jest-util": "30.0.5"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "canvas": "^3.0.0",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
}
}
},
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "dev": true
- },
- "har-validator": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
- "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
- "dev": true,
- "requires": {
- "ajv": "^6.5.5",
- "har-schema": "^2.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
- "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^2.0.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "fast-deep-equal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
- "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
- "dev": true
- },
- "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
- }
+ "node_modules/@jest/expect": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.4.tgz",
+ "integrity": "sha512-Z/DL7t67LBHSX4UzDyeYKqOxE/n7lbrrgEwWM3dGiH5Dgn35nk+YtgzKudmfIrBI8DRRrKYY5BCo3317HZV1Fw==",
+ "dev": true,
+ "dependencies": {
+ "expect": "30.0.4",
+ "jest-snapshot": "30.0.4"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "node_modules/@jest/expect-utils": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.4.tgz",
+ "integrity": "sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==",
"dev": true,
- "requires": {
- "function-bind": "^1.1.1"
+ "dependencies": {
+ "@jest/get-type": "30.0.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "requires": {
- "ansi-regex": "^2.0.0"
+ "node_modules/@jest/fake-timers": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.5.tgz",
+ "integrity": "sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "30.0.5",
+ "@sinonjs/fake-timers": "^13.0.0",
+ "@types/node": "*",
+ "jest-message-util": "30.0.5",
+ "jest-mock": "30.0.5",
+ "jest-util": "30.0.5"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
- "dev": true
- },
- "has-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
- "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
- "dev": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "node_modules/@jest/get-type": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz",
+ "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==",
"dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "node_modules/@jest/globals": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.4.tgz",
+ "integrity": "sha512-avyZuxEHF2EUhFF6NEWVdxkRRV6iXXcIES66DLhuLlU7lXhtFG/ySq/a8SRZmEJSsLkNAFX6z6mm8KWyXe9OEA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "30.0.4",
+ "@jest/expect": "30.0.4",
+ "@jest/types": "30.0.1",
+ "jest-mock": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "he": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
- "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
- "dev": true
- },
- "hosted-git-info": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
- "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
- "dev": true
- },
- "html-comment-regex": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
- "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==",
- "dev": true
- },
- "html-encoding-sniffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
- "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+ "node_modules/@jest/globals/node_modules/@jest/environment": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.4.tgz",
+ "integrity": "sha512-5NT+sr7ZOb8wW7C4r7wOKnRQ8zmRWQT2gW4j73IXAKp5/PX1Z8MCStBLQDYfIG3n1Sw0NRfYGdp0iIPVooBAFQ==",
"dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.1"
+ "dependencies": {
+ "@jest/fake-timers": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-mock": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "http-auth": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz",
- "integrity": "sha1-lFz63WZSHq+PfISRPTd9exXyTjE=",
+ "node_modules/@jest/globals/node_modules/@jest/fake-timers": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.4.tgz",
+ "integrity": "sha512-qZ7nxOcL5+gwBO6LErvwVy5k06VsX/deqo2XnVUSTV0TNC9lrg8FC3dARbi+5lmrr5VyX5drragK+xLcOjvjYw==",
"dev": true,
- "requires": {
- "apache-crypt": "^1.1.2",
- "apache-md5": "^1.0.6",
- "bcryptjs": "^2.3.0",
- "uuid": "^3.0.0"
- },
"dependencies": {
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "dev": true
- }
+ "@jest/types": "30.0.1",
+ "@sinonjs/fake-timers": "^13.0.0",
+ "@types/node": "*",
+ "jest-message-util": "30.0.2",
+ "jest-mock": "30.0.2",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "http-errors": {
- "version": "1.6.3",
- "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "node_modules/@jest/globals/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
"dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- },
"dependencies": {
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "dev": true
- }
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "http-parser-js": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz",
- "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==",
- "dev": true
+ "node_modules/@jest/globals/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "node_modules/@jest/globals/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "node_modules/@jest/globals/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "ignore": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
- "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
- "dev": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
+ "node_modules/@jest/globals/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
},
- "indent-string": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "node_modules/@jest/globals/node_modules/color-name": {
+ "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
},
- "indexes-of": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
- "dev": true
+ "node_modules/@jest/globals/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,
+ "engines": {
+ "node": ">=8"
+ }
},
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "node_modules/@jest/globals/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
"dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
+ "node_modules/@jest/globals/node_modules/jest-mock": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz",
+ "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "ini": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
- "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
- "dev": true
+ "node_modules/@jest/globals/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "inquirer": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz",
- "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=",
- "requires": {
- "ansi-escapes": "^1.1.0",
- "chalk": "^1.0.0",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^2.0.1",
- "figures": "^2.0.0",
- "lodash": "^4.3.0",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rx": "^4.1.0",
- "string-width": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "through": "^2.3.6"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
+ "node_modules/@jest/globals/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
},
- "is-absolute-url": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
- "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
- "dev": true
+ "node_modules/@jest/globals/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "node_modules/@jest/globals/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
- "requires": {
- "kind-of": "^3.0.2"
+ "engines": {
+ "node": ">=10"
},
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/globals/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
+ "node_modules/@jest/pattern": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz",
+ "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "jest-regex-util": "30.0.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+ "node_modules/@jest/reporters": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.4.tgz",
+ "integrity": "sha512-6ycNmP0JSJEEys1FbIzHtjl9BP0tOZ/KN6iMeAKrdvGmUsa1qfRdlQRUDKJ4P84hJ3xHw1yTqJt4fvPNHhyE+g==",
"dev": true,
- "requires": {
- "binary-extensions": "^1.0.0"
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "30.0.4",
+ "@jest/test-result": "30.0.4",
+ "@jest/transform": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "collect-v8-coverage": "^1.0.2",
+ "exit-x": "^0.2.2",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.11",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^6.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^5.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "30.0.2",
+ "jest-util": "30.0.2",
+ "jest-worker": "30.0.2",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.2",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
}
},
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
+ "node_modules/@jest/reporters/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-builtin-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "node_modules/@jest/reporters/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
"dev": true,
- "requires": {
- "builtin-modules": "^1.0.0"
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "is-callable": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
- "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
- "dev": true
+ "node_modules/@jest/reporters/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
},
- "is-ci": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
- "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+ "node_modules/@jest/reporters/node_modules/brace-expansion": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz",
+ "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
"dev": true,
- "requires": {
- "ci-info": "^1.5.0"
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
}
},
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "node_modules/@jest/reporters/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,
- "requires": {
- "kind-of": "^3.0.2"
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
},
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/reporters/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,
"dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "is-date-object": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
- "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "node_modules/@jest/reporters/node_modules/color-name": {
+ "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
},
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "node_modules/@jest/reporters/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
+ "license": "ISC",
"dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "is-dotfile": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
+ "node_modules/@jest/reporters/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,
+ "engines": {
+ "node": ">=8"
+ }
},
- "is-equal-shallow": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "node_modules/@jest/reporters/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
- "requires": {
- "is-primitive": "^2.0.0"
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
+ "node_modules/@jest/reporters/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "node_modules/@jest/reporters/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
- "is-finite": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
- "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "node_modules/@jest/reporters/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ "node_modules/@jest/reporters/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
- "is-glob": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
- "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "node_modules/@jest/reporters/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "is-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
- "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
- "dev": true
+ "node_modules/@jest/reporters/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "node_modules/@jest/reporters/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
- "requires": {
- "kind-of": "^3.0.2"
+ "engines": {
+ "node": ">=10"
},
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
"dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "dev": true
+ "node_modules/@jest/schemas": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-path-cwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
- "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
- "dev": true
+ "node_modules/@jest/snapshot-utils": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.4.tgz",
+ "integrity": "sha512-BEpX8M/Y5lG7MI3fmiO+xCnacOrVsnbqVrcDZIT8aSGkKV1w2WwvRQxSWw5SIS8ozg7+h8tSj5EO1Riqqxcdag==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "natural-compare": "^1.4.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-path-in-cwd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
- "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+ "node_modules/@jest/snapshot-utils/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
"dev": true,
- "requires": {
- "is-path-inside": "^1.0.0"
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "is-path-inside": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
- "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "node_modules/@jest/snapshot-utils/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
"dev": true,
- "requires": {
- "path-is-inside": "^1.0.1"
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
- "dev": true
+ "node_modules/@jest/snapshot-utils/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
},
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "node_modules/@jest/snapshot-utils/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,
- "requires": {
- "isobject": "^3.0.1"
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "is-posix-bracket": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
+ "node_modules/@jest/snapshot-utils/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
},
- "is-primitive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+ "node_modules/@jest/snapshot-utils/node_modules/color-name": {
+ "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
},
- "is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
- },
- "is-redirect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
- "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
- "dev": true
+ "node_modules/@jest/snapshot-utils/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,
+ "engines": {
+ "node": ">=8"
+ }
},
- "is-regex": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
- "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "node_modules/@jest/snapshot-utils/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
- "requires": {
- "has": "^1.0.1"
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "is-resolvable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
- "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
- "dev": true
+ "node_modules/@jest/source-map": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz",
+ "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "callsites": "^3.1.0",
+ "graceful-fs": "^4.2.11"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-retry-allowed": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
- "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
- "dev": true
+ "node_modules/@jest/test-result": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.4.tgz",
+ "integrity": "sha512-Mfpv8kjyKTHqsuu9YugB6z1gcdB3TSSOaKlehtVaiNlClMkEHY+5ZqCY2CrEE3ntpBMlstX/ShDAf84HKWsyIw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "collect-v8-coverage": "^1.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+ "node_modules/@jest/test-result/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-subset": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
- "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
- "dev": true
+ "node_modules/@jest/test-result/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "is-svg": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
- "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "node_modules/@jest/test-result/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
- "requires": {
- "html-comment-regex": "^1.1.0"
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "is-symbol": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
- "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "node_modules/@jest/test-result/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,
- "requires": {
- "has-symbols": "^1.0.0"
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "is-text-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
- "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=",
+ "node_modules/@jest/test-result/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,
- "requires": {
- "text-extensions": "^1.0.0"
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "node_modules/@jest/test-result/node_modules/color-name": {
+ "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
},
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
+ "node_modules/@jest/test-result/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,
+ "engines": {
+ "node": ">=8"
+ }
},
- "is-windows": {
+ "node_modules/@jest/test-result/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/test-sequencer": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.4.tgz",
+ "integrity": "sha512-bj6ePmqi4uxAE8EHE0Slmk5uBYd9Vd/PcVt06CsBxzH4bbA8nGsI1YbXl/NH+eii4XRtyrRx+Cikub0x8H4vDg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/test-result": "30.0.4",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.0.2",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/transform": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.4.tgz",
+ "integrity": "sha512-atvy4hRph/UxdCIBp+UB2jhEA/jJiUeGZ7QPgBi9jUUKNgi3WEoMXGNG7zbbELG2+88PMabUNCDchmqgJy3ELg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@jest/types": "30.0.1",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "babel-plugin-istanbul": "^7.0.0",
+ "chalk": "^4.1.2",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.0.2",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.0.2",
+ "micromatch": "^4.0.8",
+ "pirates": "^4.0.7",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^5.0.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/transform/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/transform/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/color-name": {
+ "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
+ },
+ "node_modules/@jest/transform/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/@jest/transform/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/types": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.5.tgz",
+ "integrity": "sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/types/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/types/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"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@jest/types/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"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@jest/types/node_modules/color-name": {
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/@jest/types/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/@jest/types/node_modules/supports-color": {
+ "version": "7.2.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.12",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
+ "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "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,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+ "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
+ "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.29",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
+ "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz",
+ "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@tybys/wasm-util": "^0.9.0"
+ }
+ },
+ "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
+ "version": "5.1.1-v1",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+ "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-scope": "5.1.1"
+ }
+ },
+ "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,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@pkgr/core": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
+ }
+ },
+ "node_modules/@playwright/test": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz",
+ "integrity": "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==",
+ "dev": true,
+ "dependencies": {
+ "playwright": "1.61.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@rollup/plugin-babel": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-7.0.0.tgz",
+ "integrity": "sha512-NS2+P7v80N3MQqehZEjgpaFb9UyX3URNMW/zvoECKGo4PY4DvJfQusTI7BX/Ks+CPvtTfk3TqcR6S9VYBi/C+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.18.6",
+ "@rollup/pluginutils": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0",
+ "@types/babel__core": "^7.1.9",
+ "rollup": "^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/babel__core": {
+ "optional": true
+ },
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs": {
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.0.tgz",
+ "integrity": "sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "commondir": "^1.0.1",
+ "estree-walker": "^2.0.2",
+ "fdir": "^6.2.0",
+ "is-reference": "1.2.1",
+ "magic-string": "^0.30.3",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=16.0.0 || 14 >= 14.17"
+ },
+ "peerDependencies": {
+ "rollup": "^2.68.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/fdir": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz",
+ "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==",
+ "dev": true,
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/@rollup/plugin-node-resolve": {
+ "version": "16.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz",
+ "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
+ "deepmerge": "^4.2.2",
+ "is-module": "^1.0.0",
+ "resolve": "^1.22.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.78.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-replace": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.1.tgz",
+ "integrity": "sha512-2sPh9b73dj5IxuMmDAsQWVFT7mR+yoHweBaXG2W/R8vQ+IWZlnaI7BR7J6EguVQUp1hd8Z7XuozpDjEKQAAC2Q==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "magic-string": "^0.30.3"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-terser": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-1.0.0.tgz",
+ "integrity": "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "serialize-javascript": "^7.0.3",
+ "smob": "^1.0.0",
+ "terser": "^5.17.4"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz",
+ "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
+ "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz",
+ "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz",
+ "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz",
+ "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz",
+ "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz",
+ "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz",
+ "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz",
+ "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz",
+ "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz",
+ "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz",
+ "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz",
+ "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz",
+ "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz",
+ "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz",
+ "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz",
+ "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz",
+ "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz",
+ "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-openbsd-x64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz",
+ "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-openharmony-arm64": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz",
+ "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz",
+ "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz",
+ "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz",
+ "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz",
+ "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.34.38",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.38.tgz",
+ "integrity": "sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sindresorhus/merge-streams": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
+ "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "13.0.5",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
+ "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.1"
+ }
+ },
+ "node_modules/@socket.io/component-emitter": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
+ "dev": true
+ },
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
+ "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/common-tags": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/@types/common-tags/-/common-tags-1.8.4.tgz",
+ "integrity": "sha512-S+1hLDJPjWNDhcGxsxEbepzaxWqURP/o+3cP4aa2w7yBXgdcmKGQtZzP8JbyfOd0m+33nh+8+kvxYE2UJtBDkg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/cors": {
+ "version": "2.8.17",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
+ "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "8.56.10",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
+ "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
+ "dev": true
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/jsdom": {
+ "version": "21.1.7",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz",
+ "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "@types/tough-cookie": "*",
+ "parse5": "^7.0.0"
+ }
+ },
+ "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
+ },
+ "node_modules/@types/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "20.14.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
+ "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/normalize-package-data": {
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/prismjs": {
+ "version": "1.26.5",
+ "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz",
+ "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/resolve": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+ "dev": true
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
+ "dev": true
+ },
+ "node_modules/@types/tough-cookie": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
+ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/ws": {
+ "version": "8.18.1",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
+ "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/yargs": {
+ "version": "17.0.33",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
+ "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
+ "dev": true,
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.0.tgz",
+ "integrity": "sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.48.0",
+ "@typescript-eslint/types": "^8.48.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz",
+ "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.48.0",
+ "@typescript-eslint/visitor-keys": "8.48.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.0.tgz",
+ "integrity": "sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.0.tgz",
+ "integrity": "sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz",
+ "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.48.0",
+ "@typescript-eslint/tsconfig-utils": "8.48.0",
+ "@typescript-eslint/types": "8.48.0",
+ "@typescript-eslint/visitor-keys": "8.48.0",
+ "debug": "^4.3.4",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz",
+ "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.0.tgz",
+ "integrity": "sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.7.0",
+ "@typescript-eslint/scope-manager": "8.48.0",
+ "@typescript-eslint/types": "8.48.0",
+ "@typescript-eslint/typescript-estree": "8.48.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.48.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz",
+ "integrity": "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.48.0",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "dev": true
+ },
+ "node_modules/@unrs/resolver-binding-android-arm-eabi": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.10.1.tgz",
+ "integrity": "sha512-zohDKXT1Ok0yhbVGff4YAg9HUs5ietG5GpvJBPFSApZnGe7uf2cd26DRhKZbn0Be6xHUZrSzP+RAgMmzyc71EA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-android-arm64": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.10.1.tgz",
+ "integrity": "sha512-tAN6k5UrTd4nicpA7s2PbjR/jagpDzAmvXFjbpTazUe5FRsFxVcBlS1F5Lzp5jtWU6bdiqRhSvd4X8rdpCffeA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-arm64": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.10.1.tgz",
+ "integrity": "sha512-+FCsag8WkauI4dQ50XumCXdfvDCZEpMUnvZDsKMxfOisnEklpDFXc6ThY0WqybBYZbiwR5tWcFaZmI0G6b4vrg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-x64": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.10.1.tgz",
+ "integrity": "sha512-qYKGGm5wk71ONcXTMZ0+J11qQeOAPz3nw6VtqrBUUELRyXFyvK8cHhHsLBFR4GHnilc2pgY1HTB2TvdW9wO26Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-freebsd-x64": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.10.1.tgz",
+ "integrity": "sha512-hOHMAhbvIQ63gkpgeNsXcWPSyvXH7ZEyeg254hY0Lp/hX8NdW+FsUWq73g9946Pc/BrcVI/I3C1cmZ4RCX9bNw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.10.1.tgz",
+ "integrity": "sha512-6ds7+zzHJgTDmpe0gmFcOTvSUhG5oZukkt+cCsSb3k4Uiz2yEQB4iCRITX2hBwSW+p8gAieAfecITjgqCkswXw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.10.1.tgz",
+ "integrity": "sha512-P7A0G2/jW00diNJyFeq4W9/nxovD62Ay8CMP4UK9OymC7qO7rG1a8Upad68/bdfpIOn7KSp7Aj/6lEW3yyznAA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.10.1.tgz",
+ "integrity": "sha512-Cg6xzdkrpltcTPO4At+A79zkC7gPDQIgosJmVV8M104ImB6KZi1MrNXgDYIAfkhUYjPzjNooEDFRAwwPadS7ZA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.10.1.tgz",
+ "integrity": "sha512-aNeg99bVkXa4lt+oZbjNRPC8ZpjJTKxijg/wILrJdzNyAymO2UC/HUK1UfDjt6T7U5p/mK24T3CYOi3/+YEQSA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.10.1.tgz",
+ "integrity": "sha512-ylz5ojeXrkPrtnzVhpCO+YegG63/aKhkoTlY8PfMfBfLaUG8v6m6iqrL7sBUKdVBgOB4kSTUPt9efQdA/Y3Z/w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.10.1.tgz",
+ "integrity": "sha512-xcWyhmJfXXOxK7lvE4+rLwBq+on83svlc0AIypfe6x4sMJR+S4oD7n9OynaQShfj2SufPw2KJAotnsNb+4nN2g==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.10.1.tgz",
+ "integrity": "sha512-mW9JZAdOCyorgi1eLJr4gX7xS67WNG9XNPYj5P8VuttK72XNsmdw9yhOO4tDANMgiLXFiSFaiL1gEpoNtRPw/A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.10.1.tgz",
+ "integrity": "sha512-NZGKhBy6xkJ0k09cWNZz4DnhBcGlhDd3W+j7EYoNvf5TSwj2K6kbmfqTWITEgkvjsMUjm1wsrc4IJaH6VtjyHQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.10.1.tgz",
+ "integrity": "sha512-VsjgckJ0gNMw7p0d8In6uPYr+s0p16yrT2rvG4v2jUpEMYkpnfnCiALa9SWshbvlGjKQ98Q2x19agm3iFk8w8Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-musl": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.10.1.tgz",
+ "integrity": "sha512-idMnajMeejnaFi0Mx9UTLSYFDAOTfAEP7VjXNgxKApso3Eu2Njs0p2V95nNIyFi4oQVGFmIuCkoznAXtF/Zbmw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-wasm32-wasi": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.10.1.tgz",
+ "integrity": "sha512-7jyhjIRNFjzlr8x5pth6Oi9hv3a7ubcVYm2GBFinkBQKcFhw4nIs5BtauSNtDW1dPIGrxF0ciynCZqzxMrYMsg==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^0.2.11"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.10.1.tgz",
+ "integrity": "sha512-TY79+N+Gkoo7E99K+zmsKNeiuNJYlclZJtKqsHSls8We2iGhgxtletVsiBYie93MSTDRDMI8pkBZJlIJSZPrdA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.10.1.tgz",
+ "integrity": "sha512-BAJN5PEPlEV+1m8+PCtFoKm3LQ1P57B4Z+0+efU0NzmCaGk7pUaOxuPgl+m3eufVeeNBKiPDltG0sSB9qEfCxw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.10.1.tgz",
+ "integrity": "sha512-2v3erKKmmCyIVvvhI2nF15qEbdBpISTq44m9pyd5gfIJB1PN94oePTLWEd82XUbIbvKhv76xTSeUQSCOGesLeg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.31.tgz",
+ "integrity": "sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.24.7",
+ "@vue/shared": "3.4.31",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.31.tgz",
+ "integrity": "sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-core": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.31.tgz",
+ "integrity": "sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.24.7",
+ "@vue/compiler-core": "3.4.31",
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/compiler-ssr": "3.4.31",
+ "@vue/shared": "3.4.31",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.10",
+ "postcss": "^8.4.38",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.31.tgz",
+ "integrity": "sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.31.tgz",
+ "integrity": "sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==",
+ "dev": true,
+ "dependencies": {
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.31.tgz",
+ "integrity": "sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==",
+ "dev": true,
+ "dependencies": {
+ "@vue/reactivity": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.31.tgz",
+ "integrity": "sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==",
+ "dev": true,
+ "dependencies": {
+ "@vue/reactivity": "3.4.31",
+ "@vue/runtime-core": "3.4.31",
+ "@vue/shared": "3.4.31",
+ "csstype": "^3.1.3"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.31.tgz",
+ "integrity": "sha512-D5BLbdvrlR9PE3by9GaUp1gQXlCNadIZytMIb8H2h3FMWJd4oUfkUTEH2wAr3qxoRz25uxbTcbqd3WKlm9EHQA==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-ssr": "3.4.31",
+ "@vue/shared": "3.4.31"
+ },
+ "peerDependencies": {
+ "vue": "3.4.31"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.31.tgz",
+ "integrity": "sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==",
+ "dev": true
+ },
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "dev": true,
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/add-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
+ "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.15.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
+ "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "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
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-ify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz",
+ "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/async": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.14"
+ }
+ },
+ "node_modules/async-each-series": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz",
+ "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.0.tgz",
+ "integrity": "sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "follow-redirects": "^1.16.0",
+ "form-data": "^4.0.5",
+ "https-proxy-agent": "^5.0.1",
+ "proxy-from-env": "^2.1.0"
+ }
+ },
+ "node_modules/axios/node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/axios/node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/babel-jest": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.4.tgz",
+ "integrity": "sha512-UjG2j7sAOqsp2Xua1mS/e+ekddkSu3wpf4nZUSvXNHuVWdaOUXQ77+uyjJLDE9i0atm5x4kds8K9yb5lRsRtcA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/transform": "30.0.4",
+ "@types/babel__core": "^7.20.5",
+ "babel-plugin-istanbul": "^7.0.0",
+ "babel-preset-jest": "30.0.1",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.11.0"
+ }
+ },
+ "node_modules/babel-jest/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/babel-jest/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/babel-jest/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/babel-jest/node_modules/color-name": {
+ "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
+ },
+ "node_modules/babel-jest/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-jest/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz",
+ "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-instrument": "^6.0.2",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz",
+ "integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/template": "^7.27.2",
+ "@babel/types": "^7.27.3",
+ "@types/babel__core": "^7.20.5"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2": {
+ "version": "0.4.11",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
+ "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-define-polyfill-provider": "^0.6.2",
+ "semver": "^6.3.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
+ "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.6.1",
+ "core-js-compat": "^3.36.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz",
+ "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.6.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
+ "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz",
+ "integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==",
+ "dev": true,
+ "dependencies": {
+ "babel-plugin-jest-hoist": "30.0.1",
+ "babel-preset-current-node-syntax": "^1.1.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.11.0"
+ }
+ },
+ "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
+ },
+ "node_modules/base64id": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
+ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
+ "dev": true,
+ "engines": {
+ "node": "^4.5.0 || >= 5.9"
+ }
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.10.40",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.40.tgz",
+ "integrity": "sha512-BSSLZ9/Cjjv7Gtj5B68ZzXcXUg8iOf3fme+FCuh8rC/Go+Kmh8cox7M3A8dolou16s64QjLPOSdngh7GxXvkSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/batch": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
+ "dev": true
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.16",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz",
+ "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browser-sync": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.4.tgz",
+ "integrity": "sha512-mcYOIy4BW6sWSEnTSBjQwWsnbx2btZX78ajTTjdNfyC/EqQVcIe0nQR6894RNAMtvlfAnLaH9L2ka97zpvgenA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "browser-sync-client": "^3.0.4",
+ "browser-sync-ui": "^3.0.4",
+ "bs-recipes": "1.3.4",
+ "chalk": "4.1.2",
+ "chokidar": "^3.5.1",
+ "connect": "3.6.6",
+ "connect-history-api-fallback": "^1",
+ "dev-ip": "^1.0.1",
+ "easy-extender": "^2.3.4",
+ "eazy-logger": "^4.1.0",
+ "etag": "^1.8.1",
+ "fresh": "^0.5.2",
+ "fs-extra": "3.0.1",
+ "http-proxy": "^1.18.1",
+ "immutable": "^3",
+ "micromatch": "^4.0.8",
+ "opn": "5.3.0",
+ "portscanner": "2.2.0",
+ "raw-body": "^2.3.2",
+ "resp-modifier": "6.0.2",
+ "rx": "4.1.0",
+ "send": "^0.19.0",
+ "serve-index": "^1.9.1",
+ "serve-static": "^1.16.2",
+ "server-destroy": "1.0.1",
+ "socket.io": "^4.4.1",
+ "ua-parser-js": "^1.0.33",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "browser-sync": "dist/bin.js"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/browser-sync-client": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.4.tgz",
+ "integrity": "sha512-+ew5ubXzGRKVjquBL3u6najS40TG7GxCdyBll0qSRc/n+JRV9gb/yDdRL1IAgRHqjnJTdqeBKKIQabjvjRSYRQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "etag": "1.8.1",
+ "fresh": "0.5.2",
+ "mitt": "^1.1.3"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/browser-sync-ui": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.4.tgz",
+ "integrity": "sha512-5Po3YARCZ/8yQHFzvrSjn8+hBUF7ZWac39SHsy8Tls+7tE62iq6pYWxpVU6aOOMAGD21RwFQhQeqmJPf70kHEQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async-each-series": "0.1.1",
+ "chalk": "4.1.2",
+ "connect-history-api-fallback": "^1",
+ "immutable": "^3",
+ "server-destroy": "1.0.1",
+ "socket.io-client": "^4.4.1",
+ "stream-throttle": "^0.1.3"
+ }
+ },
+ "node_modules/browser-sync-ui/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/browser-sync-ui/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"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/browser-sync-ui/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"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/browser-sync-ui/node_modules/color-name": {
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/browser-sync-ui/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/browser-sync-ui/node_modules/supports-color": {
+ "version": "7.2.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browser-sync/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/browser-sync/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/browser-sync/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/browser-sync/node_modules/color-name": {
+ "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
+ },
+ "node_modules/browser-sync/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browser-sync/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.4",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz",
+ "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.10.38",
+ "caniuse-lite": "^1.0.30001799",
+ "electron-to-chromium": "^1.5.376",
+ "node-releases": "^2.0.48",
+ "update-browserslist-db": "^1.2.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bs-recipes": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz",
+ "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==",
+ "dev": true
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-keys": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
+ "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "map-obj": "^4.0.0",
+ "quick-lru": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-api": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-4.0.0.tgz",
+ "integrity": "sha512-B0hQ1OLyJuHTQSOWXvwibWqM6DCoqJdvBA6X1S/53bd4XU7LJ1yurIPlrsouol3mw1jh9pGI4ivubSpmJeIqCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001799",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz",
+ "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "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/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.0.tgz",
+ "integrity": "sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz",
+ "integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==",
+ "dev": true
+ },
+ "node_modules/cli-cursor": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
+ "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz",
+ "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "slice-ansi": "^8.0.0",
+ "string-width": "^8.2.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/string-width": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz",
+ "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-east-asian-width": "^1.5.0",
+ "strip-ansi": "^7.1.2"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-truncate/node_modules/strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.2.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/cliui/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/cliui/node_modules/color-name": {
+ "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
+ },
+ "node_modules/cliui/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
+ },
+ "node_modules/cliui/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/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,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+ "dev": true
+ },
+ "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/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/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
+ "dev": true
+ },
+ "node_modules/compare-func": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz",
+ "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-ify": "^1.0.0",
+ "dot-prop": "^5.1.0"
+ }
+ },
+ "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
+ },
+ "node_modules/concat-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+ "dev": true,
+ "engines": [
+ "node >= 6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/connect": {
+ "version": "3.6.6",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+ "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.0",
+ "parseurl": "~1.3.2",
+ "utils-merge": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/connect-history-api-fallback": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+ "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/connect/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/connect/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/conventional-changelog": {
+ "version": "3.1.25",
+ "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz",
+ "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "conventional-changelog-angular": "^5.0.12",
+ "conventional-changelog-atom": "^2.0.8",
+ "conventional-changelog-codemirror": "^2.0.8",
+ "conventional-changelog-conventionalcommits": "^4.5.0",
+ "conventional-changelog-core": "^4.2.1",
+ "conventional-changelog-ember": "^2.0.9",
+ "conventional-changelog-eslint": "^3.0.9",
+ "conventional-changelog-express": "^2.0.6",
+ "conventional-changelog-jquery": "^3.0.11",
+ "conventional-changelog-jshint": "^2.0.9",
+ "conventional-changelog-preset-loader": "^2.3.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-angular": {
+ "version": "5.0.13",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz",
+ "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "compare-func": "^2.0.0",
+ "q": "^1.5.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-atom": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz",
+ "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "q": "^1.5.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-codemirror": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz",
+ "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "q": "^1.5.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-config-spec": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-config-spec/-/conventional-changelog-config-spec-2.1.0.tgz",
+ "integrity": "sha512-IpVePh16EbbB02V+UA+HQnnPIohgXvJRxHcS5+Uwk4AT5LjzCZJm5sp/yqs5C6KZJ1jMsV4paEV13BN1pvDuxQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/conventional-changelog-conventionalcommits": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz",
+ "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "compare-func": "^2.0.0",
+ "lodash": "^4.17.15",
+ "q": "^1.5.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-core": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz",
+ "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "add-stream": "^1.0.0",
+ "conventional-changelog-writer": "^5.0.0",
+ "conventional-commits-parser": "^3.2.0",
+ "dateformat": "^3.0.0",
+ "get-pkg-repo": "^4.0.0",
+ "git-raw-commits": "^2.0.8",
+ "git-remote-origin-url": "^2.0.0",
+ "git-semver-tags": "^4.1.1",
+ "lodash": "^4.17.15",
+ "normalize-package-data": "^3.0.0",
+ "q": "^1.5.1",
+ "read-pkg": "^3.0.0",
+ "read-pkg-up": "^3.0.0",
+ "through2": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-ember": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz",
+ "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "q": "^1.5.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-eslint": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz",
+ "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "q": "^1.5.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-express": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz",
+ "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "q": "^1.5.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-jquery": {
+ "version": "3.0.11",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz",
+ "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "q": "^1.5.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-jshint": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz",
+ "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "compare-func": "^2.0.0",
+ "q": "^1.5.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-preset-loader": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz",
+ "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-changelog-writer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz",
+ "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "conventional-commits-filter": "^2.0.7",
+ "dateformat": "^3.0.0",
+ "handlebars": "^4.7.7",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "^4.17.15",
+ "meow": "^8.0.0",
+ "semver": "^6.0.0",
+ "split": "^1.0.0",
+ "through2": "^4.0.0"
+ },
+ "bin": {
+ "conventional-changelog-writer": "cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-commits-filter": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz",
+ "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lodash.ismatch": "^4.4.0",
+ "modify-values": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-commits-parser": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz",
+ "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-text-path": "^1.0.1",
+ "JSONStream": "^1.0.4",
+ "lodash": "^4.17.15",
+ "meow": "^8.0.0",
+ "split2": "^3.0.0",
+ "through2": "^4.0.0"
+ },
+ "bin": {
+ "conventional-commits-parser": "cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/conventional-recommended-bump": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz",
+ "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "concat-stream": "^2.0.0",
+ "conventional-changelog-preset-loader": "^2.3.4",
+ "conventional-commits-filter": "^2.0.7",
+ "conventional-commits-parser": "^3.2.0",
+ "git-raw-commits": "^2.0.8",
+ "git-semver-tags": "^4.1.1",
+ "meow": "^8.0.0",
+ "q": "^1.5.1"
+ },
+ "bin": {
+ "conventional-recommended-bump": "cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/cookie": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/core-js-compat": {
+ "version": "3.37.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
+ "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.23.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/cross-env": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.0.0.tgz",
+ "integrity": "sha512-aU8qlEK/nHYtVuN4p7UQgAwVljzMg8hB4YK5ThRqD2l/ziSnryncPNn7bMLt5cFYsKVKBh8HqLqyCoTupEUu7Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@epic-web/invariant": "^1.0.0",
+ "cross-spawn": "^7.0.6"
+ },
+ "bin": {
+ "cross-env": "dist/bin/cross-env.js",
+ "cross-env-shell": "dist/bin/cross-env-shell.js"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "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",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-tree": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
+ "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.27.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cssnano": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-8.0.2.tgz",
+ "integrity": "sha512-K+a76gA1v0/CsYgcsE95HGGyIuPKxpQSetwSwz4nHEM8fFXqSkzq2JzEXFL8v5+CCjxzVVVhPcTK3Oo8SaF/xA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssnano-preset-default": "^8.0.2",
+ "lilconfig": "^3.1.3"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/cssnano"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/cssnano-preset-default": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-8.0.2.tgz",
+ "integrity": "sha512-+jQAqIKCqMmBjZs7741XkilU93ITZ/EW8gjAkMmujdCzfDkfjrDBv2VqkSu29Fzeig/0rZ3S9IAwfPLlmXEUfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.2",
+ "cssnano-utils": "^6.0.1",
+ "postcss-calc": "^10.1.1",
+ "postcss-colormin": "^8.0.1",
+ "postcss-convert-values": "^8.0.1",
+ "postcss-discard-comments": "^8.0.1",
+ "postcss-discard-duplicates": "^8.0.1",
+ "postcss-discard-empty": "^8.0.1",
+ "postcss-discard-overridden": "^8.0.1",
+ "postcss-merge-longhand": "^8.0.1",
+ "postcss-merge-rules": "^8.0.1",
+ "postcss-minify-font-values": "^8.0.1",
+ "postcss-minify-gradients": "^8.0.1",
+ "postcss-minify-params": "^8.0.1",
+ "postcss-minify-selectors": "^8.0.2",
+ "postcss-normalize-charset": "^8.0.1",
+ "postcss-normalize-display-values": "^8.0.1",
+ "postcss-normalize-positions": "^8.0.1",
+ "postcss-normalize-repeat-style": "^8.0.1",
+ "postcss-normalize-string": "^8.0.1",
+ "postcss-normalize-timing-functions": "^8.0.1",
+ "postcss-normalize-unicode": "^8.0.1",
+ "postcss-normalize-url": "^8.0.1",
+ "postcss-normalize-whitespace": "^8.0.1",
+ "postcss-ordered-values": "^8.0.1",
+ "postcss-reduce-initial": "^8.0.1",
+ "postcss-reduce-transforms": "^8.0.1",
+ "postcss-svgo": "^8.0.1",
+ "postcss-unique-selectors": "^8.0.1"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/cssnano-utils": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-6.0.1.tgz",
+ "integrity": "sha512-zk65GIxA8tCjqVk7nTm1mE+ZKxtnxAvU5JSUaBLXbAr3ZF7IOvz3fbPOnEDvZKhnS7GOIitXTS5BgehLzNoc8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/csso": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "css-tree": "~2.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ },
+ "engines": {
+ "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/csso/node_modules/mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/cssstyle": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz",
+ "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@asamuzakjp/css-color": "^3.2.0",
+ "rrweb-cssom": "^0.8.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true
+ },
+ "node_modules/dargs": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
+ "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/dateformat": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
+ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+ "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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,
+ "license": "MIT",
+ "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/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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decimal.js": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/dedent": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz",
+ "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==",
+ "dev": true,
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "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
+ },
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/dependency-graph": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
+ "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
+ }
+ },
+ "node_modules/detect-indent": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dev-ip": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz",
+ "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==",
+ "dev": true,
+ "bin": {
+ "dev-ip": "lib/dev-ip.js"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/dexie": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.0.11.tgz",
+ "integrity": "sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==",
+ "license": "Apache-2.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",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/dom-walk": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
+ "dev": true
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "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",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-obj": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/dotgitignore": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-2.1.0.tgz",
+ "integrity": "sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "find-up": "^3.0.0",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/dotgitignore/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/dotgitignore/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/dotgitignore/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/dotgitignore/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/dotgitignore/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/easy-extender": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz",
+ "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.10"
+ },
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/eazy-logger": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.1.0.tgz",
+ "integrity": "sha512-+mn7lRm+Zf1UT/YaH8WXtpU6PIV2iOjzP6jgKoiaq/VNrjYKp+OHZGe2znaLgDeFkw8cL9ffuaUm+nNnzcYyGw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "4.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/eazy-logger/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eazy-logger/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eazy-logger/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eazy-logger/node_modules/color-name": {
+ "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
+ },
+ "node_modules/eazy-logger/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eazy-logger/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "dev": true
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.379",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.379.tgz",
+ "integrity": "sha512-v/qV5aV5EUA2pGilzUCq5/eyOloZAqDZBu9UMBIzgPpLlprjSR6zswsWBTv0KpqxLGUAZEwhO95ZCt7srymNVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/engine.io": {
+ "version": "6.6.9",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.9.tgz",
+ "integrity": "sha512-clKkw4C7nJ22mGgoVcCg6V/W/TxdNyIOTr89k2ONZu81qqkddPFDF0LXcbAwhzPD8DjkiRCjzuiO6Y+fkpD4vg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/cors": "^2.8.12",
+ "@types/node": ">=10.0.0",
+ "@types/ws": "^8.5.12",
+ "accepts": "~1.3.4",
+ "base64id": "2.0.0",
+ "cookie": "~0.7.2",
+ "cors": "~2.8.5",
+ "debug": "~4.4.1",
+ "engine.io-parser": "~5.2.1",
+ "ws": "~8.21.0"
+ },
+ "engines": {
+ "node": ">=10.2.0"
+ }
+ },
+ "node_modules/engine.io-client": {
+ "version": "6.6.6",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.6.tgz",
+ "integrity": "sha512-iY6QdftLQ9pyiPoX082bpf/u1UewnOaJrtJIF9T0++QB34lZrj0uP+Q/bj8AlUsAxqhnkTV2BS8SBZSxOmoV5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1",
+ "engine.io-parser": "~5.2.1",
+ "ws": "~8.21.0",
+ "xmlhttprequest-ssl": "~2.1.1"
+ }
+ },
+ "node_modules/engine.io-client/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/engine.io-client/node_modules/ms": {
+ "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/engine.io-parser": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz",
+ "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/engine.io/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/engine.io/node_modules/ms": {
+ "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/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/environment": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
+ "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.3",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.13",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "dev": true
+ },
+ "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/eslint": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.6.0.tgz",
+ "integrity": "sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/config-array": "^0.17.0",
+ "@eslint/eslintrc": "^3.1.0",
+ "@eslint/js": "9.6.0",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.3.0",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.0.1",
+ "eslint-visitor-keys": "^4.0.0",
+ "espree": "^10.1.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "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"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz",
+ "integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "eslint-config-prettier": "build/bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-jest": {
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.2.1.tgz",
+ "integrity": "sha512-0WLIezrIxitUGbjMIGwznVzSIp0uFJV0PZ2fiSvpyVcxe+QMXKUt7MRhUpzdbctnnLwiOTOFkACplgB0wAglFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/utils": "^8.0.0"
+ },
+ "engines": {
+ "node": "^20.12.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "jest": "*"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-playwright": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.1.0.tgz",
+ "integrity": "sha512-wMbHOehofSB1cBdzz2CLaCYaKNLeTQ0YnOW+7AHa281TJqlpEJUBgTHbRUYOUxiXphfWwOyTPvgr6vvEmArbSA==",
+ "dev": true,
+ "license": "MIT",
+ "workspaces": [
+ "examples"
+ ],
+ "dependencies": {
+ "globals": "^13.23.0"
+ },
+ "engines": {
+ "node": ">=16.6.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=8.40.0"
+ }
+ },
+ "node_modules/eslint-plugin-playwright/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-plugin-playwright/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/eslint-plugin-prettier": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
+ "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
+ "dev": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0",
+ "synckit": "^0.8.6"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-plugin-prettier"
+ },
+ "peerDependencies": {
+ "@types/eslint": ">=8.0.0",
+ "eslint": ">=8.0.0",
+ "eslint-config-prettier": "*",
+ "prettier": ">=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/eslint": {
+ "optional": true
+ },
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint/node_modules/@eslint/js": {
+ "version": "9.6.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.6.0.tgz",
+ "integrity": "sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/eslint/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/color-name": {
+ "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
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz",
+ "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+ "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint/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,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/eslint/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+ "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.12.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.0.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+ "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "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,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "dev": true
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/execa/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/exit-x": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz",
+ "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expect": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.4.tgz",
+ "integrity": "sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/expect-utils": "30.0.4",
+ "@jest/get-type": "30.0.1",
+ "jest-matcher-utils": "30.0.4",
+ "jest-message-util": "30.0.2",
+ "jest-mock": "30.0.2",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/expect/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/expect/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/expect/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/expect/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/expect/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/expect/node_modules/color-name": {
+ "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
+ },
+ "node_modules/expect/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/expect/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/expect/node_modules/jest-mock": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz",
+ "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/expect/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/expect/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/expect/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/expect/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/expect/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "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
+ },
+ "node_modules/fast-diff": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
+ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "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"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "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
+ },
+ "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
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "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,
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+ "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.1",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.2",
+ "statuses": "~1.3.1",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/finalhandler/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz",
+ "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "hasown": "^2.0.4",
+ "mime-types": "^2.1.35"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+ "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^3.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "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,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "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/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
+ "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-pkg-repo": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz",
+ "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@hutson/parse-repository-url": "^3.0.0",
+ "hosted-git-info": "^4.0.0",
+ "through2": "^2.0.0",
+ "yargs": "^16.2.0"
+ },
+ "bin": {
+ "get-pkg-repo": "src/cli.js"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/get-pkg-repo/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"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/color-name": {
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/get-pkg-repo/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,
+ "license": "MIT"
+ },
+ "node_modules/get-pkg-repo/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "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"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/get-pkg-repo/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/get-pkg-repo/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/get-pkg-repo/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",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/get-pkg-repo/node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-stdin": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
+ "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/git-raw-commits": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
+ "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
+ "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dargs": "^7.0.0",
+ "lodash": "^4.17.15",
+ "meow": "^8.0.0",
+ "split2": "^3.0.0",
+ "through2": "^4.0.0"
+ },
+ "bin": {
+ "git-raw-commits": "cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/git-remote-origin-url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
+ "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "gitconfiglocal": "^1.0.0",
+ "pify": "^2.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/git-semver-tags": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz",
+ "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==",
+ "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "meow": "^8.0.0",
+ "semver": "^6.0.0"
+ },
+ "bin": {
+ "git-semver-tags": "cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/gitconfiglocal": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz",
+ "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==",
+ "dev": true,
+ "license": "BSD",
+ "dependencies": {
+ "ini": "^1.3.2"
+ }
+ },
+ "node_modules/glob": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz",
+ "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "minimatch": "^10.1.1",
+ "minipass": "^7.1.2",
+ "path-scurry": "^2.0.0"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
+ "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/global": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "dev": true,
+ "dependencies": {
+ "min-document": "^2.19.0",
+ "process": "^0.11.10"
+ }
+ },
+ "node_modules/globals": {
+ "version": "17.1.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-17.1.0.tgz",
+ "integrity": "sha512-8HoIcWI5fCvG5NADj4bDav+er9B9JMj2vyL2pI8D0eismKyUvPLTSs+Ln3wqhwcp306i73iyVnEKx3F6T47TGw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globby": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz",
+ "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==",
+ "dev": true,
+ "dependencies": {
+ "@sindresorhus/merge-streams": "^2.1.0",
+ "fast-glob": "^3.3.2",
+ "ignore": "^5.2.4",
+ "path-type": "^5.0.0",
+ "slash": "^5.1.0",
+ "unicorn-magic": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby/node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.9",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz",
+ "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.2",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+ "dev": true,
+ "license": "MIT",
+ "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==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/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,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/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,
+ "license": "ISC"
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-encoding": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "dev": true,
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-errors/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-proxy": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+ "dev": true,
+ "dependencies": {
+ "eventemitter3": "^4.0.0",
+ "follow-redirects": "^1.0.0",
+ "requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/husky": {
+ "version": "9.0.11",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz",
+ "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==",
+ "dev": true,
+ "bin": {
+ "husky": "bin.mjs"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/typicode"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immutable": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.3.tgz",
+ "integrity": "sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
+ "dev": true,
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "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,
+ "license": "ISC"
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
+ "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
+ "dev": true,
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz",
+ "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-east-asian-width": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
+ "dev": true
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-like": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz",
+ "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==",
+ "dev": true,
+ "dependencies": {
+ "lodash.isfinite": "^3.3.2"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-reference": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
+ "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-text-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz",
+ "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "text-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dev": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
+ "dev": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-report/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
+ "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.23",
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+ "dev": true,
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz",
+ "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.4.tgz",
+ "integrity": "sha512-9QE0RS4WwTj/TtTC4h/eFVmFAhGNVerSB9XpJh8sqaXlP73ILcPcZ7JWjjEtJJe2m8QyBLKKfPQuK+3F+Xij/g==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "30.0.4",
+ "@jest/types": "30.0.1",
+ "import-local": "^3.2.0",
+ "jest-cli": "30.0.4"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-changed-files": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.2.tgz",
+ "integrity": "sha512-Ius/iRST9FKfJI+I+kpiDh8JuUlAISnRszF9ixZDIqJF17FckH5sOzKC8a0wd0+D+8em5ADRHA5V5MnfeDk2WA==",
+ "dev": true,
+ "dependencies": {
+ "execa": "^5.1.1",
+ "jest-util": "30.0.2",
+ "p-limit": "^3.1.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-changed-files/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-changed-files/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-changed-files/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-changed-files/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-circus": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.4.tgz",
+ "integrity": "sha512-o6UNVfbXbmzjYgmVPtSQrr5xFZCtkDZGdTlptYvGFSN80RuOOlTe73djvMrs+QAuSERZWcHBNIOMH+OEqvjWuw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "30.0.4",
+ "@jest/expect": "30.0.4",
+ "@jest/test-result": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "co": "^4.6.0",
+ "dedent": "^1.6.0",
+ "is-generator-fn": "^2.1.0",
+ "jest-each": "30.0.2",
+ "jest-matcher-utils": "30.0.4",
+ "jest-message-util": "30.0.2",
+ "jest-runtime": "30.0.4",
+ "jest-snapshot": "30.0.4",
+ "jest-util": "30.0.2",
+ "p-limit": "^3.1.0",
+ "pretty-format": "30.0.2",
+ "pure-rand": "^7.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/@jest/environment": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.4.tgz",
+ "integrity": "sha512-5NT+sr7ZOb8wW7C4r7wOKnRQ8zmRWQT2gW4j73IXAKp5/PX1Z8MCStBLQDYfIG3n1Sw0NRfYGdp0iIPVooBAFQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/fake-timers": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-mock": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/@jest/fake-timers": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.4.tgz",
+ "integrity": "sha512-qZ7nxOcL5+gwBO6LErvwVy5k06VsX/deqo2XnVUSTV0TNC9lrg8FC3dARbi+5lmrr5VyX5drragK+xLcOjvjYw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@sinonjs/fake-timers": "^13.0.0",
+ "@types/node": "*",
+ "jest-message-util": "30.0.2",
+ "jest-mock": "30.0.2",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-circus/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-circus/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-circus/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-circus/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/jest-mock": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz",
+ "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-circus/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-circus/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-cli": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.4.tgz",
+ "integrity": "sha512-3dOrP3zqCWBkjoVG1zjYJpD9143N9GUCbwaF2pFF5brnIgRLHmKcCIw+83BvF1LxggfMWBA0gxkn6RuQVuRhIQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "30.0.4",
+ "@jest/test-result": "30.0.4",
+ "@jest/types": "30.0.1",
+ "chalk": "^4.1.2",
+ "exit-x": "^0.2.2",
+ "import-local": "^3.2.0",
+ "jest-config": "30.0.4",
+ "jest-util": "30.0.2",
+ "jest-validate": "30.0.2",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-cli/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-cli/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-cli/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-cli/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-cli/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-cli/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-cli/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-cli/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-cli/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-cli/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-config": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.4.tgz",
+ "integrity": "sha512-3dzbO6sh34thAGEjJIW0fgT0GA0EVlkski6ZzMcbW6dzhenylXAE/Mj2MI4HonroWbkKc6wU6bLVQ8dvBSZ9lA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@jest/get-type": "30.0.1",
+ "@jest/pattern": "30.0.1",
+ "@jest/test-sequencer": "30.0.4",
+ "@jest/types": "30.0.1",
+ "babel-jest": "30.0.4",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "deepmerge": "^4.3.1",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.11",
+ "jest-circus": "30.0.4",
+ "jest-docblock": "30.0.1",
+ "jest-environment-node": "30.0.4",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.0.2",
+ "jest-runner": "30.0.4",
+ "jest-util": "30.0.2",
+ "jest-validate": "30.0.2",
+ "micromatch": "^4.0.8",
+ "parse-json": "^5.2.0",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "esbuild-register": ">=3.4.0",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "esbuild-register": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-config/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-config/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-config/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-config/node_modules/brace-expansion": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz",
+ "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/jest-config/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-config/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-config/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-config/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-config/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-config/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jest-config/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-config/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
+ "node_modules/jest-config/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-config/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-config/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-config/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-config/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-diff": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.4.tgz",
+ "integrity": "sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/diff-sequences": "30.0.1",
+ "@jest/get-type": "30.0.1",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-diff/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-diff/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-diff/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-diff/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-diff/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-diff/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-diff/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-diff/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-docblock": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz",
+ "integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==",
+ "dev": true,
+ "dependencies": {
+ "detect-newline": "^3.1.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-each": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.2.tgz",
+ "integrity": "sha512-ZFRsTpe5FUWFQ9cWTMguCaiA6kkW5whccPy9JjD1ezxh+mJeqmz8naL8Fl/oSbNJv3rgB0x87WBIkA5CObIUZQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/get-type": "30.0.1",
+ "@jest/types": "30.0.1",
+ "chalk": "^4.1.2",
+ "jest-util": "30.0.2",
+ "pretty-format": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-each/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-each/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-each/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-each/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-each/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-each/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-environment-jsdom": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-30.0.5.tgz",
+ "integrity": "sha512-BmnDEoAH+jEjkPrvE9DTKS2r3jYSJWlN/r46h0/DBUxKrkgt2jAZ5Nj4wXLAcV1KWkRpcFqA5zri9SWzJZ1cCg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "30.0.5",
+ "@jest/environment-jsdom-abstract": "30.0.5",
+ "@types/jsdom": "^21.1.7",
+ "@types/node": "*",
+ "jsdom": "^26.1.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "canvas": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-environment-node": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.4.tgz",
+ "integrity": "sha512-p+rLEzC2eThXqiNh9GHHTC0OW5Ca4ZfcURp7scPjYBcmgpR9HG6750716GuUipYf2AcThU3k20B31USuiaaIEg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "30.0.4",
+ "@jest/fake-timers": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-mock": "30.0.2",
+ "jest-util": "30.0.2",
+ "jest-validate": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/@jest/environment": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.4.tgz",
+ "integrity": "sha512-5NT+sr7ZOb8wW7C4r7wOKnRQ8zmRWQT2gW4j73IXAKp5/PX1Z8MCStBLQDYfIG3n1Sw0NRfYGdp0iIPVooBAFQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/fake-timers": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-mock": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/@jest/fake-timers": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.4.tgz",
+ "integrity": "sha512-qZ7nxOcL5+gwBO6LErvwVy5k06VsX/deqo2XnVUSTV0TNC9lrg8FC3dARbi+5lmrr5VyX5drragK+xLcOjvjYw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@sinonjs/fake-timers": "^13.0.0",
+ "@types/node": "*",
+ "jest-message-util": "30.0.2",
+ "jest-mock": "30.0.2",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-environment-node/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-environment-node/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-environment-node/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/jest-mock": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz",
+ "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-haste-map": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.2.tgz",
+ "integrity": "sha512-telJBKpNLeCb4MaX+I5k496556Y2FiKR/QLZc0+MGBYl4k3OO0472drlV2LUe7c1Glng5HuAu+5GLYp//GpdOQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "anymatch": "^3.1.3",
+ "fb-watchman": "^2.0.2",
+ "graceful-fs": "^4.2.11",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.0.2",
+ "jest-worker": "30.0.2",
+ "micromatch": "^4.0.8",
+ "walker": "^1.0.8"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.3"
+ }
+ },
+ "node_modules/jest-haste-map/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-haste-map/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-haste-map/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-haste-map/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-haste-map/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-haste-map/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-haste-map/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-haste-map/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-haste-map/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-haste-map/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-leak-detector": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.2.tgz",
+ "integrity": "sha512-U66sRrAYdALq+2qtKffBLDWsQ/XoNNs2Lcr83sc9lvE/hEpNafJlq2lXCPUBMNqamMECNxSIekLfe69qg4KMIQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/get-type": "30.0.1",
+ "pretty-format": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-leak-detector/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-leak-detector/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-leak-detector/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.4.tgz",
+ "integrity": "sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/get-type": "30.0.1",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.0.4",
+ "pretty-format": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-matcher-utils/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-matcher-utils/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-matcher-utils/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-matcher-utils/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-message-util": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.5.tgz",
+ "integrity": "sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.5",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.5",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-message-util/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"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-message-util/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"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/color-name": {
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/jest-message-util/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/jest-message-util/node_modules/supports-color": {
+ "version": "7.2.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-mock": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.5.tgz",
+ "integrity": "sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "30.0.5",
+ "@types/node": "*",
+ "jest-util": "30.0.5"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz",
+ "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==",
+ "dev": true,
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-resolve": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.2.tgz",
+ "integrity": "sha512-q/XT0XQvRemykZsvRopbG6FQUT6/ra+XV6rPijyjT6D0msOyCvR2A5PlWZLd+fH0U8XWKZfDiAgrUNDNX2BkCw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.0.2",
+ "jest-pnp-resolver": "^1.2.3",
+ "jest-util": "30.0.2",
+ "jest-validate": "30.0.2",
+ "slash": "^3.0.0",
+ "unrs-resolver": "^1.7.11"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-resolve-dependencies": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.4.tgz",
+ "integrity": "sha512-EQBYow19B/hKr4gUTn+l8Z+YLlP2X0IoPyp0UydOtrcPbIOYzJ8LKdFd+yrbwztPQvmlBFUwGPPEzHH1bAvFAw==",
+ "dev": true,
+ "dependencies": {
+ "jest-regex-util": "30.0.1",
+ "jest-snapshot": "30.0.4"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-resolve/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-resolve/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-resolve/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-resolve/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-runner": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.4.tgz",
+ "integrity": "sha512-mxY0vTAEsowJwvFJo5pVivbCpuu6dgdXRmt3v3MXjBxFly7/lTk3Td0PaMyGOeNQUFmSuGEsGYqhbn7PA9OekQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/console": "30.0.4",
+ "@jest/environment": "30.0.4",
+ "@jest/test-result": "30.0.4",
+ "@jest/transform": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-docblock": "30.0.1",
+ "jest-environment-node": "30.0.4",
+ "jest-haste-map": "30.0.2",
+ "jest-leak-detector": "30.0.2",
+ "jest-message-util": "30.0.2",
+ "jest-resolve": "30.0.2",
+ "jest-runtime": "30.0.4",
+ "jest-util": "30.0.2",
+ "jest-watcher": "30.0.4",
+ "jest-worker": "30.0.2",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/@jest/environment": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.4.tgz",
+ "integrity": "sha512-5NT+sr7ZOb8wW7C4r7wOKnRQ8zmRWQT2gW4j73IXAKp5/PX1Z8MCStBLQDYfIG3n1Sw0NRfYGdp0iIPVooBAFQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/fake-timers": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-mock": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/@jest/fake-timers": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.4.tgz",
+ "integrity": "sha512-qZ7nxOcL5+gwBO6LErvwVy5k06VsX/deqo2XnVUSTV0TNC9lrg8FC3dARbi+5lmrr5VyX5drragK+xLcOjvjYw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@sinonjs/fake-timers": "^13.0.0",
+ "@types/node": "*",
+ "jest-message-util": "30.0.2",
+ "jest-mock": "30.0.2",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-runner/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-runner/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-runner/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-runner/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/jest-mock": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz",
+ "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-runner/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-runner/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-runtime": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.4.tgz",
+ "integrity": "sha512-tUQrZ8+IzoZYIHoPDQEB4jZoPyzBjLjq7sk0KVyd5UPRjRDOsN7o6UlvaGF8ddpGsjznl9PW+KRgWqCNO+Hn7w==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "30.0.4",
+ "@jest/fake-timers": "30.0.4",
+ "@jest/globals": "30.0.4",
+ "@jest/source-map": "30.0.1",
+ "@jest/test-result": "30.0.4",
+ "@jest/transform": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "cjs-module-lexer": "^2.1.0",
+ "collect-v8-coverage": "^1.0.2",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.0.2",
+ "jest-message-util": "30.0.2",
+ "jest-mock": "30.0.2",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.0.2",
+ "jest-snapshot": "30.0.4",
+ "jest-util": "30.0.2",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/@jest/environment": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.4.tgz",
+ "integrity": "sha512-5NT+sr7ZOb8wW7C4r7wOKnRQ8zmRWQT2gW4j73IXAKp5/PX1Z8MCStBLQDYfIG3n1Sw0NRfYGdp0iIPVooBAFQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/fake-timers": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-mock": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/@jest/fake-timers": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.4.tgz",
+ "integrity": "sha512-qZ7nxOcL5+gwBO6LErvwVy5k06VsX/deqo2XnVUSTV0TNC9lrg8FC3dARbi+5lmrr5VyX5drragK+xLcOjvjYw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@sinonjs/fake-timers": "^13.0.0",
+ "@types/node": "*",
+ "jest-message-util": "30.0.2",
+ "jest-mock": "30.0.2",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/brace-expansion": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz",
+ "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/jest-runtime/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-runtime/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-runtime/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-runtime/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/jest-mock": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz",
+ "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "jest-util": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
+ "node_modules/jest-runtime/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-snapshot": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.4.tgz",
+ "integrity": "sha512-S/8hmSkeUib8WRUq9pWEb5zMfsOjiYWDWzFzKnjX7eDyKKgimsu9hcmsUEg8a7dPAw8s/FacxsXquq71pDgPjQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@babel/generator": "^7.27.5",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.27.1",
+ "@babel/types": "^7.27.3",
+ "@jest/expect-utils": "30.0.4",
+ "@jest/get-type": "30.0.1",
+ "@jest/snapshot-utils": "30.0.4",
+ "@jest/transform": "30.0.4",
+ "@jest/types": "30.0.1",
+ "babel-preset-current-node-syntax": "^1.1.0",
+ "chalk": "^4.1.2",
+ "expect": "30.0.4",
+ "graceful-fs": "^4.2.11",
+ "jest-diff": "30.0.4",
+ "jest-matcher-utils": "30.0.4",
+ "jest-message-util": "30.0.2",
+ "jest-util": "30.0.2",
+ "pretty-format": "30.0.2",
+ "semver": "^7.7.2",
+ "synckit": "^0.11.8"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/@pkgr/core": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz",
+ "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/pkgr"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-snapshot/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/jest-message-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
+ "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.0.1",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.0.2",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/synckit": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz",
+ "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==",
+ "dev": true,
+ "dependencies": {
+ "@pkgr/core": "^0.2.4"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/synckit"
+ }
+ },
+ "node_modules/jest-util": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.5.tgz",
+ "integrity": "sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "30.0.5",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-util/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-util/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"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-util/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"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-util/node_modules/color-name": {
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/jest-util/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/jest-util/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-util/node_modules/supports-color": {
+ "version": "7.2.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-validate": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.2.tgz",
+ "integrity": "sha512-noOvul+SFER4RIvNAwGn6nmV2fXqBq67j+hKGHKGFCmK4ks/Iy1FSrqQNBLGKlu4ZZIRL6Kg1U72N1nxuRCrGQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/get-type": "30.0.1",
+ "@jest/types": "30.0.1",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/jest-validate/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-validate/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-validate/node_modules/pretty-format": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
+ "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/schemas": "30.0.1",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-watcher": {
+ "version": "30.0.4",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.4.tgz",
+ "integrity": "sha512-YESbdHDs7aQOCSSKffG8jXqOKFqw4q4YqR+wHYpR5GWEQioGvL0BfbcjvKIvPEM0XGfsfJrka7jJz3Cc3gI4VQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/test-result": "30.0.4",
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "jest-util": "30.0.2",
+ "string-length": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-watcher/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-watcher/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-watcher/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.2.tgz",
+ "integrity": "sha512-RN1eQmx7qSLFA+o9pfJKlqViwL5wt+OL3Vff/A+/cPsmuw7NPwfgl33AP+/agRmHzPOFgXviRycR9kYwlcRQXg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@ungap/structured-clone": "^1.3.0",
+ "jest-util": "30.0.2",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.1.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-worker/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest-worker/node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest-worker/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker/node_modules/jest-util": {
+ "version": "30.0.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
+ "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.0.1",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/jest/node_modules/@jest/schemas": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
+ "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest/node_modules/@jest/types": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
+ "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.1",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest/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,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/jest/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,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest/node_modules/color-name": {
+ "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
+ },
+ "node_modules/jest/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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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
+ },
+ "node_modules/js-yaml": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz",
+ "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/puzrin"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nodeca"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsdom": {
+ "version": "26.1.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz",
+ "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssstyle": "^4.2.1",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.5.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.6",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.16",
+ "parse5": "^7.2.1",
+ "rrweb-cssom": "^0.8.0",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^5.1.1",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.1.1",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "canvas": "^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "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
+ },
+ "node_modules/json-parse-better-errors": {
"version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "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
+ },
+ "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
+ },
+ "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
+ },
+ "node_modules/json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+ "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==",
+ "dev": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
+ "dev": true,
+ "engines": [
+ "node >= 0.2.0"
+ ],
+ "license": "MIT"
+ },
+ "node_modules/JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+ "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+ "dev": true,
+ "license": "(MIT OR Apache-2.0)",
+ "dependencies": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "bin": {
+ "JSONStream": "bin.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "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,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "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"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/limiter": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz",
+ "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==",
+ "dev": true
+ },
+ "node_modules/lines-and-columns": {
+ "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
+ },
+ "node_modules/lint-staged": {
+ "version": "17.0.8",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.0.8.tgz",
+ "integrity": "sha512-B2P/d+jVW0UXOQ0MVMLrB/9ydA1P+zz6jYfdrbbEd9ur3S2rcbduFWKiUCC02Sm5hbC8nrm7y24WuYMG54HfxA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "listr2": "^10.2.1",
+ "picomatch": "^4.0.4",
+ "string-argv": "^0.3.2",
+ "tinyexec": "^1.2.4"
+ },
+ "bin": {
+ "lint-staged": "bin/lint-staged.js"
+ },
+ "engines": {
+ "node": ">=22.22.1"
+ },
+ "funding": {
+ "url": "https://opencollective.com/lint-staged"
+ },
+ "optionalDependencies": {
+ "yaml": "^2.9.0"
+ }
+ },
+ "node_modules/lint-staged/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/listr2": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/listr2/-/listr2-10.2.2.tgz",
+ "integrity": "sha512-JtNtbZj8q5BnDMR7trpwvwk3RIrANtIVzEUm8w7amp6xelLgyuq+4WZoTH913XaQAoH/cNdYhaNzBPA2U3xbDw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cli-truncate": "^5.2.0",
+ "eventemitter3": "^5.0.4",
+ "log-update": "^6.1.0",
+ "rfdc": "^1.4.1",
+ "wrap-ansi": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=22.13.0"
+ }
+ },
+ "node_modules/listr2/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/listr2/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/listr2/node_modules/eventemitter3": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
+ "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/listr2/node_modules/string-width": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz",
+ "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-east-asian-width": "^1.5.0",
+ "strip-ansi": "^7.1.2"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/listr2/node_modules/strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.2.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/listr2/node_modules/wrap-ansi": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.0.tgz",
+ "integrity": "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.3",
+ "string-width": "^8.2.0",
+ "strip-ansi": "^7.1.2"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/load-json-file/node_modules/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/load-json-file/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/load-json-file/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "dev": true
+ },
+ "node_modules/lodash.isfinite": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
+ "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==",
+ "dev": true
+ },
+ "node_modules/lodash.ismatch": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz",
+ "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "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
+ },
+ "node_modules/log-update": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
+ "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-escapes": "^7.0.0",
+ "cli-cursor": "^5.0.0",
+ "slice-ansi": "^7.1.0",
+ "strip-ansi": "^7.1.0",
+ "wrap-ansi": "^9.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-escapes": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz",
+ "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "environment": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/emoji-regex": {
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
+ "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/log-update/node_modules/slice-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
+ "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "is-fullwidth-code-point": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/string-width": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
+ "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-update/node_modules/strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.2.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/log-update/node_modules/wrap-ansi": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
+ "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+ "dev": true,
+ "dependencies": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/marked": {
+ "version": "18.0.3",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.3.tgz",
+ "integrity": "sha512-7VT90JOkDeaRWpfjOReRGPEKn0ecdARBkDGL+tT1wZY0efPPqkUxLUSmzy/C7TIylQYJC9STISEsCHrqb/7VIA==",
+ "license": "MIT",
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.27.1",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
+ "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/medium-zoom": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz",
+ "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ=="
+ },
+ "node_modules/memorystream": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/meow": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz",
+ "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/minimist": "^1.2.0",
+ "camelcase-keys": "^6.2.2",
+ "decamelize-keys": "^1.1.0",
+ "hard-rejection": "^2.1.0",
+ "minimist-options": "4.1.0",
+ "normalize-package-data": "^3.0.0",
+ "read-pkg-up": "^7.0.1",
+ "redent": "^3.0.0",
+ "trim-newlines": "^3.0.0",
+ "type-fest": "^0.18.0",
+ "yargs-parser": "^20.2.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/meow/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/meow/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/meow/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/meow/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/meow/node_modules/type-fest": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
+ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "dev": true,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mimic-function": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
+ "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/min-document": {
+ "version": "2.19.2",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.2.tgz",
+ "integrity": "sha512-8S5I8db/uZN8r9HSLFVWPdJCvYOejMcEC82VIzNUc6Zkklf/d1gg2psfE79/vyhWOj4+J8MtwmoOz3TmvaGu5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dom-walk": "^0.1.0"
+ }
+ },
+ "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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "license": "MIT",
+ "dependencies": {
+ "arrify": "^1.0.1",
+ "is-plain-obj": "^1.1.0",
+ "kind-of": "^6.0.3"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mitt": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz",
+ "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/modify-values": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
+ "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.12",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
+ "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/napi-postinstall": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.0.tgz",
+ "integrity": "sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==",
+ "dev": true,
+ "bin": {
+ "napi-postinstall": "lib/cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/napi-postinstall"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node_modules/node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
+ "dev": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.50",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.50.tgz",
+ "integrity": "sha512-J6l92tKHX6w8Jy5nO1Vuc01NoIiRGi/d6qBKVxh+IQ8Cr3b6HbVNfKiF8ZpFKufTwpwxMmce2W3iQZ861ZRyTg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "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"
+ }
+ },
+ "node_modules/normalize-package-data/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-all": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
+ "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "chalk": "^2.4.1",
+ "cross-spawn": "^6.0.5",
+ "memorystream": "^0.3.1",
+ "minimatch": "^3.0.4",
+ "pidtree": "^0.3.0",
+ "read-pkg": "^3.0.0",
+ "shell-quote": "^1.6.1",
+ "string.prototype.padend": "^3.0.0"
+ },
+ "bin": {
+ "npm-run-all": "bin/npm-run-all/index.js",
+ "run-p": "bin/run-p/index.js",
+ "run-s": "bin/run-s/index.js"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/cross-spawn": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
+ "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "engines": {
+ "node": ">=4.8"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/pidtree": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
+ "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
+ "dev": true,
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/nwsapi": {
+ "version": "2.2.21",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz",
+ "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "dev": true,
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/opencollective-postinstall": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+ "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
+ "bin": {
+ "opencollective-postinstall": "index.js"
+ }
+ },
+ "node_modules/opn": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz",
+ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==",
+ "dev": true,
+ "dependencies": {
+ "is-wsl": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
+ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^6.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5/node_modules/entities": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
+ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-scurry": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+ "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz",
+ "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+ "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true
},
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true
+ "node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/playwright": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz",
+ "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==",
+ "dev": true,
+ "dependencies": {
+ "playwright-core": "1.61.1"
+ },
+ "bin": {
+ "playwright": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "fsevents": "2.3.2"
+ }
+ },
+ "node_modules/playwright-core": {
+ "version": "1.61.1",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz",
+ "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==",
+ "dev": true,
+ "bin": {
+ "playwright-core": "cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/playwright/node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/portscanner": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz",
+ "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==",
+ "dev": true,
+ "dependencies": {
+ "async": "^2.6.0",
+ "is-number-like": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=0.4",
+ "npm": ">=1.0.0"
+ }
},
- "isarray": {
+ "node_modules/possible-typed-array-names": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
},
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
+ "node_modules/postcss": {
+ "version": "8.5.15",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
+ "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.12",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
},
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
+ "node_modules/postcss-calc": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz",
+ "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^7.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.12 || ^20.9 || >=22.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.38"
+ }
},
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
+ "node_modules/postcss-cli": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-11.0.0.tgz",
+ "integrity": "sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": "^3.3.0",
+ "dependency-graph": "^0.11.0",
+ "fs-extra": "^11.0.0",
+ "get-stdin": "^9.0.0",
+ "globby": "^14.0.0",
+ "picocolors": "^1.0.0",
+ "postcss-load-config": "^5.0.0",
+ "postcss-reporter": "^7.0.0",
+ "pretty-hrtime": "^1.0.3",
+ "read-cache": "^1.0.0",
+ "slash": "^5.0.0",
+ "yargs": "^17.0.0"
+ },
+ "bin": {
+ "postcss": "index.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
},
- "js-base64": {
- "version": "2.4.9",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
- "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==",
- "dev": true
+ "node_modules/postcss-cli/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
},
- "js-tokens": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
- "dev": true
+ "node_modules/postcss-cli/node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
},
- "js-yaml": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
- "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "node_modules/postcss-cli/node_modules/slash": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
"dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^2.6.0"
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true
+ "node_modules/postcss-cli/node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
},
- "jsdom": {
- "version": "13.2.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.2.0.tgz",
- "integrity": "sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw==",
- "dev": true,
- "requires": {
- "abab": "^2.0.0",
- "acorn": "^6.0.4",
- "acorn-globals": "^4.3.0",
- "array-equal": "^1.0.0",
- "cssom": "^0.3.4",
- "cssstyle": "^1.1.1",
- "data-urls": "^1.1.0",
- "domexception": "^1.0.1",
- "escodegen": "^1.11.0",
- "html-encoding-sniffer": "^1.0.2",
- "nwsapi": "^2.0.9",
- "parse5": "5.1.0",
- "pn": "^1.1.0",
- "request": "^2.88.0",
- "request-promise-native": "^1.0.5",
- "saxes": "^3.1.5",
- "symbol-tree": "^3.2.2",
- "tough-cookie": "^2.5.0",
- "w3c-hr-time": "^1.0.1",
- "w3c-xmlserializer": "^1.0.1",
- "webidl-conversions": "^4.0.2",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^7.0.0",
- "ws": "^6.1.2",
- "xml-name-validator": "^3.0.0"
- },
- "dependencies": {
- "acorn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz",
- "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==",
- "dev": true
- },
- "parse5": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
- "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
- "dev": true
- }
+ "node_modules/postcss-colormin": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-8.0.1.tgz",
+ "integrity": "sha512-qBY4ABQ6d8/mk5RRZHwMllrZMxeMey3azVY2dZUEk+RgiUC4ARdPR3/AITzNqqKTbvW/3y/MJKinDrzwqn8RDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@colordx/core": "^5.4.3",
+ "browserslist": "^4.28.2",
+ "caniuse-api": "^4.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
}
},
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
+ "node_modules/postcss-convert-values": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-8.0.1.tgz",
+ "integrity": "sha512-IdOSIX3BzfMvCc1TAHIha2gfy17xnb5vfML8e2BIKARnFOghksESfaSAB/3CXgyLfMozZAbTRPVQF5dbuKOidw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.2",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
+ "node_modules/postcss-discard-comments": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-8.0.1.tgz",
+ "integrity": "sha512-FDvzm3tXlEsQBO2XQgnta5ugsAqwBrgWH+j5QgXpegEIDYA0VPnZg2aP7LtmWtC49POskeIhXesFiU/k3NyFHA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^7.1.2"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "json-schema-traverse": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
- "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
- "dev": true
+ "node_modules/postcss-discard-duplicates": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-8.0.1.tgz",
+ "integrity": "sha512-stTDXkI8YkCUfADurQhp03oq5ynsgSx6Qrw5B1swds6oTHtAeOZ9I0SHGK8cY/VpWUsIYFDWMs3IWf9jIEfFvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
+ "node_modules/postcss-discard-empty": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-8.0.1.tgz",
+ "integrity": "sha512-Zv4fM1Yfhk71tbt6gfiptbL6jDHi+7apSnaMeaO9n1uET+1embrXQw5m93Zp5x28UyQSuv+AVkFY193jdwZ33w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
+ "node_modules/postcss-discard-overridden": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-8.0.1.tgz",
+ "integrity": "sha512-ykt4fvrC7yYGzbxKyqBVjDCbsjF/11JgWK8enrdkobRyqqEtb/uDUCbKOGdvrK8X7BrShW8Lv5cCRNbdkNHGkQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "node_modules/postcss-import": {
+ "version": "16.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.0.tgz",
+ "integrity": "sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==",
"dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
}
},
- "jsonify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
- "dev": true
+ "node_modules/postcss-load-config": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-5.1.0.tgz",
+ "integrity": "sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "lilconfig": "^3.1.1",
+ "yaml": "^2.4.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "peerDependencies": {
+ "jiti": ">=1.21.0",
+ "postcss": ">=8.0.9",
+ "tsx": "^4.8.1"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ }
+ }
},
- "jsonparse": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
- "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
- "dev": true
+ "node_modules/postcss-merge-longhand": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-8.0.1.tgz",
+ "integrity": "sha512-huTfSYgQ13O81SFvAuOi7GWnO48vvybjj3xF+X3qUoPjzvvaLpJH5DcUqqXcwOEulZUcvaV4s0V9WtWs+IAQPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0",
+ "stylehacks": "^8.0.1"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "node_modules/postcss-merge-rules": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-8.0.1.tgz",
+ "integrity": "sha512-o3rk4UpnPNg469tklYwbR/NtvKc/f/wJiVDTnNQ/EFPw/LeiPOHUCvV1GIBQIZHGrBAYdPjToK6a+ojYprsrxQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.2",
+ "caniuse-api": "^4.0.0",
+ "cssnano-utils": "^6.0.1",
+ "postcss-selector-parser": "^7.1.2"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/postcss-minify-font-values": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-8.0.1.tgz",
+ "integrity": "sha512-L8Nzs/PRlBSPrLdY/7rAiU5ZN5800+2J/4LRbfyG8SJnPljmgMaXVmQiCklvRS+yObfVRNtvmk/Ean/eoYcSeg==",
"dev": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
}
},
- "kind-of": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
- "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
- "dev": true
+ "node_modules/postcss-minify-gradients": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-8.0.1.tgz",
+ "integrity": "sha512-qf+4s/hZMqTwpWN2teqf6+1yvR/SZK5HgHqXYuACeJXV7ABe7AXtBEomgxagUzcN4bSnmqBh5vnIml0dYqykYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@colordx/core": "^5.4.3",
+ "cssnano-utils": "^6.0.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "lerna": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/lerna/-/lerna-2.11.0.tgz",
- "integrity": "sha512-kgM6zwe2P2tR30MYvgiLLW+9buFCm6E7o8HnRlhTgm70WVBvXVhydqv+q/MF2HrVZkCawfVtCfetyQmtd4oHhQ==",
- "dev": true,
- "requires": {
- "async": "^1.5.0",
- "chalk": "^2.1.0",
- "cmd-shim": "^2.0.2",
- "columnify": "^1.5.4",
- "command-join": "^2.0.0",
- "conventional-changelog-cli": "^1.3.13",
- "conventional-recommended-bump": "^1.2.1",
- "dedent": "^0.7.0",
- "execa": "^0.8.0",
- "find-up": "^2.1.0",
- "fs-extra": "^4.0.1",
- "get-port": "^3.2.0",
- "glob": "^7.1.2",
- "glob-parent": "^3.1.0",
- "globby": "^6.1.0",
- "graceful-fs": "^4.1.11",
- "hosted-git-info": "^2.5.0",
- "inquirer": "^3.2.2",
- "is-ci": "^1.0.10",
- "load-json-file": "^4.0.0",
- "lodash": "^4.17.4",
- "minimatch": "^3.0.4",
- "npmlog": "^4.1.2",
- "p-finally": "^1.0.0",
- "package-json": "^4.0.1",
- "path-exists": "^3.0.0",
- "read-cmd-shim": "^1.0.1",
- "read-pkg": "^3.0.0",
- "rimraf": "^2.6.1",
- "safe-buffer": "^5.1.1",
- "semver": "^5.4.1",
- "signal-exit": "^3.0.2",
- "slash": "^1.0.0",
- "strong-log-transformer": "^1.0.6",
- "temp-write": "^3.3.0",
- "write-file-atomic": "^2.3.0",
- "write-json-file": "^2.2.0",
- "write-pkg": "^3.1.0",
- "yargs": "^8.0.2"
- },
- "dependencies": {
- "ansi-escapes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
- "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",
- "dev": true
- },
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
- "dev": true
- },
- "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,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "async": {
- "version": "1.5.2",
- "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
- "dev": true
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "globby": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
- "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
- "dev": true,
- "requires": {
- "array-union": "^1.0.1",
- "glob": "^7.0.3",
- "object-assign": "^4.0.1",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "inquirer": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
- "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^3.0.0",
- "chalk": "^2.0.0",
- "cli-cursor": "^2.1.0",
- "cli-width": "^2.0.0",
- "external-editor": "^2.0.4",
- "figures": "^2.0.0",
- "lodash": "^4.3.0",
- "mute-stream": "0.0.7",
- "run-async": "^2.2.0",
- "rx-lite": "^4.0.8",
- "rx-lite-aggregates": "^4.0.8",
- "string-width": "^2.1.0",
- "strip-ansi": "^4.0.0",
- "through": "^2.3.6"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
+ "node_modules/postcss-minify-params": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-8.0.1.tgz",
+ "integrity": "sha512-L0h3H59deFfFg0wQN1NVaS/8E/LfGvaMuZKGO7siwlG995zo3OshtQyRkqKdVqcBwAORBvZ1nDZrKPLRapYkQw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.2",
+ "cssnano-utils": "^6.0.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/postcss-minify-selectors": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-8.0.2.tgz",
+ "integrity": "sha512-3icdxc/zght5UAizdwqZBDE2KOWHf1jMQCxET6iLACeNlRxfTPyXS0/COpGk8CQ2cECyaEKTRUd/i/k8Gxmz4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.1",
+ "caniuse-api": "^4.0.0",
+ "cssesc": "^3.0.0",
+ "postcss-selector-parser": "^7.1.2"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/postcss-nesting": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-14.0.0.tgz",
+ "integrity": "sha512-YGFOfVrjxYfeGTS5XctP1WCI5hu8Lr9SmntjfRC+iX5hCihEO+QZl9Ra+pkjqkgoVdDKvb2JccpElcowhZtzpw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
},
- "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,
- "requires": {
- "has-flag": "^3.0.0"
- }
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
}
+ ],
+ "license": "MIT-0",
+ "dependencies": {
+ "@csstools/selector-resolve-nested": "^4.0.0",
+ "@csstools/selector-specificity": "^6.0.0",
+ "postcss-selector-parser": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4"
}
},
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz",
+ "integrity": "sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==",
"dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
+ }
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^7.1.1"
}
},
- "live-server": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.1.tgz",
- "integrity": "sha512-Yn2XCVjErTkqnM3FfTmM7/kWy3zP7+cEtC7x6u+wUzlQ+1UW3zEYbbyJrc0jNDwiMDZI0m4a0i3dxlGHVyXczw==",
- "dev": true,
- "requires": {
- "chokidar": "^2.0.4",
- "colors": "^1.3.2",
- "connect": "^3.6.6",
- "cors": "^2.8.5",
- "event-stream": "3.3.4",
- "faye-websocket": "0.11.x",
- "http-auth": "3.1.x",
- "morgan": "^1.9.1",
- "object-assign": "^4.1.1",
- "opn": "^5.4.0",
- "proxy-middleware": "^0.15.0",
- "send": "^0.16.2",
- "serve-index": "^1.9.1"
- },
- "dependencies": {
- "colors": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz",
- "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
+ "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-6.0.0.tgz",
+ "integrity": "sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/csstools"
},
- "opn": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
- "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
- "dev": true,
- "requires": {
- "is-wsl": "^1.1.0"
- }
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/csstools"
}
+ ],
+ "license": "MIT-0",
+ "engines": {
+ "node": ">=20.19.0"
+ },
+ "peerDependencies": {
+ "postcss-selector-parser": "^7.1.1"
}
},
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "node_modules/postcss-normalize-charset": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-8.0.1.tgz",
+ "integrity": "sha512-xzqr36F8UeIZOvOHsf3aul+RVJCADvSwuwpMLgizqKjisHZpBfztgW0XFLBfJvz9pJgaStaOXAtGb0zLqT6B0w==",
"dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
}
},
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "node_modules/postcss-normalize-display-values": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-8.0.1.tgz",
+ "integrity": "sha512-ZDWOijOK1FFMlpgiQCUO9fCNKd7HJ9L7z9HWEq4iyubnUFWzdTSwm/LcrMbNW6iZ1oAtqeLYA0WA3xHszOI08g==",
"dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
}
},
- "lodash": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
- "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ "node_modules/postcss-normalize-positions": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-8.0.1.tgz",
+ "integrity": "sha512-uuivan2poSqbE48ST4do20dGaFUeXey9/H8rhHzoyVHB2I6BmkoVLZ/C9+BRjUlpaAFYVOoDY7epkiidzaYbvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "lodash._reinterpolate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
- "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
- "dev": true
+ "node_modules/postcss-normalize-repeat-style": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-8.0.1.tgz",
+ "integrity": "sha512-q2hq5fmKxk29K6DjKA3nZ17Q2dtjhLYFNmFweKALmooUqx6UWAHF1bBoWTu/EqlJ88josb82A/J0Atj9LJUmpQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
- "dev": true
+ "node_modules/postcss-normalize-string": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-8.0.1.tgz",
+ "integrity": "sha512-+Wf+kQJhm1WgSGEAuUaswE9rdpR9QbrKRVemcVHs6rhOoOTVIdAbgaicftfYA6vLM346P8onRzkEVbFN29ktKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
- "dev": true
+ "node_modules/postcss-normalize-timing-functions": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-8.0.1.tgz",
+ "integrity": "sha512-W8/tvwRlm3T+yjGkg0IRTF4bvHj0vILYr/LOogCrJKHz2ey2HFRwfsAA8Bk9N4BGR7z7WmmDu/KzzwhJ6FoGPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
- "dev": true
+ "node_modules/postcss-normalize-unicode": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-8.0.1.tgz",
+ "integrity": "sha512-Ad0YHNRBp4WHEOYUM/4wL/8MoL2fimEF8se/0q+Rt/owMzYpbxsypC1P8fN/oluwoRmRKdNVX7X2oycEobPWcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.2",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/postcss-normalize-url": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-8.0.1.tgz",
+ "integrity": "sha512-tkYcip6pCDY806xuxpJYqMW2M3/623jzGFJmz3m5Us47q8P28+gbRZxaea3Rr/CmwwLUiVlh+BTGYwQ6gvaP8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/postcss-normalize-whitespace": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-8.0.1.tgz",
+ "integrity": "sha512-XzORadNfSrKWDZZpgAEHPKINKx8r9r9RIfE9c70g/HThdpbmPHhDYCodHSVESDxmKeySAYw1p4liuBCf7j6LyA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/postcss-ordered-values": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-8.0.1.tgz",
+ "integrity": "sha512-OLXq5lR1yk3KWQ1FPK6aWjFFdktHE9f9kb8cnt4LmIw7w30DnzgD9+sOVYJc5HenkWCX8i1MJhhFwmqc/GYqLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssnano-utils": "^6.0.1",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/postcss-reduce-initial": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-8.0.1.tgz",
+ "integrity": "sha512-+aQsR6+61KRoIfcFNLP3v9RM7+0iYOTtPnjl1wr6JqMW1zx6S+t2ktHRefXwacFdHIDj5+ETG0KY7K3+SGQ4Nw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.2",
+ "caniuse-api": "^4.0.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
+ },
+ "node_modules/postcss-reduce-transforms": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-8.0.1.tgz",
+ "integrity": "sha512-x71slHVykiFi5RuKEXM0wgYpY2PngC78x6R8TnZhHF3lhqt+u/w3MGwYLX+2t5O87ssRiMfEAhQH+3J4QwVzCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "lodash.template": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz",
- "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=",
+ "node_modules/postcss-reporter": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz",
+ "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==",
"dev": true,
- "requires": {
- "lodash._reinterpolate": "~3.0.0",
- "lodash.templatesettings": "^4.0.0"
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "thenby": "^1.3.4"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
}
},
- "lodash.templatesettings": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz",
- "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=",
+ "node_modules/postcss-selector-parser": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz",
+ "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==",
"dev": true,
- "requires": {
- "lodash._reinterpolate": "~3.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
- "dev": true
+ "node_modules/postcss-svgo": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-8.0.1.tgz",
+ "integrity": "sha512-HpnvWii7W0/FPrsejJa6ZTi0kNtTJP/Iba7CUMPX0xPV6QpnndOp+SDP74tFtgjA2cYKYNWJPOlmLXMsvi/9yA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.2.0",
+ "svgo": "^4.0.1"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
+ }
},
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "node_modules/postcss-unique-selectors": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-8.0.1.tgz",
+ "integrity": "sha512-+xvKI5+/Cl8yYQwxDV39Uhuc4WV951xngFvPPjiPj2NIbIfm6vbbRTXblyw0FioLkIoGlw+7qUcY1h2YhaZYgw==",
"dev": true,
- "requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^7.1.2"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
}
},
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "node_modules/postcss-value-parser": {
+ "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
},
- "lru-cache": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
- "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "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,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "magic-string": {
- "version": "0.22.5",
- "resolved": "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
- "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "node_modules/prettier": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
+ "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
"dev": true,
- "requires": {
- "vlq": "^0.2.2"
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
}
},
- "make-dir": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
- "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
"dev": true,
- "requires": {
- "pify": "^3.0.0"
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz",
- "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "node_modules/pretty-format": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.5.tgz",
+ "integrity": "sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==",
"dev": true,
- "requires": {
- "object-visit": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "marked": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.1.tgz",
- "integrity": "sha512-iUkBZegCZou4AdwbKTwSW/lNDcz5OuRSl3qdcl31Ia0B2QPG0Jn+tKblh/9/eP9/6+4h27vpoh8wel/vQOV0vw=="
- },
- "math-expression-evaluator": {
- "version": "1.2.17",
- "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
- "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
- "dev": true
- },
- "math-random": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
- "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=",
- "dev": true
- },
- "medium-zoom": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-0.4.0.tgz",
- "integrity": "sha512-0z7yMfd6I1BTCAa8QaR4cp5AqDkQD571GzhHIbbfefKEssGLSvs+4Xai/itOAncm4FBlF5gUoMQ22yW9/f8Sig=="
- },
- "mem": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
- "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
- "dev": true
- },
- "meow": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz",
- "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==",
- "dev": true,
- "requires": {
- "camelcase-keys": "^4.0.0",
- "decamelize-keys": "^1.0.0",
- "loud-rejection": "^1.0.0",
- "minimist": "^1.1.3",
- "minimist-options": "^3.0.1",
- "normalize-package-data": "^2.3.4",
- "read-pkg-up": "^3.0.0",
- "redent": "^2.0.0",
- "trim-newlines": "^2.0.0"
- },
- "dependencies": {
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
- }
+ "node_modules/pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
}
},
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
- "dev": true
- },
- "mime-db": {
- "version": "1.37.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
- "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
- "dev": true
+ "node_modules/prismjs": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
},
- "mime-types": {
- "version": "2.1.21",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
- "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
"dev": true,
- "requires": {
- "mime-db": "~1.37.0"
+ "engines": {
+ "node": ">= 0.6.0"
}
},
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true,
+ "license": "MIT"
},
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "node_modules/proxy-from-env": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+ "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
"dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
}
},
- "minimist": {
- "version": "1.2.0",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
- },
- "minimist-options": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz",
- "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==",
+ "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,
- "requires": {
- "arrify": "^1.0.1",
- "is-plain-obj": "^1.1.0"
+ "engines": {
+ "node": ">=6"
}
},
- "mixin-deep": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
- "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
+ "node_modules/pure-rand": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz",
+ "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
}
+ ]
+ },
+ "node_modules/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
+ "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.0",
+ "teleport": ">=0.2.0"
}
},
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "node_modules/qs": {
+ "version": "6.15.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
+ "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==",
"dev": true,
- "requires": {
- "minimist": "0.0.8"
- },
+ "license": "BSD-3-Clause",
"dependencies": {
- "minimist": {
- "version": "0.0.8",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- }
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "mocha": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
- "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
- "dev": true,
- "requires": {
- "browser-stdout": "1.3.1",
- "commander": "2.15.1",
- "debug": "3.1.0",
- "diff": "3.5.0",
- "escape-string-regexp": "1.0.5",
- "glob": "7.1.2",
- "growl": "1.10.5",
- "he": "1.1.1",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "supports-color": "5.4.0"
- },
- "dependencies": {
- "commander": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
- "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
- "dev": true
- },
- "debug": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "glob": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
+ "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"
},
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
},
- "supports-color": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
- "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
}
- }
+ ]
},
- "modify-values": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz",
- "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==",
- "dev": true
+ "node_modules/quick-lru": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
+ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "moment": {
- "version": "2.22.2",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz",
- "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=",
- "dev": true
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "morgan": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
- "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"dev": true,
- "requires": {
- "basic-auth": "~2.0.0",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "on-finished": "~2.3.0",
- "on-headers": "~1.0.1"
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
- "multi-stage-sourcemap": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz",
- "integrity": "sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU=",
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
"dev": true,
- "requires": {
- "source-map": "^0.1.34"
- },
"dependencies": {
- "source-map": {
- "version": "0.1.43",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
- "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
- "dev": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
- }
+ "pify": "^2.3.0"
}
},
- "mute-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
- "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
- },
- "nan": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz",
- "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==",
+ "node_modules/read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
"dev": true,
- "optional": true
+ "dependencies": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "node_modules/read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==",
"dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
+ "node_modules/read-pkg-up/node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "negotiator": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
- "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
- "dev": true
+ "node_modules/read-pkg-up/node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
+ "node_modules/read-pkg-up/node_modules/p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "node-fetch": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz",
- "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=",
- "requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
+ "node_modules/read-pkg-up/node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "node-modules-regexp": {
+ "node_modules/read-pkg-up/node_modules/p-try": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/read-pkg-up/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/read-pkg/node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
- "normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "node_modules/read-pkg/node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
- "requires": {
+ "dependencies": {
"hosted-git-info": "^2.1.4",
- "is-builtin-module": "^1.0.0",
+ "resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
},
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "node_modules/read-pkg/node_modules/path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
- "dev": true
+ "node_modules/read-pkg/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "normalize-url": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
- "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "node_modules/read-pkg/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "prepend-http": "^1.0.0",
- "query-string": "^4.1.0",
- "sort-keys": "^1.0.0"
+ "bin": {
+ "semver": "bin/semver"
}
},
- "npm-run-all": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
- "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "chalk": "^2.4.1",
- "cross-spawn": "^6.0.5",
- "memorystream": "^0.3.1",
- "minimatch": "^3.0.4",
- "pidtree": "^0.3.0",
- "read-pkg": "^3.0.0",
- "shell-quote": "^1.6.1",
- "string.prototype.padend": "^3.0.0"
- },
+ "license": "MIT",
"dependencies": {
- "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,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "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,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
- "requires": {
- "path-key": "^2.0.0"
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
}
},
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "node_modules/redent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
+ "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
"dev": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "indent-string": "^4.0.0",
+ "strip-indent": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
- "dev": true
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "nwsapi": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
- "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==",
- "dev": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "node_modules/regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
"dev": true
},
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ "node_modules/regenerate-unicode-properties": {
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
+ "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
+ "dev": true,
+ "dependencies": {
+ "regenerate": "^1.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "node_modules/regenerator-transform": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+ "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
}
},
- "object-keys": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
- "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==",
- "dev": true
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "node_modules/regexpu-core": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
+ "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
"dev": true,
- "requires": {
- "isobject": "^3.0.0"
+ "dependencies": {
+ "@babel/regjsgen": "^0.8.0",
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.1.0",
+ "regjsparser": "^0.9.1",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "object.omit": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "node_modules/regjsparser": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
"dev": true,
- "requires": {
- "for-own": "^0.1.4",
- "is-extendable": "^0.1.1"
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
}
},
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
"dev": true,
- "requires": {
- "isobject": "^3.0.1"
+ "bin": {
+ "jsesc": "bin/jsesc"
}
},
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
- "requires": {
- "ee-first": "1.1.1"
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "on-headers": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
- "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+ "node_modules/requires-port": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
"dev": true
},
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
- "requires": {
- "wrappy": "1"
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "requires": {
- "mimic-fn": "^1.0.0"
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+ "dev": true,
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "opencollective": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz",
- "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=",
- "requires": {
- "babel-polyfill": "6.23.0",
- "chalk": "1.1.3",
- "inquirer": "3.0.6",
- "minimist": "1.2.0",
- "node-fetch": "1.6.3",
- "opn": "4.0.2"
- }
- },
- "opn": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
- "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
- "requires": {
- "object-assign": "^4.0.1",
- "pinkie-promise": "^2.0.0"
+ "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
}
},
- "optimist": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
- "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true,
- "requires": {
- "minimist": "~0.0.1",
- "wordwrap": "~0.0.2"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.10",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
- "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
- "dev": true
- }
+ "engines": {
+ "node": ">=4"
}
},
- "optionator": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
- "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "node_modules/resp-modifier": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz",
+ "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==",
"dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.4",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "wordwrap": "~1.0.0"
- },
"dependencies": {
- "wordwrap": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
- "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
- "dev": true
- }
+ "debug": "^2.2.0",
+ "minimatch": "^3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true
- },
- "os-locale": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
- "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
- "dev": true,
- "requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
- "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
- "dev": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
- "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
- "dev": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- }
+ "node_modules/resp-modifier/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
}
},
- "os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "node_modules/resp-modifier/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "node_modules/restore-cursor": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
+ "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
"dev": true,
- "requires": {
- "p-try": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^7.0.0",
+ "signal-exit": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "node_modules/restore-cursor/node_modules/onetime": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
+ "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
"dev": true,
- "requires": {
- "p-limit": "^1.1.0"
+ "license": "MIT",
+ "dependencies": {
+ "mimic-function": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- },
- "package-json": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
- "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
- "requires": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
}
},
- "parse-github-repo-url": {
+ "node_modules/rfdc": {
"version": "1.4.1",
- "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz",
- "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "dev": true,
+ "license": "MIT"
},
- "parse-glob": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "node_modules/rimraf": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.0.tgz",
+ "integrity": "sha512-DxdlA1bdNzkZK7JiNWH+BAx1x4tEJWoTofIopFo6qWUU94jYrFZ0ubY05TqH3nWPJ1nKa1JWVFDINZ3fnrle/A==",
"dev": true,
- "requires": {
- "glob-base": "^0.3.0",
- "is-dotfile": "^1.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.0"
- },
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
+ "glob": "^11.0.3",
+ "package-json-from-dist": "^1.0.1"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "node_modules/rimraf/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
"dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
}
},
- "parseurl": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
- "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
- "dev": true
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-is-inside": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
- "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
- "dev": true
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
- "dev": true
+ "node_modules/rimraf/node_modules/brace-expansion": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
+ "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
},
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz",
+ "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==",
"dev": true,
- "requires": {
- "pify": "^3.0.0"
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "foreground-child": "^3.3.1",
+ "jackspeak": "^4.1.1",
+ "minimatch": "^10.1.1",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^2.0.0"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "pathval": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
- "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
- "dev": true
+ "node_modules/rimraf/node_modules/minimatch": {
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
- "pause-stream": {
- "version": "0.0.11",
- "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
- "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "node_modules/rollup": {
+ "version": "4.59.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
+ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.8"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.59.0",
+ "@rollup/rollup-android-arm64": "4.59.0",
+ "@rollup/rollup-darwin-arm64": "4.59.0",
+ "@rollup/rollup-darwin-x64": "4.59.0",
+ "@rollup/rollup-freebsd-arm64": "4.59.0",
+ "@rollup/rollup-freebsd-x64": "4.59.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.59.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.59.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.59.0",
+ "@rollup/rollup-linux-arm64-musl": "4.59.0",
+ "@rollup/rollup-linux-loong64-gnu": "4.59.0",
+ "@rollup/rollup-linux-loong64-musl": "4.59.0",
+ "@rollup/rollup-linux-ppc64-gnu": "4.59.0",
+ "@rollup/rollup-linux-ppc64-musl": "4.59.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.59.0",
+ "@rollup/rollup-linux-riscv64-musl": "4.59.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-gnu": "4.59.0",
+ "@rollup/rollup-linux-x64-musl": "4.59.0",
+ "@rollup/rollup-openbsd-x64": "4.59.0",
+ "@rollup/rollup-openharmony-arm64": "4.59.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.59.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.59.0",
+ "@rollup/rollup-win32-x64-gnu": "4.59.0",
+ "@rollup/rollup-win32-x64-msvc": "4.59.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rollup-plugin-import-css": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-import-css/-/rollup-plugin-import-css-4.0.1.tgz",
+ "integrity": "sha512-Hl75wMZbaKvU60D8pBKsF7H0EqiWnD+85oMygUBmI2i6yusWS1i6T6yRo9LSrHWbHO65h+d1zSBRoqdmHRXzfg==",
"dev": true,
- "requires": {
- "through": "~2.3"
+ "license": "MIT",
+ "dependencies": {
+ "@rollup/pluginutils": "^5.1.4"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "rollup": "^2.x.x || ^3.x.x || ^4.x.x"
}
},
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
- "dev": true
+ "node_modules/rrweb-cssom": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz",
+ "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==",
+ "dev": true,
+ "license": "MIT"
},
- "pidtree": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz",
- "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==",
- "dev": true
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "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"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
},
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "node_modules/rx": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
+ "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==",
"dev": true
},
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
- "pirates": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-3.0.2.tgz",
- "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==",
+ "node_modules/safe-array-concat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
"dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "pluralize": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
- "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
- "dev": true
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "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"
+ }
+ ]
},
- "pn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
- "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
- "dev": true
+ "node_modules/safe-regex-test": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.1.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
- "postcss": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz",
- "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=",
+ "node_modules/sax": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz",
+ "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
"dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- },
- "dependencies": {
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=11.0.0"
}
},
- "postcss-calc": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
- "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
"dev": true,
- "requires": {
- "postcss": "^5.0.2",
- "postcss-message-helpers": "^2.0.0",
- "reduce-css-calc": "^1.2.6"
- },
+ "license": "ISC",
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
}
},
- "postcss-colormin": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
- "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "requires": {
- "colormin": "^1.0.5",
- "postcss": "^5.0.13",
- "postcss-value-parser": "^3.2.3"
- },
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "postcss-convert-values": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
- "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "node_modules/send": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
"dev": true,
- "requires": {
- "postcss": "^5.0.11",
- "postcss-value-parser": "^3.1.2"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "postcss-discard-comments": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
- "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "node_modules/send/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
- "requires": {
- "postcss": "^5.0.14"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "ms": "2.0.0"
}
},
- "postcss-discard-duplicates": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
- "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "node_modules/send/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/send/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "node_modules/send/node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
"dev": true,
- "requires": {
- "postcss": "^5.0.4"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "postcss-discard-empty": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
- "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "node_modules/send/node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
"dev": true,
- "requires": {
- "postcss": "^5.0.14"
- },
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "engines": {
+ "node": ">= 0.8"
}
},
- "postcss-discard-overridden": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
- "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "node_modules/serialize-javascript": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz",
+ "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==",
"dev": true,
- "requires": {
- "postcss": "^5.0.16"
- },
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=20.0.0"
}
},
- "postcss-discard-unused": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
- "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "node_modules/serve-index": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+ "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
"dev": true,
- "requires": {
- "postcss": "^5.0.14",
- "uniqs": "^2.0.0"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "accepts": "~1.3.4",
+ "batch": "0.6.1",
+ "debug": "2.6.9",
+ "escape-html": "~1.0.3",
+ "http-errors": "~1.6.2",
+ "mime-types": "~2.1.17",
+ "parseurl": "~1.3.2"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "postcss-filter-plugins": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
- "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
+ "node_modules/serve-index/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
- "requires": {
- "postcss": "^5.0.4"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "ms": "2.0.0"
}
},
- "postcss-merge-idents": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
- "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "node_modules/serve-index/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
"dev": true,
- "requires": {
- "has": "^1.0.1",
- "postcss": "^5.0.10",
- "postcss-value-parser": "^3.1.1"
- },
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "engines": {
+ "node": ">= 0.6"
}
},
- "postcss-merge-longhand": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
- "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "node_modules/serve-index/node_modules/http-errors": {
+ "version": "1.6.3",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
"dev": true,
- "requires": {
- "postcss": "^5.0.4"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "postcss-merge-rules": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
- "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
- "dev": true,
- "requires": {
- "browserslist": "^1.5.2",
- "caniuse-api": "^1.5.2",
- "postcss": "^5.0.4",
- "postcss-selector-parser": "^2.2.2",
- "vendors": "^1.0.0"
- },
- "dependencies": {
- "browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
- "dev": true,
- "requires": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- }
- },
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
- }
+ "node_modules/serve-index/node_modules/inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+ "dev": true
},
- "postcss-message-helpers": {
+ "node_modules/serve-index/node_modules/ms": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
- "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
- "postcss-minify-font-values": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
- "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "node_modules/serve-index/node_modules/setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+ "dev": true
+ },
+ "node_modules/serve-index/node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"dev": true,
- "requires": {
- "object-assign": "^4.0.1",
- "postcss": "^5.0.4",
- "postcss-value-parser": "^3.0.2"
- },
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "engines": {
+ "node": ">= 0.6"
}
},
- "postcss-minify-gradients": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
- "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "node_modules/serve-static": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"dev": true,
- "requires": {
- "postcss": "^5.0.12",
- "postcss-value-parser": "^3.3.0"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.19.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/serve-static/node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
}
},
- "postcss-minify-params": {
+ "node_modules/server-destroy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz",
+ "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/set-function-length": {
"version": "1.2.2",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
- "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dev": true,
- "requires": {
- "alphanum-sort": "^1.0.1",
- "postcss": "^5.0.2",
- "postcss-value-parser": "^3.0.2",
- "uniqs": "^2.0.0"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "postcss-minify-selectors": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
- "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dev": true,
- "requires": {
- "alphanum-sort": "^1.0.2",
- "has": "^1.0.1",
- "postcss": "^5.0.14",
- "postcss-selector-parser": "^2.0.0"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "postcss-normalize-charset": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
- "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "dev": true
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
- "requires": {
- "postcss": "^5.0.5"
- },
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "postcss-normalize-url": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
- "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
- "requires": {
- "is-absolute-url": "^2.0.0",
- "normalize-url": "^1.4.0",
- "postcss": "^5.0.14",
- "postcss-value-parser": "^3.2.3"
- },
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "engines": {
+ "node": ">=8"
}
},
- "postcss-ordered-values": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
- "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "node_modules/shell-quote": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz",
+ "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==",
"dev": true,
- "requires": {
- "postcss": "^5.0.4",
- "postcss-value-parser": "^3.0.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
},
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "postcss-reduce-idents": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
- "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"dev": true,
- "requires": {
- "postcss": "^5.0.4",
- "postcss-value-parser": "^3.0.2"
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "postcss-reduce-initial": {
+ "node_modules/side-channel-map": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
- "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
"dev": true,
- "requires": {
- "postcss": "^5.0.4"
- },
+ "license": "MIT",
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "postcss-reduce-transforms": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
- "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
"dev": true,
- "requires": {
- "has": "^1.0.1",
- "postcss": "^5.0.8",
- "postcss-value-parser": "^3.0.1"
- },
+ "license": "MIT",
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "postcss-selector-parser": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
- "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
- "requires": {
- "flatten": "^1.0.2",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "postcss-svgo": {
- "version": "2.1.6",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
- "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
- "requires": {
- "is-svg": "^2.0.0",
- "postcss": "^5.0.14",
- "postcss-value-parser": "^3.2.3",
- "svgo": "^0.7.0"
- },
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "engines": {
+ "node": ">=8"
}
},
- "postcss-unique-selectors": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
- "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "node_modules/slice-ansi": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz",
+ "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==",
"dev": true,
- "requires": {
- "alphanum-sort": "^1.0.1",
- "postcss": "^5.0.4",
- "uniqs": "^2.0.0"
- },
+ "license": "MIT",
"dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "ansi-styles": "^6.2.3",
+ "is-fullwidth-code-point": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
- "postcss-value-parser": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz",
- "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=",
- "dev": true
- },
- "postcss-zindex": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
- "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "node_modules/slice-ansi/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"dev": true,
- "requires": {
- "has": "^1.0.1",
- "postcss": "^5.0.4",
- "uniqs": "^2.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
},
- "dependencies": {
- "postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "requires": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- }
- },
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
- "dev": true,
- "requires": {
- "has-flag": "^1.0.0"
- }
- }
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
- "dev": true
- },
- "preserve": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "node_modules/smob": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz",
+ "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==",
"dev": true
},
- "prismjs": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz",
- "integrity": "sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==",
- "requires": {
- "clipboard": "^2.0.0"
+ "node_modules/socket.io": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz",
+ "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==",
+ "dev": true,
+ "dependencies": {
+ "accepts": "~1.3.4",
+ "base64id": "~2.0.0",
+ "cors": "~2.8.5",
+ "debug": "~4.3.2",
+ "engine.io": "~6.6.0",
+ "socket.io-adapter": "~2.5.2",
+ "socket.io-parser": "~4.2.4"
+ },
+ "engines": {
+ "node": ">=10.2.0"
}
},
- "process-nextick-args": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
- "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
- "dev": true
- },
- "progress": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
- "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
- "dev": true
- },
- "proxy-middleware": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz",
- "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=",
- "dev": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true
- },
- "psl": {
- "version": "1.1.31",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
- "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
- "dev": true
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "q": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
- "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
- "dev": true
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "dev": true
- },
- "query-string": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
- "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "node_modules/socket.io-adapter": {
+ "version": "2.5.8",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.8.tgz",
+ "integrity": "sha512-6Oy52pbg+kvdCVvjcN+FnY7BvxZ7cIHNScbvztT/It5d0vbwoJoVZmF2gjJmnV0/4WlXRfG15zc45ySk9Ah8bw==",
"dev": true,
- "requires": {
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "debug": "~4.4.1",
+ "ws": "~8.21.0"
}
},
- "quick-lru": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz",
- "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=",
- "dev": true
- },
- "randomatic": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz",
- "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==",
+ "node_modules/socket.io-adapter/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
- "requires": {
- "is-number": "^4.0.0",
- "kind-of": "^6.0.0",
- "math-random": "^1.0.1"
- },
+ "license": "MIT",
"dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "range-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
- "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=",
- "dev": true
- },
- "rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "node_modules/socket.io-adapter/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
+ "license": "MIT"
},
- "read-cmd-shim": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz",
- "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=",
+ "node_modules/socket.io-client": {
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz",
+ "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==",
"dev": true,
- "requires": {
- "graceful-fs": "^4.1.2"
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1",
+ "engine.io-client": "~6.6.1",
+ "socket.io-parser": "~4.2.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
}
},
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "node_modules/socket.io-client/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- },
- "dependencies": {
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
- "requires": {
- "is-utf8": "^0.2.0"
- }
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
}
}
},
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- }
+ "node_modules/socket.io-client/node_modules/ms": {
+ "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/socket.io-parser": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.7.tgz",
+ "integrity": "sha512-IH/iSeO9T6gz1KkFleGDWkG9N3dl4jXVYUtMhIqH10Md0ttMer8nUNWiP1DKuNrybD2xBrixLJdCC9J6ECoYkg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.1.0",
+ "debug": "~4.4.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
}
},
- "readable-stream": {
- "version": "2.3.6",
- "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
- "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "node_modules/socket.io-parser/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "node_modules/socket.io-parser/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- }
+ "license": "MIT"
},
- "redent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz",
- "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=",
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
- "requires": {
- "indent-string": "^3.0.0",
- "strip-indent": "^2.0.0"
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "reduce-css-calc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
- "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "node_modules/source-map-js": {
+ "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,
- "requires": {
- "balanced-match": "^0.4.2",
- "math-expression-evaluator": "^1.2.14",
- "reduce-function-call": "^1.0.1"
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "reduce-function-call": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
- "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
- "requires": {
- "balanced-match": "^0.4.2"
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
}
},
- "regenerator-runtime": {
- "version": "0.10.5",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
- "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
- },
- "regex-cache": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
+ "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,
- "requires": {
- "is-equal-shallow": "^0.1.3"
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
}
},
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "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,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
}
},
- "regexpp": {
- "version": "1.1.0",
- "resolved": "http://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
- "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.18",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+ "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
"dev": true
},
- "registry-auth-token": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
- "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "node_modules/split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
"dev": true,
- "requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
+ "license": "MIT",
+ "dependencies": {
+ "through": "2"
+ },
+ "engines": {
+ "node": "*"
}
},
- "registry-url": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
- "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "node_modules/split2": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
+ "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
"dev": true,
- "requires": {
- "rc": "^1.0.1"
+ "license": "ISC",
+ "dependencies": {
+ "readable-stream": "^3.0.0"
}
},
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true
},
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
- "dev": true,
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
- "request": {
- "version": "2.88.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
- "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
- "dev": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- },
- "tough-cookie": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
- "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
- "dev": true,
- "requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
- }
- },
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "dev": true
- }
+ "node_modules/stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "request-promise-core": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
- "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=",
+ "node_modules/stack-utils/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
- "requires": {
- "lodash": "^4.13.1"
+ "engines": {
+ "node": ">=8"
}
},
- "request-promise-native": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz",
- "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=",
+ "node_modules/standard-version": {
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-9.5.0.tgz",
+ "integrity": "sha512-3zWJ/mmZQsOaO+fOlsa0+QK90pwhNd042qEcw6hKFNoLFs7peGyvPffpEBbK/DSGPbyOvli0mUIFv5A4qTjh2Q==",
"dev": true,
- "requires": {
- "request-promise-core": "1.1.1",
- "stealthy-require": "^1.1.0",
- "tough-cookie": ">=2.3.3"
+ "license": "ISC",
+ "dependencies": {
+ "chalk": "^2.4.2",
+ "conventional-changelog": "3.1.25",
+ "conventional-changelog-config-spec": "2.1.0",
+ "conventional-changelog-conventionalcommits": "4.6.3",
+ "conventional-recommended-bump": "6.1.0",
+ "detect-indent": "^6.0.0",
+ "detect-newline": "^3.1.0",
+ "dotgitignore": "^2.1.0",
+ "figures": "^3.1.0",
+ "find-up": "^5.0.0",
+ "git-semver-tags": "^4.0.0",
+ "semver": "^7.1.1",
+ "stringify-package": "^1.0.1",
+ "yargs": "^16.0.0"
+ },
+ "bin": {
+ "standard-version": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
- "require-uncached": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
- "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "node_modules/standard-version/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
- "requires": {
- "caller-path": "^0.1.0",
- "resolve-from": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "resolve": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
- "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "node_modules/standard-version/node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"dev": true,
- "requires": {
- "path-parse": "^1.0.5"
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
}
},
- "resolve-from": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
- "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
- "dev": true
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
+ "node_modules/standard-version/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"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "rimraf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "node_modules/standard-version/node_modules/color-name": {
+ "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,
- "requires": {
- "glob": "^7.0.5"
- }
+ "license": "MIT"
},
- "rollup": {
- "version": "0.53.4",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.53.4.tgz",
- "integrity": "sha512-ErW5cFw5KY/qiyUlPDJ7iBhw51Iro/oyvxETupO85bMg5T7MLlFj3lEDzwjLTOxJAyzWQanUYj/LZHm6aLLm5w==",
- "dev": true
+ "node_modules/standard-version/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,
+ "license": "MIT"
},
- "rollup-plugin-async": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-async/-/rollup-plugin-async-1.2.0.tgz",
- "integrity": "sha1-+V/dKfi28jMrWomp1k7oCHsSskk=",
+ "node_modules/standard-version/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "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,
- "requires": {
- "async-to-gen": "^1.2.0",
- "rollup-pluginutils": "^1.5.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "rollup-plugin-buble": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-buble/-/rollup-plugin-buble-0.18.0.tgz",
- "integrity": "sha512-rd3JG2MxvQXfg5coCw0IyZV8QrsceVI4zfJgGVgkUnntwp+gnjv7TsKWGKGoLNMGAMRKQlhcsSyvUuvOL+vNHw==",
+ "node_modules/standard-version/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
- "requires": {
- "buble": "^0.18.0",
- "rollup-pluginutils": "^2.0.1"
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
},
- "dependencies": {
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "estree-walker": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
- "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==",
- "dev": true
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
- }
- },
- "rollup-pluginutils": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz",
- "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==",
- "dev": true,
- "requires": {
- "estree-walker": "^0.5.2",
- "micromatch": "^2.3.11"
- }
- }
+ "engines": {
+ "node": ">=10"
}
},
- "rollup-plugin-commonjs": {
- "version": "8.4.1",
- "resolved": "http://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.4.1.tgz",
- "integrity": "sha512-mg+WuD+jlwoo8bJtW3Mvx7Tz6TsIdMsdhuvCnDMoyjh0oxsVgsjB/N0X984RJCWwc5IIiqNVJhXeeITcc73++A==",
+ "node_modules/standard-version/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,
- "requires": {
- "acorn": "^5.2.1",
- "estree-walker": "^0.5.0",
- "magic-string": "^0.22.4",
- "resolve": "^1.4.0",
- "rollup-pluginutils": "^2.0.1"
- },
+ "license": "MIT",
"dependencies": {
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "estree-walker": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
- "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==",
- "dev": true
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
- }
- },
- "rollup-pluginutils": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz",
- "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==",
- "dev": true,
- "requires": {
- "estree-walker": "^0.5.2",
- "micromatch": "^2.3.11"
- }
- }
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "rollup-plugin-node-resolve": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz",
- "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==",
+ "node_modules/standard-version/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
- "requires": {
- "builtin-modules": "^2.0.0",
- "is-module": "^1.0.0",
- "resolve": "^1.1.6"
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
},
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/standard-version/node_modules/yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "builtin-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz",
- "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==",
- "dev": true
- }
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "rollup-plugin-replace": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-replace/-/rollup-plugin-replace-2.1.0.tgz",
- "integrity": "sha512-SxrAIgpH/B5/W4SeULgreOemxcpEgKs2gcD42zXw50bhqGWmcnlXneVInQpAqzA/cIly4bJrOpeelmB9p4YXSQ==",
- "dev": true,
- "requires": {
- "magic-string": "^0.25.1",
- "minimatch": "^3.0.2",
- "rollup-pluginutils": "^2.0.1"
- },
- "dependencies": {
- "arr-diff": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1"
- }
- },
- "array-unique": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
- "dev": true
- },
- "braces": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
- "dev": true,
- "requires": {
- "expand-range": "^1.8.1",
- "preserve": "^0.2.0",
- "repeat-element": "^1.1.2"
- }
- },
- "estree-walker": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz",
- "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==",
- "dev": true
- },
- "expand-brackets": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
- "dev": true,
- "requires": {
- "is-posix-bracket": "^0.1.0"
- }
- },
- "extglob": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- },
- "magic-string": {
- "version": "0.25.1",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz",
- "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==",
- "dev": true,
- "requires": {
- "sourcemap-codec": "^1.4.1"
- }
- },
- "micromatch": {
- "version": "2.3.11",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
- "dev": true,
- "requires": {
- "arr-diff": "^2.0.0",
- "array-unique": "^0.2.1",
- "braces": "^1.8.2",
- "expand-brackets": "^0.1.4",
- "extglob": "^0.3.1",
- "filename-regex": "^2.0.0",
- "is-extglob": "^1.0.0",
- "is-glob": "^2.0.1",
- "kind-of": "^3.0.2",
- "normalize-path": "^2.0.1",
- "object.omit": "^2.0.0",
- "parse-glob": "^3.0.4",
- "regex-cache": "^0.4.2"
- }
- },
- "rollup-pluginutils": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz",
- "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==",
- "dev": true,
- "requires": {
- "estree-walker": "^0.5.2",
- "micromatch": "^2.3.11"
- }
- }
+ "node_modules/statuses": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+ "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6"
}
},
- "rollup-plugin-uglify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz",
- "integrity": "sha1-Z7N60e/a+9g69MNrQMGJ7khmyWk=",
+ "node_modules/stream-throttle": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz",
+ "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==",
"dev": true,
- "requires": {
- "uglify-js": "^3.0.9"
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "commander": "^2.2.0",
+ "limiter": "^1.0.5"
+ },
+ "bin": {
+ "throttleproxy": "bin/throttleproxy.js"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
}
},
- "rollup-pluginutils": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz",
- "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=",
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
- "requires": {
- "estree-walker": "^0.2.1",
- "minimatch": "^3.0.2"
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
}
},
- "run-async": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
- "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
- "requires": {
- "is-promise": "^2.1.0"
+ "node_modules/string-argv": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
+ "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.19"
}
},
- "rx": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
- "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+ "dev": true,
+ "dependencies": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
},
- "rx-lite": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
- "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
- "dev": true
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "rx-lite-aggregates": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
- "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "node_modules/string-width-cjs": {
+ "name": "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,
- "requires": {
- "rx-lite": "*"
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "node_modules/string-width-cjs/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,
+ "license": "MIT"
},
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "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,
- "requires": {
- "ret": "~0.1.10"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
},
- "sax": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
- "dev": true
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
},
- "saxes": {
+ "node_modules/string.prototype.padend": {
"version": "3.1.6",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.6.tgz",
- "integrity": "sha512-LAYs+lChg1v5uKNzPtsgTxSS5hLo8aIhSMCJt1WMpefAxm3D1RTpMwSpb6ebdL31cubiLTnhokVktBW+cv9Y9w==",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz",
+ "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==",
"dev": true,
- "requires": {
- "xmlchars": "^1.3.1"
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "select": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz",
- "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=",
- "optional": true
- },
- "semver": {
- "version": "5.5.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
- "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
- "dev": true
- },
- "send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
"dev": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+ "dev": true,
"dependencies": {
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
- "dev": true
- }
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
"dev": true,
- "requires": {
- "accepts": "~1.3.4",
- "batch": "0.6.1",
- "debug": "2.6.9",
- "escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
+ "node_modules/stringify-package": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz",
+ "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==",
+ "deprecated": "This module is not used anymore, and has been replaced by @npmcli/package-json",
+ "dev": true,
+ "license": "ISC"
},
- "set-value": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
- "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
+ "node_modules/strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
},
- "shell-quote": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
- "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
- "requires": {
- "array-filter": "~0.0.0",
- "array-map": "~0.0.0",
- "array-reduce": "~0.0.0",
- "jsonify": "~0.0.0"
+ "engines": {
+ "node": ">=6"
}
},
- "signal-exit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
- },
- "slash": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
- "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
- "dev": true
- },
- "slice-ansi": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
- "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "node_modules/strip-indent": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+ "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
"dev": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "min-indent": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "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,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "node_modules/stylehacks": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-8.0.1.tgz",
+ "integrity": "sha512-Gv095oTD0N+BdJALNFDsxZpETHZLTxbOl5RyIO7y6VAE6sR3z0MnV3Nix7N0IATNldNTrkvSASp2KR1Yt526HA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "browserslist": "^4.28.2",
+ "postcss-selector-parser": "^7.1.2"
+ },
+ "engines": {
+ "node": "^22.11.0 || ^24.11.0 || >=26.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.5.15"
}
},
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "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,
- "requires": {
- "kind-of": "^3.2.0"
- },
"dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "sort-keys": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
- "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
- "requires": {
- "is-plain-obj": "^1.0.0"
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
- "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "node_modules/svgo": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz",
+ "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==",
"dev": true,
- "requires": {
- "atob": "^2.1.1",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^11.1.0",
+ "css-select": "^5.1.0",
+ "css-tree": "^3.0.1",
+ "css-what": "^6.1.0",
+ "csso": "^5.0.5",
+ "picocolors": "^1.1.1",
+ "sax": "^1.5.0"
+ },
+ "bin": {
+ "svgo": "bin/svgo.js"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/svgo"
}
},
- "source-map-url": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
- "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
- "dev": true
- },
- "sourcemap-codec": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.3.tgz",
- "integrity": "sha512-vFrY/x/NdsD7Yc8mpTJXuao9S8lq08Z/kOITHz6b7YbfI9xL8Spe5EvSQUHOI7SbpY8bRPr0U3kKSsPuqEGSfA==",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
- "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
+ "node_modules/svgo/node_modules/commander": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+ "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
"dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
}
},
- "spdx-exceptions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
- "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
- "dev": true
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true,
+ "license": "MIT"
},
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "node_modules/synckit": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz",
+ "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==",
"dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
+ "dependencies": {
+ "@pkgr/core": "^0.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts"
}
},
- "spdx-license-ids": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz",
- "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==",
- "dev": true
- },
- "split": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
- "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "node_modules/terser": {
+ "version": "5.31.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz",
+ "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==",
"dev": true,
- "requires": {
- "through": "2"
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "node_modules/terser/node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
}
},
- "split2": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
- "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
- "requires": {
- "through2": "^2.0.2"
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+ "node_modules/test-exclude/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
+ "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"
}
},
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
+ "node_modules/text-extensions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz",
+ "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10"
}
},
- "statuses": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
- "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+ "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
},
- "stealthy-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
- "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
+ "node_modules/thenby": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz",
+ "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==",
"dev": true
},
- "strict-uri-encode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
- "dev": true
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true,
+ "license": "MIT"
},
- "string-width": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
- "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
+ "node_modules/through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
- "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
+ "readable-stream": "3"
}
},
- "string.prototype.padend": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
- "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.4.3",
- "function-bind": "^1.0.2"
+ "node_modules/tinydate": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz",
+ "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==",
+ "engines": {
+ "node": ">=4"
}
},
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "node_modules/tinyexec": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz",
+ "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==",
"dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
}
},
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
}
},
- "strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
- },
- "strip-indent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
- "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=",
- "dev": true
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "dev": true
- },
- "strong-log-transformer": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-1.0.6.tgz",
- "integrity": "sha1-9/uTdYpppXEUAYEnfuoMLrEwH6M=",
- "dev": true,
- "requires": {
- "byline": "^5.0.0",
- "duplexer": "^0.1.1",
- "minimist": "^0.1.0",
- "moment": "^2.6.0",
- "through": "^2.3.4"
- },
- "dependencies": {
- "minimist": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz",
- "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=",
- "dev": true
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
}
}
},
- "stylus": {
- "version": "0.54.5",
- "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz",
- "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=",
- "dev": true,
- "requires": {
- "css-parse": "1.7.x",
- "debug": "*",
- "glob": "7.0.x",
- "mkdirp": "0.5.x",
- "sax": "0.5.x",
- "source-map": "0.1.x"
- },
- "dependencies": {
- "glob": {
- "version": "7.0.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
- "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.2",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "sax": {
- "version": "0.5.8",
- "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
- "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=",
- "dev": true
- },
- "source-map": {
- "version": "0.1.43",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
- "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
- "dev": true,
- "requires": {
- "amdefine": ">=0.0.4"
- }
- }
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
- },
- "svgo": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
- "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "node_modules/tldts": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
+ "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
"dev": true,
- "requires": {
- "coa": "~1.0.1",
- "colors": "~1.1.2",
- "csso": "~2.3.1",
- "js-yaml": "~3.7.0",
- "mkdirp": "~0.5.1",
- "sax": "~1.2.1",
- "whet.extend": "~0.9.9"
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^6.1.86"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
}
},
- "symbol-tree": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
- "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
- "dev": true
- },
- "table": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
- "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
- "dev": true,
- "requires": {
- "ajv": "^5.2.3",
- "ajv-keywords": "^2.1.0",
- "chalk": "^2.1.0",
- "lodash": "^4.17.4",
- "slice-ansi": "1.0.0",
- "string-width": "^2.1.1"
- },
- "dependencies": {
- "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,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
- "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "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,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
+ "node_modules/tldts-core": {
+ "version": "6.1.86",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
+ "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
+ "dev": true,
+ "license": "MIT"
},
- "temp-dir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
- "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"dev": true
},
- "temp-write": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz",
- "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=",
+ "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,
- "requires": {
- "graceful-fs": "^4.1.2",
- "is-stream": "^1.1.0",
- "make-dir": "^1.0.0",
- "pify": "^3.0.0",
- "temp-dir": "^1.0.0",
- "uuid": "^3.0.1"
- },
"dependencies": {
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "dev": true
- }
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
}
},
- "tempfile": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz",
- "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=",
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
"dev": true,
- "requires": {
- "os-tmpdir": "^1.0.0",
- "uuid": "^2.0.1"
+ "engines": {
+ "node": ">=0.6"
}
},
- "text-extensions": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.8.0.tgz",
- "integrity": "sha512-mVzjRxuWnDKs/qH1rbOJEVHLlSX9kty9lpi7lMvLgU9S74mQ8/Ozg9UPcKxShh0qG2NZ+NyPOPpcZU4C1Eld9A==",
- "dev": true
+ "node_modules/tough-cookie": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
+ "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^6.1.32"
+ },
+ "engines": {
+ "node": ">=16"
+ }
},
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
+ "node_modules/tr46": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
+ "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
},
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ "node_modules/trim-newlines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
+ "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "through2": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
"dev": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
}
},
- "timed-out": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "node_modules/tslib": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
"dev": true
},
- "tiny-emitter": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.0.2.tgz",
- "integrity": "sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow==",
- "optional": true
- },
- "tinydate": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.0.0.tgz",
- "integrity": "sha1-IPMXVqE5We+MV+wTO6KbWt4ELKw="
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
},
- "tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "requires": {
- "os-tmpdir": "~1.0.2"
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
}
},
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"dev": true,
- "requires": {
- "kind-of": "^3.0.2"
+ "engines": {
+ "node": ">=10"
},
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
"dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
"dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
"dev": true,
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "tr46": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
- "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+ "node_modules/typed-array-length": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
"dev": true,
- "requires": {
- "punycode": "^2.1.0"
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "trim-newlines": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz",
- "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=",
- "dev": true
- },
- "trim-off-newlines": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz",
- "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=",
- "dev": true
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+ "dev": true,
+ "license": "MIT"
},
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"dev": true,
- "requires": {
- "safe-buffer": "^5.0.1"
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
}
},
- "tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
- "dev": true
+ "node_modules/ua-parser-js": {
+ "version": "1.0.38",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.38.tgz",
+ "integrity": "sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ua-parser-js"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/faisalman"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/faisalman"
+ }
+ ],
+ "engines": {
+ "node": "*"
+ }
},
- "tweezer.js": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/tweezer.js/-/tweezer.js-1.4.0.tgz",
- "integrity": "sha1-IG/1aK00zw5WoEMH2Z/8Uhk9UEU="
+ "node_modules/uglify-js": {
+ "version": "3.19.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
+ "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
},
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
"dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true
},
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
+ "node_modules/unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "uglify-js": {
- "version": "3.4.9",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
- "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
+ "node_modules/unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
"dev": true,
- "requires": {
- "commander": "~2.17.1",
- "source-map": "~0.6.1"
- },
"dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "union-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
- "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^0.4.3"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "set-value": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
- "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.1",
- "to-object-path": "^0.3.0"
- }
- }
+ "node_modules/unicode-match-property-value-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
}
},
- "uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
- "dev": true
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
},
- "uniqs": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
- "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
- "dev": true
+ "node_modules/unicorn-magic": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
+ "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "universalify": {
+ "node_modules/universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true
- },
- "unix-crypt-td-js": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.0.0.tgz",
- "integrity": "sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs=",
- "dev": true
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
},
- "unpipe": {
+ "node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
+ "node_modules/unrs-resolver": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.10.1.tgz",
+ "integrity": "sha512-EFrL7Hw4kmhZdwWO3dwwFJo6hO3FXuQ6Bg8BK/faHZ9m1YxqBS31BNSTxklIQkxK/4LlV8zTYnPsIRLBzTzjCA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "napi-postinstall": "^0.3.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unrs-resolver"
+ },
+ "optionalDependencies": {
+ "@unrs/resolver-binding-android-arm-eabi": "1.10.1",
+ "@unrs/resolver-binding-android-arm64": "1.10.1",
+ "@unrs/resolver-binding-darwin-arm64": "1.10.1",
+ "@unrs/resolver-binding-darwin-x64": "1.10.1",
+ "@unrs/resolver-binding-freebsd-x64": "1.10.1",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.10.1",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.10.1",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.10.1",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.10.1",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.10.1",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.10.1",
+ "@unrs/resolver-binding-linux-riscv64-musl": "1.10.1",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.10.1",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.10.1",
+ "@unrs/resolver-binding-linux-x64-musl": "1.10.1",
+ "@unrs/resolver-binding-wasm32-wasi": "1.10.1",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.10.1",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.10.1",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.10.1"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
},
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
}
},
- "unzip-response": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
- "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
- "dev": true
- },
- "upath": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
- "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
- "dev": true
- },
- "uri-js": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
- "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
- "requires": {
+ "dependencies": {
"punycode": "^2.1.0"
}
},
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "node_modules/url": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz",
+ "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==",
"dev": true,
- "requires": {
- "prepend-http": "^1.0.1"
+ "dependencies": {
+ "punycode": "^1.4.1",
+ "qs": "^6.11.2"
}
},
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "node_modules/url/node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
"dev": true
},
- "util-deprecate": {
+ "node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
- "utils-merge": {
+ "node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "dev": true
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
},
- "uuid": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
- "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
- "dev": true
+ "node_modules/v8-to-istanbul": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
},
- "validate-npm-package-license": {
+ "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,
- "requires": {
+ "dependencies": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
}
},
- "vary": {
+ "node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
- "dev": true
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "vendors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz",
- "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==",
- "dev": true
+ "node_modules/vue": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.31.tgz",
+ "integrity": "sha512-njqRrOy7W3YLAlVqSKpBebtZpDVg21FPoaq1I7f/+qqBThK9ChAIjkRWgeP6Eat+8C+iia4P3OYqpATP21BCoQ==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/compiler-sfc": "3.4.31",
+ "@vue/runtime-dom": "3.4.31",
+ "@vue/server-renderer": "3.4.31",
+ "@vue/shared": "3.4.31"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
},
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
"dev": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
+ "license": "MIT",
+ "dependencies": {
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "vlq": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
- "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==",
- "dev": true
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+ "dev": true,
+ "dependencies": {
+ "makeerror": "1.0.12"
+ }
},
- "w3c-hr-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
- "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
"dev": true,
- "requires": {
- "browser-process-hrtime": "^0.1.2"
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
}
},
- "w3c-xmlserializer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.0.1.tgz",
- "integrity": "sha512-XZGI1OH/OLQr/NaJhhPmzhngwcAnZDLytsvXnRmlYeRkmbb0I7sqFFA22erq4WQR0sUu17ZSQOAV9mFwCqKRNg==",
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
"dev": true,
- "requires": {
- "domexception": "^1.0.1",
- "webidl-conversions": "^4.0.2",
- "xml-name-validator": "^3.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "node_modules/whatwg-encoding/node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
"dev": true,
- "requires": {
- "defaults": "^1.0.3"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
}
},
- "webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
- "dev": true
+ "node_modules/whatwg-url": {
+ "version": "14.2.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
+ "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "^5.1.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
},
- "websocket-driver": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
- "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
"dev": true,
- "requires": {
- "http-parser-js": ">=0.4.0",
- "websocket-extensions": ">=0.1.1"
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "websocket-extensions": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
- "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
- "dev": true
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "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,
- "requires": {
- "iconv-lite": "0.4.24"
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
},
- "whatwg-url": {
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
"version": "7.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
- "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
- "requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^1.0.1",
- "webidl-conversions": "^4.0.2"
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "whet.extend": {
- "version": "0.9.9",
- "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
- "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=",
- "dev": true
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
},
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "node_modules/wrap-ansi-cjs/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,
- "requires": {
- "isexe": "^2.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
+ "node_modules/wrap-ansi-cjs/node_modules/color-name": {
+ "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,
+ "license": "MIT"
},
- "wide-align": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
- "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "node_modules/wrap-ansi-cjs/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,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "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,
- "requires": {
- "string-width": "^1.0.2 || 2"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "wordwrap": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
- "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
- "dev": true
+ "node_modules/wrap-ansi-cjs/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",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
},
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
- "wrappy": {
+ "node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"dev": true
},
- "write": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
- "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "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,
- "requires": {
- "mkdirp": "^0.5.1"
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "write-file-atomic": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
- "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "node_modules/ws": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz",
+ "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==",
"dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
}
},
- "write-json-file": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz",
- "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=",
+ "node_modules/xhr-mock": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/xhr-mock/-/xhr-mock-2.5.1.tgz",
+ "integrity": "sha512-UKOjItqjFgPUwQGPmRAzNBn8eTfIhcGjBVGvKYAWxUQPQsXNGD6KEckGTiHwyaAUp9C9igQlnN1Mp79KWCg7CQ==",
"dev": true,
- "requires": {
- "detect-indent": "^5.0.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "pify": "^3.0.0",
- "sort-keys": "^2.0.0",
- "write-file-atomic": "^2.0.0"
- },
- "dependencies": {
- "sort-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
- "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
- "dev": true,
- "requires": {
- "is-plain-obj": "^1.0.0"
- }
- }
+ "dependencies": {
+ "global": "^4.3.0",
+ "url": "^0.11.0"
}
},
- "write-pkg": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.2.0.tgz",
- "integrity": "sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw==",
- "dev": true,
- "requires": {
- "sort-keys": "^2.0.0",
- "write-json-file": "^2.2.0"
- },
- "dependencies": {
- "sort-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
- "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
- "dev": true,
- "requires": {
- "is-plain-obj": "^1.0.0"
- }
- }
+ "node_modules/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18"
}
},
- "ws": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.3.tgz",
- "integrity": "sha512-tbSxiT+qJI223AP4iLfQbkbxkwdFcneYinM2+x46Gx2wgvbaOMO36czfdfVUBRTHvzAMRhDd98sA5d/BuWbQdg==",
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/xmlhttprequest-ssl": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
+ "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
"dev": true,
- "requires": {
- "async-limiter": "~1.0.0"
+ "engines": {
+ "node": ">=0.4.0"
}
},
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
},
- "xmlchars": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-1.3.1.tgz",
- "integrity": "sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw==",
- "dev": true
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
},
- "xtend": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
},
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
- "dev": true
+ "node_modules/yaml": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
+ "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/eemeli"
+ }
},
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "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==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs/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
},
- "yargs": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
- "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
- "dev": true,
- "requires": {
- "camelcase": "^4.1.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "read-pkg-up": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^7.0.0"
- },
- "dependencies": {
- "load-json-file": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
- "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "path-type": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
- "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
- "dev": true,
- "requires": {
- "pify": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "read-pkg": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
- "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
- "dev": true,
- "requires": {
- "load-json-file": "^2.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^2.0.0"
- }
- },
- "read-pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
- "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^2.0.0"
- }
- }
+ "node_modules/yargs/node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "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,
+ "engines": {
+ "node": ">=8"
}
},
- "yargs-parser": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
- "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+ "node_modules/yargs/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,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
- "requires": {
- "camelcase": "^4.1.0"
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
}
}
diff --git a/package.json b/package.json
index 1661f40087..ee1eb75203 100644
--- a/package.json
+++ b/package.json
@@ -1,89 +1,140 @@
{
"name": "docsify",
- "version": "4.9.4",
+ "version": "5.0.0",
"description": "A magical documentation generator.",
- "author": {
- "name": "qingwei-li",
- "email": "cinwell.li@gmail.com",
- "url": "https://github.com/QingWei-Li"
- },
"homepage": "https://docsify.js.org",
- "license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/docsifyjs/docsify.git"
},
- "main": "lib/docsify.js",
- "unpkg": "lib/docsify.min.js",
+ "authors": "https://github.com/docsifyjs/docsify/graphs/contributors",
+ "license": "MIT",
+ "collective": {
+ "url": "https://opencollective.com/docsify"
+ },
+ "keywords": [
+ "client",
+ "creator",
+ "crs",
+ "doc",
+ "docs",
+ "documentation",
+ "generator",
+ "markdown"
+ ],
+ "engines": {
+ "node": ">=20.11.0"
+ },
+ "type": "module",
+ "main": "dist/docsify.js",
+ "types": "src/core/Docsify.d.ts",
+ "exports": {
+ ".": "./src/core/Docsify.js",
+ "./*": "./*"
+ },
"files": [
- "lib",
+ "dist",
"src",
+ "lib",
"themes"
],
- "scripts": {
- "bootstrap": "npm i && lerna bootstrap && npm run build:ssr",
- "serve": "node server",
- "serve:ssr": "cross-env SSR=1 node server",
- "dev": "run-p serve watch:*",
- "dev:ssr": "run-p serve:ssr watch:*",
- "lint": "eslint {src,packages} --fix",
- "test": "mocha test/*/**",
- "css": "stylus src/themes/*.styl -u autoprefixer-stylus",
- "watch:css": "run-p 'css -- -o themes -w'",
- "watch:js": "node build/build.js",
- "build:css:min": "mkdir lib/themes && run-p 'css -- -o lib/themes' && node build/mincss.js",
- "build:css": "mkdir -p themes && run-p 'css -- -o themes'",
- "build:js": "cross-env NODE_ENV=production node build/build.js",
- "build:ssr": "node build/ssr.js",
- "build:cover": "node build/cover.js",
- "build": "rimraf lib themes/* && run-s build:js build:css build:css:min build:ssr build:cover",
- "pub:next": "cross-env RELEASE_TAG=next sh build/release.sh",
- "pub": "sh build/release.sh",
- "postinstall": "opencollective postinstall"
+ "lint-staged": {
+ "*.js": "eslint --fix"
},
"dependencies": {
- "marked": "^0.5.1",
- "medium-zoom": "^0.4.0",
- "opencollective": "^1.0.3",
- "prismjs": "^1.15.0",
- "tinydate": "^1.0.0",
- "tweezer.js": "^1.4.0"
+ "common-tags": "^1.8.0",
+ "dexie": "^4.0.11",
+ "marked": "^18.0.3",
+ "medium-zoom": "^1.1.0",
+ "opencollective-postinstall": "^2.0.2",
+ "prismjs": "^1.29.0",
+ "tinydate": "^1.3.0"
},
"devDependencies": {
- "autoprefixer-stylus": "^0.14.0",
- "chai": "^4.2.0",
- "chokidar": "^2.0.2",
- "conventional-changelog-cli": "^1.3.5",
- "cross-env": "^5.1.3",
- "cssnano": "^3.10.0",
- "eslint": "^4.14.0",
- "eslint-config-xo-space": "^0.18.0",
- "esm": "^3.1.4",
- "jsdom": "^13.2.0",
- "lerna": "^2.5.1",
- "live-server": "^1.2.1",
- "mocha": "^5.2.0",
+ "@babel/eslint-parser": "^7.24.5",
+ "@babel/preset-env": "^7.11.5",
+ "@eslint/js": "^10.0.0",
+ "@playwright/test": "^1.60.0",
+ "@rollup/plugin-babel": "^7.0.0",
+ "@rollup/plugin-commonjs": "^29.0.0",
+ "@rollup/plugin-node-resolve": "^16.0.0",
+ "@rollup/plugin-replace": "^6.0.1",
+ "@rollup/plugin-terser": "^1.0.0",
+ "@types/common-tags": "^1.8.4",
+ "@types/eslint": "^8.40.2",
+ "@types/prismjs": "^1.26.5",
+ "axios": "^1.5.0",
+ "browser-sync": "^3.0.4",
+ "cross-env": "^10.0.0",
+ "cssnano": "^8.0.2",
+ "eslint": "^9.3.0",
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-plugin-jest": "^29.2.1",
+ "eslint-plugin-playwright": "^2.1.0",
+ "eslint-plugin-prettier": "^5.1.3",
+ "glob": "^13.0.0",
+ "globals": "^17.1.0",
+ "husky": "^9.0.11",
+ "jest": "^30.0.4",
+ "jest-environment-jsdom": "^30.0.5",
+ "lint-staged": "^17.0.8",
"npm-run-all": "^4.1.5",
- "rimraf": "^2.6.2",
- "rollup": "^0.53.3",
- "rollup-plugin-async": "^1.2.0",
- "rollup-plugin-buble": "^0.18.0",
- "rollup-plugin-commonjs": "^8.2.6",
- "rollup-plugin-node-resolve": "^3.0.0",
- "rollup-plugin-replace": "^2.0.0",
- "rollup-plugin-uglify": "^2.0.1",
- "stylus": "^0.54.5"
+ "postcss-cli": "^11.0.0",
+ "postcss-import": "^16.1.0",
+ "postcss-nesting": "^14.0.0",
+ "prettier": "^3.2.5",
+ "rimraf": "^6.1.0",
+ "rollup": "^4.17.2",
+ "rollup-plugin-import-css": "^4.0.1",
+ "standard-version": "^9.5.0",
+ "typescript": "^5.9.3",
+ "vue": "^3.4.27",
+ "xhr-mock": "^2.5.1"
},
- "keywords": [
- "doc",
- "docs",
- "documentation",
- "creator",
- "generator"
- ],
- "collective": {
- "type": "opencollective",
- "url": "https://opencollective.com/docsify",
- "logo": "https://docsify.js.org/_media/icon.svg"
+ "scripts": {
+ "build:cover": "node build/cover.js",
+ "build:css": "postcss \"src/themes/*.css\" \"src/themes/**/[!_]*.css\" --base src/themes --dir dist/themes --map",
+ "build:css:min": "cross-env NODE_ENV='production' npm run build:css -- --ext .min.css",
+ "build:emoji": "node ./build/emoji.js",
+ "build:js": "rollup -c",
+ "build:types": "tsc",
+ "build:v4": "git checkout release-v4 && npm clean-install && git checkout docs/emoji.md src/core/render/emoji-data.js && rimraf packages/ && git checkout - && npm clean-install && npm run build:v4:deprecate -- lib/docsify.js && npm run build:v4:deprecate -- lib/docsify.min.js",
+ "build:v4:deprecate": "echo ';console.warn(\"Docsify v4 is no longer supported. See https://docsify.js.org for the latest version.\")' >> ",
+ "build": "run-s clean build:types build:js build:css build:css:min build:cover",
+ "clean": "rimraf --glob \"dist/**\" \"_playwright*/**\" \"src/**/*.d.ts\" \"src/**/*.d.ts.map\"",
+ "clean:v4": "rimraf lib/ themes/",
+ "dev": "run-p serve:dev watch:*",
+ "docker:build:test": "npm run docker:cli -- build:test",
+ "docker:build": "docker build -f Dockerfile -t docsify-test:local .",
+ "docker:clean": "docker rmi docsify-test:local",
+ "docker:cli": "docker run --rm -it --ipc=host --mount type=bind,source=$(pwd)/test,target=/app/test docsify-test:local",
+ "docker:rebuild": "run-s docker:clean docker:build",
+ "docker:test:e2e": "npm run docker:cli -- test:e2e",
+ "docker:test:integration": "npm run docker:cli -- test:integration",
+ "docker:test:unit": "npm run docker:cli -- test:unit",
+ "docker:test": "npm run docker:cli -- test",
+ "lint:fix": "prettier . --write && eslint . --fix",
+ "lint": "prettier . --check && eslint .",
+ "postinstall": "opencollective-postinstall && npx husky install",
+ "prepare": "npm run build",
+ "prettier": "prettier . --write",
+ "pub:next": "cross-env RELEASE_TAG=next sh build/release.sh",
+ "pub": "sh build/release.sh",
+ "serve:dev": "npm run serve -- --dev",
+ "serve": "node server",
+ "test:e2e": "playwright test",
+ "test:e2e:chromium": "playwright test --project='chromium'",
+ "test:e2e:ui": "playwright test --ui",
+ "test:e2e:consume-types": "echo TODO: test the consume-types example with ESM modules",
+ "test:integration": "npm run test:jest -- --selectProjects integration",
+ "test:jest": "cross-env NODE_OPTIONS=--experimental-vm-modules jest",
+ "test:unit": "npm run test:jest -- --selectProjects unit",
+ "test:update:snapshot": "npm run test:jest -- --updateSnapshot",
+ "test:consume-types": "cd test/consume-types && npm clean-install --install-links && npm run typecheck",
+ "test": "run-s test:jest test:e2e test:consume-types",
+ "typecheck": "tsc --noEmit",
+ "typecheck:watch": "tsc --noEmit --watch",
+ "watch:css": "run-p 'build:css -- --watch' 'build:css:min -- --watch'",
+ "watch:js": "npm run build:js -- --watch"
}
}
diff --git a/packages/docsify-server-renderer/.gitignore b/packages/docsify-server-renderer/.gitignore
deleted file mode 100644
index 28fee00cc8..0000000000
--- a/packages/docsify-server-renderer/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-build.js
-node_modules
-*.log
-.git
diff --git a/packages/docsify-server-renderer/README.md b/packages/docsify-server-renderer/README.md
deleted file mode 100644
index 08b99b9c0e..0000000000
--- a/packages/docsify-server-renderer/README.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# docsify-server-renderer
-
-## Install
-
-```bash
-yarn add docsify-server-renderer
-```
-
-## Usage
-
-```js
-var Renderer = require('docsify-server-renderer')
-var readFileSync = require('fs').readFileSync
-
-// init
-var renderer = new Renderer({
- template: readFileSync('./docs/index.template.html', 'utf-8').,
- config: {
- name: 'docsify',
- repo: 'docsifyjs/docsify'
- }
-})
-
-renderer.renderToString(url)
- .then(html => {})
- .catch(err => {})
-```
-
-*index.template.html*
-
-```html
-
-
-
-
- docsify
-
-
-
-
-
-
-
-
-
-```
diff --git a/packages/docsify-server-renderer/index.js b/packages/docsify-server-renderer/index.js
deleted file mode 100644
index 21fb5c7972..0000000000
--- a/packages/docsify-server-renderer/index.js
+++ /dev/null
@@ -1,181 +0,0 @@
-import * as tpl from '../../src/core/render/tpl'
-import fetch from 'node-fetch'
-import {AbstractHistory} from '../../src/core/router/history/abstract'
-import {Compiler} from '../../src/core/render/compiler'
-import {isAbsolutePath} from '../../src/core/router/util'
-import {readFileSync} from 'fs'
-import {resolve, basename} from 'path'
-import resolvePathname from 'resolve-pathname'
-import debug from 'debug'
-import {prerenderEmbed} from '../../src/core/render/embed'
-
-function cwd(...args) {
- return resolve(process.cwd(), ...args)
-}
-
-function mainTpl(config) {
- let html = ` `
-
- if (config.repo) {
- html += tpl.corner(config.repo)
- }
- if (config.coverpage) {
- html += tpl.cover()
- }
-
- html += tpl.main(config)
-
- return html
-}
-
-export default class Renderer {
- constructor({template, config, cache}) {
- this.html = template
- this.config = config = Object.assign({}, config, {
- routerMode: 'history'
- })
- this.cache = cache
-
- this.router = new AbstractHistory(config)
- this.compiler = new Compiler(config, this.router)
-
- this.router.getCurrentPath = () => this.url
- this._renderHtml(
- 'inject-config',
- ``
- )
- this._renderHtml('inject-app', mainTpl(config))
-
- this.template = this.html
- }
-
- _getPath(url) {
- const file = this.router.getFile(url)
-
- return isAbsolutePath(file) ? file : cwd(`./${file}`)
- }
-
- async renderToString(url) {
- this.url = url = this.router.parse(url).path
- const {loadSidebar, loadNavbar, coverpage} = this.config
-
- const mainFile = this._getPath(url)
- this._renderHtml('main', await this._render(mainFile, 'main'))
-
- if (loadSidebar) {
- const name = loadSidebar === true ? '_sidebar.md' : loadSidebar
- const sidebarFile = this._getPath(resolve(url, `./${name}`))
- this._renderHtml('sidebar', await this._render(sidebarFile, 'sidebar'))
- }
-
- if (loadNavbar) {
- const name = loadNavbar === true ? '_navbar.md' : loadNavbar
- const navbarFile = this._getPath(resolve(url, `./${name}`))
- this._renderHtml('navbar', await this._render(navbarFile, 'navbar'))
- }
-
- if (coverpage) {
- let path = null
- if (typeof coverpage === 'string') {
- if (url === '/') {
- path = coverpage
- }
- } else if (Array.isArray(coverpage)) {
- path = coverpage.indexOf(url) > -1 && '_coverpage.md'
- } else {
- const cover = coverpage[url]
- path = cover === true ? '_coverpage.md' : cover
- }
-
- const coverFile = this._getPath(resolve(url, `./${path}`))
-
- this._renderHtml('cover', await this._render(coverFile), 'cover')
- }
-
- const html = this.html
- this.html = this.template
-
- return html
- }
-
- _renderHtml(match, content) {
- this.html = this.html.replace(new RegExp(``, 'g'), content)
-
- return this.html
- }
-
- async _render(path, type) {
- let html = await this._loadFile(path)
- const {subMaxLevel, maxLevel} = this.config
- let tokens
-
- switch (type) {
- case 'sidebar':
- html =
- this.compiler.sidebar(html, maxLevel) +
- ``
- break
- case 'cover':
- html = this.compiler.cover(html)
- break
- case 'main':
- tokens = await new Promise(r => {
- prerenderEmbed(
- {
- fetch: url => this._loadFile(this._getPath(url)),
- compiler: this.compiler,
- raw: html
- },
- r
- )
- })
- html = this.compiler.compile(tokens)
- break
- case 'navbar':
- case 'article':
- default:
- html = this.compiler.compile(html)
- break
- }
-
- return html
- }
-
- async _loadFile(filePath) {
- debug('docsify')(`load > ${filePath}`)
- let content
- try {
- if (isAbsolutePath(filePath)) {
- const res = await fetch(filePath)
- if (!res.ok) {
- throw Error()
- }
- content = await res.text()
- this.lock = 0
- } else {
- content = await readFileSync(filePath, 'utf8')
- this.lock = 0
- }
- return content
- } catch (e) {
- this.lock = this.lock || 0
- if (++this.lock > 10) {
- this.lock = 0
- return
- }
-
- const fileName = basename(filePath)
- const result = await this._loadFile(
- resolvePathname(`../${fileName}`, filePath)
- )
-
- return result
- }
- }
-}
-
-Renderer.version = '__VERSION__'
diff --git a/packages/docsify-server-renderer/package-lock.json b/packages/docsify-server-renderer/package-lock.json
deleted file mode 100644
index e8ff0a6fcd..0000000000
--- a/packages/docsify-server-renderer/package-lock.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "lockfileVersion": 1,
- "dependencies": {
- "debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw="
- },
- "encoding": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
- "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s="
- },
- "iconv-lite": {
- "version": "0.4.18",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
- "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA=="
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node-fetch": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz",
- "integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ=="
- },
- "resolve-pathname": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.1.0.tgz",
- "integrity": "sha1-6DWIAbhrg7F1YNTjw4LXrvIQCUQ="
- }
- },
- "version": "4.9.4"
-}
diff --git a/packages/docsify-server-renderer/package.json b/packages/docsify-server-renderer/package.json
deleted file mode 100644
index 5ff206e259..0000000000
--- a/packages/docsify-server-renderer/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "docsify-server-renderer",
- "version": "4.9.4",
- "description": "docsify server renderer",
- "author": {
- "name": "qingwei-li",
- "email": "cinwell.li@gmail.com",
- "url": "https://github.com/QingWei-Li"
- },
- "homepage": "https://docsify.js.org",
- "license": "MIT",
- "repository": "docsifyjs/docsify",
- "main": "build.js",
- "scripts": {
- "test": "echo 'hello'"
- },
- "dependencies": {
- "debug": "^2.6.8",
- "docsify": "^4.8.0",
- "node-fetch": "^1.7.0",
- "resolve-pathname": "^2.1.0"
- }
-}
diff --git a/playwright.config.js b/playwright.config.js
new file mode 100644
index 0000000000..2c7e8894d3
--- /dev/null
+++ b/playwright.config.js
@@ -0,0 +1,70 @@
+import { devices } from '@playwright/test';
+import { testConfig } from './server.configs.js';
+
+const { hostname, port } = testConfig;
+const TEST_HOST = `http://${hostname}:${port}`;
+
+process.env.TEST_HOST = TEST_HOST;
+
+/**
+ * @see https://playwright.dev/docs/test-configuration
+ * @type {import('@playwright/test').PlaywrightTestConfig}
+ */
+const config = {
+ // Setup / Teardown
+ globalSetup: './test/config/playwright.setup.js',
+ globalTeardown: './test/config/playwright.teardown.js',
+
+ // Test Execution
+ expect: {
+ timeout: 5000,
+ },
+ retries: process.env.CI ? 2 : 0, // Retry on CI only
+ testDir: './test/e2e',
+ timeout: 30 * 1000,
+ workers: process.env.CI ? 1 : undefined, // No parallel tests on CI
+ forbidOnly: !!process.env.CI, // Fail on CI if test.only in source
+
+ // Output
+ outputDir: './_playwright-results/', // screenshots, videos, traces, etc.
+ reporter: [
+ [
+ 'html',
+ {
+ open: 'never',
+ outputFolder: '_playwright-report',
+ },
+ ],
+ ],
+ snapshotDir: './test/e2e/__snapshots__',
+
+ // Config - Shared
+ // See https://playwright.dev/docs/api/class-testoptions
+ use: {
+ actionTimeout: 0,
+ baseURL: TEST_HOST, // Allow relative page.goto() (e.g. `await page.goto('/')`).
+ trace: 'on-first-retry',
+ },
+
+ // Projects
+ projects: [
+ {
+ name: 'chromium',
+ use: { ...devices['Desktop Chrome'] },
+ },
+ {
+ name: 'firefox',
+ use: { ...devices['Desktop Firefox'] },
+ },
+ {
+ name: 'webkit',
+ use: { ...devices['Desktop Safari'] },
+ },
+ // {
+ // name: 'Mobile Safari',
+ // use: { ...devices['iPhone 12'] }
+ // },
+ ],
+};
+
+export default config;
diff --git a/postcss.config.cjs b/postcss.config.cjs
new file mode 100644
index 0000000000..a781e8e568
--- /dev/null
+++ b/postcss.config.cjs
@@ -0,0 +1,10 @@
+module.exports = ctx => ({
+ map: ctx.options.map,
+ plugins: {
+ 'postcss-import': {},
+ 'postcss-nesting': {
+ edition: '2024-02',
+ },
+ cssnano: ctx.env === 'production' ? { preset: 'default' } : false,
+ },
+});
diff --git a/rollup.config.js b/rollup.config.js
new file mode 100644
index 0000000000..b0d853c236
--- /dev/null
+++ b/rollup.config.js
@@ -0,0 +1,123 @@
+import fs from 'node:fs/promises';
+import path from 'node:path';
+import { babel } from '@rollup/plugin-babel';
+import commonjs from '@rollup/plugin-commonjs';
+import css from 'rollup-plugin-import-css';
+import replace from '@rollup/plugin-replace';
+import resolve from '@rollup/plugin-node-resolve';
+import terser from '@rollup/plugin-terser';
+import { glob } from 'glob';
+import { stripIndent } from 'common-tags';
+
+// Setup
+// =============================================================================
+// Docsify
+const docsifyConfig = {
+ inputPath: 'src/core/index.js',
+ outputDir: 'dist',
+ outputName: 'docsify',
+ title: 'Docsify',
+};
+
+// Plugins
+const pluginPaths = await glob(['src/plugins/*.js', 'src/plugins/*/index.js']);
+const pluginConfigs = pluginPaths.map(pluginPath => {
+ const dir = path.basename(path.dirname(pluginPath)); // path/to/dir/file.js => dir
+ const name = path.basename(pluginPath, '.js'); // path/to/dir/file.js => file
+ const outputName = name === 'index' ? dir : name;
+
+ return {
+ inputPath: pluginPath,
+ outputDir: 'dist/plugins',
+ outputName,
+ title: `Docsify Plugin: ${outputName}`,
+ };
+});
+
+// Rollup configurations
+// =============================================================================
+const currentYear = new Date().getFullYear();
+const { homepage, license, version } = JSON.parse(
+ await fs.readFile(path.join(import.meta.dirname, 'package.json'), 'utf8'),
+);
+const baseConfig = {
+ output: {
+ format: 'iife',
+ },
+ plugins: [
+ resolve(),
+ commonjs(),
+ css(),
+ replace({
+ preventAssignment: true,
+ values: {
+ __VERSION__: version,
+ },
+ }),
+ babel({
+ babelHelpers: 'bundled',
+ }),
+ ],
+ watch: {
+ clearScreen: false,
+ },
+};
+const bundleConfigs = [];
+
+// Generate rollup configurations
+[docsifyConfig, ...pluginConfigs].forEach(bundleConfig => {
+ const { inputPath, outputDir, outputName, title } = bundleConfig;
+ // prettier-ignore
+ const banner = stripIndent`
+ /*!
+ * ${title} v${version}
+ * ${homepage}
+ * (c) 2017-${currentYear}
+ * ${license} license
+ */
+ `;
+ const minifiedConfig = {
+ ...baseConfig,
+ input: inputPath,
+ output: {
+ ...baseConfig.output,
+ banner,
+ file: path.join(outputDir, `${outputName}.min.js`),
+ sourcemap: true,
+ },
+ plugins: [
+ ...baseConfig.plugins,
+ terser({
+ output: {
+ comments: /^!/,
+ },
+ }),
+ ],
+ };
+ const unminifiedConfig = {
+ ...baseConfig,
+ input: inputPath,
+ output: {
+ ...baseConfig.output,
+ banner,
+ file: path.join(outputDir, `${outputName}.js`),
+ },
+ plugins: [
+ ...baseConfig.plugins,
+ terser({
+ compress: false,
+ mangle: false,
+ output: {
+ beautify: true,
+ comments: /^!/,
+ },
+ }),
+ ],
+ };
+
+ bundleConfigs.push(minifiedConfig, unminifiedConfig);
+});
+
+// Exports
+// =============================================================================
+export default [...bundleConfigs];
diff --git a/server.configs.js b/server.configs.js
new file mode 100644
index 0000000000..9e5145c352
--- /dev/null
+++ b/server.configs.js
@@ -0,0 +1,61 @@
+import * as path from 'node:path';
+import * as url from 'node:url';
+import { rewriteRules } from './middleware.js';
+
+const __filename = url.fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+
+// Production (CDN URLs, watch disabled)
+export const prodConfig = {
+ ghostMode: false,
+ hostname: '127.0.0.1',
+ notify: false,
+ open: false,
+ port: 8080,
+ server: {
+ baseDir: './docs',
+ },
+ snippet: false,
+ ui: false,
+};
+
+// Development (local URLs, watch enabled)
+export const devConfig = {
+ ...prodConfig,
+ files: ['CHANGELOG.md', 'docs/**/*', 'dist/**/*'],
+ port: 3000,
+ rewriteRules,
+ reloadDebounce: 1000,
+ reloadOnRestart: true,
+ server: {
+ ...prodConfig.server,
+ routes: {
+ '/changelog.md': path.resolve(__dirname, 'CHANGELOG.md'),
+ '/dist': path.resolve(__dirname, 'dist'),
+ '/node_modules': path.resolve(__dirname, 'node_modules'), // Required for automated Vue tests
+ },
+ },
+ snippet: true,
+};
+
+// Test (local URLs, watch disabled)
+export const testConfig = {
+ ...devConfig,
+ port: 4000,
+ server: {
+ ...devConfig.server,
+ middleware: [
+ // Blank page required for test environment
+ {
+ route: '/_blank.html',
+ handle(req, res, next) {
+ res.setHeader('Content-Type', 'text/html');
+ res.end('');
+ next();
+ },
+ },
+ ],
+ },
+ snippet: false,
+ watch: false,
+};
diff --git a/server.js b/server.js
index 785e45751a..4d58c713b5 100644
--- a/server.js
+++ b/server.js
@@ -1,55 +1,14 @@
-const liveServer = require('live-server')
-const isSSR = !!process.env.SSR
-const middleware = []
+import { create } from 'browser-sync';
+import { devConfig, prodConfig } from './server.configs.js';
-if (isSSR) {
- const Renderer = require('./packages/docsify-server-renderer/build.js')
- const renderer = new Renderer({
- template: `
-
-
-
-
- docsify
-
-
-
-
-
-
-
-
- `,
- config: {
- name: 'docsify',
- repo: 'docsifyjs/docsify',
- basePath: 'https://docsify.js.org/',
- loadNavbar: true,
- loadSidebar: true,
- subMaxLevel: 3,
- auto2top: true,
- alias: {
- '/de-de/changelog': '/changelog',
- '/zh-cn/changelog': '/changelog',
- '/changelog':
- 'https://raw.githubusercontent.com/docsifyjs/docsify/master/CHANGELOG'
- }
- },
- path: './'
- })
+const bsServer = create();
+const args = process.argv.slice(2);
+const config = args.includes('--dev') ? devConfig : prodConfig;
+const configName = config === devConfig ? 'development' : 'production';
+const isWatch = Boolean(config.files) && config.watch !== false;
+const urlType = config === devConfig ? 'local' : 'CDN';
- middleware.push(function(req, res, next) {
- if (/\.(css|js)$/.test(req.url)) {
- return next()
- }
- renderer.renderToString(req.url).then(html => res.end(html))
- })
-}
+// prettier-ignore
+console.log(`\nStarting ${configName} server (${urlType} URLs, watch: ${isWatch})\n`);
-const params = {
- port: 3000,
- watch: ['lib', 'docs', 'themes'],
- middleware
-}
-
-liveServer.start(params)
+bsServer.init(config);
diff --git a/src/core/Docsify.js b/src/core/Docsify.js
new file mode 100644
index 0000000000..f00268a763
--- /dev/null
+++ b/src/core/Docsify.js
@@ -0,0 +1,63 @@
+import prism from 'prismjs';
+import { Router } from './router/index.js';
+import { Render } from './render/index.js';
+import { Fetch } from './fetch/index.js';
+import { Events } from './event/index.js';
+import { VirtualRoutes } from './virtual-routes/index.js';
+
+import config from './config.js';
+import { isFn } from './util/core.js';
+import { Lifecycle } from './init/lifecycle.js';
+
+export { prism };
+export { marked } from 'marked';
+export * as util from './util/index.js';
+export * as dom from './util/dom.js';
+export { Compiler } from './render/compiler.js';
+export { slugify } from './render/slugify.js';
+export { get } from './util/ajax.js';
+
+/** @typedef {new (...args: any[]) => any} Constructor */
+/** @typedef {import('./config.js').DocsifyConfig} DocsifyConfig */
+
+export class Docsify extends Fetch(
+ Events(Render(VirtualRoutes(Router(Lifecycle(Object))))),
+) {
+ /** @type {DocsifyConfig} */
+ config;
+
+ /** @param {Partial} conf */
+ constructor(conf = {}) {
+ super();
+
+ this.config = config(this, conf);
+
+ this.initLifecycle(); // Init hooks
+ this.initPlugin(); // Install plugins
+ this.callHook('init');
+ this.initRouter(); // Add router
+ this.initRender(); // Render base DOM
+ this.initEvent(); // Bind events
+ this.initFetch(); // Fetch data
+ this.callHook('mounted');
+ }
+
+ initPlugin() {
+ this.config.plugins.forEach(fn => {
+ try {
+ isFn(fn) && fn(this._lifecycle, this);
+ } catch (err) {
+ if (this.config.catchPluginErrors) {
+ const errTitle = 'Docsify plugin error';
+
+ // eslint-disable-next-line no-console
+ console.error(errTitle, err);
+ } else {
+ throw err;
+ }
+ }
+ });
+ }
+}
+
+export const version = '__VERSION__';
diff --git a/src/core/config.js b/src/core/config.js
index a1386b2746..b2e2fdb9e2 100644
--- a/src/core/config.js
+++ b/src/core/config.js
@@ -1,71 +1,223 @@
-import {merge, hyphenate, isPrimitive, hasOwn} from './util/core'
-
-export default function () {
- const config = merge(
- {
- el: '#app',
- repo: '',
- maxLevel: 6,
- subMaxLevel: 0,
- loadSidebar: null,
- loadNavbar: null,
- homepage: 'README.md',
- coverpage: '',
- basePath: '',
- auto2top: false,
- name: '',
- themeColor: '',
- nameLink: window.location.pathname,
- autoHeader: false,
- executeScript: null,
- noEmoji: false,
- ga: '',
- ext: '.md',
- mergeNavbar: false,
- formatUpdated: '',
- externalLinkTarget: '_blank',
- routerMode: 'hash',
- noCompileLinks: [],
- relativePath: false
- },
- window.$docsify
- )
+import { stripIndent } from 'common-tags';
+import { hyphenate, isPrimitive } from './util/core.js';
+/** @import { Docsify } from './Docsify.js' */
+/** @import { Hooks } from './init/lifecycle.js' */
+
+const currentScript = document.currentScript;
+
+const defaultDocsifyConfig = () => ({
+ alias: /** @type {Record} */ ({}),
+ auto2top: false,
+ autoHeader: false,
+ basePath: '',
+ catchPluginErrors: true,
+ cornerExternalLinkTarget:
+ /** @type {'_blank' | '_self' | '_parent' | '_top' | '_unfencedTop'} */ (
+ '_blank'
+ ),
+ coverpage: /** @type {boolean | string} */ (''),
+ el: '#app',
+ executeScript: /** @type {null | boolean} */ (null),
+ ext: '.md',
+ externalLinkRel: /** @type {'noopener' | string} */ ('noopener'), // TODO string union type based on spec
+ externalLinkTarget:
+ /** @type {'_blank' | '_self' | '_parent' | '_top' | '_unfencedTop'} */ (
+ '_blank'
+ ),
+ fallbackLanguages: /** @type {null | string[]} */ (null),
+ fallbackDefaultLanguage: '',
+ formatUpdated: /** @type {string | ((updatedAt: string) => string)} */ (''),
+ pageTitleFormatter: /** @type {null | ((name: string) => string)} */ (null),
+ /** For the frontmatter plugin. */
+ frontMatter: /** @type {Record | null} */ (null),
+ hideSidebar: false,
+ homepage: 'README.md',
+ keyBindings:
+ /** @type {false | { [commandName: string]: { bindings: string[]; callback: Function } }} */ ({}),
+ loadNavbar: /** @type {null | boolean | string} */ (null),
+ loadSidebar: /** @type {null | boolean | string} */ (null),
+ logo: false,
+ markdown: null,
+ maxLevel: 6,
+ mergeNavbar: false,
+ name: /** @type {boolean | string} */ (''),
+ nameLink: window.location.pathname,
+ nativeEmoji: false,
+ noCompileLinks: /** @type {string[]} */ ([]),
+ noEmoji: false,
+ notFoundPage: /** @type {boolean | string | Record} */ (
+ false
+ ),
+ onlyCover: false,
+ plugins: /** @type {Plugin[]} */ ([]),
+ relativePath: false,
+ repo: /** @type {string} */ (''),
+ requestHeaders: /** @type {Record} */ ({}),
+ routerMode: /** @type {'hash' | 'history'} */ 'hash',
+ routes: /** @type {Record} */ ({}),
+ skipLink: /** @type {false | string | Record} */ (
+ 'Skip to main content'
+ ),
+ subMaxLevel: 0,
+ vueComponents: /** @type {Record} */ ({}),
+ vueGlobalOptions: /** @type {Record} */ ({}),
+ vueMounts: /** @type {Record} */ ({}),
+
+ // Deprecations //////////////////
+
+ /** @deprecated */
+ get themeColor() {
+ return this.__themeColor;
+ },
+ set themeColor(value) {
+ if (value) {
+ this.__themeColor = value;
+
+ // eslint-disable-next-line no-console
+ console.warn(
+ stripIndent(`
+ $docsify.themeColor is deprecated as of v5. Use the "--theme-color" CSS property to customize your theme color.
+
+ `).trim(),
+ );
+ }
+ },
+ __themeColor: '',
+
+ /** @deprecated */
+ get topMargin() {
+ return this.__topMargin;
+ },
+ set topMargin(value) {
+ if (value) {
+ this.__topMargin = value;
+
+ // eslint-disable-next-line no-console
+ console.warn(
+ stripIndent(`
+ $docsify.topMargin is deprecated as of v5. Use the "--scroll-padding-top" CSS property to specify a scroll margin when using a sticky navbar.
+
+ `).trim(),
+ );
+ }
+ },
+ __topMargin: 0,
+});
+
+/** @typedef {ReturnType} DocsifyConfig */
+
+/**
+ * @param {import('./Docsify.js').Docsify} vm
+ * @param {Partial} config
+ * @returns {DocsifyConfig}
+ */
+export default function (vm, config = {}) {
+ config = Object.assign(
+ defaultDocsifyConfig(),
+
+ // Handle non-function configs no matter what (f.e. plugins assign options onto it)
+ window.$docsify,
+
+ // Also handle function config (the app can specificy a function, and plugins will assign options onto it)
+ typeof window.$docsify === 'function' ? window.$docsify(vm) : undefined,
+
+ // Finally, user config passed directly to the instance has priority.
+ config,
+ );
+
+ // Merge default and user-specified key bindings
+ if (config.keyBindings !== false) {
+ config.keyBindings = Object.assign(
+ // Default
+ {
+ toggleSidebar: {
+ bindings: ['\\'],
+ callback(/** @type {KeyboardEvent} */ e) {
+ const toggleElm = /** @type {HTMLElement} */ (
+ document.querySelector('.sidebar-toggle-button')
+ );
+
+ if (toggleElm) {
+ toggleElm.click();
+ }
+ },
+ },
+ },
+ // User-specified
+ config.keyBindings,
+ );
+ }
const script =
- document.currentScript ||
- [].slice
- .call(document.getElementsByTagName('script'))
- .filter(n => /docsify\./.test(n.src))[0]
+ currentScript ||
+ Array.from(document.getElementsByTagName('script')).filter(n =>
+ /docsify\./.test(n.src),
+ )[0];
if (script) {
- for (const prop in config) {
- if (hasOwn.call(config, prop)) {
- const val = script.getAttribute('data-' + hyphenate(prop))
+ for (const prop of /** @type {(keyof DocsifyConfig)[]} */ (
+ Object.keys(config)
+ )) {
+ const val = script.getAttribute('data-' + hyphenate(prop));
- if (isPrimitive(val)) {
- config[prop] = val === '' ? true : val
- }
+ if (isPrimitive(val)) {
+ // eslint-disable-next-line no-console
+ console.warn(
+ `DEPRECATION: data-* attributes on the docsify global script (f.e. ${
+ 'data-' + hyphenate(prop)
+ }) are deprecated.`,
+ );
+
+ // @ts-expect-error too dynamic for TS
+ config[prop] = val === '' ? true : val;
}
}
+ }
- if (config.loadSidebar === true) {
- config.loadSidebar = '_sidebar' + config.ext
- }
- if (config.loadNavbar === true) {
- config.loadNavbar = '_navbar' + config.ext
- }
- if (config.coverpage === true) {
- config.coverpage = '_coverpage' + config.ext
- }
- if (config.repo === true) {
- config.repo = ''
- }
- if (config.name === true) {
- config.name = ''
- }
+ if (config.loadSidebar === true) {
+ config.loadSidebar = '_sidebar' + config.ext;
}
- window.$docsify = config
+ if (config.loadNavbar === true) {
+ config.loadNavbar = '_navbar' + config.ext;
+ }
- return config
+ if (config.coverpage === true) {
+ config.coverpage = '_coverpage' + config.ext;
+ }
+
+ if (config.name === true) {
+ config.name = '';
+ }
+
+ return /** @type {DocsifyConfig} */ (config);
}
+
+/** @typedef {any} TODO */
+
+/** @typedef {(hooks: Hooks, vm: Docsify) => void} Plugin */
+
+/**
+ @typedef {(
+ ((route: string, matched: RegExpMatchArray) => string) |
+ ((route: string, matched: RegExpMatchArray, next: (markdown?: string) => void) => void)
+ )} RouteHandler - Given a route, provides the markdown to render for that route.
+ */
+
+/**
+@typedef {
+ {
+ subMaxLevel: number,
+ themeColor: string,
+ topMargin: number,
+ }
+} DocsifyConfigOld
+*/
diff --git a/src/core/event/index.js b/src/core/event/index.js
index 8b8c275b12..8395761430 100644
--- a/src/core/event/index.js
+++ b/src/core/event/index.js
@@ -1,26 +1,886 @@
-import {isMobile} from '../util/env'
-import {body, on} from '../util/dom'
-import * as sidebar from './sidebar'
-import {scrollIntoView} from './scroll'
+import { isMobile, mobileBreakpoint } from '../util/env.js';
+import { noop } from '../util/core.js';
+import * as dom from '../util/dom.js';
+import { stripUrlExceptId } from '../router/util.js';
-export function eventMixin(proto) {
- proto.$resetEvents = function () {
- scrollIntoView(this.route.path, this.route.query.id)
+/** @typedef {import('../Docsify.js').Constructor} Constructor */
- if (this.config.loadNavbar) {
- sidebar.getAndActive(this.router, 'nav')
+/**
+ * @template {!Constructor} T
+ * @param {T} Base - The class to extend
+ */
+export function Events(Base) {
+ return class Events extends Base {
+ #intersectionObserver = new IntersectionObserver(() => {});
+ #isScrolling = false;
+ #cancelAnchorScroll = noop;
+ #title = dom.$.title;
+
+ // Initialization
+ // =========================================================================
+ /**
+ * Initialize Docsify events
+ * One-time setup of listeners, observers, and tasks.
+ * @void
+ */
+ initEvent() {
+ const { topMargin } = this.config;
+
+ // Apply topMargin to scrolled content
+ if (topMargin) {
+ const value =
+ typeof topMargin === 'number' ? `${topMargin}px` : topMargin;
+
+ document.documentElement.style.setProperty(
+ '--scroll-padding-top',
+ value,
+ );
+ }
+
+ this.#initCover();
+ this.#initSkipToContent();
+ this.#initSidebar();
+ this.#initSidebarToggle();
+ this.#initKeyBindings();
}
- }
-}
-export function initEvent(vm) {
- // Bind toggle button
- sidebar.btn('button.sidebar-toggle', vm.router)
- sidebar.collapse('.sidebar', vm.router)
- // Bind sticky effect
- if (vm.config.coverpage) {
- !isMobile && on('scroll', sidebar.sticky)
- } else {
- body.classList.add('sticky')
- }
+ // Sub-Initializations
+ // =========================================================================
+ /**
+ * Initialize cover observer
+ * Toggles sticky behavior when cover is not in view
+ * @void
+ */
+ #initCover() {
+ const coverElm = dom.find('section.cover');
+
+ if (!coverElm) {
+ dom.body.classList.add('sticky');
+ return;
+ }
+
+ const observer = new IntersectionObserver(
+ entries => {
+ const isIntersecting = entries[0].isIntersecting;
+ const op = isIntersecting ? 'remove' : 'add';
+
+ dom.body.classList[op]('sticky');
+ },
+ { threshold: 0.01 },
+ );
+
+ observer.observe(coverElm);
+ }
+
+ /**
+ * Initialize heading observer
+ * Toggles sidebar active item based on top viewport edge intersection
+ * @void
+ */
+ #initHeadings() {
+ const headingElms = dom.findAll('#main :where(h1, h2, h3, h4, h5, h6)');
+ const headingsInView = new Set();
+ let isInitialLoad = true;
+
+ // Mark sidebar active item on heading intersection
+ this.#intersectionObserver?.disconnect();
+ this.#intersectionObserver = new IntersectionObserver(
+ entries => {
+ if (isInitialLoad) {
+ isInitialLoad = false;
+ return;
+ }
+
+ if (this.#isScrolling) {
+ return;
+ }
+
+ for (const entry of entries) {
+ const op = entry.isIntersecting ? 'add' : 'delete';
+
+ headingsInView[op](entry.target);
+ }
+
+ let activeHeading;
+ if (headingsInView.size === 1) {
+ // Get first and only item in set.
+ // May be undefined if no headings are in view.
+ activeHeading = headingsInView.values().next().value;
+ } else if (headingsInView.size > 1) {
+ // Find the closest heading to the top of the viewport
+ // Reduce over the Set of headings currently in view (headingsInView) to determine the closest heading.
+ activeHeading = Array.from(headingsInView).reduce(
+ (closest, current) => {
+ return !closest ||
+ closest.compareDocumentPosition(current) &
+ Node.DOCUMENT_POSITION_FOLLOWING
+ ? current
+ : closest;
+ },
+ null,
+ );
+ }
+
+ if (activeHeading) {
+ const id = activeHeading.getAttribute('id');
+ const href = this.router.toURL(this.router.getCurrentPath(), {
+ id,
+ });
+ const newSidebarActiveElm = this.#markSidebarActiveElm(href);
+
+ newSidebarActiveElm?.scrollIntoView({
+ behavior: 'instant',
+ block: 'nearest',
+ inline: 'nearest',
+ });
+ }
+ },
+ {
+ rootMargin: '0% 0% -50% 0%', // Top half of viewport
+ },
+ );
+
+ headingElms.forEach(elm => {
+ this.#intersectionObserver.observe(elm);
+ });
+ }
+
+ /**
+ * Initialize keyboard bindings
+ * @void
+ */
+ #initKeyBindings() {
+ const { keyBindings } = this.config;
+ const modifierKeys = ['alt', 'ctrl', 'meta', 'shift'];
+
+ if (keyBindings && keyBindings.constructor === Object) {
+ // Prepare key binding configurations
+ Object.values(keyBindings || []).forEach(bindingConfig => {
+ const { bindings } = bindingConfig;
+
+ if (!bindings) {
+ return;
+ }
+
+ // Convert bindings to arrays
+ // Ex: 'alt+t' => ['alt+t']
+ bindingConfig.bindings = Array.isArray(bindings)
+ ? bindings
+ : [bindings];
+
+ // Convert key sequences to sorted arrays (modifiers first)
+ // Ex: ['alt+t', 't+ctrl'] => [['alt', 't'], ['ctrl', 't']]
+ bindingConfig.bindings = bindingConfig.bindings.map(
+ (/** @type {string | string[]} */ keys) => {
+ /** @type {string[][]} */
+ const sortedKeys = [[], []]; // Modifier keys, non-modifier keys
+
+ if (typeof keys === 'string') {
+ keys = keys.split('+');
+ }
+
+ keys.forEach(key => {
+ const isModifierKey = modifierKeys.includes(key);
+ const targetArray = sortedKeys[isModifierKey ? 0 : 1];
+ const newKeyValue = key.trim().toLowerCase();
+
+ targetArray.push(newKeyValue);
+ });
+
+ sortedKeys.forEach(arr => arr.sort());
+
+ return sortedKeys.flat();
+ },
+ );
+ });
+
+ // Handle keyboard events
+ dom.on('keydown', (/** @type {KeyboardEvent} */ e) => {
+ const isTextEntry = /** @type {HTMLElement} */ (
+ document.activeElement
+ ).matches('input, select, textarea');
+
+ if (isTextEntry) {
+ return;
+ }
+
+ const bindingConfigs = Object.values(keyBindings || []);
+ const matchingConfigs = bindingConfigs.filter(
+ (/** @type {{ bindings: string[][] }} */ { bindings }) =>
+ bindings &&
+ // bindings: [['alt', 't'], ['ctrl', 't']]
+ bindings.some((/** @type {string[]} */ keys) =>
+ // keys: ['alt', 't']
+ keys.every(
+ // k: 'alt'
+ k =>
+ (modifierKeys.includes(k) &&
+ e[/** @type {keyof KeyboardEvent} */ (k + 'Key')]) ||
+ e.key === k || // Ex: " ", "a"
+ e.code.toLowerCase() === k || // "space"
+ e.code.toLowerCase() === `key${k}`, // "keya"
+ ),
+ ),
+ );
+
+ matchingConfigs.forEach(({ callback }) => {
+ e.preventDefault();
+ callback(e);
+ });
+ });
+ }
+ }
+
+ /**
+ * Initialize sidebar event listeners
+ *
+ * @void
+ */
+ #initSidebar() {
+ const sidebarElm = document.querySelector('.sidebar');
+
+ if (!sidebarElm) {
+ return;
+ }
+
+ // Auto-toggle on resolution change
+ window
+ ?.matchMedia?.(`(max-width: ${mobileBreakpoint})`)
+ .addEventListener('change', evt => {
+ this.#toggleSidebar(!evt.matches);
+ });
+
+ // Collapse toggle
+ dom.on(sidebarElm, 'click', (/** @type {MouseEvent} */ { target }) => {
+ const linkElm = /** @type {HTMLElement} */ (target).closest('a');
+ const linkParent = /** @type {HTMLLIElement} */ (
+ linkElm?.closest('li')
+ );
+ const hasSubSidebar = linkParent?.querySelector('.app-sub-sidebar');
+
+ if (hasSubSidebar) {
+ linkParent.classList.toggle('collapse');
+ }
+ });
+ }
+
+ /**
+ * Initialize sidebar show/hide toggle behavior
+ *
+ * @void
+ */
+ #initSidebarToggle() {
+ const contentElm = dom.find('main > .content');
+ const toggleElm = dom.find('button.sidebar-toggle');
+
+ if (!toggleElm) {
+ return;
+ }
+
+ /** @type {HTMLElement | null} */
+ let lastContentFocusElm;
+
+ // Store last focused content element (restored via #toggleSidebar)
+ dom.on(contentElm, 'focusin', (/** @type {FocusEvent} */ e) => {
+ const focusAttr = 'data-restore-focus';
+
+ lastContentFocusElm?.removeAttribute(focusAttr);
+ lastContentFocusElm = /** @type {HTMLElement} */ (e.target);
+ lastContentFocusElm.setAttribute(focusAttr, '');
+ });
+
+ // Toggle sidebar
+ dom.on(toggleElm, 'click', (/** @type {MouseEvent} */ e) => {
+ e.stopPropagation();
+ this.#toggleSidebar();
+ });
+ }
+
+ /**
+ * Initialize skip to content behavior
+ *
+ * @void
+ */
+ #initSkipToContent() {
+ const skipElm = document.querySelector('#skip-to-content');
+
+ if (!skipElm) {
+ return;
+ }
+
+ skipElm.addEventListener('click', evt => {
+ const focusElm = this.#focusContent();
+
+ evt.preventDefault();
+ focusElm?.scrollIntoView({
+ behavior: 'smooth',
+ });
+ });
+ }
+
+ // Callbacks
+ // =========================================================================
+ /**
+ * Handle rendering UI element updates and new content
+ * @void
+ */
+ onRender() {
+ const { name, pageTitleFormatter } = this.config;
+ const currentPath = this.router.toURL(this.router.getCurrentPath());
+ const currentSection = dom
+ .find(`.sidebar a[href='${currentPath}']`)
+ ?.getAttribute('title');
+
+ // If a pageTitleFormatter is provided, let the user format the name
+ // (no automatic HTML stripping). Otherwise, default to stripping
+ // HTML tags from the configured name.
+ const plainName =
+ typeof pageTitleFormatter === 'function' && typeof name === 'string'
+ ? pageTitleFormatter(name)
+ : name
+ ? name.replace(/<[^>]+>/g, '').trim()
+ : name;
+ const currentTitle = plainName
+ ? currentSection
+ ? `${currentSection} - ${plainName}`
+ : plainName
+ : currentSection;
+
+ // Update page title
+ dom.$.title = currentTitle || this.#title;
+
+ this.#markAppNavActiveElm();
+ this.#markSidebarCurrentPage();
+ this.#initHeadings();
+ }
+
+ /**
+ * Handle navigation events
+ *
+ * @param {undefined|"history"|"navigate"} source Type of navigation where
+ * undefined is initial load, "history" is forward/back, and "navigate" is
+ * user click/tap
+ * @void
+ */
+ onNavigate(source) {
+ const { auto2top, topMargin } = this.config;
+ const { path, query } = this.route;
+ const activeSidebarElm = this.#markSidebarActiveElm();
+
+ // Note: Scroll position set by browser on forward/back (i.e. "history")
+ if (source !== 'history') {
+ // Anchor link
+ if (query.id) {
+ const headingElm = dom.find(
+ `.markdown-section :where(h1, h2, h3, h4, h5, h6)[id="${query.id}"]`,
+ );
+
+ if (headingElm) {
+ this.#scrollToHeading(headingElm);
+ }
+ }
+ // User click/tap
+ else if (source === 'navigate') {
+ // Scroll to top
+ if (auto2top) {
+ /** @type {Element} */ (document.scrollingElement).scrollTop =
+ topMargin ?? 0;
+ }
+ }
+ }
+
+ const isNavigate = source === 'navigate';
+ const hasId = 'id' in query;
+ const noSubSidebar = !activeSidebarElm?.querySelector('.app-sub-sidebar');
+
+ // Clicked anchor link
+ const shouldCloseSidebar =
+ path === '/' || (isNavigate && (hasId || noSubSidebar));
+
+ if (shouldCloseSidebar && isMobile()) {
+ this.#toggleSidebar(false);
+ }
+
+ // Clicked anchor link or page load with anchor ID
+ if (hasId || isNavigate) {
+ this.#focusContent();
+ }
+ }
+
+ // Functions
+ // =========================================================================
+ /**
+ * Set focus on the main content area: current route ID, first heading, or
+ * the main content container
+ *
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus
+ * @param {Object} options HTMLElement focus() method options
+ * @returns HTMLElement|undefined
+ * @void
+ */
+ #focusContent(options = {}) {
+ const settings = {
+ preventScroll: true,
+ ...options,
+ };
+ const { query } = this.route;
+ const focusEl = /** @type {HTMLElement|null} */ (
+ query.id
+ ? // Heading ID
+ dom.find(`#${query.id}`)
+ : // First heading
+ dom.find('#main :where(h1, h2, h3, h4, h5, h6)') ||
+ // Content container
+ dom.find('#main')
+ );
+
+ // Move focus to content area
+ if (focusEl) {
+ if (!focusEl.hasAttribute('tabindex')) {
+ focusEl.setAttribute('tabindex', '-1');
+ focusEl.setAttribute('data-added-tabindex', 'true');
+ }
+
+ if (focusEl.hasAttribute('data-added-tabindex')) {
+ focusEl.scrollIntoView({ behavior: 'smooth' });
+ }
+
+ focusEl.focus(settings);
+ }
+
+ return focusEl;
+ }
+
+ /**
+ * Marks the active app nav item
+ */
+ #markAppNavActiveElm() {
+ const href = decodeURIComponent(this.router.toURL(this.route.path));
+
+ ['.app-nav', '.app-nav-merged'].forEach(selector => {
+ const navElm = dom.find(selector);
+
+ if (!navElm) {
+ return;
+ }
+
+ const newActive = /** @type {HTMLAnchorElement[]} */ (
+ dom.findAll(navElm, 'a')
+ )
+ .sort((a, b) => b.href.length - a.href.length)
+ .find(
+ a =>
+ href.includes(/** @type {string} */ (a.getAttribute('href'))) ||
+ href.includes(
+ decodeURI(/** @type {string} */ (a.getAttribute('href'))),
+ ),
+ )
+ ?.closest('li');
+ const oldActive = dom.find(navElm, 'li.active');
+
+ if (newActive && newActive !== oldActive) {
+ oldActive?.classList.remove('active');
+ newActive.classList.add('active');
+ }
+ });
+ }
+
+ /**
+ * Marks the active sidebar item
+ *
+ * @param {string} [href] Matching element HREF value. If unspecified,
+ * defaults to the current path (with query params)
+ * @returns Element|undefined
+ */
+ #markSidebarActiveElm(href) {
+ href ??= this.router.toURL(this.router.getCurrentPath());
+
+ const sidebar = dom.find('.sidebar');
+
+ if (!sidebar) {
+ return;
+ }
+
+ href = stripUrlExceptId(href);
+
+ const oldActive = dom.find(sidebar, 'li.active');
+ const newActive = dom
+ .find(
+ sidebar,
+ `a[href="${href}"], a[href="${decodeURIComponent(/** @type {string} */ (href))}"]`,
+ )
+ ?.closest('li');
+
+ if (newActive && newActive !== oldActive) {
+ oldActive?.classList.remove('active');
+ newActive.classList.add('active');
+ }
+
+ return newActive;
+ }
+
+ /**
+ * Marks the current page in the sidebar
+ *
+ * @param {string} [href] Matching sidebar element HREF value. If
+ * unspecified, defaults to the current path (without query params)
+ * @returns Element|undefined
+ */
+ #markSidebarCurrentPage(href) {
+ href ??= this.router.toURL(this.route.path);
+
+ const sidebar = dom.find('.sidebar');
+
+ if (!sidebar) {
+ return;
+ }
+
+ const path = href?.split('?')[0];
+ const oldPage = dom.find(sidebar, 'li[aria-current]');
+ const newPage = dom
+ .find(
+ sidebar,
+ `a[href="${path}"], a[href="${decodeURIComponent(/** @type {string} */ (path))}"]`,
+ )
+ ?.closest('li');
+
+ if (newPage && newPage !== oldPage) {
+ oldPage?.removeAttribute('aria-current');
+ newPage.setAttribute('aria-current', 'page');
+ }
+
+ return newPage;
+ }
+
+ /**
+ * @param {boolean} [force]
+ */
+ #toggleSidebar(force) {
+ const sidebarElm = /** @type {HTMLElement|null} */ (dom.find('.sidebar'));
+
+ if (!sidebarElm) {
+ return;
+ }
+
+ const ariaElms = dom.findAll('[aria-controls="__sidebar"]');
+ const inertElms = dom.findAll(
+ 'body > *:not(main, script), main > .content',
+ );
+ const isShow = sidebarElm.classList.toggle('show', force);
+
+ // Set aria-expanded attribute
+ ariaElms.forEach(toggleElm => {
+ const expanded = force ?? sidebarElm.classList.contains('show');
+ toggleElm.setAttribute('aria-expanded', String(expanded));
+ toggleElm.setAttribute(
+ 'aria-label',
+ expanded ? 'Hide primary navigation' : 'Show primary navigation',
+ );
+ });
+
+ // Add inert attributes (focus trap)
+ if (isShow && isMobile()) {
+ inertElms.forEach(elm => elm.setAttribute('inert', ''));
+ }
+ // Remove inert attributes
+ else {
+ inertElms.forEach(elm => elm.removeAttribute('inert'));
+ }
+
+ if (isShow) {
+ sidebarElm.focus();
+ }
+ // Restore focus
+ else {
+ const restoreElm = /** @type {HTMLElement|null} */ (
+ document.querySelector('main > .content [data-restore-focus]')
+ );
+
+ if (restoreElm) {
+ restoreElm.focus({
+ preventScroll: true,
+ });
+ }
+ }
+ }
+
+ /**
+ * Scroll an anchor target into view and keep it aligned while late-loading
+ * content above the target changes the page height.
+ *
+ * @param {Element} headingElm Heading element to scroll to
+ * @void
+ */
+ #scrollToHeading(headingElm) {
+ this.#cancelAnchorScroll();
+
+ const contentElm = dom.find('.markdown-section');
+ const userEvents = ['keydown', 'mousedown', 'touchstart', 'wheel'];
+ /** @type {{ wait?: ReturnType }} */
+ const timers = {};
+ /** @type {number} */
+ let animationFrame = 0;
+ /** @type {number} */
+ let correctionFrame = 0;
+ let cancelled = false;
+ let cancel = noop;
+ let hasScrolled = false;
+ let scrollScheduled = false;
+ let remainingImages = 0;
+ /** @type {() => void} */
+ let cleanup = () => {};
+ /** @type {{ image: HTMLImageElement, eventName: "load" | "error", listener: () => void }[]} */
+ const imageListeners = [];
+ /** @type {{ image: HTMLImageElement, previousHeight: number }[]} */
+ const pendingImageCorrections = [];
+
+ const removeUserListeners = () => {
+ userEvents.forEach(eventName => {
+ window.removeEventListener(eventName, cancel);
+ });
+ };
+
+ const removeImageListeners = () => {
+ imageListeners.forEach(({ image, eventName, listener }) => {
+ image.removeEventListener(eventName, listener);
+ });
+ imageListeners.length = 0;
+ };
+
+ const scrollToHeading = () => {
+ if (cancelled) {
+ return;
+ }
+
+ if (!document.contains(headingElm)) {
+ cancel();
+ return;
+ }
+
+ hasScrolled = true;
+ this.#watchNextScroll();
+ headingElm.scrollIntoView({
+ behavior: 'smooth',
+ block: 'start',
+ });
+
+ if (remainingImages === 0) {
+ cleanup();
+ }
+ };
+
+ const scheduleScroll = () => {
+ if (hasScrolled || scrollScheduled) {
+ return;
+ }
+
+ scrollScheduled = true;
+ clearTimeout(timers.wait);
+ animationFrame = requestAnimationFrame(scrollToHeading);
+ };
+
+ /**
+ * Keep the heading visually anchored when late images above it resize
+ * after the fallback scroll has already started.
+ *
+ * @param {HTMLImageElement} image Image that changed height
+ * @param {number} previousHeight Height before the image settled
+ * @void
+ */
+ const scheduleCorrection = (image, previousHeight) => {
+ if (cancelled || !hasScrolled) {
+ return;
+ }
+
+ pendingImageCorrections.push({ image, previousHeight });
+
+ if (correctionFrame) {
+ return;
+ }
+
+ correctionFrame = requestAnimationFrame(() => {
+ correctionFrame = 0;
+
+ if (cancelled) {
+ return;
+ }
+
+ if (!document.contains(headingElm)) {
+ cleanup();
+ return;
+ }
+
+ let heightChange = 0;
+
+ for (const { image, previousHeight } of pendingImageCorrections) {
+ const isBeforeHeading =
+ image.compareDocumentPosition(headingElm) &
+ Node.DOCUMENT_POSITION_FOLLOWING;
+ const currentHeight = image.getBoundingClientRect().height;
+
+ if (isBeforeHeading) {
+ heightChange += currentHeight - previousHeight;
+ }
+ }
+ pendingImageCorrections.length = 0;
+
+ if (Math.abs(heightChange) < 1) {
+ if (remainingImages === 0) {
+ cleanup();
+ }
+
+ return;
+ }
+
+ const scrollingElm = document.scrollingElement;
+
+ if (!scrollingElm) {
+ cleanup();
+ return;
+ }
+
+ const scrollPaddingTop =
+ parseFloat(getComputedStyle(scrollingElm).scrollPaddingTop) || 0;
+ const headingTop = headingElm.getBoundingClientRect().top;
+ const scrollAdjustment = headingTop - scrollPaddingTop;
+
+ if (Math.abs(scrollAdjustment) < 1) {
+ if (remainingImages === 0) {
+ cleanup();
+ }
+
+ return;
+ }
+
+ this.#watchNextScroll();
+ scrollingElm.scrollTop += scrollAdjustment;
+
+ if (remainingImages === 0) {
+ cleanup();
+ }
+ });
+ };
+
+ cleanup = () => {
+ if (cancelled) {
+ return;
+ }
+
+ cancelled = true;
+ cancelAnimationFrame(animationFrame);
+ cancelAnimationFrame(correctionFrame);
+ clearTimeout(timers.wait);
+ removeImageListeners();
+ removeUserListeners();
+ this.#cancelAnchorScroll = noop;
+ };
+ cancel = cleanup;
+
+ const waitForImages = () => {
+ const images = /** @type {HTMLImageElement[]} */ (
+ contentElm ? Array.from(contentElm.querySelectorAll('img')) : []
+ ).filter(image => {
+ return (
+ !image.complete &&
+ image.compareDocumentPosition(headingElm) &
+ Node.DOCUMENT_POSITION_FOLLOWING
+ );
+ });
+
+ if (!images.length) {
+ scheduleScroll();
+ return;
+ }
+
+ remainingImages = images.length;
+ const onImageSettled = (image, previousHeight) => {
+ remainingImages -= 1;
+
+ if (hasScrolled) {
+ scheduleCorrection(image, previousHeight);
+ } else if (remainingImages === 0) {
+ scheduleScroll();
+ }
+
+ if (remainingImages === 0 && hasScrolled && !correctionFrame) {
+ cleanup();
+ }
+ };
+
+ images.forEach(image => {
+ let settled = false;
+ const previousHeight = image.getBoundingClientRect().height;
+ const listener = () => {
+ if (settled) {
+ return;
+ }
+
+ settled = true;
+ onImageSettled(image, previousHeight);
+ };
+
+ image.addEventListener('load', listener, { once: true });
+ image.addEventListener('error', listener, { once: true });
+ imageListeners.push(
+ { image, eventName: 'load', listener },
+ { image, eventName: 'error', listener },
+ );
+ });
+
+ timers.wait = setTimeout(scheduleScroll, 300);
+ };
+
+ userEvents.forEach(eventName => {
+ window.addEventListener(eventName, cancel, {
+ once: true,
+ passive: true,
+ });
+ });
+ waitForImages();
+
+ this.#cancelAnchorScroll = cancel;
+ }
+
+ /**
+ * Monitor next scroll start/end and set #isScrolling to true/false
+ * accordingly. Listeners are removed after the start/end events are fired.
+ * @void
+ */
+ #watchNextScroll() {
+ // Scroll start
+ document.addEventListener(
+ 'scroll',
+ () => {
+ this.#isScrolling = true;
+
+ // Scroll end
+ if ('onscrollend' in window) {
+ document.addEventListener(
+ 'scrollend',
+ () => (this.#isScrolling = false),
+ { once: true },
+ );
+ }
+ // Browsers w/o native scrollend event support (Safari)
+ else {
+ /** @type {any} */
+ let scrollTimer;
+
+ const callback = () => {
+ clearTimeout(scrollTimer);
+
+ scrollTimer = setTimeout(() => {
+ document.removeEventListener('scroll', callback);
+ this.#isScrolling = false;
+ }, 100);
+ };
+
+ document.addEventListener('scroll', callback, false);
+ callback();
+ }
+ },
+ { once: true },
+ );
+ }
+ };
}
diff --git a/src/core/event/scroll.js b/src/core/event/scroll.js
deleted file mode 100644
index 3e9e33265b..0000000000
--- a/src/core/event/scroll.js
+++ /dev/null
@@ -1,148 +0,0 @@
-import {isMobile} from '../util/env'
-import * as dom from '../util/dom'
-import Tweezer from 'tweezer.js'
-
-const nav = {}
-let hoverOver = false
-let scroller = null
-let enableScrollEvent = true
-let coverHeight = 0
-
-function scrollTo(el) {
- if (scroller) {
- scroller.stop()
- }
- enableScrollEvent = false
- scroller = new Tweezer({
- start: window.pageYOffset,
- end: el.getBoundingClientRect().top + window.pageYOffset,
- duration: 500
- })
- .on('tick', v => window.scrollTo(0, v))
- .on('done', () => {
- enableScrollEvent = true
- scroller = null
- })
- .begin()
-}
-
-function highlight(path) {
- if (!enableScrollEvent) {
- return
- }
- const sidebar = dom.getNode('.sidebar')
- const anchors = dom.findAll('.anchor')
- const wrap = dom.find(sidebar, '.sidebar-nav')
- let active = dom.find(sidebar, 'li.active')
- const doc = document.documentElement
- const top = ((doc && doc.scrollTop) || document.body.scrollTop) - coverHeight
- let last
-
- for (let i = 0, len = anchors.length; i < len; i += 1) {
- const node = anchors[i]
-
- if (node.offsetTop > top) {
- if (!last) {
- last = node
- }
- break
- } else {
- last = node
- }
- }
- if (!last) {
- return
- }
- const li = nav[getNavKey(decodeURIComponent(path), last.getAttribute('data-id'))]
-
- if (!li || li === active) {
- return
- }
-
- active && active.classList.remove('active')
- li.classList.add('active')
- active = li
-
- // Scroll into view
- // https://github.com/vuejs/vuejs.org/blob/master/themes/vue/source/js/common.js#L282-L297
- if (!hoverOver && dom.body.classList.contains('sticky')) {
- const height = sidebar.clientHeight
- const curOffset = 0
- const cur = active.offsetTop + active.clientHeight + 40
- const isInView =
- active.offsetTop >= wrap.scrollTop && cur <= wrap.scrollTop + height
- const notThan = cur - curOffset < height
- const top = isInView ? wrap.scrollTop : notThan ? curOffset : cur - height
-
- sidebar.scrollTop = top
- }
-}
-
-function getNavKey(path, id) {
- return `${path}?id=${id}`
-}
-
-export function scrollActiveSidebar(router) {
- const cover = dom.find('.cover.show')
- coverHeight = cover ? cover.offsetHeight : 0
-
- const sidebar = dom.getNode('.sidebar')
- let lis = []
- if (sidebar != null) {
- lis = dom.findAll(sidebar, 'li')
- }
-
- for (let i = 0, len = lis.length; i < len; i += 1) {
- const li = lis[i]
- const a = li.querySelector('a')
- if (!a) {
- continue
- }
- let href = a.getAttribute('href')
-
- if (href !== '/') {
- const {query: {id}, path} = router.parse(href)
- if (id) {
- href = getNavKey(path, id)
- }
- }
-
- if (href) {
- nav[decodeURIComponent(href)] = li
- }
- }
-
- if (isMobile) {
- return
- }
- const path = router.getCurrentPath()
- dom.off('scroll', () => highlight(path))
- dom.on('scroll', () => highlight(path))
- dom.on(sidebar, 'mouseover', () => {
- hoverOver = true
- })
- dom.on(sidebar, 'mouseleave', () => {
- hoverOver = false
- })
-}
-
-export function scrollIntoView(path, id) {
- if (!id) {
- return
- }
-
- const section = dom.find('#' + id)
- section && scrollTo(section)
-
- const li = nav[getNavKey(path, id)]
- const sidebar = dom.getNode('.sidebar')
- const active = dom.find(sidebar, 'li.active')
- active && active.classList.remove('active')
- li && li.classList.add('active')
-}
-
-const scrollEl = dom.$.scrollingElement || dom.$.documentElement
-
-export function scroll2Top(offset = 0) {
- scrollEl.scrollTop = offset === true ? 0 : Number(offset)
-}
diff --git a/src/core/event/sidebar.js b/src/core/event/sidebar.js
deleted file mode 100644
index 81c3003f50..0000000000
--- a/src/core/event/sidebar.js
+++ /dev/null
@@ -1,92 +0,0 @@
-import {isMobile} from '../util/env'
-import * as dom from '../util/dom'
-
-const title = dom.$.title
-/**
- * Toggle button
- */
-export function btn(el) {
- const toggle = _ => dom.body.classList.toggle('close')
-
- el = dom.getNode(el)
- if (el == null) {
- return
- }
- dom.on(el, 'click', e => {
- e.stopPropagation()
- toggle()
- })
-
- isMobile &&
- dom.on(
- dom.body,
- 'click',
- _ => dom.body.classList.contains('close') && toggle()
- )
-}
-
-export function collapse(el) {
- el = dom.getNode(el)
- if (el == null) {
- return
- }
- dom.on(el, 'click', ({target}) => {
- if (
- target.nodeName === 'A' &&
- target.nextSibling &&
- target.nextSibling.classList.contains('app-sub-sidebar')
- ) {
- dom.toggleClass(target.parentNode, 'collapse')
- }
- })
-}
-
-export function sticky() {
- const cover = dom.getNode('section.cover')
- if (!cover) {
- return
- }
- const coverHeight = cover.getBoundingClientRect().height
-
- if (window.pageYOffset >= coverHeight || cover.classList.contains('hidden')) {
- dom.toggleClass(dom.body, 'add', 'sticky')
- } else {
- dom.toggleClass(dom.body, 'remove', 'sticky')
- }
-}
-
-/**
- * Get and active link
- * @param {object} router
- * @param {string|element} el
- * @param {Boolean} isParent acitve parent
- * @param {Boolean} autoTitle auto set title
- * @return {element}
- */
-export function getAndActive(router, el, isParent, autoTitle) {
- el = dom.getNode(el)
- let links = []
- if (el != null) {
- links = dom.findAll(el, 'a')
- }
- const hash = decodeURI(router.toURL(router.getCurrentPath()))
- let target
-
- links.sort((a, b) => b.href.length - a.href.length).forEach(a => {
- const href = a.getAttribute('href')
- const node = isParent ? a.parentNode : a
-
- if (hash.indexOf(href) === 0 && !target) {
- target = a
- dom.toggleClass(node, 'add', 'active')
- } else {
- dom.toggleClass(node, 'remove', 'active')
- }
- })
-
- if (autoTitle) {
- dom.$.title = target ? (target.title || `${target.innerText} - ${title}`) : title
- }
-
- return target
-}
diff --git a/src/core/fetch/ajax.js b/src/core/fetch/ajax.js
deleted file mode 100644
index 5911b7994e..0000000000
--- a/src/core/fetch/ajax.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import progressbar from '../render/progressbar'
-import {noop, hasOwn} from '../util/core'
-
-const cache = {}
-
-/**
- * Simple ajax get
- * @param {string} url
- * @param {boolean} [hasBar=false] has progress bar
- * @return { then(resolve, reject), abort }
- */
-export function get(url, hasBar = false, headers = {}) {
- const xhr = new XMLHttpRequest()
- const on = function () {
- xhr.addEventListener.apply(xhr, arguments)
- }
- const cached = cache[url]
-
- if (cached) {
- return {then: cb => cb(cached.content, cached.opt), abort: noop}
- }
-
- xhr.open('GET', url)
- for (const i in headers) {
- if (hasOwn.call(headers, i)) {
- xhr.setRequestHeader(i, headers[i])
- }
- }
- xhr.send()
-
- return {
- then: function (success, error = noop) {
- if (hasBar) {
- const id = setInterval(
- _ =>
- progressbar({
- step: Math.floor(Math.random() * 5 + 1)
- }),
- 500
- )
-
- on('progress', progressbar)
- on('loadend', evt => {
- progressbar(evt)
- clearInterval(id)
- })
- }
-
- on('error', error)
- on('load', ({target}) => {
- if (target.status >= 400) {
- error(target)
- } else {
- const result = (cache[url] = {
- content: target.response,
- opt: {
- updatedAt: xhr.getResponseHeader('last-modified')
- }
- })
-
- success(result.content, result.opt)
- }
- })
- },
- abort: _ => xhr.readyState !== 4 && xhr.abort()
- }
-}
diff --git a/src/core/fetch/index.js b/src/core/fetch/index.js
index 17208df69b..3dcc0caf9d 100644
--- a/src/core/fetch/index.js
+++ b/src/core/fetch/index.js
@@ -1,235 +1,321 @@
-import {get} from './ajax'
-import {callHook} from '../init/lifecycle'
-import {getParentPath, stringifyQuery} from '../router/util'
-import {noop} from '../util/core'
-import {getAndActive} from '../event/sidebar'
-
-function loadNested(path, qs, file, next, vm, first) {
- path = first ? path : path.replace(/\/$/, '')
- path = getParentPath(path)
-
- if (!path) {
- return
- }
-
- get(
- vm.router.getFile(path + file) + qs,
- false,
- vm.config.requestHeaders
- ).then(next, _ => loadNested(path, qs, file, next, vm))
-}
+import { getParentPath, stringifyQuery } from '../router/util.js';
+import { noop, isExternal } from '../util/core.js';
+import { get } from '../util/ajax.js';
+
+/** @typedef {import('../Docsify.js').Constructor} Constructor */
+
+/**
+ * @template {!Constructor} T
+ * @param {T} Base - The class to extend
+ */
+export function Fetch(Base) {
+ return class Fetch extends Base {
+ /**
+ * @param {any} path
+ * @param {any} qs
+ * @param {any} file
+ * @param {any} next
+ * @param {any} vm
+ * @param {any} [first]
+ */
+ #loadNested(path, qs, file, next, vm, first) {
+ path = first ? path : path.replace(/\/$/, '');
+ path = getParentPath(path);
+
+ if (!path) {
+ return;
+ }
-export function fetchMixin(proto) {
- let last
-
- const abort = () => last && last.abort && last.abort()
- const request = (url, hasbar, requestHeaders) => {
- abort()
- last = get(url, true, requestHeaders)
- return last
- }
-
- const get404Path = (path, config) => {
- const {notFoundPage, ext} = config
- const defaultPath = '_404' + (ext || '.md')
- let key
- let path404
-
- switch (typeof notFoundPage) {
- case 'boolean':
- path404 = defaultPath
- break
- case 'string':
- path404 = notFoundPage
- break
-
- case 'object':
- key = Object.keys(notFoundPage)
- .sort((a, b) => b.length - a.length)
- .find(key => path.match(new RegExp('^' + key)))
-
- path404 = (key && notFoundPage[key]) || defaultPath
- break
-
- default:
- break
+ get(
+ vm.router.getFile(path + file) + qs,
+ false,
+ vm.config.requestHeaders,
+ ).then(next, _error => this.#loadNested(path, qs, file, next, vm));
}
- return path404
- }
-
- proto._loadSideAndNav = function (path, qs, loadSidebar, cb) {
- return () => {
- if (!loadSidebar) {
- return cb()
+ /** @type {any} */
+ #last;
+
+ #abort = () => this.#last && this.#last.abort && this.#last.abort();
+
+ /**
+ * @param {any} url
+ * @param {any} requestHeaders
+ */
+ #request = (url, requestHeaders) => {
+ this.#abort();
+ this.#last = get(url, true, requestHeaders);
+ return this.#last;
+ };
+
+ /**
+ * @param {any} path
+ * @param {any} config
+ */
+ #get404Path = (path, config) => {
+ const { notFoundPage, ext } = config;
+ const defaultPath = '_404' + (ext || '.md');
+ let key;
+ let path404;
+
+ switch (typeof notFoundPage) {
+ case 'boolean':
+ path404 = defaultPath;
+ break;
+ case 'string':
+ path404 = notFoundPage;
+ break;
+
+ case 'object':
+ key = Object.keys(notFoundPage)
+ .sort((a, b) => b.length - a.length)
+ .filter(k => path.match(new RegExp('^' + k)))[0];
+
+ path404 = (key && notFoundPage[key]) || defaultPath;
+ break;
+
+ default:
+ break;
}
- const fn = result => {
- this._renderSidebar(result)
- cb()
- }
+ return path404;
+ };
+
+ /**
+ * @param {any} path
+ * @param {any} qs
+ * @param {any} loadSidebar
+ * @param {any} cb
+ */
+ _loadSideAndNav(path, qs, loadSidebar, cb) {
+ return () => {
+ /**
+ * @param {any} result
+ */
+ const renderSidebar = result => {
+ this._renderSidebar(result);
+ cb();
+ };
+
+ if (!loadSidebar) {
+ // Although, we don't load sidebar from sidebar file, we still need call the render to auto generate sidebar from headings toc
+ renderSidebar(null);
+ return;
+ }
- // Load sidebar
- loadNested(path, qs, loadSidebar, fn, this, true)
+ // Load sidebar from the sidebar file
+ this.#loadNested(path, qs, loadSidebar, renderSidebar, this, true);
+ };
}
- }
-
- proto._fetch = function (cb = noop) {
- const {path, query} = this.route
- const qs = stringifyQuery(query, ['id'])
- const {loadNavbar, requestHeaders, loadSidebar} = this.config
- // Abort last request
-
- const file = this.router.getFile(path)
- const req = request(file + qs, true, requestHeaders)
-
- // Current page is html
- this.isHTML = /\.html$/g.test(file)
-
- // Load main content
- req.then(
- (text, opt) =>
- this._renderMain(
- text,
- opt,
- this._loadSideAndNav(path, qs, loadSidebar, cb)
- ),
- _ => {
- this._fetchFallbackPage(file, qs, cb) || this._fetch404(file, qs, cb)
- }
- )
-
- // Load nav
- loadNavbar &&
- loadNested(
- path,
- qs,
- loadNavbar,
- text => this._renderNav(text),
- this,
- true
- )
- }
-
- proto._fetchCover = function () {
- const {coverpage, requestHeaders} = this.config
- const query = this.route.query
- const root = getParentPath(this.route.path)
-
- if (coverpage) {
- let path = null
- const routePath = this.route.path
- if (typeof coverpage === 'string') {
- if (routePath === '/') {
- path = coverpage
- }
- } else if (Array.isArray(coverpage)) {
- path = coverpage.indexOf(routePath) > -1 && '_coverpage'
- } else {
- const cover = coverpage[routePath]
- path = cover === true ? '_coverpage' : cover
- }
- const coverOnly = Boolean(path) && this.config.onlyCover
- if (path) {
- path = this.router.getFile(root + path)
- this.coverIsHTML = /\.html$/g.test(path)
- get(path + stringifyQuery(query, ['id']), false, requestHeaders).then(
- text => this._renderCover(text, coverOnly)
- )
+ _fetch(cb = noop) {
+ const { query } = this.route;
+ const { path } = this.route;
+
+ // Prevent loading remote content via URL hash
+ // Ex: https://foo.com/#//bar.com/file.md
+ if (isExternal(path)) {
+ history.replaceState(null, '', '#');
+ this.router.normalize();
} else {
- this._renderCover(null, coverOnly)
+ const qs = stringifyQuery(query, ['id']);
+ const { loadNavbar, requestHeaders, loadSidebar } = this.config;
+ // Abort last request
+
+ const file = this.router.getFile(path);
+
+ this.isRemoteUrl = isExternal(file);
+ // Current page is html
+ this.isHTML = /\.html$/g.test(file);
+
+ // create a handler that should be called if content was fetched successfully
+ /**
+ * @param {any} text
+ * @param {any} [opt]
+ * @param {any} [response]
+ */
+ const contentFetched = (text, opt, response) => {
+ this.route.response = response;
+ this._renderMain(
+ text,
+ opt,
+ this._loadSideAndNav(path, qs, loadSidebar, cb),
+ );
+ };
+
+ // and a handler that is called if content failed to fetch
+ /**
+ * @param {any} _error
+ * @param {any} [response]
+ */
+ const contentFailedToFetch = (_error, response) => {
+ this.route.response = response;
+ this._fetchFallbackPage(path, qs, cb) || this._fetch404(file, qs, cb);
+ };
+
+ // attempt to fetch content from a virtual route, and fallback to fetching the actual file
+ if (!this.isRemoteUrl) {
+ this.matchVirtualRoute(path).then((/** @type {any} */ contents) => {
+ if (typeof contents === 'string') {
+ contentFetched(contents);
+ } else {
+ this.#request(file + qs, requestHeaders).then(
+ contentFetched,
+ contentFailedToFetch,
+ );
+ }
+ });
+ } else {
+ // if the requested url is not local, just fetch the file
+ this.#request(file + qs, requestHeaders).then(
+ contentFetched,
+ contentFailedToFetch,
+ );
+ }
+
+ // Load nav
+ loadNavbar &&
+ this.#loadNested(
+ path,
+ qs,
+ loadNavbar,
+ (/** @type {string} */ text) => this._renderNav(text),
+ this,
+ true,
+ );
}
- return coverOnly
}
- }
- proto.$fetch = function (cb = noop) {
- const done = () => {
- callHook(this, 'doneEach')
- cb()
- }
+ _fetchCover() {
+ const { coverpage, requestHeaders } = this.config;
+ const query = this.route.query;
+ const root = getParentPath(this.route.path);
+
+ if (coverpage) {
+ let path = null;
+ const routePath = this.route.path;
+ if (typeof coverpage === 'string') {
+ if (routePath === '/') {
+ path = coverpage;
+ }
+ } else if (Array.isArray(coverpage)) {
+ path = coverpage.indexOf(routePath) > -1 && '_coverpage';
+ } else {
+ const cover = coverpage[routePath];
+ path = cover === true ? '_coverpage' : cover;
+ }
- const onlyCover = this._fetchCover()
+ const coverOnly = Boolean(path) && this.config.onlyCover;
+ if (path) {
+ path = this.router.getFile(root + path);
+ this.coverIsHTML = /\.html$/g.test(path);
+ get(path + stringifyQuery(query, ['id']), false, requestHeaders).then(
+ text => this._renderCover(text, coverOnly),
+ );
+ } else {
+ this._renderCover(null, coverOnly);
+ }
- if (onlyCover) {
- done()
- } else {
- this._fetch(() => {
- this.$resetEvents()
- done()
- })
+ return coverOnly;
+ }
}
- }
- proto._fetchFallbackPage = function (path, qs, cb = noop) {
- const {requestHeaders, fallbackLanguages, loadSidebar} = this.config
+ $fetch(cb = noop, onNavigate = this.onNavigate.bind(this)) {
+ const done = () => {
+ this.callHook('doneEach');
+ cb();
+ };
- if (!fallbackLanguages) {
- return false
+ const onlyCover = this._fetchCover();
+
+ if (onlyCover) {
+ done();
+ } else {
+ this._fetch(() => {
+ onNavigate();
+ done();
+ });
+ }
}
- const local = path.split('/')[1]
+ /**
+ * @param {any} path
+ * @param {any} qs
+ * @param {any} [cb]
+ */
+ _fetchFallbackPage(path, qs, cb = noop) {
+ const {
+ requestHeaders,
+ fallbackLanguages,
+ fallbackDefaultLanguage,
+ loadSidebar,
+ } = this.config;
+
+ if (!fallbackLanguages) {
+ return false;
+ }
- if (fallbackLanguages.indexOf(local) === -1) {
- return false
- }
- const newPath = path.replace(new RegExp(`^/${local}`), '')
- const req = request(newPath + qs, true, requestHeaders)
-
- req.then(
- (text, opt) =>
- this._renderMain(
- text,
- opt,
- this._loadSideAndNav(path, qs, loadSidebar, cb)
- ),
- () => this._fetch404(path, qs, cb)
- )
-
- return true
- }
- /**
- * Load the 404 page
- * @param path
- * @param qs
- * @param cb
- * @returns {*}
- * @private
- */
- proto._fetch404 = function (path, qs, cb = noop) {
- const {loadSidebar, requestHeaders, notFoundPage} = this.config
-
- const fnLoadSideAndNav = this._loadSideAndNav(path, qs, loadSidebar, cb)
- if (notFoundPage) {
- const path404 = get404Path(path, this.config)
-
- request(this.router.getFile(path404), true, requestHeaders).then(
- (text, opt) => this._renderMain(text, opt, fnLoadSideAndNav),
- () => this._renderMain(null, {}, fnLoadSideAndNav)
- )
- return true
+ const local = path.split('/')[1];
+
+ if (fallbackLanguages.indexOf(local) === -1) {
+ return false;
+ }
+
+ const newPath = this.router.getFile(
+ path.replace(new RegExp(`^/${local}`), fallbackDefaultLanguage),
+ );
+ const req = this.#request(newPath + qs, requestHeaders);
+
+ req.then(
+ /**
+ * @param {any} text
+ * @param {any} [opt]
+ */
+ (text, opt) =>
+ this._renderMain(
+ text,
+ opt,
+ this._loadSideAndNav(path, qs, loadSidebar, cb),
+ ),
+ /** @param {any} _error */
+ _error => this._fetch404(path, qs, cb),
+ );
+
+ return true;
}
- this._renderMain(null, {}, fnLoadSideAndNav)
- return false
- }
-}
+ /**
+ * Load the 404 page
+ * @param {String} path URL to be loaded
+ * @param {*} qs TODO: define
+ * @param {Function} cb Callback
+ * @returns {Boolean} True if the requested page is not found
+ */
+ _fetch404(path, qs, cb = noop) {
+ const { loadSidebar, requestHeaders, notFoundPage } = this.config;
+
+ const fnLoadSideAndNav = this._loadSideAndNav(path, qs, loadSidebar, cb);
+ if (notFoundPage) {
+ const path404 = this.#get404Path(path, this.config);
+
+ this.#request(this.router.getFile(path404), requestHeaders).then(
+ /**
+ * @param {any} text
+ * @param {any} [opt]
+ */
+ (text, opt) => this._renderMain(text, opt, fnLoadSideAndNav),
+ /** @param {any} _error */
+ _error => this._renderMain(null, {}, fnLoadSideAndNav),
+ );
+ return true;
+ }
-export function initFetch(vm) {
- const {loadSidebar} = vm.config
+ this._renderMain(null, {}, fnLoadSideAndNav);
+ return false;
+ }
- // Server-Side Rendering
- if (vm.rendered) {
- const activeEl = getAndActive(vm.router, '.sidebar-nav', true, true)
- if (loadSidebar && activeEl) {
- activeEl.parentNode.innerHTML += window.__SUB_SIDEBAR__
+ initFetch() {
+ this.$fetch(() => this.callHook('ready'));
}
- vm._bindEventOnRendered(activeEl)
- vm.$resetEvents()
- callHook(vm, 'doneEach')
- callHook(vm, 'ready')
- } else {
- vm.$fetch(_ => callHook(vm, 'ready'))
- }
+ };
}
diff --git a/src/core/global-api.js b/src/core/global-api.js
index 7bdf74c656..1b48cb43b1 100644
--- a/src/core/global-api.js
+++ b/src/core/global-api.js
@@ -1,20 +1,20 @@
-import * as util from './util'
-import * as dom from './util/dom'
-import {Compiler} from './render/compiler'
-import {slugify} from './render/slugify'
-import {get} from './fetch/ajax'
-import marked from 'marked'
-import prism from 'prismjs'
+import * as prism from 'prismjs';
+import { marked } from 'marked';
+import * as util from './util/index.js';
+import * as dom from './util/dom.js';
+import { Compiler } from './render/compiler.js';
+import { slugify } from './render/slugify.js';
+import { get } from './util/ajax.js';
-export default function () {
+export default function initGlobalAPI() {
window.Docsify = {
util,
dom,
get,
slugify,
- version: '__VERSION__'
- }
- window.DocsifyCompiler = Compiler
- window.marked = marked
- window.Prism = prism
+ version: '__VERSION__',
+ };
+ window.DocsifyCompiler = Compiler;
+ window.marked = marked;
+ window.Prism = prism;
}
diff --git a/src/core/globals.ts b/src/core/globals.ts
new file mode 100644
index 0000000000..cf0f795211
--- /dev/null
+++ b/src/core/globals.ts
@@ -0,0 +1,42 @@
+import prism from 'prismjs';
+import { marked as _marked } from 'marked';
+import * as util from './util/index.js';
+import * as dom from './util/dom.js';
+import { Compiler } from './render/compiler.js';
+import { slugify } from './render/slugify.js';
+import { get } from './util/ajax.js';
+import { DocsifyConfig } from './config.js';
+import { Docsify } from './Docsify.js';
+
+type DocsifyConfigOrFn =
+ | Partial
+ | (Partial & ((config: Docsify) => Partial));
+
+declare global {
+ interface Window {
+ $docsify?: DocsifyConfigOrFn;
+
+ Docsify: {
+ util: typeof util;
+ dom: typeof dom;
+ get: typeof get;
+ slugify: typeof slugify;
+ version: string;
+ };
+ DocsifyCompiler: typeof Compiler;
+ marked: typeof _marked;
+ Prism: typeof prism;
+ Vue: any; // TODO Get Vue types and apply them here
+
+ __current_docsify_compiler__?: Compiler;
+ }
+
+ const $docsify: Window['$docsify'];
+
+ const Docsify: Window['Docsify'];
+ const DocsifyCompiler: Window['DocsifyCompiler'];
+ const marked: Window['marked'];
+ // @ts-expect-error Prism types are wonky
+ const Prism: Window['Prism'];
+ const Vue: Window['Vue'];
+}
diff --git a/src/core/index.js b/src/core/index.js
index ebb7fe3f2d..43fb5b9c7e 100644
--- a/src/core/index.js
+++ b/src/core/index.js
@@ -1,41 +1,13 @@
-import {initMixin} from './init'
-import {routerMixin} from './router'
-import {renderMixin} from './render'
-import {fetchMixin} from './fetch'
-import {eventMixin} from './event'
-import initGlobalAPI from './global-api'
-
-/**
- * Fork https://github.com/bendrucker/document-ready/blob/master/index.js
- */
-function ready(callback) {
- const state = document.readyState
-
- if (state === 'complete' || state === 'interactive') {
- return setTimeout(callback, 0)
- }
-
- document.addEventListener('DOMContentLoaded', callback)
-}
-
-function Docsify() {
- this._init()
-}
-
-const proto = Docsify.prototype
-
-initMixin(proto)
-routerMixin(proto)
-renderMixin(proto)
-fetchMixin(proto)
-eventMixin(proto)
+import { documentReady } from './util/dom.js';
+import { Docsify } from './Docsify.js';
+import initGlobalAPI from './global-api.js';
/**
* Global API
*/
-initGlobalAPI()
+initGlobalAPI();
/**
* Run Docsify
*/
-ready(_ => new Docsify())
+documentReady(() => new Docsify());
diff --git a/src/core/init/index.js b/src/core/init/index.js
deleted file mode 100644
index fe88c31d4a..0000000000
--- a/src/core/init/index.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import config from '../config'
-import {initLifecycle, callHook} from './lifecycle'
-import {initRender} from '../render'
-import {initRouter} from '../router'
-import {initEvent} from '../event'
-import {initFetch} from '../fetch'
-import {isFn} from '../util/core'
-
-export function initMixin(proto) {
- proto._init = function () {
- const vm = this
- vm.config = config()
-
- initLifecycle(vm) // Init hooks
- initPlugin(vm) // Install plugins
- callHook(vm, 'init')
- initRouter(vm) // Add router
- initRender(vm) // Render base DOM
- initEvent(vm) // Bind events
- initFetch(vm) // Fetch data
- callHook(vm, 'mounted')
- }
-}
-
-function initPlugin(vm) {
- [].concat(vm.config.plugins).forEach(fn => isFn(fn) && fn(vm._lifecycle, vm))
-}
diff --git a/src/core/init/lifecycle.js b/src/core/init/lifecycle.js
index fd9b7aea97..de11f84c70 100644
--- a/src/core/init/lifecycle.js
+++ b/src/core/init/lifecycle.js
@@ -1,45 +1,113 @@
-import {noop} from '../util/core'
-
-export function initLifecycle(vm) {
- const hooks = [
- 'init',
- 'mounted',
- 'beforeEach',
- 'afterEach',
- 'doneEach',
- 'ready'
- ]
-
- vm._hooks = {}
- vm._lifecycle = {}
- hooks.forEach(hook => {
- const arr = (vm._hooks[hook] = [])
- vm._lifecycle[hook] = fn => arr.push(fn)
- })
-}
+import { noop } from '../util/core.js';
+
+/** @typedef {import('../Docsify.js').Constructor} Constructor */
+
+/**
+ * @template {!Constructor} T
+ * @param {T} Base - The class to extend
+ */
+export function Lifecycle(Base) {
+ return class Lifecycle extends Base {
+ /** @type {Record} */
+ _hooks = {};
+
+ _lifecycle = /** @type {Hooks} */ ({});
-export function callHook(vm, hook, data, next = noop) {
- const queue = vm._hooks[hook]
-
- const step = function (index) {
- const hook = queue[index]
- if (index >= queue.length) {
- next(data)
- } else if (typeof hook === 'function') {
- if (hook.length === 2) {
- hook(data, result => {
- data = result
- step(index + 1)
- })
- } else {
- const result = hook(data)
- data = result === undefined ? data : result
- step(index + 1)
- }
- } else {
- step(index + 1)
+ initLifecycle() {
+ const hooks = [
+ 'init',
+ 'mounted',
+ 'beforeEach',
+ 'afterEach',
+ 'doneEach',
+ 'ready',
+ ];
+
+ hooks.forEach((/** @type {string} */ hook) => {
+ /** @type {Function[]} */
+ const arr = (this._hooks[hook] = []);
+ this._lifecycle[hook] = (/** @type {Function} */ fn) => arr.push(fn);
+ });
}
- }
- step(0)
+ /**
+ * @param {string} hookName
+ * @param {any} [data]
+ * @param {Function} [next]
+ */
+ callHook(hookName, data, next = noop) {
+ const queue = this._hooks[hookName];
+ const catchPluginErrors = this.config.catchPluginErrors;
+
+ /**
+ * @param {number} index
+ */
+ const step = function (index) {
+ const hookFn = queue[index];
+
+ if (index >= queue.length) {
+ next(data);
+ } else if (typeof hookFn === 'function') {
+ const errTitle = 'Docsify plugin error';
+
+ if (hookFn.length === 2) {
+ // FIXME this does not catch async errors. We can support async
+ // functions for this, or add a second arg to next() functions.
+ try {
+ hookFn(data, (/** @type {string} */ result) => {
+ data = result === undefined ? data : result;
+ step(index + 1);
+ });
+ } catch (err) {
+ if (catchPluginErrors) {
+ // eslint-disable-next-line no-console
+ console.error(errTitle, err);
+ } else {
+ throw err;
+ }
+
+ step(index + 1);
+ }
+ } else {
+ try {
+ const result = hookFn(data);
+
+ data = result === undefined ? data : result;
+ step(index + 1);
+ } catch (err) {
+ if (catchPluginErrors) {
+ // eslint-disable-next-line no-console
+ console.error(errTitle, err);
+ } else {
+ throw err;
+ }
+
+ step(index + 1);
+ }
+ }
+ } else {
+ step(index + 1);
+ }
+ };
+
+ step(0);
+ }
+ };
}
+
+/**
+@typedef {{
+ init(): void
+ mounted(): void
+ beforeEach: (
+ ((markdown: string) => string) |
+ ((markdown: string, next: (markdown?: string) => void) => void)
+ )
+ afterEach: (
+ ((html: string) => string) |
+ ((html: string, next: (html?: string) => void) => void)
+ )
+ doneEach(): void
+ ready(): void
+}} Hooks
+*/
diff --git a/src/core/module.js b/src/core/module.js
new file mode 100644
index 0000000000..4206ebc246
--- /dev/null
+++ b/src/core/module.js
@@ -0,0 +1 @@
+export * from './Docsify.js';
diff --git a/src/core/module.min.js b/src/core/module.min.js
new file mode 100644
index 0000000000..c08b05d104
--- /dev/null
+++ b/src/core/module.min.js
@@ -0,0 +1,2 @@
+// This file exists for type declaration output.
+export * from './Docsify.js';
diff --git a/src/core/modules.ts b/src/core/modules.ts
new file mode 100644
index 0000000000..55ba6a0820
--- /dev/null
+++ b/src/core/modules.ts
@@ -0,0 +1,4 @@
+declare module '*.css' {
+ const cssText: string;
+ export default cssText;
+}
diff --git a/src/core/render/compiler.js b/src/core/render/compiler.js
index 354b6a9200..e81aaa81f8 100644
--- a/src/core/render/compiler.js
+++ b/src/core/render/compiler.js
@@ -1,397 +1,295 @@
-import marked from 'marked'
-import Prism from 'prismjs'
-import {helper as helperTpl, tree as treeTpl} from './tpl'
-import {genTree} from './gen-tree'
-import {slugify} from './slugify'
-import {emojify} from './emojify'
-import {isAbsolutePath, getPath, getParentPath} from '../router/util'
-import {isFn, merge, cached, isPrimitive} from '../util/core'
-
-// See https://github.com/PrismJS/prism/pull/1367
-import 'prismjs/components/prism-markup-templating'
-
-const cachedLinks = {}
-
-export function getAndRemoveConfig(str = '') {
- const config = {}
-
- if (str) {
- str = str
- .replace(/^'/, '')
- .replace(/'$/, '')
- .replace(/(?:^|\s):([\w-]+)=?([\w-]+)?/g, (m, key, value) => {
- config[key] = (value && value.replace(/"/g, '')) || true
- return ''
- })
- .trim()
- }
-
- return {str, config}
-}
-
-const compileMedia = {
- markdown(url) {
- return {
- url
- }
- },
- mermaid(url) {
- return {
- url
- }
- },
- iframe(url, title) {
- return {
- html: ``
- }
- },
- video(url, title) {
- return {
- html: `Not Support `
- }
- },
- audio(url, title) {
- return {
- html: `Not Support `
- }
- },
- code(url, title) {
- let lang = url.match(/\.(\w+)$/)
-
- lang = title || (lang && lang[1])
- if (lang === 'md') {
- lang = 'markdown'
- }
-
- return {
- url,
- lang
- }
- }
-}
+import { marked } from 'marked';
+import { isAbsolutePath, getPath, getParentPath } from '../router/util.js';
+import { isFn, cached, isPrimitive } from '../util/core.js';
+import { tree as treeTpl } from './tpl.js';
+import { genTree } from './gen-tree.js';
+import { slugify } from './slugify.js';
+import { emojify } from './emojify.js';
+import { getAndRemoveConfig } from './utils.js';
+import { imageCompiler } from './compiler/image.js';
+import { headingCompiler } from './compiler/heading.js';
+import { highlightCodeCompiler } from './compiler/code.js';
+import { paragraphCompiler } from './compiler/paragraph.js';
+import { blockquoteCompiler } from './compiler/blockquote.js';
+import { taskListCompiler } from './compiler/taskList.js';
+import { taskListItemCompiler } from './compiler/taskListItem.js';
+import { linkCompiler } from './compiler/link.js';
+import { compileMedia } from './compiler/media.js';
+import { tableCellCompiler } from './compiler/tableCell.js';
+
+const cachedLinks = {};
export class Compiler {
constructor(config, router) {
- this.config = config
- this.router = router
- this.cacheTree = {}
- this.toc = []
- this.cacheTOC = {}
- this.linkTarget = config.externalLinkTarget || '_blank'
- this.contentBase = router.getBasePath()
-
- const renderer = this._initRenderer()
- let compile
- const mdConf = config.markdown || {}
+ this.config = config;
+ this.router = router;
+ this.cacheTree = {};
+ this.toc = [];
+ this.blockquoteDepth = 0;
+ this.cacheTOC = {};
+ this.linkTarget = config.externalLinkTarget || '_blank';
+ this.linkRel =
+ this.linkTarget === '_blank' ? config.externalLinkRel || 'noopener' : '';
+ this.contentBase = router.getBasePath();
+
+ this.renderer = this._initRenderer();
+ let compile;
+ const mdConf = config.markdown || {};
if (isFn(mdConf)) {
- compile = mdConf(marked, renderer)
+ compile = mdConf(marked, this.renderer);
} else {
marked.setOptions(
- merge(mdConf, {
- renderer: merge(renderer, mdConf.renderer)
- })
- )
- compile = marked
+ Object.assign(mdConf, {
+ renderer: Object.assign(this.renderer, mdConf.renderer),
+ }),
+ );
+ compile = marked;
}
- this._marked = compile
+ this._marked = compile;
this.compile = text => {
- let isCached = true
+ let isCached = true;
+
+ // FIXME: this is not cached.
const result = cached(_ => {
- isCached = false
- let html = ''
+ isCached = false;
+ let html = '';
if (!text) {
- return text
+ return text;
}
if (isPrimitive(text)) {
- html = compile(text)
+ html = compile(text);
} else {
- html = compile.parser(text)
+ html = compile.parser(text);
}
- html = config.noEmoji ? html : emojify(html)
- slugify.clear()
+ html = config.noEmoji ? html : emojify(html, config.nativeEmoji);
+ slugify.clear();
- return html
- })(text)
+ return html;
+ })(text);
- const curFileName = this.router.parse().file
+ const curFileName = this.router.parse().file;
if (isCached) {
- this.toc = this.cacheTOC[curFileName]
+ this.toc = this.cacheTOC[curFileName];
} else {
- this.cacheTOC[curFileName] = [...this.toc]
+ this.cacheTOC[curFileName] = [...this.toc];
}
- return result
- }
+ return result;
+ };
}
+ /**
+ * Pulls content from file and renders inline on the page as a embedded item.
+ *
+ * This allows you to embed different file types on the returned
+ * page.
+ * The basic format is:
+ * ```
+ * [filename](_media/example.md ':include')
+ * ```
+ *
+ * @param {string} href The href to the file to embed in the page.
+ * @param {string} title Title of the link used to make the embed.
+ *
+ * @return {any} Return value description.
+ */
compileEmbed(href, title) {
- const {str, config} = getAndRemoveConfig(title)
- let embed
- title = str
+ const { str, config } = getAndRemoveConfig(title);
+ let embed;
+ title = str;
if (config.include) {
if (!isAbsolutePath(href)) {
href = getPath(
- process.env.SSR ? '' : this.contentBase,
+ this.contentBase,
getParentPath(this.router.getCurrentPath()),
- href
- )
+ href,
+ );
}
- let media
- if (config.type && (media = compileMedia[config.type])) {
- embed = media.call(this, href, title)
- embed.type = config.type
+ let media;
+ const mediaType = Array.isArray(config.type)
+ ? config.type[0]
+ : config.type;
+
+ if (mediaType && (media = compileMedia[mediaType])) {
+ embed = media.call(this, href, title);
+ embed.type = mediaType;
} else {
- let type = 'code'
+ let type = 'code';
if (/\.(md|markdown)/.test(href)) {
- type = 'markdown'
+ type = 'markdown';
} else if (/\.mmd/.test(href)) {
- type = 'mermaid'
+ type = 'mermaid';
} else if (/\.html?/.test(href)) {
- type = 'iframe'
+ type = 'iframe';
} else if (/\.(mp4|ogg)/.test(href)) {
- type = 'video'
+ type = 'video';
} else if (/\.mp3/.test(href)) {
- type = 'audio'
+ type = 'audio';
}
- embed = compileMedia[type].call(this, href, title)
- embed.type = type
+
+ embed = compileMedia[type](href, title);
+ embed.type = type;
}
- embed.fragment = config.fragment
- return embed
+ embed.fragment = config.fragment;
+ embed.omitFragmentLine = config.omitFragmentLine;
+
+ return embed;
}
}
_matchNotCompileLink(link) {
- const links = this.config.noCompileLinks || []
+ const links = this.config.noCompileLinks || [];
- for (var i = 0; i < links.length; i++) {
- const n = links[i]
- const re = cachedLinks[n] || (cachedLinks[n] = new RegExp(`^${n}$`))
+ for (const n of links) {
+ const re = cachedLinks[n] || (cachedLinks[n] = new RegExp(`^${n}$`));
if (re.test(link)) {
- return link
+ return link;
}
}
}
_initRenderer() {
- const renderer = new marked.Renderer()
- const {linkTarget, router, contentBase} = this
- const _self = this
- const origin = {}
-
- /**
- * Render anchor tag
- * @link https://github.com/markedjs/marked#overriding-renderer-methods
- */
- origin.heading = renderer.heading = function (text, level) {
- let {str, config} = getAndRemoveConfig(text)
- const nextToc = {level, title: str}
-
- if (/{docsify-ignore}/g.test(str)) {
- str = str.replace('{docsify-ignore}', '')
- nextToc.title = str
- nextToc.ignoreSubHeading = true
- }
-
- if (/{docsify-ignore-all}/g.test(str)) {
- str = str.replace('{docsify-ignore-all}', '')
- nextToc.title = str
- nextToc.ignoreAllSubs = true
- }
-
- const slug = slugify(config.id || str)
- const url = router.toURL(router.getCurrentPath(), {id: slug})
- nextToc.slug = url
- _self.toc.push(nextToc)
-
- return `${str} `
- }
- // Highlight code
- origin.code = renderer.code = function (code, lang = '') {
- code = code.replace(/@DOCSIFY_QM@/g, '`')
- const hl = Prism.highlight(
- code,
- Prism.languages[lang] || Prism.languages.markup
- )
-
- return `${hl} `
- }
- origin.link = renderer.link = function (href, title = '', text) {
- let attrs = ''
-
- const {str, config} = getAndRemoveConfig(title)
- title = str
-
- if (
- !isAbsolutePath(href) &&
- !_self._matchNotCompileLink(href) &&
- !config.ignore
- ) {
- if (href === _self.config.homepage) {
- href = 'README'
- }
- href = router.toURL(href, null, router.getCurrentPath())
- } else {
- attrs += href.indexOf('mailto:') === 0 ? '' : ` target="${linkTarget}"`
- }
-
- if (config.target) {
- attrs += ' target=' + config.target
- }
-
- if (config.disabled) {
- attrs += ' disabled'
- href = 'javascript:void(0)'
- }
+ const renderer = new marked.Renderer();
+ const { linkTarget, linkRel, router, contentBase } = this;
+ // Supports mermaid
+ const origin = {};
+
+ // Renderer customizers
+ origin.heading = headingCompiler({
+ renderer,
+ router,
+ compiler: this,
+ });
+ origin.blockquoteCompiler = blockquoteCompiler({
+ renderer,
+ compiler: this,
+ });
+ origin.code = highlightCodeCompiler({ renderer });
+ origin.link = linkCompiler({
+ renderer,
+ router,
+ linkTarget,
+ linkRel,
+ compiler: this,
+ });
+ origin.paragraph = paragraphCompiler({ renderer });
+ origin.image = imageCompiler({ renderer, contentBase, router });
+ origin.list = taskListCompiler({ renderer });
+ origin.listitem = taskListItemCompiler({ renderer });
+ origin.tablecell = tableCellCompiler({ renderer });
+
+ // @ts-expect-error
+ renderer.origin = origin;
+
+ return renderer;
+ }
- if (title) {
- attrs += ` title="${title}"`
- }
+ /**
+ * Compile sidebar, it uses _sidebar.md (or specific file) or the content's headings toc to render sidebar.
+ * @param {String} text Text content from the sidebar file, maybe empty
+ * @param {Number} level Type of heading (h tag)
+ * @returns {String} Sidebar element
+ */
+ sidebar(text, level) {
+ const { toc } = this;
+ const currentPath = this.router.getCurrentPath();
+ let html = '';
- return `${text} `
- }
- origin.paragraph = renderer.paragraph = function (text) {
- let result
- if (/^!>/.test(text)) {
- result = helperTpl('tip', text)
- } else if (/^\?>/.test(text)) {
- result = helperTpl('warn', text)
- } else {
- result = `${text}
`
- }
- return result
+ // compile sidebar from _sidebar.md
+ if (text) {
+ return this.compile(text);
}
- origin.image = renderer.image = function (href, title, text) {
- let url = href
- let attrs = ''
-
- const {str, config} = getAndRemoveConfig(title)
- title = str
-
- if (config['no-zoom']) {
- attrs += ' data-no-zoom'
- }
-
- if (title) {
- attrs += ` title="${title}"`
- }
+ // compile sidebar from content's headings toc
+ for (let i = 0; i < toc.length; i++) {
+ if (toc[i].ignoreSubHeading) {
+ const deletedHeaderLevel = toc[i].depth;
+ toc.splice(i, 1);
- const size = config.size
- if (size) {
- const sizes = size.split('x')
- if (sizes[1]) {
- attrs += 'width=' + sizes[0] + ' height=' + sizes[1]
- } else {
- attrs += 'width=' + sizes[0]
+ // Remove all following headings with greater depth
+ while (i < toc.length && toc[i].depth > deletedHeaderLevel) {
+ toc.splice(i, 1);
}
- }
- if (!isAbsolutePath(href)) {
- url = getPath(contentBase, getParentPath(router.getCurrentPath()), href)
+ i--;
}
-
- return ` `
- }
- origin.list = renderer.list = function (body, ordered, start) {
- const isTaskList = //.test(body.split('class="task-list"')[0])
- const isStartReq = start && start > 1
- const tag = ordered ? 'ol' : 'ul'
- const tagAttrs = [
- (isTaskList ? 'class="task-list"' : ''),
- (isStartReq ? `start="${start}"` : '')
- ].join(' ').trim()
-
- return `<${tag} ${tagAttrs}>${body}${tag}>`
}
- origin.listitem = renderer.listitem = function (text) {
- const isTaskItem = /^(]*>)/.test(text)
- const html = isTaskItem ? `${text} ` : `${text} `
-
- return html
- }
-
- renderer.origin = origin
- return renderer
+ const tree = this.cacheTree[currentPath] || genTree(toc, level);
+ html = treeTpl(tree);
+ this.cacheTree[currentPath] = tree;
+ return html;
}
/**
- * Compile sidebar
+ * When current content redirect to a new path file, clean pre content headings toc
*/
- sidebar(text, level) {
- const {toc} = this
- const currentPath = this.router.getCurrentPath()
- let html = ''
-
- if (text) {
- html = this.compile(text)
- } else {
- for (let i = 0; i < toc.length; i++) {
- if (toc[i].ignoreSubHeading) {
- const deletedHeaderLevel = toc[i].level
- toc.splice(i, 1)
- // Remove headers who are under current header
- for (let j = i; deletedHeaderLevel < toc[j].level && j < toc.length; j++) {
- toc.splice(j, 1) && j-- && i++
- }
- i--
- }
- }
- const tree = this.cacheTree[currentPath] || genTree(toc, level)
- html = treeTpl(tree, '')
- this.cacheTree[currentPath] = tree
- }
-
- return html
+ resetToc() {
+ this.toc = [];
}
/**
* Compile sub sidebar
+ * @param {Number} level Type of heading (h tag)
+ * @returns {String} Sub-sidebar element
*/
subSidebar(level) {
- if (!level) {
- this.toc = []
- return
- }
- const currentPath = this.router.getCurrentPath()
- const {cacheTree, toc} = this
+ const currentPath = this.router.getCurrentPath();
+ const { cacheTree, toc } = this;
- toc[0] && toc[0].ignoreAllSubs && toc.splice(0)
- toc[0] && toc[0].level === 1 && toc.shift()
+ toc[0] && toc[0].ignoreAllSubs && toc.splice(0);
+ // remove the first heading from the toc if it is a top-level heading
+ toc[0] && toc[0].depth === 1 && toc.shift();
for (let i = 0; i < toc.length; i++) {
- toc[i].ignoreSubHeading && toc.splice(i, 1) && i--
+ toc[i].ignoreSubHeading && toc.splice(i, 1) && i--;
}
- const tree = cacheTree[currentPath] || genTree(toc, level)
- cacheTree[currentPath] = tree
- this.toc = []
- return treeTpl(tree)
+ const tree = cacheTree[currentPath] || genTree(toc, level);
+
+ cacheTree[currentPath] = tree;
+ this.toc = [];
+ return treeTpl(tree);
}
- article(text) {
- return this.compile(text)
+ /**
+ * Compile the text to generate HTML heading element based on the level
+ * @param {*} text Text content, for now it is only from the _sidebar.md file
+ * @param {*} level Type of heading (h tag), for now it is always 1
+ * @returns
+ */
+ header(text, level) {
+ const tokenHeading = {
+ type: 'heading',
+ raw: text,
+ depth: level,
+ text: text,
+ tokens: [{ type: 'text', raw: text, text: text }],
+ };
+ // @ts-expect-error
+ return this.renderer.heading(tokenHeading);
}
/**
* Compile cover page
+ * @param {Text} text Text content
+ * @returns {String} Cover page
*/
cover(text) {
- const cacheToc = this.toc.slice()
- const html = this.compile(text)
+ const cacheToc = this.toc.slice();
+ const html = this.compile(text);
- this.toc = cacheToc.slice()
+ this.toc = cacheToc.slice();
- return html
+ return html;
}
}
diff --git a/src/core/render/compiler/blockquote.js b/src/core/render/compiler/blockquote.js
new file mode 100644
index 0000000000..0b73c69916
--- /dev/null
+++ b/src/core/render/compiler/blockquote.js
@@ -0,0 +1,59 @@
+export const blockquoteCompiler = ({ renderer, compiler }) =>
+ (renderer.blockquote = function ({ tokens }) {
+ let openTag = '';
+ let closeTag = ' ';
+
+ // Find the first paragraph token in the blockquote
+ const firstParagraphIndex = tokens.findIndex(t => t.type === 'paragraph');
+ const firstParagraph = tokens[firstParagraphIndex];
+
+ if (firstParagraph) {
+ // Check if the paragraph starts with a callout like [!TIP] or [!NOTE]
+ const calloutData = firstParagraph.raw.match(/^(\[!(\w+)\])/);
+
+ if (calloutData) {
+ const calloutMark = calloutData[1]; // "[!TIP]"
+ const calloutType = calloutData[2].toLowerCase(); // "tip"
+
+ // Avoid mutating tokens that may be reused from the Prerender cache.
+ tokens = tokens.slice();
+ const paragraph = { ...firstParagraph };
+ if (firstParagraph.tokens) {
+ paragraph.tokens = firstParagraph.tokens.map(t => ({ ...t }));
+ }
+ tokens[firstParagraphIndex] = paragraph;
+
+ // Remove the callout mark from the paragraph raw text
+ paragraph.raw = paragraph.raw.replace(calloutMark, '').trimStart();
+ if (paragraph.tokens && paragraph.tokens.length > 0) {
+ paragraph.tokens.forEach(t => {
+ if (t.raw) {
+ t.raw = t.raw.replace(calloutMark, '');
+ }
+ if (t.text) {
+ t.text = t.text.replace(calloutMark, '');
+ }
+ });
+ }
+
+ // If the first paragraph is now empty after removing [!TIP], remove it
+ if (!paragraph.raw.trim()) {
+ tokens.splice(firstParagraphIndex, 1);
+ }
+
+ openTag = ``;
+ closeTag = `
`;
+ }
+ }
+
+ compiler.blockquoteDepth++;
+ let body = '';
+
+ try {
+ body = this.parser.parse(tokens);
+ } finally {
+ compiler.blockquoteDepth--;
+ }
+
+ return `${openTag}${body}${closeTag}`;
+ });
diff --git a/src/core/render/compiler/code.js b/src/core/render/compiler/code.js
new file mode 100644
index 0000000000..f9af670a0a
--- /dev/null
+++ b/src/core/render/compiler/code.js
@@ -0,0 +1,21 @@
+import * as Prism from 'prismjs';
+// See https://github.com/PrismJS/prism/pull/1367
+import 'prismjs/components/prism-markup-templating.js';
+import checkLangDependenciesAllLoaded, {
+ sanitizeCodeLang,
+} from '../../util/prism.js';
+
+export const highlightCodeCompiler = ({ renderer }) =>
+ (renderer.code = function ({ text, lang = 'markup' }) {
+ const { escapedLang, prismLang } = sanitizeCodeLang(lang);
+
+ checkLangDependenciesAllLoaded(prismLang);
+ const langOrMarkup = Prism.languages[prismLang] || Prism.languages.markup;
+ const code = Prism.highlight(
+ text.replace(/@DOCSIFY_QM@/g, '`'),
+ langOrMarkup,
+ prismLang,
+ );
+
+ return /* html */ `${code} `;
+ });
diff --git a/src/core/render/compiler/heading.js b/src/core/render/compiler/heading.js
new file mode 100644
index 0000000000..45200fd4fa
--- /dev/null
+++ b/src/core/render/compiler/heading.js
@@ -0,0 +1,35 @@
+import {
+ getAndRemoveConfig,
+ removeAtag,
+ getAndRemoveDocsifyIgnoreConfig,
+} from '../utils.js';
+import { slugify } from '../slugify.js';
+import { stripUrlExceptId } from '../../router/util.js';
+
+export const headingCompiler = ({ renderer, router, compiler }) =>
+ (renderer.heading = function ({ tokens, depth, text }) {
+ const parsedText = this.parser.parseInline(tokens);
+ let { str, config } = getAndRemoveConfig(parsedText);
+ const nextToc = { depth, title: str };
+
+ const { content, ignoreAllSubs, ignoreSubHeading } =
+ getAndRemoveDocsifyIgnoreConfig(str);
+ str = content.trim();
+
+ nextToc.title = removeAtag(str);
+ nextToc.ignoreAllSubs = ignoreAllSubs;
+ nextToc.ignoreSubHeading = ignoreSubHeading;
+ const slug = slugify(config.id || text);
+ const url = router.toURL(router.getCurrentPath(), { id: slug });
+ nextToc.slug = stripUrlExceptId(url);
+
+ if (compiler.blockquoteDepth === 0) {
+ compiler.toc.push(nextToc);
+ }
+
+ // Note: tabindex="-1" allows programmatically focusing on heading
+ // elements after navigation. This is preferred over focusing on the link
+ // within the heading because it matches the focus behavior of screen
+ // readers when navigating page content.
+ return `${str} `;
+ });
diff --git a/src/core/render/compiler/image.js b/src/core/render/compiler/image.js
new file mode 100644
index 0000000000..68bb478b47
--- /dev/null
+++ b/src/core/render/compiler/image.js
@@ -0,0 +1,48 @@
+import { escapeHtml, getAndRemoveConfig } from '../utils.js';
+import { isAbsolutePath, getPath, getParentPath } from '../../router/util.js';
+
+export const imageCompiler = ({ renderer, contentBase, router }) =>
+ (renderer.image = ({ href, title, text }) => {
+ let url = href;
+ const attrs = [];
+
+ const { str, config } = getAndRemoveConfig(title);
+ title = str;
+
+ if (config['no-zoom']) {
+ attrs.push('data-no-zoom');
+ }
+
+ if (title) {
+ attrs.push(`title="${escapeHtml(title)}"`);
+ }
+
+ if (config.size) {
+ const [width, height] = /** @type {string} */ (config.size).split('x');
+ if (height) {
+ attrs.push(`width="${width}" height="${height}"`);
+ } else {
+ attrs.push(`width="${width}"`);
+ }
+ }
+
+ if (config.class) {
+ let classes = config.class;
+ if (Array.isArray(config.class)) {
+ classes = config.class.join(' ');
+ }
+ attrs.push(`class="${classes}"`);
+ }
+
+ if (config.id) {
+ attrs.push(`id="${config.id}"`);
+ }
+
+ if (!isAbsolutePath(href)) {
+ url = getPath(contentBase, getParentPath(router.getCurrentPath()), href);
+ }
+
+ return /* html */ ` `;
+ });
diff --git a/src/core/render/compiler/link.js b/src/core/render/compiler/link.js
new file mode 100644
index 0000000000..6c017adcf3
--- /dev/null
+++ b/src/core/render/compiler/link.js
@@ -0,0 +1,72 @@
+import { escapeHtml, getAndRemoveConfig } from '../utils.js';
+import { isAbsolutePath } from '../../router/util.js';
+
+export const linkCompiler = ({
+ renderer,
+ router,
+ linkTarget,
+ linkRel,
+ compiler,
+}) =>
+ (renderer.link = function ({ href, title = '', tokens }) {
+ const attrs = [];
+ const text = this.parser.parseInline(tokens) || '';
+ const { str, config } = getAndRemoveConfig(title);
+ const isAbsolute = isAbsolutePath(href);
+ const isNotCompilable = compiler._matchNotCompileLink(href);
+ const isMailto = href.startsWith('mailto:');
+
+ linkTarget = config.target || linkTarget;
+ linkRel =
+ linkTarget === '_blank'
+ ? compiler.config.externalLinkRel || 'noopener'
+ : '';
+ title = str;
+
+ if (!isAbsolute && !isNotCompilable && !config.ignore) {
+ if (href === compiler.config.homepage) {
+ href = 'README';
+ }
+ href = router.toURL(href, null, router.getCurrentPath());
+
+ if (config.target && !isMailto) {
+ attrs.push(`target="${linkTarget}"`);
+ }
+ } else {
+ if (!isAbsolute && href.startsWith('./')) {
+ href = router
+ .toURL(href, null, router.getCurrentPath())
+ .replace(/^#\//, '/');
+ }
+
+ if (!isMailto) {
+ attrs.push(`target="${linkTarget}"`);
+ if (linkRel !== '') {
+ attrs.push(`rel="${linkRel}"`);
+ }
+ }
+ }
+
+ if (config.disabled) {
+ attrs.push('disabled');
+ href = 'javascript:void(0)';
+ }
+
+ if (config.class) {
+ let classes = config.class;
+ if (Array.isArray(config.class)) {
+ classes = config.class.join(' ');
+ }
+ attrs.push(`class="${classes}"`);
+ }
+
+ if (config.id) {
+ attrs.push(`id="${config.id}"`);
+ }
+
+ if (title) {
+ attrs.push(`title="${escapeHtml(title)}"`);
+ }
+
+ return /* html */ `${text} `;
+ });
diff --git a/src/core/render/compiler/media.js b/src/core/render/compiler/media.js
new file mode 100644
index 0000000000..a35e40e015
--- /dev/null
+++ b/src/core/render/compiler/media.js
@@ -0,0 +1,44 @@
+import { escapeHtml } from '../utils';
+
+export const compileMedia = {
+ markdown(url) {
+ return {
+ url,
+ };
+ },
+ mermaid(url) {
+ return {
+ url,
+ };
+ },
+ iframe(url, title) {
+ return {
+ html: ``,
+ };
+ },
+ video(url, title) {
+ return {
+ html: `Not Supported `,
+ };
+ },
+ audio(url, title) {
+ return {
+ html: `Not Supported `,
+ };
+ },
+ code(url, title) {
+ let lang = url.match(/\.(\w+)$/);
+
+ lang = title || (lang && lang[1]);
+ if (lang === 'md') {
+ lang = 'markdown';
+ }
+
+ return {
+ url,
+ lang,
+ };
+ },
+};
diff --git a/src/core/render/compiler/paragraph.js b/src/core/render/compiler/paragraph.js
new file mode 100644
index 0000000000..c81cd66ef8
--- /dev/null
+++ b/src/core/render/compiler/paragraph.js
@@ -0,0 +1,49 @@
+import { helper as helperTpl } from '../tpl.js';
+
+function renderParagraphText(text) {
+ if (text.startsWith('!>')) {
+ return helperTpl('callout important', text);
+ }
+ if (text.startsWith('?>')) {
+ return helperTpl('callout tip', text);
+ }
+ return /* html */ `${text}
`;
+}
+
+export const paragraphCompiler = ({ renderer }) =>
+ (renderer.paragraph = function ({ tokens, embedTokenMap }) {
+ let result;
+
+ if (embedTokenMap && tokens?.length) {
+ // Keep original inline order: plain text/link tokens stay inline, include links are replaced.
+ const parts = [];
+ let inlineBuffer = [];
+
+ const flushInlineBuffer = () => {
+ if (!inlineBuffer.length) {
+ return;
+ }
+ const text = this.parser.parseInline(inlineBuffer);
+ parts.push(renderParagraphText(text));
+ inlineBuffer = [];
+ };
+
+ tokens.forEach((inlineToken, inlineIndex) => {
+ const embedToken = embedTokenMap[inlineIndex];
+ if (embedToken?.length) {
+ flushInlineBuffer();
+ parts.push(this.parser.parse(embedToken));
+ } else {
+ inlineBuffer.push(inlineToken);
+ }
+ });
+
+ flushInlineBuffer();
+ result = parts.join('');
+ } else {
+ const text = this.parser.parseInline(tokens);
+ result = renderParagraphText(text);
+ }
+
+ return result;
+ });
diff --git a/src/core/render/compiler/tableCell.js b/src/core/render/compiler/tableCell.js
new file mode 100644
index 0000000000..cc8ee44890
--- /dev/null
+++ b/src/core/render/compiler/tableCell.js
@@ -0,0 +1,26 @@
+export const tableCellCompiler = ({ renderer }) =>
+ (renderer.tablecell = function (token) {
+ let content;
+
+ if (token.embedTokenMap && token.tokens?.length) {
+ // Preserve mixed content order: render inline tokens, replacing include links by position.
+ content = '';
+ token.tokens.forEach((inlineToken, inlineIndex) => {
+ const embedToken = token.embedTokenMap[inlineIndex];
+ if (embedToken?.length) {
+ content += this.parser.parse(embedToken);
+ } else {
+ content += this.parser.parseInline([inlineToken]);
+ }
+ });
+ } else if (token.embedTokens && token.embedTokens.length > 0) {
+ content = this.parser.parse(token.embedTokens);
+ } else {
+ content = this.parser.parseInline(token.tokens);
+ }
+
+ const type = token.header ? 'th' : 'td';
+ const tag = token.align ? `<${type} align="${token.align}">` : `<${type}>`;
+
+ return tag + content + `${type}>\n`;
+ });
diff --git a/src/core/render/compiler/taskList.js b/src/core/render/compiler/taskList.js
new file mode 100644
index 0000000000..f4bcdaf8d6
--- /dev/null
+++ b/src/core/render/compiler/taskList.js
@@ -0,0 +1,25 @@
+export const taskListCompiler = ({ renderer }) =>
+ (renderer.list = function (token) {
+ const ordered = token.ordered;
+ const start = token.start;
+
+ let body = '';
+ for (let j = 0; j < token.items.length; j++) {
+ const item = token.items[j];
+ body += this.listitem?.(item);
+ }
+
+ const isTaskList = //.test(
+ body.split('class="task-list"')[0],
+ );
+ const isStartReq = start && start > 1;
+ const tag = ordered ? 'ol' : 'ul';
+ const tagAttrs = [
+ isTaskList ? 'class="task-list"' : '',
+ isStartReq ? `start="${start}"` : '',
+ ]
+ .join(' ')
+ .trim();
+
+ return `<${tag} ${tagAttrs}>${body}${tag}>`;
+ });
diff --git a/src/core/render/compiler/taskListItem.js b/src/core/render/compiler/taskListItem.js
new file mode 100644
index 0000000000..4c0019b251
--- /dev/null
+++ b/src/core/render/compiler/taskListItem.js
@@ -0,0 +1,35 @@
+export const taskListItemCompiler = ({ renderer }) =>
+ (renderer.listitem = function (item) {
+ let text = '';
+ if (item.task) {
+ const checkbox = this.checkbox?.({ checked: !!item.checked });
+ if (item.loose) {
+ if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
+ item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;
+ if (
+ item.tokens[0].tokens &&
+ item.tokens[0].tokens.length > 0 &&
+ item.tokens[0].tokens[0].type === 'text'
+ ) {
+ item.tokens[0].tokens[0].text =
+ checkbox + ' ' + item.tokens[0].tokens[0].text;
+ }
+ } else {
+ item.tokens.unshift({
+ type: 'text',
+ raw: checkbox + ' ',
+ text: checkbox + ' ',
+ });
+ }
+ }
+ }
+
+ text += this.parser?.parse(item.tokens, !!item.loose);
+
+ const isTaskItem = /^(]*>)/.test(text);
+ const html = isTaskItem
+ ? /* html */ `${text} `
+ : /* html */ `${text} `;
+
+ return html;
+ });
diff --git a/src/core/render/embed.js b/src/core/render/embed.js
index 8218374886..d6044846d7 100644
--- a/src/core/render/embed.js
+++ b/src/core/render/embed.js
@@ -1,115 +1,280 @@
-import {get} from '../fetch/ajax'
-import {merge} from '../util/core'
+import { stripIndent } from 'common-tags';
+import { get } from '../util/ajax.js';
-const cached = {}
+const cached = {};
-function walkFetchEmbed({embedTokens, compile, fetch}, cb) {
- let token
- let step = 0
- let count = 1
+/**
+ * Extracts the content between matching fragment markers in the text.
+ *
+ * Supported markers:
+ * - ### [fragment] ... ### [fragment]
+ * - /// [fragment] ... /// [fragment]
+ *
+ * @param {string} text - The input text that may contain embedded fragments.
+ * @param {string} fragment - The fragment identifier to search for.
+ * @param {boolean} fullLine - Boolean flag to enable full-line matching of fragment identifiers.
+ * @returns {string} - The extracted and dedented content, or an empty string if not found.
+ */
+function extractFragmentContent(text, fragment, fullLine) {
+ if (!fragment) {
+ return text;
+ }
+ let fragmentRegex = `(?:###|\\/\\/\\/)\\s*\\[${fragment}\\]`;
+ const contentRegex = `[\\s\\S]*?`;
+ if (fullLine) {
+ // Match full line containing fragment identifier (e.g. /// [demo])
+ fragmentRegex = `.*${fragmentRegex}.*\n`;
+ }
+ const pattern = new RegExp(
+ `(?:${fragmentRegex})(${contentRegex})(?:${fragmentRegex})`,
+ ); // content is the capture group
+ const match = text.match(pattern);
+ return stripIndent((match || [])[1] || '').trim();
+}
+function walkFetchEmbed({ embedTokens, compile, fetch, frontMatter }, cb) {
if (!embedTokens.length) {
- return cb({})
+ return cb({});
}
- while ((token = embedTokens[step++])) {
- const next = (function (token) {
- return text => {
- let embedToken
- if (text) {
- if (token.embed.type === 'markdown') {
- embedToken = compile.lexer(text)
- } else if (token.embed.type === 'code') {
- if (token.embed.fragment) {
- const fragment = token.embed.fragment
- const pattern = new RegExp(`(?:###|\\/\\/\\/)\\s*\\[${fragment}\\]([\\s\\S]*)(?:###|\\/\\/\\/)\\s*\\[${fragment}\\]`)
- text = ((text.match(pattern) || [])[1] || '').trim()
+ const processStep = step => {
+ const currentToken = embedTokens[step];
+
+ const next = text => {
+ let embedToken;
+ if (text) {
+ if (currentToken.embed.type === 'markdown') {
+ let path = currentToken.embed.url.split('/');
+ path.pop();
+ path = path.join('/');
+ // Resolves relative links to absolute
+ text = text.replace(/\[([^[\]]+)\]\(([^)]+)\)/g, x => {
+ const linkBeginIndex = x.indexOf('(');
+ if (x.slice(linkBeginIndex, linkBeginIndex + 2) === '(.') {
+ return (
+ x.substring(0, linkBeginIndex) +
+ `(${window.location.protocol}//${window.location.host}${path}/` +
+ x.substring(linkBeginIndex + 1, x.length - 1) +
+ ')'
+ );
}
- embedToken = compile.lexer(
- '```' +
- token.embed.lang +
- '\n' +
- text.replace(/`/g, '@DOCSIFY_QM@') +
- '\n```\n'
- )
- } else if (token.embed.type === 'mermaid') {
- embedToken = [
- {type: 'html', text: `\n${text}\n
`}
- ]
- embedToken.links = {}
- } else {
- embedToken = [{type: 'html', text}]
- embedToken.links = {}
+ return x;
+ });
+
+ // This may contain YAML front matter and will need to be stripped.
+ const frontMatterInstalled = frontMatter?.installed;
+ if (frontMatterInstalled) {
+ text = frontMatter?.parseMarkdown(text);
}
- }
- cb({token, embedToken})
- if (++count >= step) {
- cb({})
+
+ if (currentToken.embed.fragment) {
+ text = extractFragmentContent(
+ text,
+ currentToken.embed.fragment,
+ currentToken.embed.omitFragmentLine,
+ );
+ }
+
+ embedToken = compile.lexer(text);
+ } else if (currentToken.embed.type === 'code') {
+ if (currentToken.embed.fragment) {
+ text = extractFragmentContent(
+ text,
+ currentToken.embed.fragment,
+ currentToken.embed.omitFragmentLine,
+ );
+ }
+
+ embedToken = compile.lexer(
+ '```' +
+ currentToken.embed.lang +
+ '\n' +
+ text.replace(/`/g, '@DOCSIFY_QM@') +
+ '\n```\n',
+ );
+ } else if (currentToken.embed.type === 'mermaid') {
+ embedToken = [
+ {
+ type: 'html',
+ text: /* html */ `\n${text}\n
`,
+ },
+ ];
+ /** @type {any} */ (embedToken).links = {};
+ } else {
+ embedToken = [{ type: 'html', text }];
+ /** @type {any} */ (embedToken).links = {};
}
}
- })(token)
- if (token.embed.url) {
- if (process.env.SSR) {
- fetch(token.embed.url).then(next)
+ cb({
+ token: currentToken,
+ embedToken,
+ rowIndex: currentToken.rowIndex,
+ cellIndex: currentToken.cellIndex,
+ tokenRef: currentToken.tokenRef,
+ });
+
+ if (step + 1 >= embedTokens.length) {
+ cb({});
} else {
- get(token.embed.url).then(next)
+ processStep(step + 1);
}
+ };
+
+ if (currentToken.embed.url) {
+ get(currentToken.embed.url).then(next, () => next());
} else {
- next(token.embed.html)
+ next(currentToken.embed.html);
}
- }
+ };
+
+ processStep(0);
}
-export function prerenderEmbed({compiler, raw = '', fetch}, done) {
- let hit = cached[raw]
+export function prerenderEmbed({ compiler, raw = '', fetch }, done) {
+ const hit = cached[raw];
if (hit) {
- const copy = hit.slice()
- copy.links = hit.links
- return done(copy)
+ const copy = hit.slice();
+ copy.links = hit.links;
+ return done(copy);
}
- const compile = compiler._marked
- let tokens = compile.lexer(raw)
- const embedTokens = []
- const linkRE = compile.InlineLexer.rules.link
- const links = tokens.links
+ const compile = compiler._marked;
+ const frontMatter = compiler.config.frontMatter;
+ let tokens = compile.lexer(raw);
+ const embedTokens = [];
+ const links = tokens.links;
tokens.forEach((token, index) => {
if (token.type === 'paragraph') {
- token.text = token.text.replace(
- new RegExp(linkRE.source, 'g'),
- (src, filename, href, title) => {
- const embed = compiler.compileEmbed(href, title)
+ (token.tokens || []).forEach(
+ (
+ /** @type {{ type: string; href: any; title: any; }} */ inlineToken,
+ inlineIndex,
+ ) => {
+ if (inlineToken.type !== 'link') {
+ return;
+ }
+ const embed = compiler.compileEmbed(
+ inlineToken.href,
+ inlineToken.title,
+ );
if (embed) {
embedTokens.push({
index,
- embed
- })
+ tokenRef: token,
+ inlineIndex,
+ embed,
+ });
}
+ },
+ );
+ } else if (token.type === 'table') {
+ token.rows.forEach((row, rowIndex) => {
+ row.forEach((cell, cellIndex) => {
+ (cell.tokens || []).forEach((inlineToken, inlineIndex) => {
+ if (inlineToken.type !== 'link') {
+ return;
+ }
- return src
- }
- )
+ const embed = compiler.compileEmbed(
+ inlineToken.href,
+ inlineToken.title,
+ );
+ if (embed) {
+ embedTokens.push({
+ index,
+ tokenRef: token,
+ rowIndex,
+ cellIndex,
+ inlineIndex,
+ embed,
+ });
+ }
+ });
+ });
+ });
}
- })
+ });
- let moveIndex = 0
- walkFetchEmbed({compile, embedTokens, fetch}, ({embedToken, token}) => {
- if (token) {
- const index = token.index + moveIndex
+ // keep track of which tokens have been embedded so far
+ // so that we know where to insert the embedded tokens as they
+ // are returned
+ const moves = [];
+ const tokenInsertState = new WeakMap();
+ walkFetchEmbed(
+ { compile, embedTokens, fetch, frontMatter },
+ ({ embedToken, token, rowIndex, cellIndex, tokenRef }) => {
+ if (token && embedToken) {
+ Object.assign(links, embedToken.links);
- merge(links, embedToken.links)
+ if (typeof rowIndex === 'number' && typeof cellIndex === 'number') {
+ const cell = tokenRef.rows[rowIndex][cellIndex];
+ if (typeof token.inlineIndex === 'number') {
+ cell.embedTokenMap ||= {};
+ const existing = cell.embedTokenMap[token.inlineIndex];
+ cell.embedTokenMap[token.inlineIndex] = existing
+ ? existing.concat(embedToken)
+ : embedToken;
+ }
- tokens = tokens
- .slice(0, index)
- .concat(embedToken, tokens.slice(index + 1))
- moveIndex += embedToken.length - 1
- } else {
- cached[raw] = tokens.concat()
- tokens.links = cached[raw].links = links
- done(tokens)
- }
- })
+ // Keep the flattened array for backward compatibility with older render paths.
+ if (cell.embedTokens && cell.embedTokens.length) {
+ cell.embedTokens = cell.embedTokens.concat(embedToken);
+ } else {
+ cell.embedTokens = embedToken;
+ }
+ } else if (tokenRef.type === 'paragraph') {
+ if (typeof token.inlineIndex === 'number') {
+ tokenRef.embedTokenMap ||= {};
+ const existing = tokenRef.embedTokenMap[token.inlineIndex];
+ tokenRef.embedTokenMap[token.inlineIndex] = existing
+ ? existing.concat(embedToken)
+ : embedToken;
+ }
+
+ // Keep a flattened form as a fallback for custom renderers.
+ if (tokenRef.embedTokens && tokenRef.embedTokens.length) {
+ tokenRef.embedTokens = tokenRef.embedTokens.concat(embedToken);
+ } else {
+ tokenRef.embedTokens = embedToken;
+ }
+ } else {
+ const state = tokenInsertState.get(tokenRef);
+
+ if (state) {
+ const insertAt = state.nextIndex;
+
+ tokens = tokens
+ .slice(0, insertAt)
+ .concat(embedToken, tokens.slice(insertAt));
+ moves.push({ start: insertAt, delta: embedToken.length });
+ state.nextIndex = insertAt + embedToken.length;
+ } else {
+ // iterate through the array of previously inserted tokens
+ // to determine where the current embedded tokens should be inserted
+ let index = token.index;
+ moves.forEach(pos => {
+ if (index > pos.start) {
+ index += pos.delta;
+ }
+ });
+
+ tokens = tokens
+ .slice(0, index)
+ .concat(embedToken, tokens.slice(index + 1));
+ moves.push({ start: index, delta: embedToken.length - 1 });
+ tokenInsertState.set(tokenRef, {
+ nextIndex: index + embedToken.length,
+ });
+ }
+ }
+ } else if (!token) {
+ cached[raw] = tokens.concat();
+ tokens.links = cached[raw].links = links;
+ done(tokens);
+ }
+ },
+ );
}
diff --git a/src/core/render/emoji-data.js b/src/core/render/emoji-data.js
new file mode 100644
index 0000000000..c4eb4426b3
--- /dev/null
+++ b/src/core/render/emoji-data.js
@@ -0,0 +1,1945 @@
+// =============================================================================
+// DO NOT EDIT: This file is auto-generated by an /build/emoji.js
+// =============================================================================
+
+export default {
+ "baseURL": "https://github.githubassets.com/images/icons/emoji/",
+ "data": {
+ "100": "unicode/1f4af.png?v8",
+ "1234": "unicode/1f522.png?v8",
+ "+1": "unicode/1f44d.png?v8",
+ "-1": "unicode/1f44e.png?v8",
+ "1st_place_medal": "unicode/1f947.png?v8",
+ "2nd_place_medal": "unicode/1f948.png?v8",
+ "3rd_place_medal": "unicode/1f949.png?v8",
+ "8ball": "unicode/1f3b1.png?v8",
+ "a": "unicode/1f170.png?v8",
+ "ab": "unicode/1f18e.png?v8",
+ "abacus": "unicode/1f9ee.png?v8",
+ "abc": "unicode/1f524.png?v8",
+ "abcd": "unicode/1f521.png?v8",
+ "accept": "unicode/1f251.png?v8",
+ "accessibility": "accessibility.png?v8",
+ "accordion": "unicode/1fa97.png?v8",
+ "adhesive_bandage": "unicode/1fa79.png?v8",
+ "adult": "unicode/1f9d1.png?v8",
+ "aerial_tramway": "unicode/1f6a1.png?v8",
+ "afghanistan": "unicode/1f1e6-1f1eb.png?v8",
+ "airplane": "unicode/2708.png?v8",
+ "aland_islands": "unicode/1f1e6-1f1fd.png?v8",
+ "alarm_clock": "unicode/23f0.png?v8",
+ "albania": "unicode/1f1e6-1f1f1.png?v8",
+ "alembic": "unicode/2697.png?v8",
+ "algeria": "unicode/1f1e9-1f1ff.png?v8",
+ "alien": "unicode/1f47d.png?v8",
+ "ambulance": "unicode/1f691.png?v8",
+ "american_samoa": "unicode/1f1e6-1f1f8.png?v8",
+ "amphora": "unicode/1f3fa.png?v8",
+ "anatomical_heart": "unicode/1fac0.png?v8",
+ "anchor": "unicode/2693.png?v8",
+ "andorra": "unicode/1f1e6-1f1e9.png?v8",
+ "angel": "unicode/1f47c.png?v8",
+ "anger": "unicode/1f4a2.png?v8",
+ "angola": "unicode/1f1e6-1f1f4.png?v8",
+ "angry": "unicode/1f620.png?v8",
+ "anguilla": "unicode/1f1e6-1f1ee.png?v8",
+ "anguished": "unicode/1f627.png?v8",
+ "ant": "unicode/1f41c.png?v8",
+ "antarctica": "unicode/1f1e6-1f1f6.png?v8",
+ "antigua_barbuda": "unicode/1f1e6-1f1ec.png?v8",
+ "apple": "unicode/1f34e.png?v8",
+ "aquarius": "unicode/2652.png?v8",
+ "argentina": "unicode/1f1e6-1f1f7.png?v8",
+ "aries": "unicode/2648.png?v8",
+ "armenia": "unicode/1f1e6-1f1f2.png?v8",
+ "arrow_backward": "unicode/25c0.png?v8",
+ "arrow_double_down": "unicode/23ec.png?v8",
+ "arrow_double_up": "unicode/23eb.png?v8",
+ "arrow_down": "unicode/2b07.png?v8",
+ "arrow_down_small": "unicode/1f53d.png?v8",
+ "arrow_forward": "unicode/25b6.png?v8",
+ "arrow_heading_down": "unicode/2935.png?v8",
+ "arrow_heading_up": "unicode/2934.png?v8",
+ "arrow_left": "unicode/2b05.png?v8",
+ "arrow_lower_left": "unicode/2199.png?v8",
+ "arrow_lower_right": "unicode/2198.png?v8",
+ "arrow_right": "unicode/27a1.png?v8",
+ "arrow_right_hook": "unicode/21aa.png?v8",
+ "arrow_up": "unicode/2b06.png?v8",
+ "arrow_up_down": "unicode/2195.png?v8",
+ "arrow_up_small": "unicode/1f53c.png?v8",
+ "arrow_upper_left": "unicode/2196.png?v8",
+ "arrow_upper_right": "unicode/2197.png?v8",
+ "arrows_clockwise": "unicode/1f503.png?v8",
+ "arrows_counterclockwise": "unicode/1f504.png?v8",
+ "art": "unicode/1f3a8.png?v8",
+ "articulated_lorry": "unicode/1f69b.png?v8",
+ "artificial_satellite": "unicode/1f6f0.png?v8",
+ "artist": "unicode/1f9d1-1f3a8.png?v8",
+ "aruba": "unicode/1f1e6-1f1fc.png?v8",
+ "ascension_island": "unicode/1f1e6-1f1e8.png?v8",
+ "asterisk": "unicode/002a-20e3.png?v8",
+ "astonished": "unicode/1f632.png?v8",
+ "astronaut": "unicode/1f9d1-1f680.png?v8",
+ "athletic_shoe": "unicode/1f45f.png?v8",
+ "atm": "unicode/1f3e7.png?v8",
+ "atom": "atom.png?v8",
+ "atom_symbol": "unicode/269b.png?v8",
+ "australia": "unicode/1f1e6-1f1fa.png?v8",
+ "austria": "unicode/1f1e6-1f1f9.png?v8",
+ "auto_rickshaw": "unicode/1f6fa.png?v8",
+ "avocado": "unicode/1f951.png?v8",
+ "axe": "unicode/1fa93.png?v8",
+ "azerbaijan": "unicode/1f1e6-1f1ff.png?v8",
+ "b": "unicode/1f171.png?v8",
+ "baby": "unicode/1f476.png?v8",
+ "baby_bottle": "unicode/1f37c.png?v8",
+ "baby_chick": "unicode/1f424.png?v8",
+ "baby_symbol": "unicode/1f6bc.png?v8",
+ "back": "unicode/1f519.png?v8",
+ "bacon": "unicode/1f953.png?v8",
+ "badger": "unicode/1f9a1.png?v8",
+ "badminton": "unicode/1f3f8.png?v8",
+ "bagel": "unicode/1f96f.png?v8",
+ "baggage_claim": "unicode/1f6c4.png?v8",
+ "baguette_bread": "unicode/1f956.png?v8",
+ "bahamas": "unicode/1f1e7-1f1f8.png?v8",
+ "bahrain": "unicode/1f1e7-1f1ed.png?v8",
+ "balance_scale": "unicode/2696.png?v8",
+ "bald_man": "unicode/1f468-1f9b2.png?v8",
+ "bald_woman": "unicode/1f469-1f9b2.png?v8",
+ "ballet_shoes": "unicode/1fa70.png?v8",
+ "balloon": "unicode/1f388.png?v8",
+ "ballot_box": "unicode/1f5f3.png?v8",
+ "ballot_box_with_check": "unicode/2611.png?v8",
+ "bamboo": "unicode/1f38d.png?v8",
+ "banana": "unicode/1f34c.png?v8",
+ "bangbang": "unicode/203c.png?v8",
+ "bangladesh": "unicode/1f1e7-1f1e9.png?v8",
+ "banjo": "unicode/1fa95.png?v8",
+ "bank": "unicode/1f3e6.png?v8",
+ "bar_chart": "unicode/1f4ca.png?v8",
+ "barbados": "unicode/1f1e7-1f1e7.png?v8",
+ "barber": "unicode/1f488.png?v8",
+ "baseball": "unicode/26be.png?v8",
+ "basecamp": "basecamp.png?v8",
+ "basecampy": "basecampy.png?v8",
+ "basket": "unicode/1f9fa.png?v8",
+ "basketball": "unicode/1f3c0.png?v8",
+ "basketball_man": "unicode/26f9-2642.png?v8",
+ "basketball_woman": "unicode/26f9-2640.png?v8",
+ "bat": "unicode/1f987.png?v8",
+ "bath": "unicode/1f6c0.png?v8",
+ "bathtub": "unicode/1f6c1.png?v8",
+ "battery": "unicode/1f50b.png?v8",
+ "beach_umbrella": "unicode/1f3d6.png?v8",
+ "beans": "unicode/1fad8.png?v8",
+ "bear": "unicode/1f43b.png?v8",
+ "bearded_person": "unicode/1f9d4.png?v8",
+ "beaver": "unicode/1f9ab.png?v8",
+ "bed": "unicode/1f6cf.png?v8",
+ "bee": "unicode/1f41d.png?v8",
+ "beer": "unicode/1f37a.png?v8",
+ "beers": "unicode/1f37b.png?v8",
+ "beetle": "unicode/1fab2.png?v8",
+ "beginner": "unicode/1f530.png?v8",
+ "belarus": "unicode/1f1e7-1f1fe.png?v8",
+ "belgium": "unicode/1f1e7-1f1ea.png?v8",
+ "belize": "unicode/1f1e7-1f1ff.png?v8",
+ "bell": "unicode/1f514.png?v8",
+ "bell_pepper": "unicode/1fad1.png?v8",
+ "bellhop_bell": "unicode/1f6ce.png?v8",
+ "benin": "unicode/1f1e7-1f1ef.png?v8",
+ "bento": "unicode/1f371.png?v8",
+ "bermuda": "unicode/1f1e7-1f1f2.png?v8",
+ "beverage_box": "unicode/1f9c3.png?v8",
+ "bhutan": "unicode/1f1e7-1f1f9.png?v8",
+ "bicyclist": "unicode/1f6b4.png?v8",
+ "bike": "unicode/1f6b2.png?v8",
+ "biking_man": "unicode/1f6b4-2642.png?v8",
+ "biking_woman": "unicode/1f6b4-2640.png?v8",
+ "bikini": "unicode/1f459.png?v8",
+ "billed_cap": "unicode/1f9e2.png?v8",
+ "biohazard": "unicode/2623.png?v8",
+ "bird": "unicode/1f426.png?v8",
+ "birthday": "unicode/1f382.png?v8",
+ "bison": "unicode/1f9ac.png?v8",
+ "biting_lip": "unicode/1fae6.png?v8",
+ "black_bird": "unicode/1f426-2b1b.png?v8",
+ "black_cat": "unicode/1f408-2b1b.png?v8",
+ "black_circle": "unicode/26ab.png?v8",
+ "black_flag": "unicode/1f3f4.png?v8",
+ "black_heart": "unicode/1f5a4.png?v8",
+ "black_joker": "unicode/1f0cf.png?v8",
+ "black_large_square": "unicode/2b1b.png?v8",
+ "black_medium_small_square": "unicode/25fe.png?v8",
+ "black_medium_square": "unicode/25fc.png?v8",
+ "black_nib": "unicode/2712.png?v8",
+ "black_small_square": "unicode/25aa.png?v8",
+ "black_square_button": "unicode/1f532.png?v8",
+ "blond_haired_man": "unicode/1f471-2642.png?v8",
+ "blond_haired_person": "unicode/1f471.png?v8",
+ "blond_haired_woman": "unicode/1f471-2640.png?v8",
+ "blonde_woman": "unicode/1f471-2640.png?v8",
+ "blossom": "unicode/1f33c.png?v8",
+ "blowfish": "unicode/1f421.png?v8",
+ "blue_book": "unicode/1f4d8.png?v8",
+ "blue_car": "unicode/1f699.png?v8",
+ "blue_heart": "unicode/1f499.png?v8",
+ "blue_square": "unicode/1f7e6.png?v8",
+ "blueberries": "unicode/1fad0.png?v8",
+ "blush": "unicode/1f60a.png?v8",
+ "boar": "unicode/1f417.png?v8",
+ "boat": "unicode/26f5.png?v8",
+ "bolivia": "unicode/1f1e7-1f1f4.png?v8",
+ "bomb": "unicode/1f4a3.png?v8",
+ "bone": "unicode/1f9b4.png?v8",
+ "book": "unicode/1f4d6.png?v8",
+ "bookmark": "unicode/1f516.png?v8",
+ "bookmark_tabs": "unicode/1f4d1.png?v8",
+ "books": "unicode/1f4da.png?v8",
+ "boom": "unicode/1f4a5.png?v8",
+ "boomerang": "unicode/1fa83.png?v8",
+ "boot": "unicode/1f462.png?v8",
+ "bosnia_herzegovina": "unicode/1f1e7-1f1e6.png?v8",
+ "botswana": "unicode/1f1e7-1f1fc.png?v8",
+ "bouncing_ball_man": "unicode/26f9-2642.png?v8",
+ "bouncing_ball_person": "unicode/26f9.png?v8",
+ "bouncing_ball_woman": "unicode/26f9-2640.png?v8",
+ "bouquet": "unicode/1f490.png?v8",
+ "bouvet_island": "unicode/1f1e7-1f1fb.png?v8",
+ "bow": "unicode/1f647.png?v8",
+ "bow_and_arrow": "unicode/1f3f9.png?v8",
+ "bowing_man": "unicode/1f647-2642.png?v8",
+ "bowing_woman": "unicode/1f647-2640.png?v8",
+ "bowl_with_spoon": "unicode/1f963.png?v8",
+ "bowling": "unicode/1f3b3.png?v8",
+ "bowtie": "bowtie.png?v8",
+ "boxing_glove": "unicode/1f94a.png?v8",
+ "boy": "unicode/1f466.png?v8",
+ "brain": "unicode/1f9e0.png?v8",
+ "brazil": "unicode/1f1e7-1f1f7.png?v8",
+ "bread": "unicode/1f35e.png?v8",
+ "breast_feeding": "unicode/1f931.png?v8",
+ "bricks": "unicode/1f9f1.png?v8",
+ "bride_with_veil": "unicode/1f470-2640.png?v8",
+ "bridge_at_night": "unicode/1f309.png?v8",
+ "briefcase": "unicode/1f4bc.png?v8",
+ "british_indian_ocean_territory": "unicode/1f1ee-1f1f4.png?v8",
+ "british_virgin_islands": "unicode/1f1fb-1f1ec.png?v8",
+ "broccoli": "unicode/1f966.png?v8",
+ "broken_heart": "unicode/1f494.png?v8",
+ "broom": "unicode/1f9f9.png?v8",
+ "brown_circle": "unicode/1f7e4.png?v8",
+ "brown_heart": "unicode/1f90e.png?v8",
+ "brown_square": "unicode/1f7eb.png?v8",
+ "brunei": "unicode/1f1e7-1f1f3.png?v8",
+ "bubble_tea": "unicode/1f9cb.png?v8",
+ "bubbles": "unicode/1fae7.png?v8",
+ "bucket": "unicode/1faa3.png?v8",
+ "bug": "unicode/1f41b.png?v8",
+ "building_construction": "unicode/1f3d7.png?v8",
+ "bulb": "unicode/1f4a1.png?v8",
+ "bulgaria": "unicode/1f1e7-1f1ec.png?v8",
+ "bullettrain_front": "unicode/1f685.png?v8",
+ "bullettrain_side": "unicode/1f684.png?v8",
+ "burkina_faso": "unicode/1f1e7-1f1eb.png?v8",
+ "burrito": "unicode/1f32f.png?v8",
+ "burundi": "unicode/1f1e7-1f1ee.png?v8",
+ "bus": "unicode/1f68c.png?v8",
+ "business_suit_levitating": "unicode/1f574.png?v8",
+ "busstop": "unicode/1f68f.png?v8",
+ "bust_in_silhouette": "unicode/1f464.png?v8",
+ "busts_in_silhouette": "unicode/1f465.png?v8",
+ "butter": "unicode/1f9c8.png?v8",
+ "butterfly": "unicode/1f98b.png?v8",
+ "cactus": "unicode/1f335.png?v8",
+ "cake": "unicode/1f370.png?v8",
+ "calendar": "unicode/1f4c6.png?v8",
+ "call_me_hand": "unicode/1f919.png?v8",
+ "calling": "unicode/1f4f2.png?v8",
+ "cambodia": "unicode/1f1f0-1f1ed.png?v8",
+ "camel": "unicode/1f42b.png?v8",
+ "camera": "unicode/1f4f7.png?v8",
+ "camera_flash": "unicode/1f4f8.png?v8",
+ "cameroon": "unicode/1f1e8-1f1f2.png?v8",
+ "camping": "unicode/1f3d5.png?v8",
+ "canada": "unicode/1f1e8-1f1e6.png?v8",
+ "canary_islands": "unicode/1f1ee-1f1e8.png?v8",
+ "cancer": "unicode/264b.png?v8",
+ "candle": "unicode/1f56f.png?v8",
+ "candy": "unicode/1f36c.png?v8",
+ "canned_food": "unicode/1f96b.png?v8",
+ "canoe": "unicode/1f6f6.png?v8",
+ "cape_verde": "unicode/1f1e8-1f1fb.png?v8",
+ "capital_abcd": "unicode/1f520.png?v8",
+ "capricorn": "unicode/2651.png?v8",
+ "car": "unicode/1f697.png?v8",
+ "card_file_box": "unicode/1f5c3.png?v8",
+ "card_index": "unicode/1f4c7.png?v8",
+ "card_index_dividers": "unicode/1f5c2.png?v8",
+ "caribbean_netherlands": "unicode/1f1e7-1f1f6.png?v8",
+ "carousel_horse": "unicode/1f3a0.png?v8",
+ "carpentry_saw": "unicode/1fa9a.png?v8",
+ "carrot": "unicode/1f955.png?v8",
+ "cartwheeling": "unicode/1f938.png?v8",
+ "cat": "unicode/1f431.png?v8",
+ "cat2": "unicode/1f408.png?v8",
+ "cayman_islands": "unicode/1f1f0-1f1fe.png?v8",
+ "cd": "unicode/1f4bf.png?v8",
+ "central_african_republic": "unicode/1f1e8-1f1eb.png?v8",
+ "ceuta_melilla": "unicode/1f1ea-1f1e6.png?v8",
+ "chad": "unicode/1f1f9-1f1e9.png?v8",
+ "chains": "unicode/26d3.png?v8",
+ "chair": "unicode/1fa91.png?v8",
+ "champagne": "unicode/1f37e.png?v8",
+ "chart": "unicode/1f4b9.png?v8",
+ "chart_with_downwards_trend": "unicode/1f4c9.png?v8",
+ "chart_with_upwards_trend": "unicode/1f4c8.png?v8",
+ "checkered_flag": "unicode/1f3c1.png?v8",
+ "cheese": "unicode/1f9c0.png?v8",
+ "cherries": "unicode/1f352.png?v8",
+ "cherry_blossom": "unicode/1f338.png?v8",
+ "chess_pawn": "unicode/265f.png?v8",
+ "chestnut": "unicode/1f330.png?v8",
+ "chicken": "unicode/1f414.png?v8",
+ "child": "unicode/1f9d2.png?v8",
+ "children_crossing": "unicode/1f6b8.png?v8",
+ "chile": "unicode/1f1e8-1f1f1.png?v8",
+ "chipmunk": "unicode/1f43f.png?v8",
+ "chocolate_bar": "unicode/1f36b.png?v8",
+ "chopsticks": "unicode/1f962.png?v8",
+ "christmas_island": "unicode/1f1e8-1f1fd.png?v8",
+ "christmas_tree": "unicode/1f384.png?v8",
+ "church": "unicode/26ea.png?v8",
+ "cinema": "unicode/1f3a6.png?v8",
+ "circus_tent": "unicode/1f3aa.png?v8",
+ "city_sunrise": "unicode/1f307.png?v8",
+ "city_sunset": "unicode/1f306.png?v8",
+ "cityscape": "unicode/1f3d9.png?v8",
+ "cl": "unicode/1f191.png?v8",
+ "clamp": "unicode/1f5dc.png?v8",
+ "clap": "unicode/1f44f.png?v8",
+ "clapper": "unicode/1f3ac.png?v8",
+ "classical_building": "unicode/1f3db.png?v8",
+ "climbing": "unicode/1f9d7.png?v8",
+ "climbing_man": "unicode/1f9d7-2642.png?v8",
+ "climbing_woman": "unicode/1f9d7-2640.png?v8",
+ "clinking_glasses": "unicode/1f942.png?v8",
+ "clipboard": "unicode/1f4cb.png?v8",
+ "clipperton_island": "unicode/1f1e8-1f1f5.png?v8",
+ "clock1": "unicode/1f550.png?v8",
+ "clock10": "unicode/1f559.png?v8",
+ "clock1030": "unicode/1f565.png?v8",
+ "clock11": "unicode/1f55a.png?v8",
+ "clock1130": "unicode/1f566.png?v8",
+ "clock12": "unicode/1f55b.png?v8",
+ "clock1230": "unicode/1f567.png?v8",
+ "clock130": "unicode/1f55c.png?v8",
+ "clock2": "unicode/1f551.png?v8",
+ "clock230": "unicode/1f55d.png?v8",
+ "clock3": "unicode/1f552.png?v8",
+ "clock330": "unicode/1f55e.png?v8",
+ "clock4": "unicode/1f553.png?v8",
+ "clock430": "unicode/1f55f.png?v8",
+ "clock5": "unicode/1f554.png?v8",
+ "clock530": "unicode/1f560.png?v8",
+ "clock6": "unicode/1f555.png?v8",
+ "clock630": "unicode/1f561.png?v8",
+ "clock7": "unicode/1f556.png?v8",
+ "clock730": "unicode/1f562.png?v8",
+ "clock8": "unicode/1f557.png?v8",
+ "clock830": "unicode/1f563.png?v8",
+ "clock9": "unicode/1f558.png?v8",
+ "clock930": "unicode/1f564.png?v8",
+ "closed_book": "unicode/1f4d5.png?v8",
+ "closed_lock_with_key": "unicode/1f510.png?v8",
+ "closed_umbrella": "unicode/1f302.png?v8",
+ "cloud": "unicode/2601.png?v8",
+ "cloud_with_lightning": "unicode/1f329.png?v8",
+ "cloud_with_lightning_and_rain": "unicode/26c8.png?v8",
+ "cloud_with_rain": "unicode/1f327.png?v8",
+ "cloud_with_snow": "unicode/1f328.png?v8",
+ "clown_face": "unicode/1f921.png?v8",
+ "clubs": "unicode/2663.png?v8",
+ "cn": "unicode/1f1e8-1f1f3.png?v8",
+ "coat": "unicode/1f9e5.png?v8",
+ "cockroach": "unicode/1fab3.png?v8",
+ "cocktail": "unicode/1f378.png?v8",
+ "coconut": "unicode/1f965.png?v8",
+ "cocos_islands": "unicode/1f1e8-1f1e8.png?v8",
+ "coffee": "unicode/2615.png?v8",
+ "coffin": "unicode/26b0.png?v8",
+ "coin": "unicode/1fa99.png?v8",
+ "cold_face": "unicode/1f976.png?v8",
+ "cold_sweat": "unicode/1f630.png?v8",
+ "collision": "unicode/1f4a5.png?v8",
+ "colombia": "unicode/1f1e8-1f1f4.png?v8",
+ "comet": "unicode/2604.png?v8",
+ "comoros": "unicode/1f1f0-1f1f2.png?v8",
+ "compass": "unicode/1f9ed.png?v8",
+ "computer": "unicode/1f4bb.png?v8",
+ "computer_mouse": "unicode/1f5b1.png?v8",
+ "confetti_ball": "unicode/1f38a.png?v8",
+ "confounded": "unicode/1f616.png?v8",
+ "confused": "unicode/1f615.png?v8",
+ "congo_brazzaville": "unicode/1f1e8-1f1ec.png?v8",
+ "congo_kinshasa": "unicode/1f1e8-1f1e9.png?v8",
+ "congratulations": "unicode/3297.png?v8",
+ "construction": "unicode/1f6a7.png?v8",
+ "construction_worker": "unicode/1f477.png?v8",
+ "construction_worker_man": "unicode/1f477-2642.png?v8",
+ "construction_worker_woman": "unicode/1f477-2640.png?v8",
+ "control_knobs": "unicode/1f39b.png?v8",
+ "convenience_store": "unicode/1f3ea.png?v8",
+ "cook": "unicode/1f9d1-1f373.png?v8",
+ "cook_islands": "unicode/1f1e8-1f1f0.png?v8",
+ "cookie": "unicode/1f36a.png?v8",
+ "cool": "unicode/1f192.png?v8",
+ "cop": "unicode/1f46e.png?v8",
+ "copilot": "copilot.png?v8",
+ "copyright": "unicode/00a9.png?v8",
+ "coral": "unicode/1fab8.png?v8",
+ "corn": "unicode/1f33d.png?v8",
+ "costa_rica": "unicode/1f1e8-1f1f7.png?v8",
+ "cote_divoire": "unicode/1f1e8-1f1ee.png?v8",
+ "couch_and_lamp": "unicode/1f6cb.png?v8",
+ "couple": "unicode/1f46b.png?v8",
+ "couple_with_heart": "unicode/1f491.png?v8",
+ "couple_with_heart_man_man": "unicode/1f468-2764-1f468.png?v8",
+ "couple_with_heart_woman_man": "unicode/1f469-2764-1f468.png?v8",
+ "couple_with_heart_woman_woman": "unicode/1f469-2764-1f469.png?v8",
+ "couplekiss": "unicode/1f48f.png?v8",
+ "couplekiss_man_man": "unicode/1f468-2764-1f48b-1f468.png?v8",
+ "couplekiss_man_woman": "unicode/1f469-2764-1f48b-1f468.png?v8",
+ "couplekiss_woman_woman": "unicode/1f469-2764-1f48b-1f469.png?v8",
+ "cow": "unicode/1f42e.png?v8",
+ "cow2": "unicode/1f404.png?v8",
+ "cowboy_hat_face": "unicode/1f920.png?v8",
+ "crab": "unicode/1f980.png?v8",
+ "crayon": "unicode/1f58d.png?v8",
+ "credit_card": "unicode/1f4b3.png?v8",
+ "crescent_moon": "unicode/1f319.png?v8",
+ "cricket": "unicode/1f997.png?v8",
+ "cricket_game": "unicode/1f3cf.png?v8",
+ "croatia": "unicode/1f1ed-1f1f7.png?v8",
+ "crocodile": "unicode/1f40a.png?v8",
+ "croissant": "unicode/1f950.png?v8",
+ "crossed_fingers": "unicode/1f91e.png?v8",
+ "crossed_flags": "unicode/1f38c.png?v8",
+ "crossed_swords": "unicode/2694.png?v8",
+ "crown": "unicode/1f451.png?v8",
+ "crutch": "unicode/1fa7c.png?v8",
+ "cry": "unicode/1f622.png?v8",
+ "crying_cat_face": "unicode/1f63f.png?v8",
+ "crystal_ball": "unicode/1f52e.png?v8",
+ "cuba": "unicode/1f1e8-1f1fa.png?v8",
+ "cucumber": "unicode/1f952.png?v8",
+ "cup_with_straw": "unicode/1f964.png?v8",
+ "cupcake": "unicode/1f9c1.png?v8",
+ "cupid": "unicode/1f498.png?v8",
+ "curacao": "unicode/1f1e8-1f1fc.png?v8",
+ "curling_stone": "unicode/1f94c.png?v8",
+ "curly_haired_man": "unicode/1f468-1f9b1.png?v8",
+ "curly_haired_woman": "unicode/1f469-1f9b1.png?v8",
+ "curly_loop": "unicode/27b0.png?v8",
+ "currency_exchange": "unicode/1f4b1.png?v8",
+ "curry": "unicode/1f35b.png?v8",
+ "cursing_face": "unicode/1f92c.png?v8",
+ "custard": "unicode/1f36e.png?v8",
+ "customs": "unicode/1f6c3.png?v8",
+ "cut_of_meat": "unicode/1f969.png?v8",
+ "cyclone": "unicode/1f300.png?v8",
+ "cyprus": "unicode/1f1e8-1f1fe.png?v8",
+ "czech_republic": "unicode/1f1e8-1f1ff.png?v8",
+ "dagger": "unicode/1f5e1.png?v8",
+ "dancer": "unicode/1f483.png?v8",
+ "dancers": "unicode/1f46f.png?v8",
+ "dancing_men": "unicode/1f46f-2642.png?v8",
+ "dancing_women": "unicode/1f46f-2640.png?v8",
+ "dango": "unicode/1f361.png?v8",
+ "dark_sunglasses": "unicode/1f576.png?v8",
+ "dart": "unicode/1f3af.png?v8",
+ "dash": "unicode/1f4a8.png?v8",
+ "date": "unicode/1f4c5.png?v8",
+ "de": "unicode/1f1e9-1f1ea.png?v8",
+ "deaf_man": "unicode/1f9cf-2642.png?v8",
+ "deaf_person": "unicode/1f9cf.png?v8",
+ "deaf_woman": "unicode/1f9cf-2640.png?v8",
+ "deciduous_tree": "unicode/1f333.png?v8",
+ "deer": "unicode/1f98c.png?v8",
+ "denmark": "unicode/1f1e9-1f1f0.png?v8",
+ "department_store": "unicode/1f3ec.png?v8",
+ "dependabot": "dependabot.png?v8",
+ "derelict_house": "unicode/1f3da.png?v8",
+ "desert": "unicode/1f3dc.png?v8",
+ "desert_island": "unicode/1f3dd.png?v8",
+ "desktop_computer": "unicode/1f5a5.png?v8",
+ "detective": "unicode/1f575.png?v8",
+ "diamond_shape_with_a_dot_inside": "unicode/1f4a0.png?v8",
+ "diamonds": "unicode/2666.png?v8",
+ "diego_garcia": "unicode/1f1e9-1f1ec.png?v8",
+ "disappointed": "unicode/1f61e.png?v8",
+ "disappointed_relieved": "unicode/1f625.png?v8",
+ "disguised_face": "unicode/1f978.png?v8",
+ "diving_mask": "unicode/1f93f.png?v8",
+ "diya_lamp": "unicode/1fa94.png?v8",
+ "dizzy": "unicode/1f4ab.png?v8",
+ "dizzy_face": "unicode/1f635.png?v8",
+ "djibouti": "unicode/1f1e9-1f1ef.png?v8",
+ "dna": "unicode/1f9ec.png?v8",
+ "do_not_litter": "unicode/1f6af.png?v8",
+ "dodo": "unicode/1f9a4.png?v8",
+ "dog": "unicode/1f436.png?v8",
+ "dog2": "unicode/1f415.png?v8",
+ "dollar": "unicode/1f4b5.png?v8",
+ "dolls": "unicode/1f38e.png?v8",
+ "dolphin": "unicode/1f42c.png?v8",
+ "dominica": "unicode/1f1e9-1f1f2.png?v8",
+ "dominican_republic": "unicode/1f1e9-1f1f4.png?v8",
+ "donkey": "unicode/1facf.png?v8",
+ "door": "unicode/1f6aa.png?v8",
+ "dotted_line_face": "unicode/1fae5.png?v8",
+ "doughnut": "unicode/1f369.png?v8",
+ "dove": "unicode/1f54a.png?v8",
+ "dragon": "unicode/1f409.png?v8",
+ "dragon_face": "unicode/1f432.png?v8",
+ "dress": "unicode/1f457.png?v8",
+ "dromedary_camel": "unicode/1f42a.png?v8",
+ "drooling_face": "unicode/1f924.png?v8",
+ "drop_of_blood": "unicode/1fa78.png?v8",
+ "droplet": "unicode/1f4a7.png?v8",
+ "drum": "unicode/1f941.png?v8",
+ "duck": "unicode/1f986.png?v8",
+ "dumpling": "unicode/1f95f.png?v8",
+ "dvd": "unicode/1f4c0.png?v8",
+ "e-mail": "unicode/1f4e7.png?v8",
+ "eagle": "unicode/1f985.png?v8",
+ "ear": "unicode/1f442.png?v8",
+ "ear_of_rice": "unicode/1f33e.png?v8",
+ "ear_with_hearing_aid": "unicode/1f9bb.png?v8",
+ "earth_africa": "unicode/1f30d.png?v8",
+ "earth_americas": "unicode/1f30e.png?v8",
+ "earth_asia": "unicode/1f30f.png?v8",
+ "ecuador": "unicode/1f1ea-1f1e8.png?v8",
+ "egg": "unicode/1f95a.png?v8",
+ "eggplant": "unicode/1f346.png?v8",
+ "egypt": "unicode/1f1ea-1f1ec.png?v8",
+ "eight": "unicode/0038-20e3.png?v8",
+ "eight_pointed_black_star": "unicode/2734.png?v8",
+ "eight_spoked_asterisk": "unicode/2733.png?v8",
+ "eject_button": "unicode/23cf.png?v8",
+ "el_salvador": "unicode/1f1f8-1f1fb.png?v8",
+ "electric_plug": "unicode/1f50c.png?v8",
+ "electron": "electron.png?v8",
+ "elephant": "unicode/1f418.png?v8",
+ "elevator": "unicode/1f6d7.png?v8",
+ "elf": "unicode/1f9dd.png?v8",
+ "elf_man": "unicode/1f9dd-2642.png?v8",
+ "elf_woman": "unicode/1f9dd-2640.png?v8",
+ "email": "unicode/1f4e7.png?v8",
+ "empty_nest": "unicode/1fab9.png?v8",
+ "end": "unicode/1f51a.png?v8",
+ "england": "unicode/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png?v8",
+ "envelope": "unicode/2709.png?v8",
+ "envelope_with_arrow": "unicode/1f4e9.png?v8",
+ "equatorial_guinea": "unicode/1f1ec-1f1f6.png?v8",
+ "eritrea": "unicode/1f1ea-1f1f7.png?v8",
+ "es": "unicode/1f1ea-1f1f8.png?v8",
+ "estonia": "unicode/1f1ea-1f1ea.png?v8",
+ "ethiopia": "unicode/1f1ea-1f1f9.png?v8",
+ "eu": "unicode/1f1ea-1f1fa.png?v8",
+ "euro": "unicode/1f4b6.png?v8",
+ "european_castle": "unicode/1f3f0.png?v8",
+ "european_post_office": "unicode/1f3e4.png?v8",
+ "european_union": "unicode/1f1ea-1f1fa.png?v8",
+ "evergreen_tree": "unicode/1f332.png?v8",
+ "exclamation": "unicode/2757.png?v8",
+ "exploding_head": "unicode/1f92f.png?v8",
+ "expressionless": "unicode/1f611.png?v8",
+ "eye": "unicode/1f441.png?v8",
+ "eye_speech_bubble": "unicode/1f441-1f5e8.png?v8",
+ "eyeglasses": "unicode/1f453.png?v8",
+ "eyes": "unicode/1f440.png?v8",
+ "face_exhaling": "unicode/1f62e-1f4a8.png?v8",
+ "face_holding_back_tears": "unicode/1f979.png?v8",
+ "face_in_clouds": "unicode/1f636-1f32b.png?v8",
+ "face_with_diagonal_mouth": "unicode/1fae4.png?v8",
+ "face_with_head_bandage": "unicode/1f915.png?v8",
+ "face_with_open_eyes_and_hand_over_mouth": "unicode/1fae2.png?v8",
+ "face_with_peeking_eye": "unicode/1fae3.png?v8",
+ "face_with_spiral_eyes": "unicode/1f635-1f4ab.png?v8",
+ "face_with_thermometer": "unicode/1f912.png?v8",
+ "facepalm": "unicode/1f926.png?v8",
+ "facepunch": "unicode/1f44a.png?v8",
+ "factory": "unicode/1f3ed.png?v8",
+ "factory_worker": "unicode/1f9d1-1f3ed.png?v8",
+ "fairy": "unicode/1f9da.png?v8",
+ "fairy_man": "unicode/1f9da-2642.png?v8",
+ "fairy_woman": "unicode/1f9da-2640.png?v8",
+ "falafel": "unicode/1f9c6.png?v8",
+ "falkland_islands": "unicode/1f1eb-1f1f0.png?v8",
+ "fallen_leaf": "unicode/1f342.png?v8",
+ "family": "unicode/1f46a.png?v8",
+ "family_man_boy": "unicode/1f468-1f466.png?v8",
+ "family_man_boy_boy": "unicode/1f468-1f466-1f466.png?v8",
+ "family_man_girl": "unicode/1f468-1f467.png?v8",
+ "family_man_girl_boy": "unicode/1f468-1f467-1f466.png?v8",
+ "family_man_girl_girl": "unicode/1f468-1f467-1f467.png?v8",
+ "family_man_man_boy": "unicode/1f468-1f468-1f466.png?v8",
+ "family_man_man_boy_boy": "unicode/1f468-1f468-1f466-1f466.png?v8",
+ "family_man_man_girl": "unicode/1f468-1f468-1f467.png?v8",
+ "family_man_man_girl_boy": "unicode/1f468-1f468-1f467-1f466.png?v8",
+ "family_man_man_girl_girl": "unicode/1f468-1f468-1f467-1f467.png?v8",
+ "family_man_woman_boy": "unicode/1f468-1f469-1f466.png?v8",
+ "family_man_woman_boy_boy": "unicode/1f468-1f469-1f466-1f466.png?v8",
+ "family_man_woman_girl": "unicode/1f468-1f469-1f467.png?v8",
+ "family_man_woman_girl_boy": "unicode/1f468-1f469-1f467-1f466.png?v8",
+ "family_man_woman_girl_girl": "unicode/1f468-1f469-1f467-1f467.png?v8",
+ "family_woman_boy": "unicode/1f469-1f466.png?v8",
+ "family_woman_boy_boy": "unicode/1f469-1f466-1f466.png?v8",
+ "family_woman_girl": "unicode/1f469-1f467.png?v8",
+ "family_woman_girl_boy": "unicode/1f469-1f467-1f466.png?v8",
+ "family_woman_girl_girl": "unicode/1f469-1f467-1f467.png?v8",
+ "family_woman_woman_boy": "unicode/1f469-1f469-1f466.png?v8",
+ "family_woman_woman_boy_boy": "unicode/1f469-1f469-1f466-1f466.png?v8",
+ "family_woman_woman_girl": "unicode/1f469-1f469-1f467.png?v8",
+ "family_woman_woman_girl_boy": "unicode/1f469-1f469-1f467-1f466.png?v8",
+ "family_woman_woman_girl_girl": "unicode/1f469-1f469-1f467-1f467.png?v8",
+ "farmer": "unicode/1f9d1-1f33e.png?v8",
+ "faroe_islands": "unicode/1f1eb-1f1f4.png?v8",
+ "fast_forward": "unicode/23e9.png?v8",
+ "fax": "unicode/1f4e0.png?v8",
+ "fearful": "unicode/1f628.png?v8",
+ "feather": "unicode/1fab6.png?v8",
+ "feelsgood": "feelsgood.png?v8",
+ "feet": "unicode/1f43e.png?v8",
+ "female_detective": "unicode/1f575-2640.png?v8",
+ "female_sign": "unicode/2640.png?v8",
+ "ferris_wheel": "unicode/1f3a1.png?v8",
+ "ferry": "unicode/26f4.png?v8",
+ "field_hockey": "unicode/1f3d1.png?v8",
+ "fiji": "unicode/1f1eb-1f1ef.png?v8",
+ "file_cabinet": "unicode/1f5c4.png?v8",
+ "file_folder": "unicode/1f4c1.png?v8",
+ "film_projector": "unicode/1f4fd.png?v8",
+ "film_strip": "unicode/1f39e.png?v8",
+ "finland": "unicode/1f1eb-1f1ee.png?v8",
+ "finnadie": "finnadie.png?v8",
+ "fire": "unicode/1f525.png?v8",
+ "fire_engine": "unicode/1f692.png?v8",
+ "fire_extinguisher": "unicode/1f9ef.png?v8",
+ "firecracker": "unicode/1f9e8.png?v8",
+ "firefighter": "unicode/1f9d1-1f692.png?v8",
+ "fireworks": "unicode/1f386.png?v8",
+ "first_quarter_moon": "unicode/1f313.png?v8",
+ "first_quarter_moon_with_face": "unicode/1f31b.png?v8",
+ "fish": "unicode/1f41f.png?v8",
+ "fish_cake": "unicode/1f365.png?v8",
+ "fishing_pole_and_fish": "unicode/1f3a3.png?v8",
+ "fishsticks": "fishsticks.png?v8",
+ "fist": "unicode/270a.png?v8",
+ "fist_left": "unicode/1f91b.png?v8",
+ "fist_oncoming": "unicode/1f44a.png?v8",
+ "fist_raised": "unicode/270a.png?v8",
+ "fist_right": "unicode/1f91c.png?v8",
+ "five": "unicode/0035-20e3.png?v8",
+ "flags": "unicode/1f38f.png?v8",
+ "flamingo": "unicode/1f9a9.png?v8",
+ "flashlight": "unicode/1f526.png?v8",
+ "flat_shoe": "unicode/1f97f.png?v8",
+ "flatbread": "unicode/1fad3.png?v8",
+ "fleur_de_lis": "unicode/269c.png?v8",
+ "flight_arrival": "unicode/1f6ec.png?v8",
+ "flight_departure": "unicode/1f6eb.png?v8",
+ "flipper": "unicode/1f42c.png?v8",
+ "floppy_disk": "unicode/1f4be.png?v8",
+ "flower_playing_cards": "unicode/1f3b4.png?v8",
+ "flushed": "unicode/1f633.png?v8",
+ "flute": "unicode/1fa88.png?v8",
+ "fly": "unicode/1fab0.png?v8",
+ "flying_disc": "unicode/1f94f.png?v8",
+ "flying_saucer": "unicode/1f6f8.png?v8",
+ "fog": "unicode/1f32b.png?v8",
+ "foggy": "unicode/1f301.png?v8",
+ "folding_hand_fan": "unicode/1faad.png?v8",
+ "fondue": "unicode/1fad5.png?v8",
+ "foot": "unicode/1f9b6.png?v8",
+ "football": "unicode/1f3c8.png?v8",
+ "footprints": "unicode/1f463.png?v8",
+ "fork_and_knife": "unicode/1f374.png?v8",
+ "fortune_cookie": "unicode/1f960.png?v8",
+ "fountain": "unicode/26f2.png?v8",
+ "fountain_pen": "unicode/1f58b.png?v8",
+ "four": "unicode/0034-20e3.png?v8",
+ "four_leaf_clover": "unicode/1f340.png?v8",
+ "fox_face": "unicode/1f98a.png?v8",
+ "fr": "unicode/1f1eb-1f1f7.png?v8",
+ "framed_picture": "unicode/1f5bc.png?v8",
+ "free": "unicode/1f193.png?v8",
+ "french_guiana": "unicode/1f1ec-1f1eb.png?v8",
+ "french_polynesia": "unicode/1f1f5-1f1eb.png?v8",
+ "french_southern_territories": "unicode/1f1f9-1f1eb.png?v8",
+ "fried_egg": "unicode/1f373.png?v8",
+ "fried_shrimp": "unicode/1f364.png?v8",
+ "fries": "unicode/1f35f.png?v8",
+ "frog": "unicode/1f438.png?v8",
+ "frowning": "unicode/1f626.png?v8",
+ "frowning_face": "unicode/2639.png?v8",
+ "frowning_man": "unicode/1f64d-2642.png?v8",
+ "frowning_person": "unicode/1f64d.png?v8",
+ "frowning_woman": "unicode/1f64d-2640.png?v8",
+ "fu": "unicode/1f595.png?v8",
+ "fuelpump": "unicode/26fd.png?v8",
+ "full_moon": "unicode/1f315.png?v8",
+ "full_moon_with_face": "unicode/1f31d.png?v8",
+ "funeral_urn": "unicode/26b1.png?v8",
+ "gabon": "unicode/1f1ec-1f1e6.png?v8",
+ "gambia": "unicode/1f1ec-1f1f2.png?v8",
+ "game_die": "unicode/1f3b2.png?v8",
+ "garlic": "unicode/1f9c4.png?v8",
+ "gb": "unicode/1f1ec-1f1e7.png?v8",
+ "gear": "unicode/2699.png?v8",
+ "gem": "unicode/1f48e.png?v8",
+ "gemini": "unicode/264a.png?v8",
+ "genie": "unicode/1f9de.png?v8",
+ "genie_man": "unicode/1f9de-2642.png?v8",
+ "genie_woman": "unicode/1f9de-2640.png?v8",
+ "georgia": "unicode/1f1ec-1f1ea.png?v8",
+ "ghana": "unicode/1f1ec-1f1ed.png?v8",
+ "ghost": "unicode/1f47b.png?v8",
+ "gibraltar": "unicode/1f1ec-1f1ee.png?v8",
+ "gift": "unicode/1f381.png?v8",
+ "gift_heart": "unicode/1f49d.png?v8",
+ "ginger_root": "unicode/1fada.png?v8",
+ "giraffe": "unicode/1f992.png?v8",
+ "girl": "unicode/1f467.png?v8",
+ "globe_with_meridians": "unicode/1f310.png?v8",
+ "gloves": "unicode/1f9e4.png?v8",
+ "goal_net": "unicode/1f945.png?v8",
+ "goat": "unicode/1f410.png?v8",
+ "goberserk": "goberserk.png?v8",
+ "godmode": "godmode.png?v8",
+ "goggles": "unicode/1f97d.png?v8",
+ "golf": "unicode/26f3.png?v8",
+ "golfing": "unicode/1f3cc.png?v8",
+ "golfing_man": "unicode/1f3cc-2642.png?v8",
+ "golfing_woman": "unicode/1f3cc-2640.png?v8",
+ "goose": "unicode/1fabf.png?v8",
+ "gorilla": "unicode/1f98d.png?v8",
+ "grapes": "unicode/1f347.png?v8",
+ "greece": "unicode/1f1ec-1f1f7.png?v8",
+ "green_apple": "unicode/1f34f.png?v8",
+ "green_book": "unicode/1f4d7.png?v8",
+ "green_circle": "unicode/1f7e2.png?v8",
+ "green_heart": "unicode/1f49a.png?v8",
+ "green_salad": "unicode/1f957.png?v8",
+ "green_square": "unicode/1f7e9.png?v8",
+ "greenland": "unicode/1f1ec-1f1f1.png?v8",
+ "grenada": "unicode/1f1ec-1f1e9.png?v8",
+ "grey_exclamation": "unicode/2755.png?v8",
+ "grey_heart": "unicode/1fa76.png?v8",
+ "grey_question": "unicode/2754.png?v8",
+ "grimacing": "unicode/1f62c.png?v8",
+ "grin": "unicode/1f601.png?v8",
+ "grinning": "unicode/1f600.png?v8",
+ "guadeloupe": "unicode/1f1ec-1f1f5.png?v8",
+ "guam": "unicode/1f1ec-1f1fa.png?v8",
+ "guard": "unicode/1f482.png?v8",
+ "guardsman": "unicode/1f482-2642.png?v8",
+ "guardswoman": "unicode/1f482-2640.png?v8",
+ "guatemala": "unicode/1f1ec-1f1f9.png?v8",
+ "guernsey": "unicode/1f1ec-1f1ec.png?v8",
+ "guide_dog": "unicode/1f9ae.png?v8",
+ "guinea": "unicode/1f1ec-1f1f3.png?v8",
+ "guinea_bissau": "unicode/1f1ec-1f1fc.png?v8",
+ "guitar": "unicode/1f3b8.png?v8",
+ "gun": "unicode/1f52b.png?v8",
+ "guyana": "unicode/1f1ec-1f1fe.png?v8",
+ "hair_pick": "unicode/1faae.png?v8",
+ "haircut": "unicode/1f487.png?v8",
+ "haircut_man": "unicode/1f487-2642.png?v8",
+ "haircut_woman": "unicode/1f487-2640.png?v8",
+ "haiti": "unicode/1f1ed-1f1f9.png?v8",
+ "hamburger": "unicode/1f354.png?v8",
+ "hammer": "unicode/1f528.png?v8",
+ "hammer_and_pick": "unicode/2692.png?v8",
+ "hammer_and_wrench": "unicode/1f6e0.png?v8",
+ "hamsa": "unicode/1faac.png?v8",
+ "hamster": "unicode/1f439.png?v8",
+ "hand": "unicode/270b.png?v8",
+ "hand_over_mouth": "unicode/1f92d.png?v8",
+ "hand_with_index_finger_and_thumb_crossed": "unicode/1faf0.png?v8",
+ "handbag": "unicode/1f45c.png?v8",
+ "handball_person": "unicode/1f93e.png?v8",
+ "handshake": "unicode/1f91d.png?v8",
+ "hankey": "unicode/1f4a9.png?v8",
+ "hash": "unicode/0023-20e3.png?v8",
+ "hatched_chick": "unicode/1f425.png?v8",
+ "hatching_chick": "unicode/1f423.png?v8",
+ "headphones": "unicode/1f3a7.png?v8",
+ "headstone": "unicode/1faa6.png?v8",
+ "health_worker": "unicode/1f9d1-2695.png?v8",
+ "hear_no_evil": "unicode/1f649.png?v8",
+ "heard_mcdonald_islands": "unicode/1f1ed-1f1f2.png?v8",
+ "heart": "unicode/2764.png?v8",
+ "heart_decoration": "unicode/1f49f.png?v8",
+ "heart_eyes": "unicode/1f60d.png?v8",
+ "heart_eyes_cat": "unicode/1f63b.png?v8",
+ "heart_hands": "unicode/1faf6.png?v8",
+ "heart_on_fire": "unicode/2764-1f525.png?v8",
+ "heartbeat": "unicode/1f493.png?v8",
+ "heartpulse": "unicode/1f497.png?v8",
+ "hearts": "unicode/2665.png?v8",
+ "heavy_check_mark": "unicode/2714.png?v8",
+ "heavy_division_sign": "unicode/2797.png?v8",
+ "heavy_dollar_sign": "unicode/1f4b2.png?v8",
+ "heavy_equals_sign": "unicode/1f7f0.png?v8",
+ "heavy_exclamation_mark": "unicode/2757.png?v8",
+ "heavy_heart_exclamation": "unicode/2763.png?v8",
+ "heavy_minus_sign": "unicode/2796.png?v8",
+ "heavy_multiplication_x": "unicode/2716.png?v8",
+ "heavy_plus_sign": "unicode/2795.png?v8",
+ "hedgehog": "unicode/1f994.png?v8",
+ "helicopter": "unicode/1f681.png?v8",
+ "herb": "unicode/1f33f.png?v8",
+ "hibiscus": "unicode/1f33a.png?v8",
+ "high_brightness": "unicode/1f506.png?v8",
+ "high_heel": "unicode/1f460.png?v8",
+ "hiking_boot": "unicode/1f97e.png?v8",
+ "hindu_temple": "unicode/1f6d5.png?v8",
+ "hippopotamus": "unicode/1f99b.png?v8",
+ "hocho": "unicode/1f52a.png?v8",
+ "hole": "unicode/1f573.png?v8",
+ "honduras": "unicode/1f1ed-1f1f3.png?v8",
+ "honey_pot": "unicode/1f36f.png?v8",
+ "honeybee": "unicode/1f41d.png?v8",
+ "hong_kong": "unicode/1f1ed-1f1f0.png?v8",
+ "hook": "unicode/1fa9d.png?v8",
+ "horse": "unicode/1f434.png?v8",
+ "horse_racing": "unicode/1f3c7.png?v8",
+ "hospital": "unicode/1f3e5.png?v8",
+ "hot_face": "unicode/1f975.png?v8",
+ "hot_pepper": "unicode/1f336.png?v8",
+ "hotdog": "unicode/1f32d.png?v8",
+ "hotel": "unicode/1f3e8.png?v8",
+ "hotsprings": "unicode/2668.png?v8",
+ "hourglass": "unicode/231b.png?v8",
+ "hourglass_flowing_sand": "unicode/23f3.png?v8",
+ "house": "unicode/1f3e0.png?v8",
+ "house_with_garden": "unicode/1f3e1.png?v8",
+ "houses": "unicode/1f3d8.png?v8",
+ "hugs": "unicode/1f917.png?v8",
+ "hungary": "unicode/1f1ed-1f1fa.png?v8",
+ "hurtrealbad": "hurtrealbad.png?v8",
+ "hushed": "unicode/1f62f.png?v8",
+ "hut": "unicode/1f6d6.png?v8",
+ "hyacinth": "unicode/1fabb.png?v8",
+ "ice_cream": "unicode/1f368.png?v8",
+ "ice_cube": "unicode/1f9ca.png?v8",
+ "ice_hockey": "unicode/1f3d2.png?v8",
+ "ice_skate": "unicode/26f8.png?v8",
+ "icecream": "unicode/1f366.png?v8",
+ "iceland": "unicode/1f1ee-1f1f8.png?v8",
+ "id": "unicode/1f194.png?v8",
+ "identification_card": "unicode/1faaa.png?v8",
+ "ideograph_advantage": "unicode/1f250.png?v8",
+ "imp": "unicode/1f47f.png?v8",
+ "inbox_tray": "unicode/1f4e5.png?v8",
+ "incoming_envelope": "unicode/1f4e8.png?v8",
+ "index_pointing_at_the_viewer": "unicode/1faf5.png?v8",
+ "india": "unicode/1f1ee-1f1f3.png?v8",
+ "indonesia": "unicode/1f1ee-1f1e9.png?v8",
+ "infinity": "unicode/267e.png?v8",
+ "information_desk_person": "unicode/1f481.png?v8",
+ "information_source": "unicode/2139.png?v8",
+ "innocent": "unicode/1f607.png?v8",
+ "interrobang": "unicode/2049.png?v8",
+ "iphone": "unicode/1f4f1.png?v8",
+ "iran": "unicode/1f1ee-1f1f7.png?v8",
+ "iraq": "unicode/1f1ee-1f1f6.png?v8",
+ "ireland": "unicode/1f1ee-1f1ea.png?v8",
+ "isle_of_man": "unicode/1f1ee-1f1f2.png?v8",
+ "israel": "unicode/1f1ee-1f1f1.png?v8",
+ "it": "unicode/1f1ee-1f1f9.png?v8",
+ "izakaya_lantern": "unicode/1f3ee.png?v8",
+ "jack_o_lantern": "unicode/1f383.png?v8",
+ "jamaica": "unicode/1f1ef-1f1f2.png?v8",
+ "japan": "unicode/1f5fe.png?v8",
+ "japanese_castle": "unicode/1f3ef.png?v8",
+ "japanese_goblin": "unicode/1f47a.png?v8",
+ "japanese_ogre": "unicode/1f479.png?v8",
+ "jar": "unicode/1fad9.png?v8",
+ "jeans": "unicode/1f456.png?v8",
+ "jellyfish": "unicode/1fabc.png?v8",
+ "jersey": "unicode/1f1ef-1f1ea.png?v8",
+ "jigsaw": "unicode/1f9e9.png?v8",
+ "jordan": "unicode/1f1ef-1f1f4.png?v8",
+ "joy": "unicode/1f602.png?v8",
+ "joy_cat": "unicode/1f639.png?v8",
+ "joystick": "unicode/1f579.png?v8",
+ "jp": "unicode/1f1ef-1f1f5.png?v8",
+ "judge": "unicode/1f9d1-2696.png?v8",
+ "juggling_person": "unicode/1f939.png?v8",
+ "kaaba": "unicode/1f54b.png?v8",
+ "kangaroo": "unicode/1f998.png?v8",
+ "kazakhstan": "unicode/1f1f0-1f1ff.png?v8",
+ "kenya": "unicode/1f1f0-1f1ea.png?v8",
+ "key": "unicode/1f511.png?v8",
+ "keyboard": "unicode/2328.png?v8",
+ "keycap_ten": "unicode/1f51f.png?v8",
+ "khanda": "unicode/1faaf.png?v8",
+ "kick_scooter": "unicode/1f6f4.png?v8",
+ "kimono": "unicode/1f458.png?v8",
+ "kiribati": "unicode/1f1f0-1f1ee.png?v8",
+ "kiss": "unicode/1f48b.png?v8",
+ "kissing": "unicode/1f617.png?v8",
+ "kissing_cat": "unicode/1f63d.png?v8",
+ "kissing_closed_eyes": "unicode/1f61a.png?v8",
+ "kissing_heart": "unicode/1f618.png?v8",
+ "kissing_smiling_eyes": "unicode/1f619.png?v8",
+ "kite": "unicode/1fa81.png?v8",
+ "kiwi_fruit": "unicode/1f95d.png?v8",
+ "kneeling_man": "unicode/1f9ce-2642.png?v8",
+ "kneeling_person": "unicode/1f9ce.png?v8",
+ "kneeling_woman": "unicode/1f9ce-2640.png?v8",
+ "knife": "unicode/1f52a.png?v8",
+ "knot": "unicode/1faa2.png?v8",
+ "koala": "unicode/1f428.png?v8",
+ "koko": "unicode/1f201.png?v8",
+ "kosovo": "unicode/1f1fd-1f1f0.png?v8",
+ "kr": "unicode/1f1f0-1f1f7.png?v8",
+ "kuwait": "unicode/1f1f0-1f1fc.png?v8",
+ "kyrgyzstan": "unicode/1f1f0-1f1ec.png?v8",
+ "lab_coat": "unicode/1f97c.png?v8",
+ "label": "unicode/1f3f7.png?v8",
+ "lacrosse": "unicode/1f94d.png?v8",
+ "ladder": "unicode/1fa9c.png?v8",
+ "lady_beetle": "unicode/1f41e.png?v8",
+ "lantern": "unicode/1f3ee.png?v8",
+ "laos": "unicode/1f1f1-1f1e6.png?v8",
+ "large_blue_circle": "unicode/1f535.png?v8",
+ "large_blue_diamond": "unicode/1f537.png?v8",
+ "large_orange_diamond": "unicode/1f536.png?v8",
+ "last_quarter_moon": "unicode/1f317.png?v8",
+ "last_quarter_moon_with_face": "unicode/1f31c.png?v8",
+ "latin_cross": "unicode/271d.png?v8",
+ "latvia": "unicode/1f1f1-1f1fb.png?v8",
+ "laughing": "unicode/1f606.png?v8",
+ "leafy_green": "unicode/1f96c.png?v8",
+ "leaves": "unicode/1f343.png?v8",
+ "lebanon": "unicode/1f1f1-1f1e7.png?v8",
+ "ledger": "unicode/1f4d2.png?v8",
+ "left_luggage": "unicode/1f6c5.png?v8",
+ "left_right_arrow": "unicode/2194.png?v8",
+ "left_speech_bubble": "unicode/1f5e8.png?v8",
+ "leftwards_arrow_with_hook": "unicode/21a9.png?v8",
+ "leftwards_hand": "unicode/1faf2.png?v8",
+ "leftwards_pushing_hand": "unicode/1faf7.png?v8",
+ "leg": "unicode/1f9b5.png?v8",
+ "lemon": "unicode/1f34b.png?v8",
+ "leo": "unicode/264c.png?v8",
+ "leopard": "unicode/1f406.png?v8",
+ "lesotho": "unicode/1f1f1-1f1f8.png?v8",
+ "level_slider": "unicode/1f39a.png?v8",
+ "liberia": "unicode/1f1f1-1f1f7.png?v8",
+ "libra": "unicode/264e.png?v8",
+ "libya": "unicode/1f1f1-1f1fe.png?v8",
+ "liechtenstein": "unicode/1f1f1-1f1ee.png?v8",
+ "light_blue_heart": "unicode/1fa75.png?v8",
+ "light_rail": "unicode/1f688.png?v8",
+ "link": "unicode/1f517.png?v8",
+ "lion": "unicode/1f981.png?v8",
+ "lips": "unicode/1f444.png?v8",
+ "lipstick": "unicode/1f484.png?v8",
+ "lithuania": "unicode/1f1f1-1f1f9.png?v8",
+ "lizard": "unicode/1f98e.png?v8",
+ "llama": "unicode/1f999.png?v8",
+ "lobster": "unicode/1f99e.png?v8",
+ "lock": "unicode/1f512.png?v8",
+ "lock_with_ink_pen": "unicode/1f50f.png?v8",
+ "lollipop": "unicode/1f36d.png?v8",
+ "long_drum": "unicode/1fa98.png?v8",
+ "loop": "unicode/27bf.png?v8",
+ "lotion_bottle": "unicode/1f9f4.png?v8",
+ "lotus": "unicode/1fab7.png?v8",
+ "lotus_position": "unicode/1f9d8.png?v8",
+ "lotus_position_man": "unicode/1f9d8-2642.png?v8",
+ "lotus_position_woman": "unicode/1f9d8-2640.png?v8",
+ "loud_sound": "unicode/1f50a.png?v8",
+ "loudspeaker": "unicode/1f4e2.png?v8",
+ "love_hotel": "unicode/1f3e9.png?v8",
+ "love_letter": "unicode/1f48c.png?v8",
+ "love_you_gesture": "unicode/1f91f.png?v8",
+ "low_battery": "unicode/1faab.png?v8",
+ "low_brightness": "unicode/1f505.png?v8",
+ "luggage": "unicode/1f9f3.png?v8",
+ "lungs": "unicode/1fac1.png?v8",
+ "luxembourg": "unicode/1f1f1-1f1fa.png?v8",
+ "lying_face": "unicode/1f925.png?v8",
+ "m": "unicode/24c2.png?v8",
+ "macau": "unicode/1f1f2-1f1f4.png?v8",
+ "macedonia": "unicode/1f1f2-1f1f0.png?v8",
+ "madagascar": "unicode/1f1f2-1f1ec.png?v8",
+ "mag": "unicode/1f50d.png?v8",
+ "mag_right": "unicode/1f50e.png?v8",
+ "mage": "unicode/1f9d9.png?v8",
+ "mage_man": "unicode/1f9d9-2642.png?v8",
+ "mage_woman": "unicode/1f9d9-2640.png?v8",
+ "magic_wand": "unicode/1fa84.png?v8",
+ "magnet": "unicode/1f9f2.png?v8",
+ "mahjong": "unicode/1f004.png?v8",
+ "mailbox": "unicode/1f4eb.png?v8",
+ "mailbox_closed": "unicode/1f4ea.png?v8",
+ "mailbox_with_mail": "unicode/1f4ec.png?v8",
+ "mailbox_with_no_mail": "unicode/1f4ed.png?v8",
+ "malawi": "unicode/1f1f2-1f1fc.png?v8",
+ "malaysia": "unicode/1f1f2-1f1fe.png?v8",
+ "maldives": "unicode/1f1f2-1f1fb.png?v8",
+ "male_detective": "unicode/1f575-2642.png?v8",
+ "male_sign": "unicode/2642.png?v8",
+ "mali": "unicode/1f1f2-1f1f1.png?v8",
+ "malta": "unicode/1f1f2-1f1f9.png?v8",
+ "mammoth": "unicode/1f9a3.png?v8",
+ "man": "unicode/1f468.png?v8",
+ "man_artist": "unicode/1f468-1f3a8.png?v8",
+ "man_astronaut": "unicode/1f468-1f680.png?v8",
+ "man_beard": "unicode/1f9d4-2642.png?v8",
+ "man_cartwheeling": "unicode/1f938-2642.png?v8",
+ "man_cook": "unicode/1f468-1f373.png?v8",
+ "man_dancing": "unicode/1f57a.png?v8",
+ "man_facepalming": "unicode/1f926-2642.png?v8",
+ "man_factory_worker": "unicode/1f468-1f3ed.png?v8",
+ "man_farmer": "unicode/1f468-1f33e.png?v8",
+ "man_feeding_baby": "unicode/1f468-1f37c.png?v8",
+ "man_firefighter": "unicode/1f468-1f692.png?v8",
+ "man_health_worker": "unicode/1f468-2695.png?v8",
+ "man_in_manual_wheelchair": "unicode/1f468-1f9bd.png?v8",
+ "man_in_motorized_wheelchair": "unicode/1f468-1f9bc.png?v8",
+ "man_in_tuxedo": "unicode/1f935-2642.png?v8",
+ "man_judge": "unicode/1f468-2696.png?v8",
+ "man_juggling": "unicode/1f939-2642.png?v8",
+ "man_mechanic": "unicode/1f468-1f527.png?v8",
+ "man_office_worker": "unicode/1f468-1f4bc.png?v8",
+ "man_pilot": "unicode/1f468-2708.png?v8",
+ "man_playing_handball": "unicode/1f93e-2642.png?v8",
+ "man_playing_water_polo": "unicode/1f93d-2642.png?v8",
+ "man_scientist": "unicode/1f468-1f52c.png?v8",
+ "man_shrugging": "unicode/1f937-2642.png?v8",
+ "man_singer": "unicode/1f468-1f3a4.png?v8",
+ "man_student": "unicode/1f468-1f393.png?v8",
+ "man_teacher": "unicode/1f468-1f3eb.png?v8",
+ "man_technologist": "unicode/1f468-1f4bb.png?v8",
+ "man_with_gua_pi_mao": "unicode/1f472.png?v8",
+ "man_with_probing_cane": "unicode/1f468-1f9af.png?v8",
+ "man_with_turban": "unicode/1f473-2642.png?v8",
+ "man_with_veil": "unicode/1f470-2642.png?v8",
+ "mandarin": "unicode/1f34a.png?v8",
+ "mango": "unicode/1f96d.png?v8",
+ "mans_shoe": "unicode/1f45e.png?v8",
+ "mantelpiece_clock": "unicode/1f570.png?v8",
+ "manual_wheelchair": "unicode/1f9bd.png?v8",
+ "maple_leaf": "unicode/1f341.png?v8",
+ "maracas": "unicode/1fa87.png?v8",
+ "marshall_islands": "unicode/1f1f2-1f1ed.png?v8",
+ "martial_arts_uniform": "unicode/1f94b.png?v8",
+ "martinique": "unicode/1f1f2-1f1f6.png?v8",
+ "mask": "unicode/1f637.png?v8",
+ "massage": "unicode/1f486.png?v8",
+ "massage_man": "unicode/1f486-2642.png?v8",
+ "massage_woman": "unicode/1f486-2640.png?v8",
+ "mate": "unicode/1f9c9.png?v8",
+ "mauritania": "unicode/1f1f2-1f1f7.png?v8",
+ "mauritius": "unicode/1f1f2-1f1fa.png?v8",
+ "mayotte": "unicode/1f1fe-1f1f9.png?v8",
+ "meat_on_bone": "unicode/1f356.png?v8",
+ "mechanic": "unicode/1f9d1-1f527.png?v8",
+ "mechanical_arm": "unicode/1f9be.png?v8",
+ "mechanical_leg": "unicode/1f9bf.png?v8",
+ "medal_military": "unicode/1f396.png?v8",
+ "medal_sports": "unicode/1f3c5.png?v8",
+ "medical_symbol": "unicode/2695.png?v8",
+ "mega": "unicode/1f4e3.png?v8",
+ "melon": "unicode/1f348.png?v8",
+ "melting_face": "unicode/1fae0.png?v8",
+ "memo": "unicode/1f4dd.png?v8",
+ "men_wrestling": "unicode/1f93c-2642.png?v8",
+ "mending_heart": "unicode/2764-1fa79.png?v8",
+ "menorah": "unicode/1f54e.png?v8",
+ "mens": "unicode/1f6b9.png?v8",
+ "mermaid": "unicode/1f9dc-2640.png?v8",
+ "merman": "unicode/1f9dc-2642.png?v8",
+ "merperson": "unicode/1f9dc.png?v8",
+ "metal": "unicode/1f918.png?v8",
+ "metro": "unicode/1f687.png?v8",
+ "mexico": "unicode/1f1f2-1f1fd.png?v8",
+ "microbe": "unicode/1f9a0.png?v8",
+ "micronesia": "unicode/1f1eb-1f1f2.png?v8",
+ "microphone": "unicode/1f3a4.png?v8",
+ "microscope": "unicode/1f52c.png?v8",
+ "middle_finger": "unicode/1f595.png?v8",
+ "military_helmet": "unicode/1fa96.png?v8",
+ "milk_glass": "unicode/1f95b.png?v8",
+ "milky_way": "unicode/1f30c.png?v8",
+ "minibus": "unicode/1f690.png?v8",
+ "minidisc": "unicode/1f4bd.png?v8",
+ "mirror": "unicode/1fa9e.png?v8",
+ "mirror_ball": "unicode/1faa9.png?v8",
+ "mobile_phone_off": "unicode/1f4f4.png?v8",
+ "moldova": "unicode/1f1f2-1f1e9.png?v8",
+ "monaco": "unicode/1f1f2-1f1e8.png?v8",
+ "money_mouth_face": "unicode/1f911.png?v8",
+ "money_with_wings": "unicode/1f4b8.png?v8",
+ "moneybag": "unicode/1f4b0.png?v8",
+ "mongolia": "unicode/1f1f2-1f1f3.png?v8",
+ "monkey": "unicode/1f412.png?v8",
+ "monkey_face": "unicode/1f435.png?v8",
+ "monocle_face": "unicode/1f9d0.png?v8",
+ "monorail": "unicode/1f69d.png?v8",
+ "montenegro": "unicode/1f1f2-1f1ea.png?v8",
+ "montserrat": "unicode/1f1f2-1f1f8.png?v8",
+ "moon": "unicode/1f314.png?v8",
+ "moon_cake": "unicode/1f96e.png?v8",
+ "moose": "unicode/1face.png?v8",
+ "morocco": "unicode/1f1f2-1f1e6.png?v8",
+ "mortar_board": "unicode/1f393.png?v8",
+ "mosque": "unicode/1f54c.png?v8",
+ "mosquito": "unicode/1f99f.png?v8",
+ "motor_boat": "unicode/1f6e5.png?v8",
+ "motor_scooter": "unicode/1f6f5.png?v8",
+ "motorcycle": "unicode/1f3cd.png?v8",
+ "motorized_wheelchair": "unicode/1f9bc.png?v8",
+ "motorway": "unicode/1f6e3.png?v8",
+ "mount_fuji": "unicode/1f5fb.png?v8",
+ "mountain": "unicode/26f0.png?v8",
+ "mountain_bicyclist": "unicode/1f6b5.png?v8",
+ "mountain_biking_man": "unicode/1f6b5-2642.png?v8",
+ "mountain_biking_woman": "unicode/1f6b5-2640.png?v8",
+ "mountain_cableway": "unicode/1f6a0.png?v8",
+ "mountain_railway": "unicode/1f69e.png?v8",
+ "mountain_snow": "unicode/1f3d4.png?v8",
+ "mouse": "unicode/1f42d.png?v8",
+ "mouse2": "unicode/1f401.png?v8",
+ "mouse_trap": "unicode/1faa4.png?v8",
+ "movie_camera": "unicode/1f3a5.png?v8",
+ "moyai": "unicode/1f5ff.png?v8",
+ "mozambique": "unicode/1f1f2-1f1ff.png?v8",
+ "mrs_claus": "unicode/1f936.png?v8",
+ "muscle": "unicode/1f4aa.png?v8",
+ "mushroom": "unicode/1f344.png?v8",
+ "musical_keyboard": "unicode/1f3b9.png?v8",
+ "musical_note": "unicode/1f3b5.png?v8",
+ "musical_score": "unicode/1f3bc.png?v8",
+ "mute": "unicode/1f507.png?v8",
+ "mx_claus": "unicode/1f9d1-1f384.png?v8",
+ "myanmar": "unicode/1f1f2-1f1f2.png?v8",
+ "nail_care": "unicode/1f485.png?v8",
+ "name_badge": "unicode/1f4db.png?v8",
+ "namibia": "unicode/1f1f3-1f1e6.png?v8",
+ "national_park": "unicode/1f3de.png?v8",
+ "nauru": "unicode/1f1f3-1f1f7.png?v8",
+ "nauseated_face": "unicode/1f922.png?v8",
+ "nazar_amulet": "unicode/1f9ff.png?v8",
+ "neckbeard": "neckbeard.png?v8",
+ "necktie": "unicode/1f454.png?v8",
+ "negative_squared_cross_mark": "unicode/274e.png?v8",
+ "nepal": "unicode/1f1f3-1f1f5.png?v8",
+ "nerd_face": "unicode/1f913.png?v8",
+ "nest_with_eggs": "unicode/1faba.png?v8",
+ "nesting_dolls": "unicode/1fa86.png?v8",
+ "netherlands": "unicode/1f1f3-1f1f1.png?v8",
+ "neutral_face": "unicode/1f610.png?v8",
+ "new": "unicode/1f195.png?v8",
+ "new_caledonia": "unicode/1f1f3-1f1e8.png?v8",
+ "new_moon": "unicode/1f311.png?v8",
+ "new_moon_with_face": "unicode/1f31a.png?v8",
+ "new_zealand": "unicode/1f1f3-1f1ff.png?v8",
+ "newspaper": "unicode/1f4f0.png?v8",
+ "newspaper_roll": "unicode/1f5de.png?v8",
+ "next_track_button": "unicode/23ed.png?v8",
+ "ng": "unicode/1f196.png?v8",
+ "ng_man": "unicode/1f645-2642.png?v8",
+ "ng_woman": "unicode/1f645-2640.png?v8",
+ "nicaragua": "unicode/1f1f3-1f1ee.png?v8",
+ "niger": "unicode/1f1f3-1f1ea.png?v8",
+ "nigeria": "unicode/1f1f3-1f1ec.png?v8",
+ "night_with_stars": "unicode/1f303.png?v8",
+ "nine": "unicode/0039-20e3.png?v8",
+ "ninja": "unicode/1f977.png?v8",
+ "niue": "unicode/1f1f3-1f1fa.png?v8",
+ "no_bell": "unicode/1f515.png?v8",
+ "no_bicycles": "unicode/1f6b3.png?v8",
+ "no_entry": "unicode/26d4.png?v8",
+ "no_entry_sign": "unicode/1f6ab.png?v8",
+ "no_good": "unicode/1f645.png?v8",
+ "no_good_man": "unicode/1f645-2642.png?v8",
+ "no_good_woman": "unicode/1f645-2640.png?v8",
+ "no_mobile_phones": "unicode/1f4f5.png?v8",
+ "no_mouth": "unicode/1f636.png?v8",
+ "no_pedestrians": "unicode/1f6b7.png?v8",
+ "no_smoking": "unicode/1f6ad.png?v8",
+ "non-potable_water": "unicode/1f6b1.png?v8",
+ "norfolk_island": "unicode/1f1f3-1f1eb.png?v8",
+ "north_korea": "unicode/1f1f0-1f1f5.png?v8",
+ "northern_mariana_islands": "unicode/1f1f2-1f1f5.png?v8",
+ "norway": "unicode/1f1f3-1f1f4.png?v8",
+ "nose": "unicode/1f443.png?v8",
+ "notebook": "unicode/1f4d3.png?v8",
+ "notebook_with_decorative_cover": "unicode/1f4d4.png?v8",
+ "notes": "unicode/1f3b6.png?v8",
+ "nut_and_bolt": "unicode/1f529.png?v8",
+ "o": "unicode/2b55.png?v8",
+ "o2": "unicode/1f17e.png?v8",
+ "ocean": "unicode/1f30a.png?v8",
+ "octocat": "octocat.png?v8",
+ "octopus": "unicode/1f419.png?v8",
+ "oden": "unicode/1f362.png?v8",
+ "office": "unicode/1f3e2.png?v8",
+ "office_worker": "unicode/1f9d1-1f4bc.png?v8",
+ "oil_drum": "unicode/1f6e2.png?v8",
+ "ok": "unicode/1f197.png?v8",
+ "ok_hand": "unicode/1f44c.png?v8",
+ "ok_man": "unicode/1f646-2642.png?v8",
+ "ok_person": "unicode/1f646.png?v8",
+ "ok_woman": "unicode/1f646-2640.png?v8",
+ "old_key": "unicode/1f5dd.png?v8",
+ "older_adult": "unicode/1f9d3.png?v8",
+ "older_man": "unicode/1f474.png?v8",
+ "older_woman": "unicode/1f475.png?v8",
+ "olive": "unicode/1fad2.png?v8",
+ "om": "unicode/1f549.png?v8",
+ "oman": "unicode/1f1f4-1f1f2.png?v8",
+ "on": "unicode/1f51b.png?v8",
+ "oncoming_automobile": "unicode/1f698.png?v8",
+ "oncoming_bus": "unicode/1f68d.png?v8",
+ "oncoming_police_car": "unicode/1f694.png?v8",
+ "oncoming_taxi": "unicode/1f696.png?v8",
+ "one": "unicode/0031-20e3.png?v8",
+ "one_piece_swimsuit": "unicode/1fa71.png?v8",
+ "onion": "unicode/1f9c5.png?v8",
+ "open_book": "unicode/1f4d6.png?v8",
+ "open_file_folder": "unicode/1f4c2.png?v8",
+ "open_hands": "unicode/1f450.png?v8",
+ "open_mouth": "unicode/1f62e.png?v8",
+ "open_umbrella": "unicode/2602.png?v8",
+ "ophiuchus": "unicode/26ce.png?v8",
+ "orange": "unicode/1f34a.png?v8",
+ "orange_book": "unicode/1f4d9.png?v8",
+ "orange_circle": "unicode/1f7e0.png?v8",
+ "orange_heart": "unicode/1f9e1.png?v8",
+ "orange_square": "unicode/1f7e7.png?v8",
+ "orangutan": "unicode/1f9a7.png?v8",
+ "orthodox_cross": "unicode/2626.png?v8",
+ "otter": "unicode/1f9a6.png?v8",
+ "outbox_tray": "unicode/1f4e4.png?v8",
+ "owl": "unicode/1f989.png?v8",
+ "ox": "unicode/1f402.png?v8",
+ "oyster": "unicode/1f9aa.png?v8",
+ "package": "unicode/1f4e6.png?v8",
+ "page_facing_up": "unicode/1f4c4.png?v8",
+ "page_with_curl": "unicode/1f4c3.png?v8",
+ "pager": "unicode/1f4df.png?v8",
+ "paintbrush": "unicode/1f58c.png?v8",
+ "pakistan": "unicode/1f1f5-1f1f0.png?v8",
+ "palau": "unicode/1f1f5-1f1fc.png?v8",
+ "palestinian_territories": "unicode/1f1f5-1f1f8.png?v8",
+ "palm_down_hand": "unicode/1faf3.png?v8",
+ "palm_tree": "unicode/1f334.png?v8",
+ "palm_up_hand": "unicode/1faf4.png?v8",
+ "palms_up_together": "unicode/1f932.png?v8",
+ "panama": "unicode/1f1f5-1f1e6.png?v8",
+ "pancakes": "unicode/1f95e.png?v8",
+ "panda_face": "unicode/1f43c.png?v8",
+ "paperclip": "unicode/1f4ce.png?v8",
+ "paperclips": "unicode/1f587.png?v8",
+ "papua_new_guinea": "unicode/1f1f5-1f1ec.png?v8",
+ "parachute": "unicode/1fa82.png?v8",
+ "paraguay": "unicode/1f1f5-1f1fe.png?v8",
+ "parasol_on_ground": "unicode/26f1.png?v8",
+ "parking": "unicode/1f17f.png?v8",
+ "parrot": "unicode/1f99c.png?v8",
+ "part_alternation_mark": "unicode/303d.png?v8",
+ "partly_sunny": "unicode/26c5.png?v8",
+ "partying_face": "unicode/1f973.png?v8",
+ "passenger_ship": "unicode/1f6f3.png?v8",
+ "passport_control": "unicode/1f6c2.png?v8",
+ "pause_button": "unicode/23f8.png?v8",
+ "paw_prints": "unicode/1f43e.png?v8",
+ "pea_pod": "unicode/1fadb.png?v8",
+ "peace_symbol": "unicode/262e.png?v8",
+ "peach": "unicode/1f351.png?v8",
+ "peacock": "unicode/1f99a.png?v8",
+ "peanuts": "unicode/1f95c.png?v8",
+ "pear": "unicode/1f350.png?v8",
+ "pen": "unicode/1f58a.png?v8",
+ "pencil": "unicode/1f4dd.png?v8",
+ "pencil2": "unicode/270f.png?v8",
+ "penguin": "unicode/1f427.png?v8",
+ "pensive": "unicode/1f614.png?v8",
+ "people_holding_hands": "unicode/1f9d1-1f91d-1f9d1.png?v8",
+ "people_hugging": "unicode/1fac2.png?v8",
+ "performing_arts": "unicode/1f3ad.png?v8",
+ "persevere": "unicode/1f623.png?v8",
+ "person_bald": "unicode/1f9d1-1f9b2.png?v8",
+ "person_curly_hair": "unicode/1f9d1-1f9b1.png?v8",
+ "person_feeding_baby": "unicode/1f9d1-1f37c.png?v8",
+ "person_fencing": "unicode/1f93a.png?v8",
+ "person_in_manual_wheelchair": "unicode/1f9d1-1f9bd.png?v8",
+ "person_in_motorized_wheelchair": "unicode/1f9d1-1f9bc.png?v8",
+ "person_in_tuxedo": "unicode/1f935.png?v8",
+ "person_red_hair": "unicode/1f9d1-1f9b0.png?v8",
+ "person_white_hair": "unicode/1f9d1-1f9b3.png?v8",
+ "person_with_crown": "unicode/1fac5.png?v8",
+ "person_with_probing_cane": "unicode/1f9d1-1f9af.png?v8",
+ "person_with_turban": "unicode/1f473.png?v8",
+ "person_with_veil": "unicode/1f470.png?v8",
+ "peru": "unicode/1f1f5-1f1ea.png?v8",
+ "petri_dish": "unicode/1f9eb.png?v8",
+ "philippines": "unicode/1f1f5-1f1ed.png?v8",
+ "phone": "unicode/260e.png?v8",
+ "pick": "unicode/26cf.png?v8",
+ "pickup_truck": "unicode/1f6fb.png?v8",
+ "pie": "unicode/1f967.png?v8",
+ "pig": "unicode/1f437.png?v8",
+ "pig2": "unicode/1f416.png?v8",
+ "pig_nose": "unicode/1f43d.png?v8",
+ "pill": "unicode/1f48a.png?v8",
+ "pilot": "unicode/1f9d1-2708.png?v8",
+ "pinata": "unicode/1fa85.png?v8",
+ "pinched_fingers": "unicode/1f90c.png?v8",
+ "pinching_hand": "unicode/1f90f.png?v8",
+ "pineapple": "unicode/1f34d.png?v8",
+ "ping_pong": "unicode/1f3d3.png?v8",
+ "pink_heart": "unicode/1fa77.png?v8",
+ "pirate_flag": "unicode/1f3f4-2620.png?v8",
+ "pisces": "unicode/2653.png?v8",
+ "pitcairn_islands": "unicode/1f1f5-1f1f3.png?v8",
+ "pizza": "unicode/1f355.png?v8",
+ "placard": "unicode/1faa7.png?v8",
+ "place_of_worship": "unicode/1f6d0.png?v8",
+ "plate_with_cutlery": "unicode/1f37d.png?v8",
+ "play_or_pause_button": "unicode/23ef.png?v8",
+ "playground_slide": "unicode/1f6dd.png?v8",
+ "pleading_face": "unicode/1f97a.png?v8",
+ "plunger": "unicode/1faa0.png?v8",
+ "point_down": "unicode/1f447.png?v8",
+ "point_left": "unicode/1f448.png?v8",
+ "point_right": "unicode/1f449.png?v8",
+ "point_up": "unicode/261d.png?v8",
+ "point_up_2": "unicode/1f446.png?v8",
+ "poland": "unicode/1f1f5-1f1f1.png?v8",
+ "polar_bear": "unicode/1f43b-2744.png?v8",
+ "police_car": "unicode/1f693.png?v8",
+ "police_officer": "unicode/1f46e.png?v8",
+ "policeman": "unicode/1f46e-2642.png?v8",
+ "policewoman": "unicode/1f46e-2640.png?v8",
+ "poodle": "unicode/1f429.png?v8",
+ "poop": "unicode/1f4a9.png?v8",
+ "popcorn": "unicode/1f37f.png?v8",
+ "portugal": "unicode/1f1f5-1f1f9.png?v8",
+ "post_office": "unicode/1f3e3.png?v8",
+ "postal_horn": "unicode/1f4ef.png?v8",
+ "postbox": "unicode/1f4ee.png?v8",
+ "potable_water": "unicode/1f6b0.png?v8",
+ "potato": "unicode/1f954.png?v8",
+ "potted_plant": "unicode/1fab4.png?v8",
+ "pouch": "unicode/1f45d.png?v8",
+ "poultry_leg": "unicode/1f357.png?v8",
+ "pound": "unicode/1f4b7.png?v8",
+ "pouring_liquid": "unicode/1fad7.png?v8",
+ "pout": "unicode/1f621.png?v8",
+ "pouting_cat": "unicode/1f63e.png?v8",
+ "pouting_face": "unicode/1f64e.png?v8",
+ "pouting_man": "unicode/1f64e-2642.png?v8",
+ "pouting_woman": "unicode/1f64e-2640.png?v8",
+ "pray": "unicode/1f64f.png?v8",
+ "prayer_beads": "unicode/1f4ff.png?v8",
+ "pregnant_man": "unicode/1fac3.png?v8",
+ "pregnant_person": "unicode/1fac4.png?v8",
+ "pregnant_woman": "unicode/1f930.png?v8",
+ "pretzel": "unicode/1f968.png?v8",
+ "previous_track_button": "unicode/23ee.png?v8",
+ "prince": "unicode/1f934.png?v8",
+ "princess": "unicode/1f478.png?v8",
+ "printer": "unicode/1f5a8.png?v8",
+ "probing_cane": "unicode/1f9af.png?v8",
+ "puerto_rico": "unicode/1f1f5-1f1f7.png?v8",
+ "punch": "unicode/1f44a.png?v8",
+ "purple_circle": "unicode/1f7e3.png?v8",
+ "purple_heart": "unicode/1f49c.png?v8",
+ "purple_square": "unicode/1f7ea.png?v8",
+ "purse": "unicode/1f45b.png?v8",
+ "pushpin": "unicode/1f4cc.png?v8",
+ "put_litter_in_its_place": "unicode/1f6ae.png?v8",
+ "qatar": "unicode/1f1f6-1f1e6.png?v8",
+ "question": "unicode/2753.png?v8",
+ "rabbit": "unicode/1f430.png?v8",
+ "rabbit2": "unicode/1f407.png?v8",
+ "raccoon": "unicode/1f99d.png?v8",
+ "racehorse": "unicode/1f40e.png?v8",
+ "racing_car": "unicode/1f3ce.png?v8",
+ "radio": "unicode/1f4fb.png?v8",
+ "radio_button": "unicode/1f518.png?v8",
+ "radioactive": "unicode/2622.png?v8",
+ "rage": "unicode/1f621.png?v8",
+ "rage1": "rage1.png?v8",
+ "rage2": "rage2.png?v8",
+ "rage3": "rage3.png?v8",
+ "rage4": "rage4.png?v8",
+ "railway_car": "unicode/1f683.png?v8",
+ "railway_track": "unicode/1f6e4.png?v8",
+ "rainbow": "unicode/1f308.png?v8",
+ "rainbow_flag": "unicode/1f3f3-1f308.png?v8",
+ "raised_back_of_hand": "unicode/1f91a.png?v8",
+ "raised_eyebrow": "unicode/1f928.png?v8",
+ "raised_hand": "unicode/270b.png?v8",
+ "raised_hand_with_fingers_splayed": "unicode/1f590.png?v8",
+ "raised_hands": "unicode/1f64c.png?v8",
+ "raising_hand": "unicode/1f64b.png?v8",
+ "raising_hand_man": "unicode/1f64b-2642.png?v8",
+ "raising_hand_woman": "unicode/1f64b-2640.png?v8",
+ "ram": "unicode/1f40f.png?v8",
+ "ramen": "unicode/1f35c.png?v8",
+ "rat": "unicode/1f400.png?v8",
+ "razor": "unicode/1fa92.png?v8",
+ "receipt": "unicode/1f9fe.png?v8",
+ "record_button": "unicode/23fa.png?v8",
+ "recycle": "unicode/267b.png?v8",
+ "red_car": "unicode/1f697.png?v8",
+ "red_circle": "unicode/1f534.png?v8",
+ "red_envelope": "unicode/1f9e7.png?v8",
+ "red_haired_man": "unicode/1f468-1f9b0.png?v8",
+ "red_haired_woman": "unicode/1f469-1f9b0.png?v8",
+ "red_square": "unicode/1f7e5.png?v8",
+ "registered": "unicode/00ae.png?v8",
+ "relaxed": "unicode/263a.png?v8",
+ "relieved": "unicode/1f60c.png?v8",
+ "reminder_ribbon": "unicode/1f397.png?v8",
+ "repeat": "unicode/1f501.png?v8",
+ "repeat_one": "unicode/1f502.png?v8",
+ "rescue_worker_helmet": "unicode/26d1.png?v8",
+ "restroom": "unicode/1f6bb.png?v8",
+ "reunion": "unicode/1f1f7-1f1ea.png?v8",
+ "revolving_hearts": "unicode/1f49e.png?v8",
+ "rewind": "unicode/23ea.png?v8",
+ "rhinoceros": "unicode/1f98f.png?v8",
+ "ribbon": "unicode/1f380.png?v8",
+ "rice": "unicode/1f35a.png?v8",
+ "rice_ball": "unicode/1f359.png?v8",
+ "rice_cracker": "unicode/1f358.png?v8",
+ "rice_scene": "unicode/1f391.png?v8",
+ "right_anger_bubble": "unicode/1f5ef.png?v8",
+ "rightwards_hand": "unicode/1faf1.png?v8",
+ "rightwards_pushing_hand": "unicode/1faf8.png?v8",
+ "ring": "unicode/1f48d.png?v8",
+ "ring_buoy": "unicode/1f6df.png?v8",
+ "ringed_planet": "unicode/1fa90.png?v8",
+ "robot": "unicode/1f916.png?v8",
+ "rock": "unicode/1faa8.png?v8",
+ "rocket": "unicode/1f680.png?v8",
+ "rofl": "unicode/1f923.png?v8",
+ "roll_eyes": "unicode/1f644.png?v8",
+ "roll_of_paper": "unicode/1f9fb.png?v8",
+ "roller_coaster": "unicode/1f3a2.png?v8",
+ "roller_skate": "unicode/1f6fc.png?v8",
+ "romania": "unicode/1f1f7-1f1f4.png?v8",
+ "rooster": "unicode/1f413.png?v8",
+ "rose": "unicode/1f339.png?v8",
+ "rosette": "unicode/1f3f5.png?v8",
+ "rotating_light": "unicode/1f6a8.png?v8",
+ "round_pushpin": "unicode/1f4cd.png?v8",
+ "rowboat": "unicode/1f6a3.png?v8",
+ "rowing_man": "unicode/1f6a3-2642.png?v8",
+ "rowing_woman": "unicode/1f6a3-2640.png?v8",
+ "ru": "unicode/1f1f7-1f1fa.png?v8",
+ "rugby_football": "unicode/1f3c9.png?v8",
+ "runner": "unicode/1f3c3.png?v8",
+ "running": "unicode/1f3c3.png?v8",
+ "running_man": "unicode/1f3c3-2642.png?v8",
+ "running_shirt_with_sash": "unicode/1f3bd.png?v8",
+ "running_woman": "unicode/1f3c3-2640.png?v8",
+ "rwanda": "unicode/1f1f7-1f1fc.png?v8",
+ "sa": "unicode/1f202.png?v8",
+ "safety_pin": "unicode/1f9f7.png?v8",
+ "safety_vest": "unicode/1f9ba.png?v8",
+ "sagittarius": "unicode/2650.png?v8",
+ "sailboat": "unicode/26f5.png?v8",
+ "sake": "unicode/1f376.png?v8",
+ "salt": "unicode/1f9c2.png?v8",
+ "saluting_face": "unicode/1fae1.png?v8",
+ "samoa": "unicode/1f1fc-1f1f8.png?v8",
+ "san_marino": "unicode/1f1f8-1f1f2.png?v8",
+ "sandal": "unicode/1f461.png?v8",
+ "sandwich": "unicode/1f96a.png?v8",
+ "santa": "unicode/1f385.png?v8",
+ "sao_tome_principe": "unicode/1f1f8-1f1f9.png?v8",
+ "sari": "unicode/1f97b.png?v8",
+ "sassy_man": "unicode/1f481-2642.png?v8",
+ "sassy_woman": "unicode/1f481-2640.png?v8",
+ "satellite": "unicode/1f4e1.png?v8",
+ "satisfied": "unicode/1f606.png?v8",
+ "saudi_arabia": "unicode/1f1f8-1f1e6.png?v8",
+ "sauna_man": "unicode/1f9d6-2642.png?v8",
+ "sauna_person": "unicode/1f9d6.png?v8",
+ "sauna_woman": "unicode/1f9d6-2640.png?v8",
+ "sauropod": "unicode/1f995.png?v8",
+ "saxophone": "unicode/1f3b7.png?v8",
+ "scarf": "unicode/1f9e3.png?v8",
+ "school": "unicode/1f3eb.png?v8",
+ "school_satchel": "unicode/1f392.png?v8",
+ "scientist": "unicode/1f9d1-1f52c.png?v8",
+ "scissors": "unicode/2702.png?v8",
+ "scorpion": "unicode/1f982.png?v8",
+ "scorpius": "unicode/264f.png?v8",
+ "scotland": "unicode/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png?v8",
+ "scream": "unicode/1f631.png?v8",
+ "scream_cat": "unicode/1f640.png?v8",
+ "screwdriver": "unicode/1fa9b.png?v8",
+ "scroll": "unicode/1f4dc.png?v8",
+ "seal": "unicode/1f9ad.png?v8",
+ "seat": "unicode/1f4ba.png?v8",
+ "secret": "unicode/3299.png?v8",
+ "see_no_evil": "unicode/1f648.png?v8",
+ "seedling": "unicode/1f331.png?v8",
+ "selfie": "unicode/1f933.png?v8",
+ "senegal": "unicode/1f1f8-1f1f3.png?v8",
+ "serbia": "unicode/1f1f7-1f1f8.png?v8",
+ "service_dog": "unicode/1f415-1f9ba.png?v8",
+ "seven": "unicode/0037-20e3.png?v8",
+ "sewing_needle": "unicode/1faa1.png?v8",
+ "seychelles": "unicode/1f1f8-1f1e8.png?v8",
+ "shaking_face": "unicode/1fae8.png?v8",
+ "shallow_pan_of_food": "unicode/1f958.png?v8",
+ "shamrock": "unicode/2618.png?v8",
+ "shark": "unicode/1f988.png?v8",
+ "shaved_ice": "unicode/1f367.png?v8",
+ "sheep": "unicode/1f411.png?v8",
+ "shell": "unicode/1f41a.png?v8",
+ "shield": "unicode/1f6e1.png?v8",
+ "shinto_shrine": "unicode/26e9.png?v8",
+ "ship": "unicode/1f6a2.png?v8",
+ "shipit": "shipit.png?v8",
+ "shirt": "unicode/1f455.png?v8",
+ "shit": "unicode/1f4a9.png?v8",
+ "shoe": "unicode/1f45e.png?v8",
+ "shopping": "unicode/1f6cd.png?v8",
+ "shopping_cart": "unicode/1f6d2.png?v8",
+ "shorts": "unicode/1fa73.png?v8",
+ "shower": "unicode/1f6bf.png?v8",
+ "shrimp": "unicode/1f990.png?v8",
+ "shrug": "unicode/1f937.png?v8",
+ "shushing_face": "unicode/1f92b.png?v8",
+ "sierra_leone": "unicode/1f1f8-1f1f1.png?v8",
+ "signal_strength": "unicode/1f4f6.png?v8",
+ "singapore": "unicode/1f1f8-1f1ec.png?v8",
+ "singer": "unicode/1f9d1-1f3a4.png?v8",
+ "sint_maarten": "unicode/1f1f8-1f1fd.png?v8",
+ "six": "unicode/0036-20e3.png?v8",
+ "six_pointed_star": "unicode/1f52f.png?v8",
+ "skateboard": "unicode/1f6f9.png?v8",
+ "ski": "unicode/1f3bf.png?v8",
+ "skier": "unicode/26f7.png?v8",
+ "skull": "unicode/1f480.png?v8",
+ "skull_and_crossbones": "unicode/2620.png?v8",
+ "skunk": "unicode/1f9a8.png?v8",
+ "sled": "unicode/1f6f7.png?v8",
+ "sleeping": "unicode/1f634.png?v8",
+ "sleeping_bed": "unicode/1f6cc.png?v8",
+ "sleepy": "unicode/1f62a.png?v8",
+ "slightly_frowning_face": "unicode/1f641.png?v8",
+ "slightly_smiling_face": "unicode/1f642.png?v8",
+ "slot_machine": "unicode/1f3b0.png?v8",
+ "sloth": "unicode/1f9a5.png?v8",
+ "slovakia": "unicode/1f1f8-1f1f0.png?v8",
+ "slovenia": "unicode/1f1f8-1f1ee.png?v8",
+ "small_airplane": "unicode/1f6e9.png?v8",
+ "small_blue_diamond": "unicode/1f539.png?v8",
+ "small_orange_diamond": "unicode/1f538.png?v8",
+ "small_red_triangle": "unicode/1f53a.png?v8",
+ "small_red_triangle_down": "unicode/1f53b.png?v8",
+ "smile": "unicode/1f604.png?v8",
+ "smile_cat": "unicode/1f638.png?v8",
+ "smiley": "unicode/1f603.png?v8",
+ "smiley_cat": "unicode/1f63a.png?v8",
+ "smiling_face_with_tear": "unicode/1f972.png?v8",
+ "smiling_face_with_three_hearts": "unicode/1f970.png?v8",
+ "smiling_imp": "unicode/1f608.png?v8",
+ "smirk": "unicode/1f60f.png?v8",
+ "smirk_cat": "unicode/1f63c.png?v8",
+ "smoking": "unicode/1f6ac.png?v8",
+ "snail": "unicode/1f40c.png?v8",
+ "snake": "unicode/1f40d.png?v8",
+ "sneezing_face": "unicode/1f927.png?v8",
+ "snowboarder": "unicode/1f3c2.png?v8",
+ "snowflake": "unicode/2744.png?v8",
+ "snowman": "unicode/26c4.png?v8",
+ "snowman_with_snow": "unicode/2603.png?v8",
+ "soap": "unicode/1f9fc.png?v8",
+ "sob": "unicode/1f62d.png?v8",
+ "soccer": "unicode/26bd.png?v8",
+ "socks": "unicode/1f9e6.png?v8",
+ "softball": "unicode/1f94e.png?v8",
+ "solomon_islands": "unicode/1f1f8-1f1e7.png?v8",
+ "somalia": "unicode/1f1f8-1f1f4.png?v8",
+ "soon": "unicode/1f51c.png?v8",
+ "sos": "unicode/1f198.png?v8",
+ "sound": "unicode/1f509.png?v8",
+ "south_africa": "unicode/1f1ff-1f1e6.png?v8",
+ "south_georgia_south_sandwich_islands": "unicode/1f1ec-1f1f8.png?v8",
+ "south_sudan": "unicode/1f1f8-1f1f8.png?v8",
+ "space_invader": "unicode/1f47e.png?v8",
+ "spades": "unicode/2660.png?v8",
+ "spaghetti": "unicode/1f35d.png?v8",
+ "sparkle": "unicode/2747.png?v8",
+ "sparkler": "unicode/1f387.png?v8",
+ "sparkles": "unicode/2728.png?v8",
+ "sparkling_heart": "unicode/1f496.png?v8",
+ "speak_no_evil": "unicode/1f64a.png?v8",
+ "speaker": "unicode/1f508.png?v8",
+ "speaking_head": "unicode/1f5e3.png?v8",
+ "speech_balloon": "unicode/1f4ac.png?v8",
+ "speedboat": "unicode/1f6a4.png?v8",
+ "spider": "unicode/1f577.png?v8",
+ "spider_web": "unicode/1f578.png?v8",
+ "spiral_calendar": "unicode/1f5d3.png?v8",
+ "spiral_notepad": "unicode/1f5d2.png?v8",
+ "sponge": "unicode/1f9fd.png?v8",
+ "spoon": "unicode/1f944.png?v8",
+ "squid": "unicode/1f991.png?v8",
+ "sri_lanka": "unicode/1f1f1-1f1f0.png?v8",
+ "st_barthelemy": "unicode/1f1e7-1f1f1.png?v8",
+ "st_helena": "unicode/1f1f8-1f1ed.png?v8",
+ "st_kitts_nevis": "unicode/1f1f0-1f1f3.png?v8",
+ "st_lucia": "unicode/1f1f1-1f1e8.png?v8",
+ "st_martin": "unicode/1f1f2-1f1eb.png?v8",
+ "st_pierre_miquelon": "unicode/1f1f5-1f1f2.png?v8",
+ "st_vincent_grenadines": "unicode/1f1fb-1f1e8.png?v8",
+ "stadium": "unicode/1f3df.png?v8",
+ "standing_man": "unicode/1f9cd-2642.png?v8",
+ "standing_person": "unicode/1f9cd.png?v8",
+ "standing_woman": "unicode/1f9cd-2640.png?v8",
+ "star": "unicode/2b50.png?v8",
+ "star2": "unicode/1f31f.png?v8",
+ "star_and_crescent": "unicode/262a.png?v8",
+ "star_of_david": "unicode/2721.png?v8",
+ "star_struck": "unicode/1f929.png?v8",
+ "stars": "unicode/1f320.png?v8",
+ "station": "unicode/1f689.png?v8",
+ "statue_of_liberty": "unicode/1f5fd.png?v8",
+ "steam_locomotive": "unicode/1f682.png?v8",
+ "stethoscope": "unicode/1fa7a.png?v8",
+ "stew": "unicode/1f372.png?v8",
+ "stop_button": "unicode/23f9.png?v8",
+ "stop_sign": "unicode/1f6d1.png?v8",
+ "stopwatch": "unicode/23f1.png?v8",
+ "straight_ruler": "unicode/1f4cf.png?v8",
+ "strawberry": "unicode/1f353.png?v8",
+ "stuck_out_tongue": "unicode/1f61b.png?v8",
+ "stuck_out_tongue_closed_eyes": "unicode/1f61d.png?v8",
+ "stuck_out_tongue_winking_eye": "unicode/1f61c.png?v8",
+ "student": "unicode/1f9d1-1f393.png?v8",
+ "studio_microphone": "unicode/1f399.png?v8",
+ "stuffed_flatbread": "unicode/1f959.png?v8",
+ "sudan": "unicode/1f1f8-1f1e9.png?v8",
+ "sun_behind_large_cloud": "unicode/1f325.png?v8",
+ "sun_behind_rain_cloud": "unicode/1f326.png?v8",
+ "sun_behind_small_cloud": "unicode/1f324.png?v8",
+ "sun_with_face": "unicode/1f31e.png?v8",
+ "sunflower": "unicode/1f33b.png?v8",
+ "sunglasses": "unicode/1f60e.png?v8",
+ "sunny": "unicode/2600.png?v8",
+ "sunrise": "unicode/1f305.png?v8",
+ "sunrise_over_mountains": "unicode/1f304.png?v8",
+ "superhero": "unicode/1f9b8.png?v8",
+ "superhero_man": "unicode/1f9b8-2642.png?v8",
+ "superhero_woman": "unicode/1f9b8-2640.png?v8",
+ "supervillain": "unicode/1f9b9.png?v8",
+ "supervillain_man": "unicode/1f9b9-2642.png?v8",
+ "supervillain_woman": "unicode/1f9b9-2640.png?v8",
+ "surfer": "unicode/1f3c4.png?v8",
+ "surfing_man": "unicode/1f3c4-2642.png?v8",
+ "surfing_woman": "unicode/1f3c4-2640.png?v8",
+ "suriname": "unicode/1f1f8-1f1f7.png?v8",
+ "sushi": "unicode/1f363.png?v8",
+ "suspect": "suspect.png?v8",
+ "suspension_railway": "unicode/1f69f.png?v8",
+ "svalbard_jan_mayen": "unicode/1f1f8-1f1ef.png?v8",
+ "swan": "unicode/1f9a2.png?v8",
+ "swaziland": "unicode/1f1f8-1f1ff.png?v8",
+ "sweat": "unicode/1f613.png?v8",
+ "sweat_drops": "unicode/1f4a6.png?v8",
+ "sweat_smile": "unicode/1f605.png?v8",
+ "sweden": "unicode/1f1f8-1f1ea.png?v8",
+ "sweet_potato": "unicode/1f360.png?v8",
+ "swim_brief": "unicode/1fa72.png?v8",
+ "swimmer": "unicode/1f3ca.png?v8",
+ "swimming_man": "unicode/1f3ca-2642.png?v8",
+ "swimming_woman": "unicode/1f3ca-2640.png?v8",
+ "switzerland": "unicode/1f1e8-1f1ed.png?v8",
+ "symbols": "unicode/1f523.png?v8",
+ "synagogue": "unicode/1f54d.png?v8",
+ "syria": "unicode/1f1f8-1f1fe.png?v8",
+ "syringe": "unicode/1f489.png?v8",
+ "t-rex": "unicode/1f996.png?v8",
+ "taco": "unicode/1f32e.png?v8",
+ "tada": "unicode/1f389.png?v8",
+ "taiwan": "unicode/1f1f9-1f1fc.png?v8",
+ "tajikistan": "unicode/1f1f9-1f1ef.png?v8",
+ "takeout_box": "unicode/1f961.png?v8",
+ "tamale": "unicode/1fad4.png?v8",
+ "tanabata_tree": "unicode/1f38b.png?v8",
+ "tangerine": "unicode/1f34a.png?v8",
+ "tanzania": "unicode/1f1f9-1f1ff.png?v8",
+ "taurus": "unicode/2649.png?v8",
+ "taxi": "unicode/1f695.png?v8",
+ "tea": "unicode/1f375.png?v8",
+ "teacher": "unicode/1f9d1-1f3eb.png?v8",
+ "teapot": "unicode/1fad6.png?v8",
+ "technologist": "unicode/1f9d1-1f4bb.png?v8",
+ "teddy_bear": "unicode/1f9f8.png?v8",
+ "telephone": "unicode/260e.png?v8",
+ "telephone_receiver": "unicode/1f4de.png?v8",
+ "telescope": "unicode/1f52d.png?v8",
+ "tennis": "unicode/1f3be.png?v8",
+ "tent": "unicode/26fa.png?v8",
+ "test_tube": "unicode/1f9ea.png?v8",
+ "thailand": "unicode/1f1f9-1f1ed.png?v8",
+ "thermometer": "unicode/1f321.png?v8",
+ "thinking": "unicode/1f914.png?v8",
+ "thong_sandal": "unicode/1fa74.png?v8",
+ "thought_balloon": "unicode/1f4ad.png?v8",
+ "thread": "unicode/1f9f5.png?v8",
+ "three": "unicode/0033-20e3.png?v8",
+ "thumbsdown": "unicode/1f44e.png?v8",
+ "thumbsup": "unicode/1f44d.png?v8",
+ "ticket": "unicode/1f3ab.png?v8",
+ "tickets": "unicode/1f39f.png?v8",
+ "tiger": "unicode/1f42f.png?v8",
+ "tiger2": "unicode/1f405.png?v8",
+ "timer_clock": "unicode/23f2.png?v8",
+ "timor_leste": "unicode/1f1f9-1f1f1.png?v8",
+ "tipping_hand_man": "unicode/1f481-2642.png?v8",
+ "tipping_hand_person": "unicode/1f481.png?v8",
+ "tipping_hand_woman": "unicode/1f481-2640.png?v8",
+ "tired_face": "unicode/1f62b.png?v8",
+ "tm": "unicode/2122.png?v8",
+ "togo": "unicode/1f1f9-1f1ec.png?v8",
+ "toilet": "unicode/1f6bd.png?v8",
+ "tokelau": "unicode/1f1f9-1f1f0.png?v8",
+ "tokyo_tower": "unicode/1f5fc.png?v8",
+ "tomato": "unicode/1f345.png?v8",
+ "tonga": "unicode/1f1f9-1f1f4.png?v8",
+ "tongue": "unicode/1f445.png?v8",
+ "toolbox": "unicode/1f9f0.png?v8",
+ "tooth": "unicode/1f9b7.png?v8",
+ "toothbrush": "unicode/1faa5.png?v8",
+ "top": "unicode/1f51d.png?v8",
+ "tophat": "unicode/1f3a9.png?v8",
+ "tornado": "unicode/1f32a.png?v8",
+ "tr": "unicode/1f1f9-1f1f7.png?v8",
+ "trackball": "unicode/1f5b2.png?v8",
+ "tractor": "unicode/1f69c.png?v8",
+ "traffic_light": "unicode/1f6a5.png?v8",
+ "train": "unicode/1f68b.png?v8",
+ "train2": "unicode/1f686.png?v8",
+ "tram": "unicode/1f68a.png?v8",
+ "transgender_flag": "unicode/1f3f3-26a7.png?v8",
+ "transgender_symbol": "unicode/26a7.png?v8",
+ "triangular_flag_on_post": "unicode/1f6a9.png?v8",
+ "triangular_ruler": "unicode/1f4d0.png?v8",
+ "trident": "unicode/1f531.png?v8",
+ "trinidad_tobago": "unicode/1f1f9-1f1f9.png?v8",
+ "tristan_da_cunha": "unicode/1f1f9-1f1e6.png?v8",
+ "triumph": "unicode/1f624.png?v8",
+ "troll": "unicode/1f9cc.png?v8",
+ "trolleybus": "unicode/1f68e.png?v8",
+ "trollface": "trollface.png?v8",
+ "trophy": "unicode/1f3c6.png?v8",
+ "tropical_drink": "unicode/1f379.png?v8",
+ "tropical_fish": "unicode/1f420.png?v8",
+ "truck": "unicode/1f69a.png?v8",
+ "trumpet": "unicode/1f3ba.png?v8",
+ "tshirt": "unicode/1f455.png?v8",
+ "tulip": "unicode/1f337.png?v8",
+ "tumbler_glass": "unicode/1f943.png?v8",
+ "tunisia": "unicode/1f1f9-1f1f3.png?v8",
+ "turkey": "unicode/1f983.png?v8",
+ "turkmenistan": "unicode/1f1f9-1f1f2.png?v8",
+ "turks_caicos_islands": "unicode/1f1f9-1f1e8.png?v8",
+ "turtle": "unicode/1f422.png?v8",
+ "tuvalu": "unicode/1f1f9-1f1fb.png?v8",
+ "tv": "unicode/1f4fa.png?v8",
+ "twisted_rightwards_arrows": "unicode/1f500.png?v8",
+ "two": "unicode/0032-20e3.png?v8",
+ "two_hearts": "unicode/1f495.png?v8",
+ "two_men_holding_hands": "unicode/1f46c.png?v8",
+ "two_women_holding_hands": "unicode/1f46d.png?v8",
+ "u5272": "unicode/1f239.png?v8",
+ "u5408": "unicode/1f234.png?v8",
+ "u55b6": "unicode/1f23a.png?v8",
+ "u6307": "unicode/1f22f.png?v8",
+ "u6708": "unicode/1f237.png?v8",
+ "u6709": "unicode/1f236.png?v8",
+ "u6e80": "unicode/1f235.png?v8",
+ "u7121": "unicode/1f21a.png?v8",
+ "u7533": "unicode/1f238.png?v8",
+ "u7981": "unicode/1f232.png?v8",
+ "u7a7a": "unicode/1f233.png?v8",
+ "uganda": "unicode/1f1fa-1f1ec.png?v8",
+ "uk": "unicode/1f1ec-1f1e7.png?v8",
+ "ukraine": "unicode/1f1fa-1f1e6.png?v8",
+ "umbrella": "unicode/2614.png?v8",
+ "unamused": "unicode/1f612.png?v8",
+ "underage": "unicode/1f51e.png?v8",
+ "unicorn": "unicode/1f984.png?v8",
+ "united_arab_emirates": "unicode/1f1e6-1f1ea.png?v8",
+ "united_nations": "unicode/1f1fa-1f1f3.png?v8",
+ "unlock": "unicode/1f513.png?v8",
+ "up": "unicode/1f199.png?v8",
+ "upside_down_face": "unicode/1f643.png?v8",
+ "uruguay": "unicode/1f1fa-1f1fe.png?v8",
+ "us": "unicode/1f1fa-1f1f8.png?v8",
+ "us_outlying_islands": "unicode/1f1fa-1f1f2.png?v8",
+ "us_virgin_islands": "unicode/1f1fb-1f1ee.png?v8",
+ "uzbekistan": "unicode/1f1fa-1f1ff.png?v8",
+ "v": "unicode/270c.png?v8",
+ "vampire": "unicode/1f9db.png?v8",
+ "vampire_man": "unicode/1f9db-2642.png?v8",
+ "vampire_woman": "unicode/1f9db-2640.png?v8",
+ "vanuatu": "unicode/1f1fb-1f1fa.png?v8",
+ "vatican_city": "unicode/1f1fb-1f1e6.png?v8",
+ "venezuela": "unicode/1f1fb-1f1ea.png?v8",
+ "vertical_traffic_light": "unicode/1f6a6.png?v8",
+ "vhs": "unicode/1f4fc.png?v8",
+ "vibration_mode": "unicode/1f4f3.png?v8",
+ "video_camera": "unicode/1f4f9.png?v8",
+ "video_game": "unicode/1f3ae.png?v8",
+ "vietnam": "unicode/1f1fb-1f1f3.png?v8",
+ "violin": "unicode/1f3bb.png?v8",
+ "virgo": "unicode/264d.png?v8",
+ "volcano": "unicode/1f30b.png?v8",
+ "volleyball": "unicode/1f3d0.png?v8",
+ "vomiting_face": "unicode/1f92e.png?v8",
+ "vs": "unicode/1f19a.png?v8",
+ "vulcan_salute": "unicode/1f596.png?v8",
+ "waffle": "unicode/1f9c7.png?v8",
+ "wales": "unicode/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png?v8",
+ "walking": "unicode/1f6b6.png?v8",
+ "walking_man": "unicode/1f6b6-2642.png?v8",
+ "walking_woman": "unicode/1f6b6-2640.png?v8",
+ "wallis_futuna": "unicode/1f1fc-1f1eb.png?v8",
+ "waning_crescent_moon": "unicode/1f318.png?v8",
+ "waning_gibbous_moon": "unicode/1f316.png?v8",
+ "warning": "unicode/26a0.png?v8",
+ "wastebasket": "unicode/1f5d1.png?v8",
+ "watch": "unicode/231a.png?v8",
+ "water_buffalo": "unicode/1f403.png?v8",
+ "water_polo": "unicode/1f93d.png?v8",
+ "watermelon": "unicode/1f349.png?v8",
+ "wave": "unicode/1f44b.png?v8",
+ "wavy_dash": "unicode/3030.png?v8",
+ "waxing_crescent_moon": "unicode/1f312.png?v8",
+ "waxing_gibbous_moon": "unicode/1f314.png?v8",
+ "wc": "unicode/1f6be.png?v8",
+ "weary": "unicode/1f629.png?v8",
+ "wedding": "unicode/1f492.png?v8",
+ "weight_lifting": "unicode/1f3cb.png?v8",
+ "weight_lifting_man": "unicode/1f3cb-2642.png?v8",
+ "weight_lifting_woman": "unicode/1f3cb-2640.png?v8",
+ "western_sahara": "unicode/1f1ea-1f1ed.png?v8",
+ "whale": "unicode/1f433.png?v8",
+ "whale2": "unicode/1f40b.png?v8",
+ "wheel": "unicode/1f6de.png?v8",
+ "wheel_of_dharma": "unicode/2638.png?v8",
+ "wheelchair": "unicode/267f.png?v8",
+ "white_check_mark": "unicode/2705.png?v8",
+ "white_circle": "unicode/26aa.png?v8",
+ "white_flag": "unicode/1f3f3.png?v8",
+ "white_flower": "unicode/1f4ae.png?v8",
+ "white_haired_man": "unicode/1f468-1f9b3.png?v8",
+ "white_haired_woman": "unicode/1f469-1f9b3.png?v8",
+ "white_heart": "unicode/1f90d.png?v8",
+ "white_large_square": "unicode/2b1c.png?v8",
+ "white_medium_small_square": "unicode/25fd.png?v8",
+ "white_medium_square": "unicode/25fb.png?v8",
+ "white_small_square": "unicode/25ab.png?v8",
+ "white_square_button": "unicode/1f533.png?v8",
+ "wilted_flower": "unicode/1f940.png?v8",
+ "wind_chime": "unicode/1f390.png?v8",
+ "wind_face": "unicode/1f32c.png?v8",
+ "window": "unicode/1fa9f.png?v8",
+ "wine_glass": "unicode/1f377.png?v8",
+ "wing": "unicode/1fabd.png?v8",
+ "wink": "unicode/1f609.png?v8",
+ "wireless": "unicode/1f6dc.png?v8",
+ "wolf": "unicode/1f43a.png?v8",
+ "woman": "unicode/1f469.png?v8",
+ "woman_artist": "unicode/1f469-1f3a8.png?v8",
+ "woman_astronaut": "unicode/1f469-1f680.png?v8",
+ "woman_beard": "unicode/1f9d4-2640.png?v8",
+ "woman_cartwheeling": "unicode/1f938-2640.png?v8",
+ "woman_cook": "unicode/1f469-1f373.png?v8",
+ "woman_dancing": "unicode/1f483.png?v8",
+ "woman_facepalming": "unicode/1f926-2640.png?v8",
+ "woman_factory_worker": "unicode/1f469-1f3ed.png?v8",
+ "woman_farmer": "unicode/1f469-1f33e.png?v8",
+ "woman_feeding_baby": "unicode/1f469-1f37c.png?v8",
+ "woman_firefighter": "unicode/1f469-1f692.png?v8",
+ "woman_health_worker": "unicode/1f469-2695.png?v8",
+ "woman_in_manual_wheelchair": "unicode/1f469-1f9bd.png?v8",
+ "woman_in_motorized_wheelchair": "unicode/1f469-1f9bc.png?v8",
+ "woman_in_tuxedo": "unicode/1f935-2640.png?v8",
+ "woman_judge": "unicode/1f469-2696.png?v8",
+ "woman_juggling": "unicode/1f939-2640.png?v8",
+ "woman_mechanic": "unicode/1f469-1f527.png?v8",
+ "woman_office_worker": "unicode/1f469-1f4bc.png?v8",
+ "woman_pilot": "unicode/1f469-2708.png?v8",
+ "woman_playing_handball": "unicode/1f93e-2640.png?v8",
+ "woman_playing_water_polo": "unicode/1f93d-2640.png?v8",
+ "woman_scientist": "unicode/1f469-1f52c.png?v8",
+ "woman_shrugging": "unicode/1f937-2640.png?v8",
+ "woman_singer": "unicode/1f469-1f3a4.png?v8",
+ "woman_student": "unicode/1f469-1f393.png?v8",
+ "woman_teacher": "unicode/1f469-1f3eb.png?v8",
+ "woman_technologist": "unicode/1f469-1f4bb.png?v8",
+ "woman_with_headscarf": "unicode/1f9d5.png?v8",
+ "woman_with_probing_cane": "unicode/1f469-1f9af.png?v8",
+ "woman_with_turban": "unicode/1f473-2640.png?v8",
+ "woman_with_veil": "unicode/1f470-2640.png?v8",
+ "womans_clothes": "unicode/1f45a.png?v8",
+ "womans_hat": "unicode/1f452.png?v8",
+ "women_wrestling": "unicode/1f93c-2640.png?v8",
+ "womens": "unicode/1f6ba.png?v8",
+ "wood": "unicode/1fab5.png?v8",
+ "woozy_face": "unicode/1f974.png?v8",
+ "world_map": "unicode/1f5fa.png?v8",
+ "worm": "unicode/1fab1.png?v8",
+ "worried": "unicode/1f61f.png?v8",
+ "wrench": "unicode/1f527.png?v8",
+ "wrestling": "unicode/1f93c.png?v8",
+ "writing_hand": "unicode/270d.png?v8",
+ "x": "unicode/274c.png?v8",
+ "x_ray": "unicode/1fa7b.png?v8",
+ "yarn": "unicode/1f9f6.png?v8",
+ "yawning_face": "unicode/1f971.png?v8",
+ "yellow_circle": "unicode/1f7e1.png?v8",
+ "yellow_heart": "unicode/1f49b.png?v8",
+ "yellow_square": "unicode/1f7e8.png?v8",
+ "yemen": "unicode/1f1fe-1f1ea.png?v8",
+ "yen": "unicode/1f4b4.png?v8",
+ "yin_yang": "unicode/262f.png?v8",
+ "yo_yo": "unicode/1fa80.png?v8",
+ "yum": "unicode/1f60b.png?v8",
+ "zambia": "unicode/1f1ff-1f1f2.png?v8",
+ "zany_face": "unicode/1f92a.png?v8",
+ "zap": "unicode/26a1.png?v8",
+ "zebra": "unicode/1f993.png?v8",
+ "zero": "unicode/0030-20e3.png?v8",
+ "zimbabwe": "unicode/1f1ff-1f1fc.png?v8",
+ "zipper_mouth_face": "unicode/1f910.png?v8",
+ "zombie": "unicode/1f9df.png?v8",
+ "zombie_man": "unicode/1f9df-2642.png?v8",
+ "zombie_woman": "unicode/1f9df-2640.png?v8",
+ "zzz": "unicode/1f4a4.png?v8"
+ }
+}
\ No newline at end of file
diff --git a/src/core/render/emojify.js b/src/core/render/emojify.js
index 95b946a16a..2f5af7e557 100644
--- a/src/core/render/emojify.js
+++ b/src/core/render/emojify.js
@@ -1,12 +1,49 @@
-import {inBrowser} from '../util/env'
+import emojiData from './emoji-data.js';
-function replace(m, $1) {
- return ' '
+function replaceEmojiShorthand(m, $1, useNativeEmoji) {
+ const emojiMatch = emojiData.data[$1];
+
+ let result = m;
+
+ if (emojiMatch) {
+ if (useNativeEmoji && /unicode/.test(emojiMatch)) {
+ const emojiUnicode = emojiMatch
+ .replace('unicode/', '')
+ .replace(/\.png.*/, '')
+ .split('-')
+ .map(u => `${u};`)
+ // Separate multi-character emoji with zero width joiner sequence (ZWJ)
+ // Hat tip: https://about.gitlab.com/blog/2018/05/30/journey-in-native-unicode-emoji/#emoji-made-up-of-multiple-characters
+ .join('')
+ .concat('︎');
+ result = /* html */ `${emojiUnicode} `;
+ } else {
+ result = /* html */ ` `;
+ }
+ }
+
+ return result;
}
-export function emojify(text) {
- return text
- .replace(/<(pre|template|code)[^>]*?>[\s\S]+?<\/(pre|template|code)>/g, m => m.replace(/:/g, '__colon__'))
- .replace(/:(\w+?):/ig, (inBrowser && window.emojify) || replace)
- .replace(/__colon__/g, ':')
+export function emojify(text, useNativeEmoji) {
+ return (
+ text
+ // Mark colons in tags
+ .replace(
+ /<(code|pre|script|template)[^>]*?>[\s\S]+?<\/(code|pre|script|template)>/g,
+ m => m.replace(/:/g, '__colon__'),
+ )
+ // Mark colons in comments
+ .replace(//g, m => m.replace(/:/g, '__colon__'))
+ // Mark colons in URIs
+ .replace(/([a-z]{2,}:)?\/\/[^\s'">)]+/gi, m =>
+ m.replace(/:/g, '__colon__'),
+ )
+ // Replace emoji shorthand codes
+ .replace(/:([a-z0-9_\-+]+?):/g, (m, $1) =>
+ replaceEmojiShorthand(m, $1, useNativeEmoji),
+ )
+ // Restore colons in tags and comments
+ .replace(/__colon__/g, ':')
+ );
}
diff --git a/src/core/render/gen-tree.js b/src/core/render/gen-tree.js
index 81ba4bd22a..94030ae2f5 100644
--- a/src/core/render/gen-tree.js
+++ b/src/core/render/gen-tree.js
@@ -1,28 +1,30 @@
/**
* Gen toc tree
* @link https://github.com/killercup/grock/blob/5280ae63e16c5739e9233d9009bc235ed7d79a50/styles/solarized/assets/js/behavior.coffee#L54-L81
- * @param {Array} toc
- * @param {Number} maxLevel
- * @return {Array}
+ * @param {Array} toc List of TOC elements
+ * @param {Number} maxLevel Deep level
+ * @return {Array} Headlines
*/
export function genTree(toc, maxLevel) {
- const headlines = []
- const last = {}
+ const headlines = [];
+ const last = {};
toc.forEach(headline => {
- const level = headline.level || 1
- const len = level - 1
+ const level = headline.depth || 1;
+ const len = level - 1;
if (level > maxLevel) {
- return
+ return;
}
+
if (last[len]) {
- last[len].children = (last[len].children || []).concat(headline)
+ last[len].children = [...(last[len].children || []), headline];
} else {
- headlines.push(headline)
+ headlines.push(headline);
}
- last[level] = headline
- })
- return headlines
+ last[level] = headline;
+ });
+
+ return headlines;
}
diff --git a/src/core/render/index.js b/src/core/render/index.js
index fae1bc5269..f4db193754 100644
--- a/src/core/render/index.js
+++ b/src/core/render/index.js
@@ -1,276 +1,633 @@
-import * as dom from '../util/dom'
-import * as tpl from './tpl'
-import cssVars from '../util/polyfill/css-vars'
-import tinydate from 'tinydate'
-import {callHook} from '../init/lifecycle'
-import {Compiler} from './compiler'
-import {getAndActive, sticky} from '../event/sidebar'
-import {getPath, isAbsolutePath} from '../router/util'
-import {isMobile, inBrowser} from '../util/env'
-import {isPrimitive} from '../util/core'
-import {scrollActiveSidebar, scroll2Top} from '../event/scroll'
-import {prerenderEmbed} from './embed'
-
-function executeScript() {
- const script = dom
- .findAll('.markdown-section>script')
- .filter(s => !/template/.test(s.type))[0]
- if (!script) {
- return false
- }
- const code = script.innerText.trim()
- if (!code) {
- return false
- }
-
- setTimeout(_ => {
- window.__EXECUTE_RESULT__ = new Function(code)()
- }, 0)
-}
+import tinydate from 'tinydate';
+import * as dom from '../util/dom.js';
+import { getPath, isAbsolutePath } from '../router/util.js';
+import { isMobile } from '../util/env.js';
+import { isPrimitive } from '../util/core.js';
+import { Compiler } from './compiler.js';
+import * as tpl from './tpl.js';
+import { prerenderEmbed } from './embed.js';
+
+/** @typedef {import('../Docsify.js').Constructor} Constructor */
+
+// TODO replace with Vue types if available
+/** @typedef {{ _isVue?: boolean, $destroy?: () => void }} Vue2Instance */
+/** @typedef {{ __vue__?: Vue2Instance }} WithVue2 */
+/** @typedef {{ __v_skip?: boolean }} VNode3 */
+/** @typedef {{ _vnode?: VNode3, __vue_app__?: { unmount: () => void } }} WithVue3 */
+/** @typedef {Element & WithVue2 & WithVue3} VueMountElement */
+
+/**
+ * @template {!Constructor} T
+ * @param {T} Base - The class to extend
+ */
+export function Render(Base) {
+ return class Render extends Base {
+ /** @type {Compiler | undefined} */
+ compiler;
+ #vueGlobalData;
+
+ #addTextAsTitleAttribute(cssSelector) {
+ dom.findAll(cssSelector).forEach(elm => {
+ const e = /** @type {HTMLElement} */ (elm);
+ if (!e.title && e.innerText) {
+ e.title = e.innerText;
+ }
+ });
+ }
-function formatUpdated(html, updated, fn) {
- updated =
- typeof fn === 'function' ?
- fn(updated) :
- typeof fn === 'string' ?
- tinydate(fn)(new Date(updated)) :
- updated
+ #executeScript() {
+ const script = dom
+ .findAll('.markdown-section>script')
+ .filter(
+ s => !/template/.test(/** @type {HTMLScriptElement} */ (s).type),
+ )[0];
+ if (!script) {
+ return false;
+ }
- return html.replace(/{docsify-updated}/g, updated)
-}
+ const code = /** @type {HTMLElement} */ (script).innerText.trim();
+ if (!code) {
+ return false;
+ }
-function renderMain(html) {
- if (!html) {
- html = '404 - Not found '
- }
-
- this._renderTo('.markdown-section', html)
- // Render sidebar with the TOC
- !this.config.loadSidebar && this._renderSidebar()
-
- // Execute script
- if (
- this.config.executeScript !== false &&
- typeof window.Vue !== 'undefined' &&
- !executeScript()
- ) {
- setTimeout(_ => {
- const vueVM = window.__EXECUTE_RESULT__
- vueVM && vueVM.$destroy && vueVM.$destroy()
- window.__EXECUTE_RESULT__ = new window.Vue().$mount('#main')
- }, 0)
- } else {
- this.config.executeScript && executeScript()
- }
-}
+ new Function(code)();
+ }
-function renderNameLink(vm) {
- const el = dom.getNode('.app-name-link')
- const nameLink = vm.config.nameLink
- const path = vm.route.path
+ #formatUpdated(html, updated, fn) {
+ updated =
+ typeof fn === 'function'
+ ? fn(updated)
+ : typeof fn === 'string'
+ ? tinydate(fn)(new Date(updated))
+ : updated;
- if (!el) {
- return
- }
+ return html.replace(/{docsify-updated}/g, updated);
+ }
- if (isPrimitive(vm.config.nameLink)) {
- el.setAttribute('href', nameLink)
- } else if (typeof nameLink === 'object') {
- const match = Object.keys(nameLink).filter(key => path.indexOf(key) > -1)[0]
+ #renderMain(html) {
+ const docsifyConfig = this.config;
+ const markdownElm = dom.find('.markdown-section');
+ const vueVersion =
+ 'Vue' in window &&
+ window.Vue.version &&
+ Number(window.Vue.version.charAt(0));
+
+ /**
+ * @param {VueMountElement} elm
+ */
+ const isMountedVue = elm => {
+ const isVue2 = Boolean(elm.__vue__ && elm.__vue__._isVue);
+ const isVue3 = Boolean(elm._vnode && elm._vnode.__v_skip);
+
+ return isVue2 || isVue3;
+ };
+
+ if ('Vue' in window) {
+ const mountedElms = dom
+ .findAll('.markdown-section > *')
+ .filter(elm => isMountedVue(elm));
+
+ // Destroy/unmount existing Vue instances
+ for (const mountedElm of mountedElms) {
+ if (vueVersion === 2) {
+ /** @type {VueMountElement} */ (mountedElm).__vue__?.$destroy?.();
+ } else if (vueVersion === 3) {
+ /** @type {VueMountElement} */ (mountedElm).__vue_app__?.unmount();
+ }
+ }
+ }
- el.setAttribute('href', nameLink[match])
- }
-}
+ dom.setHTML(markdownElm, html);
-export function renderMixin(proto) {
- proto._renderTo = function (el, content, replace) {
- const node = dom.getNode(el)
- if (node) {
- node[replace ? 'outerHTML' : 'innerHTML'] = content
- }
- }
-
- proto._renderSidebar = function (text) {
- const {maxLevel, subMaxLevel, loadSidebar} = this.config
-
- this._renderTo('.sidebar-nav', this.compiler.sidebar(text, maxLevel))
- const activeEl = getAndActive(this.router, '.sidebar-nav', true, true)
- if (loadSidebar && activeEl) {
- activeEl.parentNode.innerHTML +=
- this.compiler.subSidebar(subMaxLevel) || ''
- } else {
- // Reset toc
- this.compiler.subSidebar()
- }
- // Bind event
- this._bindEventOnRendered(activeEl)
- }
-
- proto._bindEventOnRendered = function (activeEl) {
- const {autoHeader, auto2top} = this.config
-
- scrollActiveSidebar(this.router)
-
- if (autoHeader && activeEl) {
- const main = dom.getNode('#main')
- const firstNode = main.children[0]
- if (firstNode && firstNode.tagName !== 'H1') {
- const h1 = dom.create('h1')
- h1.innerText = activeEl.innerText
- dom.before(main, h1)
+ // Execute markdown
-
- `
- }
- const rootPath = path.join(__dirname, 'fixtures', fixture)
-
- const dom = new JSDOM(markup)
- dom.reconfigure({ url: 'file:///' + rootPath })
-
- global.window = dom.window
- global.document = dom.window.document
- global.navigator = dom.window.navigator
- global.location = dom.window.location
- global.XMLHttpRequest = dom.window.XMLHttpRequest
-
- // mimic src/core/index.js but for Node.js
- function Docsify() {
- this._init()
- }
-
- const proto = Docsify.prototype
-
- const {initMixin} = require('../src/core/init')
- const {routerMixin} = require('../src/core//router')
- const {renderMixin} = require('../src/core//render')
- const {fetchMixin} = require('../src/core/fetch')
- const {eventMixin} = require('../src/core//event')
-
- initMixin(proto)
- routerMixin(proto)
- renderMixin(proto)
- fetchMixin(proto)
- eventMixin(proto)
-
- const NOT_INIT_PATTERN = ''
-
- return new Promise((resolve, reject) => {
- ready(() => {
- const docsify = new Docsify()
- // NOTE: I was not able to get it working with a callback, but polling works usually at the first time
- const id = setInterval(() => {
- if (dom.window.document.body.innerHTML.indexOf(NOT_INIT_PATTERN) == -1) {
- clearInterval(id)
- return resolve({
- docsify: docsify,
- dom: dom
- })
- }
- }, 10)
- })
-
- })
-}
-module.exports.expectSameDom = function(actual, expected) {
- const WHITESPACES_BETWEEN_TAGS = />(\s\s+) {
+ // Spy addEventListener
+ ['document', 'window'].forEach(obj => {
+ const fn = sideEffects[obj].addEventListener.fn;
+ const refs = sideEffects[obj].addEventListener.refs;
+
+ function addEventListenerSpy(type, listener, options) {
+ // Store listener reference so it can be removed during reset
+ refs.push({ type, listener, options });
+ // Call original window.addEventListener
+ fn(type, listener, options);
+ }
+
+ // Add to default key array to prevent removal during reset
+ sideEffects[obj].keys.push('addEventListener');
+
+ // Replace addEventListener with mock
+ global[obj].addEventListener = addEventListenerSpy;
+ });
+
+ if (!global.HTMLElement.prototype.scrollIntoView) {
+ Object.defineProperty(global.HTMLElement.prototype, 'scrollIntoView', {
+ configurable: true,
+ writable: true,
+ value: () => {},
+ });
+ }
+});
+
+beforeEach(async () => {
+ const rootElm = document.documentElement;
+
+ // Reset JSDOM
+ // -----------------------------------------------------------------------------
+ // This attempts to remove side effects from tests, however it does not reset
+ // all changes made to globals like the window and document objects. Tests
+ // requiring a full JSDOM reset should be stored in separate files, which is
+ // only way to do a complete JSDOM reset with Jest.
+
+ // Remove attributes on root element
+ [...rootElm.attributes].forEach(attr => rootElm.removeAttribute(attr.name));
+
+ // Remove elements (faster than setting innerHTML)
+ while (rootElm.firstChild) {
+ rootElm.removeChild(rootElm.firstChild);
+ }
+
+ // Remove global listeners and keys
+ ['document', 'window'].forEach(obj => {
+ const refs = sideEffects[obj].addEventListener.refs;
+
+ // Listeners
+ while (refs.length) {
+ const { type, listener, options } = refs.pop();
+ global[obj].removeEventListener(type, listener, options);
+ }
+
+ // Keys
+ Object.keys(global[obj])
+ .filter(key => !sideEffects[obj].keys.includes(key))
+ .forEach(key => {
+ delete global[obj][key];
+ });
+ });
+
+ // Restore base elements
+ rootElm.innerHTML = '';
+
+ // Mock IntersectionObserver
+ // -----------------------------------------------------------------------------
+ [global, window].forEach(
+ obj => (obj.IntersectionObserver = IntersectionObserver),
+ );
+});
+
+afterEach(async () => {
+ // Restore the global XMLHttpRequest object to its original state
+ mock.teardown();
+});
diff --git a/test/config/jest.setup.js b/test/config/jest.setup.js
new file mode 100644
index 0000000000..661443a47a
--- /dev/null
+++ b/test/config/jest.setup.js
@@ -0,0 +1,5 @@
+import { startServer } from './server.js';
+
+export default async () => {
+ await startServer();
+};
diff --git a/test/config/jest.teardown.js b/test/config/jest.teardown.js
new file mode 100644
index 0000000000..17d8eead4c
--- /dev/null
+++ b/test/config/jest.teardown.js
@@ -0,0 +1,5 @@
+import { stopServer } from './server.js';
+
+export default async () => {
+ stopServer();
+};
diff --git a/test/config/playwright.setup.js b/test/config/playwright.setup.js
new file mode 100644
index 0000000000..e0fe04a790
--- /dev/null
+++ b/test/config/playwright.setup.js
@@ -0,0 +1,5 @@
+import { startServer } from './server.js';
+
+export default async config => {
+ await startServer();
+};
diff --git a/test/config/playwright.teardown.js b/test/config/playwright.teardown.js
new file mode 100644
index 0000000000..a39be4c072
--- /dev/null
+++ b/test/config/playwright.teardown.js
@@ -0,0 +1,5 @@
+import { stopServer } from './server.js';
+
+export default async config => {
+ stopServer();
+};
diff --git a/test/config/server.js b/test/config/server.js
new file mode 100644
index 0000000000..a376286360
--- /dev/null
+++ b/test/config/server.js
@@ -0,0 +1,32 @@
+import * as process from 'node:process';
+import { create } from 'browser-sync';
+import { testConfig } from '../../server.configs.js';
+
+const bsServer = create();
+
+export async function startServer() {
+ // Wait for server to start
+ return new Promise(resolve => {
+ const settings = testConfig;
+
+ console.log('\n');
+
+ bsServer.init(settings, () => {
+ // Exit process if specified port is not available. BrowserSync
+ // auto-selects a new port if the specified port is unavailable. This is
+ // problematic for testing and CI/CD.
+ if (bsServer.getOption('port') !== settings.port) {
+ console.log(
+ `\nPort ${settings.port} not available. Exiting process.\n`,
+ );
+ process.exit(1);
+ }
+
+ resolve(bsServer);
+ });
+ });
+}
+
+export function stopServer() {
+ bsServer.exit();
+}
diff --git a/test/consume-types/README.md b/test/consume-types/README.md
new file mode 100644
index 0000000000..2fd30ae1ba
--- /dev/null
+++ b/test/consume-types/README.md
@@ -0,0 +1,32 @@
+# Vanilla ESM TypeScript Example
+
+This is an example of a project that imports Docsify via plain ESM in browser,
+with type checking with TypeScript to prove that type definitions are working.
+
+This ensures that downstream projects that consume Docsify via ESM get
+intellisense in their IDE (f.e. `Go To Definition` in VS Code will take the user
+to Docsify source code).
+
+This example is not using a build tool, but relying on native ESM in the
+browser, using an `importmap` script (`
+
+
+
+
+
+
+
+
+
diff --git a/test/consume-types/package-lock.json b/test/consume-types/package-lock.json
new file mode 100644
index 0000000000..7dc72e4539
--- /dev/null
+++ b/test/consume-types/package-lock.json
@@ -0,0 +1,2400 @@
+{
+ "name": "consume-types",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "dependencies": {
+ "docsify": "file:../../"
+ },
+ "devDependencies": {
+ "five-server": "^0.5.0",
+ "typescript": "^7.0.2"
+ }
+ },
+ "node_modules/@html-validate/stylish": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.2.0.tgz",
+ "integrity": "sha512-7lF57/RTs2tZi0FtgY7Y5CP73Y2GEPPMaJ9PeZKRRUOs7Bt7/Qlqt8kdsAbVMO7GrpuWtUfGvR11riSOryioow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^20.18 || ^22.16 || >= 24.0"
+ }
+ },
+ "node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@peculiar/asn1-cms": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.8.0.tgz",
+ "integrity": "sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-schema": "^2.8.0",
+ "@peculiar/asn1-x509": "^2.8.0",
+ "@peculiar/asn1-x509-attr": "^2.8.0",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/asn1-csr": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.8.0.tgz",
+ "integrity": "sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-schema": "^2.8.0",
+ "@peculiar/asn1-x509": "^2.8.0",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/asn1-ecc": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.8.0.tgz",
+ "integrity": "sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-schema": "^2.8.0",
+ "@peculiar/asn1-x509": "^2.8.0",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/asn1-pfx": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.8.0.tgz",
+ "integrity": "sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-cms": "^2.8.0",
+ "@peculiar/asn1-pkcs8": "^2.8.0",
+ "@peculiar/asn1-rsa": "^2.8.0",
+ "@peculiar/asn1-schema": "^2.8.0",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/asn1-pkcs8": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.8.0.tgz",
+ "integrity": "sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-schema": "^2.8.0",
+ "@peculiar/asn1-x509": "^2.8.0",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/asn1-pkcs9": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.8.0.tgz",
+ "integrity": "sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-cms": "^2.8.0",
+ "@peculiar/asn1-pfx": "^2.8.0",
+ "@peculiar/asn1-pkcs8": "^2.8.0",
+ "@peculiar/asn1-schema": "^2.8.0",
+ "@peculiar/asn1-x509": "^2.8.0",
+ "@peculiar/asn1-x509-attr": "^2.8.0",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/asn1-rsa": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.8.0.tgz",
+ "integrity": "sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-schema": "^2.8.0",
+ "@peculiar/asn1-x509": "^2.8.0",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/asn1-schema": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz",
+ "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/utils": "^2.0.2",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/asn1-x509": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.8.0.tgz",
+ "integrity": "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-schema": "^2.8.0",
+ "@peculiar/utils": "^2.0.2",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/asn1-x509-attr": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.8.0.tgz",
+ "integrity": "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-schema": "^2.8.0",
+ "@peculiar/asn1-x509": "^2.8.0",
+ "asn1js": "^3.0.10",
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/utils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz",
+ "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/@peculiar/x509": {
+ "version": "1.14.3",
+ "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz",
+ "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/asn1-cms": "^2.6.0",
+ "@peculiar/asn1-csr": "^2.6.0",
+ "@peculiar/asn1-ecc": "^2.6.0",
+ "@peculiar/asn1-pkcs9": "^2.6.0",
+ "@peculiar/asn1-rsa": "^2.6.0",
+ "@peculiar/asn1-schema": "^2.6.0",
+ "@peculiar/asn1-x509": "^2.6.0",
+ "pvtsutils": "^1.3.6",
+ "reflect-metadata": "^0.2.2",
+ "tslib": "^2.8.1",
+ "tsyringe": "^4.10.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
+ "node_modules/@sidvind/better-ajv-errors": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-5.0.0.tgz",
+ "integrity": "sha512-FeI/V2KGtOaDX+r0akidCGYy79lVR4YnAqk1GFgZFuHADErCAEmtZL4+IdCAcDXHqfZsII3fs9DrfC1pIR+19w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "kleur": "^4.1.0"
+ },
+ "engines": {
+ "node": "^20.19 || ^22.12 || >= 24.0"
+ },
+ "peerDependencies": {
+ "ajv": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript/typescript-aix-ppc64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz",
+ "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-darwin-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz",
+ "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-darwin-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz",
+ "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-freebsd-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz",
+ "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-freebsd-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz",
+ "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-arm": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz",
+ "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz",
+ "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-loong64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz",
+ "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-mips64el": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz",
+ "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-ppc64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz",
+ "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-riscv64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz",
+ "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-s390x": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz",
+ "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-linux-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz",
+ "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-netbsd-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz",
+ "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-netbsd-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz",
+ "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-openbsd-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz",
+ "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-openbsd-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz",
+ "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-sunos-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz",
+ "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-win32-arm64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz",
+ "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@typescript/typescript-win32-x64": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz",
+ "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=16.20.0"
+ }
+ },
+ "node_modules/@yandeu/open-cjs": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/@yandeu/open-cjs/-/open-cjs-0.0.4.tgz",
+ "integrity": "sha512-hqsaD/DklyzQAl3Voun+aZAblPKcgZbB0t0dudgIu3WCjjeS1/utPC6D0dJlejUi0Gvlt2X73q08R9NsQPoKCw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/accepts": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "^3.0.0",
+ "negotiator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "8.20.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
+ "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/asn1js": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz",
+ "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "pvtsutils": "^1.3.6",
+ "pvutils": "^1.1.5",
+ "tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/body-parser": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz",
+ "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "^3.1.2",
+ "content-type": "^2.0.0",
+ "debug": "^4.4.3",
+ "http-errors": "^2.0.1",
+ "iconv-lite": "^0.7.2",
+ "on-finished": "^2.4.1",
+ "qs": "^6.15.2",
+ "raw-body": "^3.0.2",
+ "type-is": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/body-parser/node_modules/content-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
+ "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/brace-expansion": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
+ "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/braces": {
+ "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.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/bytestreamjs": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz",
+ "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/common-tags": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
+ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz",
+ "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.6.0"
+ }
+ },
+ "node_modules/cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
+ "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/dexie": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/dexie/-/dexie-4.4.4.tgz",
+ "integrity": "sha512-jIwsYI8Os2hgnqc6O49YwFDKGc5v5QjGx0wPVp543ip1F53VFAKMLthV2pQosQcVTv3eAskTWYspOx195PM0FQ==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/docsify": {
+ "version": "5.0.0-rc.4",
+ "resolved": "file:../..",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "common-tags": "^1.8.0",
+ "dexie": "^4.0.11",
+ "marked": "^18.0.3",
+ "medium-zoom": "^1.1.0",
+ "opencollective-postinstall": "^2.0.2",
+ "prismjs": "^1.29.0",
+ "tinydate": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=20.11.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",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "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",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+ "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
+ "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "^2.0.0",
+ "body-parser": "^2.2.0",
+ "content-disposition": "^1.0.0",
+ "content-type": "^1.0.5",
+ "cookie": "^0.7.1",
+ "cookie-signature": "^1.2.1",
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "finalhandler": "^2.1.0",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "merge-descriptors": "^2.0.0",
+ "mime-types": "^3.0.0",
+ "on-finished": "^2.4.1",
+ "once": "^1.4.0",
+ "parseurl": "^1.3.3",
+ "proxy-addr": "^2.0.7",
+ "qs": "^6.14.0",
+ "range-parser": "^1.2.1",
+ "router": "^2.2.0",
+ "send": "^1.1.0",
+ "serve-static": "^2.2.0",
+ "statuses": "^2.0.1",
+ "type-is": "^2.0.1",
+ "vary": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/fast-uri": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz",
+ "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/fill-range": {
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/finalhandler": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz",
+ "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "on-finished": "^2.4.1",
+ "parseurl": "^1.3.3",
+ "statuses": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/five-server": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/five-server/-/five-server-0.5.0.tgz",
+ "integrity": "sha512-0+riMRsKoyjHiDr1g1lCbQrzhew5xsYrhG+GG8MXGNslEZ+/ulefYAAl7sx/2r5BF3QOx0trgTNRM8Ec4cElrg==",
+ "dev": true,
+ "license": "SEE LICENSE IN LICENSE",
+ "dependencies": {
+ "@yandeu/open-cjs": "^0.0.4",
+ "chokidar": "^3.5.3",
+ "cors": "^2.8.5",
+ "debug": "^4.3.1",
+ "express": "^5.1.0",
+ "html-validate": "^10.0.0",
+ "mime-types": "^3.0.2",
+ "node-html-parser": "^7.1.0",
+ "parseurl": "~1.3.3",
+ "selfsigned": "^5.5.0",
+ "ws": "^8.2.0"
+ },
+ "bin": {
+ "five-server": "lib/bin.js",
+ "live-server": "lib/bin.js"
+ },
+ "engines": {
+ "node": "^18.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/yandeu"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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"
+ ],
+ "engines": {
+ "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,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/glob": {
+ "version": "13.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz",
+ "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "minimatch": "^10.2.2",
+ "minipass": "^7.1.3",
+ "path-scurry": "^2.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "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"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+ "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/html-validate": {
+ "version": "10.17.0",
+ "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.17.0.tgz",
+ "integrity": "sha512-1WO3hgxqSE0YfV12u5V4ZNUO4mulMrfuxEOlmwM9bEeMlqs9g1OE+EXzxQ4KwNojsYFDmaEYcRPf+zUpAzO/WA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/html-validate"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@html-validate/stylish": "^5.2.0",
+ "@sidvind/better-ajv-errors": "5.0.0",
+ "ajv": "^8.0.0",
+ "glob": "^13.0.0",
+ "kleur": "^4.1.0",
+ "minimist": "^1.2.0",
+ "prompts": "^2.0.0",
+ "semver": "^7.0.0"
+ },
+ "bin": {
+ "html-validate": "bin/html-validate.mjs"
+ },
+ "engines": {
+ "node": "^20.19.0 || ^22.16.0 || >= 24.0.0"
+ },
+ "peerDependencies": {
+ "@jest/globals": "^28.1.3 || ^29.0.3 || ^30.0.0",
+ "jest": "^28.1.3 || ^29.0.3 || ^30.0.0",
+ "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0",
+ "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0",
+ "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1"
+ },
+ "peerDependenciesMeta": {
+ "@jest/globals": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ },
+ "jest-diff": {
+ "optional": true
+ },
+ "jest-snapshot": {
+ "optional": true
+ },
+ "vitest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "depd": "~2.0.0",
+ "inherits": "~2.0.4",
+ "setprototypeof": "~1.2.0",
+ "statuses": "~2.0.2",
+ "toidentifier": "~1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",
+ "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "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,
+ "license": "ISC"
+ },
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "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"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "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-promise": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "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/lru-cache": {
+ "version": "11.5.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
+ "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/marked": {
+ "version": "18.0.7",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.7.tgz",
+ "integrity": "sha512-iDVQ5ldaiKXn6b2JroX5kgRfmwgqolW7NpaEzTl1k/2Zh1njIEN9yniyLV/mOvWwtsE8OGgkjsCYvijuPk1dtA==",
+ "license": "MIT",
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/media-typer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
+ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/medium-zoom": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz",
+ "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==",
+ "license": "MIT"
+ },
+ "node_modules/merge-descriptors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
+ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",
+ "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "^1.54.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "brace-expansion": "^5.0.5"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/ms": {
+ "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/negotiator": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
+ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-html-parser": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-7.1.0.tgz",
+ "integrity": "sha512-iJo8b2uYGT40Y8BTyy5ufL6IVbN8rbm/1QK2xffXU/1a/v3AAa0d1YAoqBNYqaS4R/HajkWIpIfdE6KcyFh1AQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "css-select": "^5.1.0",
+ "he": "1.2.0"
+ }
+ },
+ "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"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "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,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/opencollective-postinstall": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+ "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
+ "license": "MIT",
+ "bin": {
+ "opencollective-postinstall": "index.js"
+ }
+ },
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/path-scurry": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
+ "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz",
+ "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pkijs": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz",
+ "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@noble/hashes": "1.4.0",
+ "asn1js": "^3.0.6",
+ "bytestreamjs": "^2.0.1",
+ "pvtsutils": "^1.3.6",
+ "pvutils": "^1.1.3",
+ "tslib": "^2.8.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
+ "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/prompts/node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/pvtsutils": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz",
+ "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.8.1"
+ }
+ },
+ "node_modules/pvutils": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz",
+ "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.15.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
+ "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "es-define-property": "^1.0.1",
+ "side-channel": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",
+ "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "~3.1.2",
+ "http-errors": "~2.0.1",
+ "iconv-lite": "~0.7.0",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/reflect-metadata": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
+ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "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"
+ }
+ },
+ "node_modules/router": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
+ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "depd": "^2.0.0",
+ "is-promise": "^4.0.0",
+ "parseurl": "^1.3.3",
+ "path-to-regexp": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "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/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/selfsigned": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz",
+ "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@peculiar/x509": "^1.14.2",
+ "pkijs": "^3.3.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/send": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz",
+ "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.5",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "mime-types": "^3.0.1",
+ "ms": "^2.1.3",
+ "on-finished": "^2.4.1",
+ "range-parser": "^1.2.1",
+ "statuses": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/serve-static": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz",
+ "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "parseurl": "^1.3.3",
+ "send": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
+ },
+ "node_modules/setprototypeof": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/side-channel": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
+ "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4",
+ "side-channel-list": "^1.0.1",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+ "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/statuses": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/tinydate": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz",
+ "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/tsyringe": {
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz",
+ "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^1.9.3"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/tsyringe/node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/type-is": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz",
+ "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "content-type": "^2.0.0",
+ "media-typer": "^1.1.0",
+ "mime-types": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/type-is/node_modules/content-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz",
+ "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz",
+ "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc"
+ },
+ "engines": {
+ "node": ">=16.20.0"
+ },
+ "optionalDependencies": {
+ "@typescript/typescript-aix-ppc64": "7.0.2",
+ "@typescript/typescript-darwin-arm64": "7.0.2",
+ "@typescript/typescript-darwin-x64": "7.0.2",
+ "@typescript/typescript-freebsd-arm64": "7.0.2",
+ "@typescript/typescript-freebsd-x64": "7.0.2",
+ "@typescript/typescript-linux-arm": "7.0.2",
+ "@typescript/typescript-linux-arm64": "7.0.2",
+ "@typescript/typescript-linux-loong64": "7.0.2",
+ "@typescript/typescript-linux-mips64el": "7.0.2",
+ "@typescript/typescript-linux-ppc64": "7.0.2",
+ "@typescript/typescript-linux-riscv64": "7.0.2",
+ "@typescript/typescript-linux-s390x": "7.0.2",
+ "@typescript/typescript-linux-x64": "7.0.2",
+ "@typescript/typescript-netbsd-arm64": "7.0.2",
+ "@typescript/typescript-netbsd-x64": "7.0.2",
+ "@typescript/typescript-openbsd-arm64": "7.0.2",
+ "@typescript/typescript-openbsd-x64": "7.0.2",
+ "@typescript/typescript-sunos-x64": "7.0.2",
+ "@typescript/typescript-win32-arm64": "7.0.2",
+ "@typescript/typescript-win32-x64": "7.0.2"
+ }
+ },
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.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,
+ "license": "ISC"
+ },
+ "node_modules/ws": {
+ "version": "8.21.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz",
+ "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ }
+ }
+}
diff --git a/test/consume-types/package.json b/test/consume-types/package.json
new file mode 100644
index 0000000000..465ad09ec7
--- /dev/null
+++ b/test/consume-types/package.json
@@ -0,0 +1,19 @@
+{
+ "scripts": {
+ "typecheck": "tsc --noEmit",
+ "serve": "five-server . --open=false --ignorePattern=node_modules"
+ },
+ "dependencies": {
+ "docsify": "file:../../"
+ },
+ "devDependencies": {
+ "five-server": "^0.5.0",
+ "typescript": "^7.0.2"
+ },
+ "overrides": {
+ "body-parser": "^2.3.0",
+ "path-to-regexp": "^8.4.2",
+ "qs": "^6.15.3",
+ "ws": "^8.21.1"
+ }
+}
diff --git a/test/consume-types/prism.js b/test/consume-types/prism.js
new file mode 100644
index 0000000000..9fa1050498
--- /dev/null
+++ b/test/consume-types/prism.js
@@ -0,0 +1,27 @@
+// Small ESM wrapper, used in the importmap for 'prismjs', to import PrismJS by
+// tricking its CommonJS format to see module.exports.
+
+const __prismCjs = await fetch('/node_modules/prismjs/prism.js').then(res =>
+ res.text(),
+);
+
+// Emulate CommonJS environment
+const module = { exports: {} };
+// eslint-disable-next-line no-unused-vars
+const exports = module.exports;
+
+// Evaluate the CommonJS code with module.exports in scope
+eval(__prismCjs);
+
+// Export the Prism object
+const _Prism = module.exports;
+export default _Prism;
+
+// Also make Prism global because Docsify expects it by importing from
+// 'prismjs/components/prism-markup-templating.js' in the compiler.
+// @ts-expect-error FIXME get rid of this ugly global dependency hack in Docsify.
+window.Prism = _Prism;
+
+// @ts-expect-error
+// eslint-disable-next-line no-undef
+console.log('Prism loaded:', Prism);
diff --git a/test/consume-types/register-sw.js b/test/consume-types/register-sw.js
new file mode 100644
index 0000000000..566c14d0bf
--- /dev/null
+++ b/test/consume-types/register-sw.js
@@ -0,0 +1,86 @@
+// This whole thing is ugly. It is only so that we can fix improper import
+// statements in libraries from node_modules. See sw.js for how we re-map the
+// import URLs.
+// The convoluted code here is so that we will force the app to use a new
+// service worker if in dev mode we update the service worker code in sw.js
+
+let reloadQueued = false;
+function queueReload() {
+ if (reloadQueued) {
+ return;
+ }
+ reloadQueued = true;
+ // Use location.reload() after a so any late controllerchange still settles.
+ window.location.reload();
+}
+
+// Register first.
+const registration = await navigator.serviceWorker.register('/sw.js', {
+ scope: '/',
+ type: 'module',
+ updateViaCache: 'none',
+});
+
+// If there is already a waiting worker, wait for it to claim this client.
+if (registration.waiting) {
+ const sw = registration.waiting;
+
+ await new Promise(resolve => {
+ sw.addEventListener('statechange', () => {
+ // Wait until activated.
+ if (sw.state === 'activated') {
+ if (sw === navigator.serviceWorker.controller) {
+ resolve(void 0);
+ } else {
+ // If the new SW activated but is not controlling yet, it changed? Not sure if this can actuall happen.
+ queueReload();
+ }
+ }
+ });
+ });
+}
+
+if (navigator.serviceWorker.controller) {
+ navigator.serviceWorker.addEventListener('controllerchange', () => {
+ queueReload();
+ });
+} else {
+ // First-ever load: wait for controllerchange
+ await new Promise(resolve => {
+ navigator.serviceWorker.addEventListener('controllerchange', resolve, {
+ once: true,
+ });
+ });
+}
+
+// Track new installs.
+registration.addEventListener('updatefound', () => {
+ const sw = registration.installing;
+ if (!sw) {
+ return;
+ }
+ sw.addEventListener('statechange', () => {
+ // When installed AND there is already a controller, a reload will let new SW control.
+ if (sw.state === 'installed' && navigator.serviceWorker.controller) {
+ // If skipWaiting ran inside new SW, controllerchange may fire soon; still queue.
+ queueReload();
+ }
+ });
+});
+
+// Force update check after listeners.
+// For purposes of testing the example, force update on page load so we
+// always test the latest service worker.
+await registration.update();
+
+// Wait until there is an active worker (first load).
+await navigator.serviceWorker.ready;
+
+if (reloadQueued) {
+ await new Promise(() => {});
+}
+console.log(
+ 'Service worker ready and controlling. Continue app bootstrap here.',
+);
+
+export {};
diff --git a/test/consume-types/sw.js b/test/consume-types/sw.js
new file mode 100644
index 0000000000..ea14cb925c
--- /dev/null
+++ b/test/consume-types/sw.js
@@ -0,0 +1,99 @@
+// The purpose of this service worker is to help with loading
+// node_modules modules when using ES modules in the browser.
+//
+// Specifically, this service worker helps with non-standard module paths
+// that do not include file extensions, such as:
+//
+// /node_modules/some-lib/foo/bar
+// /node_modules/some-lib/foo/bar/
+//
+// In these cases, the service worker will try to resolve them to actual files
+// by appending ".js" or "/index.js" as needed.
+//
+// This service worker only handles requests under /node_modules/.
+// All other requests are passed through unmodified.
+
+export {};
+
+const scope = /** @type {ServiceWorkerGlobalScope} */ (
+ /** @type {any} */ (self)
+);
+
+scope.addEventListener('install', event => {
+ // Always activate worker immediately, for purposes of testing.
+ event.waitUntil(scope.skipWaiting());
+});
+
+scope.addEventListener('activate', event => {
+ // Always activate worker immediately, for purposes of testing.
+ event.waitUntil(scope.clients.claim());
+});
+
+scope.addEventListener('fetch', event => {
+ const url = new URL(event.request.url);
+
+ // Don't handle non-node_modules paths
+ if (!url.pathname.startsWith('/node_modules/')) {
+ event.respondWith(fetch(url.href));
+ return;
+ }
+
+ // 6
+ // Special handling for non-standard module paths in node_modules
+
+ const parts = url.pathname.split('/');
+ const fileName = /** @type {string} */ (parts.pop());
+ const ext = fileName.includes('.') ? fileName.split('.').pop() : '';
+
+ // Handle imports like 'some-lib/foo/bar' without an extension.
+ if (fileName !== '' && ext === '') {
+ event.respondWith(
+ // eslint-disable-next-line no-async-promise-executor
+ new Promise(async resolve => {
+ try {
+ // First try adding .js
+ const response = await tryJs();
+ const mimeType = response.headers.get('Content-Type') || '';
+ if (response.ok && mimeType.includes('javascript')) {
+ resolve(response);
+ } else {
+ throw new Error('Not JS');
+ }
+ } catch {
+ // If that fails, try adding /index.js
+ resolve(await tryIndexJs());
+ }
+
+ async function tryJs() {
+ const tryJs = new URL(url);
+ tryJs.href += '.js';
+ const response = await fetch(tryJs);
+ return response;
+ }
+
+ async function tryIndexJs() {
+ const tryIndexJs = new URL(url);
+ tryIndexJs.href += '/index.js';
+ const response = await fetch(tryIndexJs);
+ return response;
+ }
+ }),
+ );
+
+ return;
+ }
+
+ // Handle imports like 'some-lib/foo/bar/' (ending with a slash).
+ if (fileName === '') {
+ // adding index.js
+ const tryIndexJs = new URL(url);
+ tryIndexJs.href += 'index.js';
+
+ event.respondWith(fetch(tryIndexJs));
+
+ return;
+ }
+
+ // For all other cases, just fetch normally.
+ event.respondWith(fetch(url));
+});
diff --git a/test/consume-types/tsconfig.json b/test/consume-types/tsconfig.json
new file mode 100644
index 0000000000..d768030210
--- /dev/null
+++ b/test/consume-types/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "compilerOptions": {
+ "allowJs": true,
+ "checkJs": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "target": "esnext",
+ "strict": true,
+ "noEmit": true,
+ "lib": ["DOM", "ESNext", "WebWorker"],
+ "skipLibCheck": true,
+ "skipDefaultLibCheck": true
+ }
+}
diff --git a/test/e2e/anchor-scroll.test.js b/test/e2e/anchor-scroll.test.js
new file mode 100644
index 0000000000..b81ebd91bd
--- /dev/null
+++ b/test/e2e/anchor-scroll.test.js
@@ -0,0 +1,722 @@
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+async function recordScrollIntoViewCalls(page) {
+ await page.addInitScript(() => {
+ const originalScrollIntoView = Element.prototype.scrollIntoView;
+ const originalScrollTo = window.scrollTo;
+
+ window.__scrollIntoViewCalls = [];
+ window.__scrollToCalls = [];
+ window.__imageLoadEvents = [];
+ document.addEventListener(
+ 'load',
+ event => {
+ const image = event.target;
+
+ if (image instanceof HTMLImageElement) {
+ window.__imageLoadEvents.push({
+ alt: image.alt,
+ time: performance.now(),
+ });
+ }
+ },
+ true,
+ );
+ Element.prototype.scrollIntoView = function (options) {
+ window.__scrollIntoViewCalls.push({
+ id: this.id,
+ block: options?.block,
+ behavior: options?.behavior,
+ time: performance.now(),
+ });
+
+ return originalScrollIntoView.call(this, options);
+ };
+ window.scrollTo = function (...args) {
+ const options = args[0];
+ const call = {
+ time: performance.now(),
+ };
+
+ if (typeof options === 'object' && options !== null) {
+ call.behavior = options.behavior;
+ call.left = options.left;
+ call.top = options.top;
+ } else {
+ call.left = options;
+ call.top = args[1];
+ }
+
+ window.__scrollToCalls.push(call);
+
+ return originalScrollTo.apply(this, args);
+ };
+ });
+}
+
+async function routeDelayedImage(page, url, imageReleased, height) {
+ await page.route(`**/${url}`, async route => {
+ await imageReleased;
+ await route.fulfill({
+ contentType: 'image/svg+xml',
+ body: `
+
+
+
+ `,
+ });
+ });
+}
+
+async function routeTimedImage(page, url, delay, height) {
+ await page.route(`**/${url}`, async route => {
+ await new Promise(resolve => setTimeout(resolve, delay));
+ await route.fulfill({
+ contentType: 'image/svg+xml',
+ body: `
+
+
+
+ `,
+ });
+ });
+}
+
+test.describe('Anchor scrolling', () => {
+ test('keeps smooth scrolling for same-page anchor clicks', async ({
+ page,
+ }) => {
+ await page.addInitScript(() => {
+ const originalScrollIntoView = Element.prototype.scrollIntoView;
+
+ window.__scrollendEvents = [];
+ window.__scrollEvents = [];
+ window.__scrollIntoViewCalls = [];
+ document.addEventListener('scroll', () => {
+ window.__scrollEvents.push({ time: performance.now() });
+ });
+ document.addEventListener('scrollend', () => {
+ window.__scrollendEvents.push({ time: performance.now() });
+ });
+ Element.prototype.scrollIntoView = function (options) {
+ window.__scrollIntoViewCalls.push({
+ id: this.id,
+ behavior: options?.behavior,
+ time: performance.now(),
+ });
+
+ return originalScrollIntoView.call(this, options);
+ };
+ });
+
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ # Anchor Scroll
+
+ [Jump to target](#target-section)
+
+ ## Middle Section
+
+ This section keeps the target below the fold.
+
+ ## Target Section
+
+ This is the linked section.
+ `,
+ },
+ style: `
+ .markdown-section {
+ padding-bottom: 1200px;
+ }
+
+ #middle-section {
+ margin-top: 900px;
+ }
+ `,
+ styleURLs: ['/dist/themes/core.css'],
+ });
+
+ await page.getByRole('link', { name: 'Jump to target' }).click();
+ await page.waitForFunction(() => {
+ return window.__scrollIntoViewCalls?.some(
+ call => call.id === 'target-section' && call.behavior === 'smooth',
+ );
+ });
+ await page.evaluate(() => {
+ return new Promise(resolve => {
+ requestAnimationFrame(() => requestAnimationFrame(resolve));
+ });
+ });
+ await page.waitForFunction(() => {
+ const scrollendTime = window.__scrollendEvents[0]?.time;
+ const lastScrollTime = window.__scrollEvents.at(-1)?.time;
+ const readyTime =
+ scrollendTime ??
+ (lastScrollTime === undefined ? undefined : lastScrollTime + 700);
+
+ return readyTime !== undefined && performance.now() > readyTime;
+ });
+
+ const { readyTime, targetCalls } = await page.evaluate(() => {
+ const scrollendTime = window.__scrollendEvents[0]?.time;
+ const lastScrollTime = window.__scrollEvents.at(-1)?.time;
+
+ return {
+ readyTime:
+ scrollendTime ??
+ (lastScrollTime === undefined ? undefined : lastScrollTime + 700),
+ targetCalls: (window.__scrollIntoViewCalls ?? []).filter(
+ call => call.id === 'target-section',
+ ),
+ };
+ });
+ const earlyInstantCalls = targetCalls.filter(call => {
+ return (
+ call.behavior === 'instant' &&
+ (readyTime === undefined || call.time < readyTime)
+ );
+ });
+
+ expect(targetCalls).toHaveLength(1);
+ expect(targetCalls[0]).toMatchObject({ behavior: 'smooth' });
+ expect(earlyInstantCalls).toEqual([]);
+ });
+
+ test('waits for images above a direct anchor before smooth scrolling', async ({
+ page,
+ }) => {
+ await recordScrollIntoViewCalls(page);
+
+ await routeTimedImage(page, 'slow-anchor-image-1.svg', 80, 900);
+ await routeTimedImage(page, 'slow-anchor-image-2.svg', 120, 700);
+
+ const initPromise = docsifyInit({
+ testURL: '/docsify-init.html#/?id=target-section',
+ markdown: {
+ homepage: `
+ # Anchor Scroll
+
+ 
+
+ 
+
+ ## Middle Section
+
+ This section should not stay at the top after the image loads.
+
+ ## Target Section
+
+ This is the linked section.
+
+ Trailing content keeps the target scrollable.
+ `,
+ },
+ routes: {
+ '/docsify-init.html': `
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ style: `
+ .markdown-section {
+ overflow-anchor: none;
+ padding-bottom: 1200px;
+ }
+
+ .markdown-section img {
+ display: block;
+ width: 100%;
+ height: auto;
+ }
+ `,
+ styleURLs: ['/dist/themes/core.css'],
+ });
+
+ await initPromise;
+ await page.waitForFunction(() => {
+ const firstImage = document.querySelector('img[alt="Slow image 1"]');
+ const secondImage = document.querySelector('img[alt="Slow image 2"]');
+ const firstImageLoadTime = window.__imageLoadEvents.find(event => {
+ return event.alt === 'Slow image 1';
+ })?.time;
+ const secondImageLoadTime = window.__imageLoadEvents.find(event => {
+ return event.alt === 'Slow image 2';
+ })?.time;
+
+ return (
+ firstImage instanceof HTMLImageElement &&
+ secondImage instanceof HTMLImageElement &&
+ firstImage.complete &&
+ secondImage.complete &&
+ firstImage.naturalHeight > 0 &&
+ secondImage.naturalHeight > 0 &&
+ firstImageLoadTime !== undefined &&
+ secondImageLoadTime !== undefined
+ );
+ });
+ await page.waitForFunction(() => {
+ const target = document.querySelector('#target-section');
+ const targetCalls = (window.__scrollIntoViewCalls ?? []).filter(
+ call => call.id === 'target-section',
+ );
+ const targetTop = target?.getBoundingClientRect().top;
+
+ return targetCalls.length === 1 && targetTop >= -1 && targetTop < 80;
+ });
+
+ const { firstImageLoadTime, secondImageLoadTime, targetCalls, targetTop } =
+ await page.evaluate(() => {
+ const target = document.querySelector('#target-section');
+ const firstImageLoadTime = window.__imageLoadEvents.find(event => {
+ return event.alt === 'Slow image 1';
+ })?.time;
+ const secondImageLoadTime = window.__imageLoadEvents.find(event => {
+ return event.alt === 'Slow image 2';
+ })?.time;
+
+ return {
+ firstImageLoadTime,
+ secondImageLoadTime,
+ targetCalls: (window.__scrollIntoViewCalls ?? []).filter(
+ call => call.id === 'target-section',
+ ),
+ targetTop: target.getBoundingClientRect().top,
+ };
+ });
+
+ expect(firstImageLoadTime).not.toBeUndefined();
+ expect(secondImageLoadTime).not.toBeUndefined();
+
+ expect(targetCalls).toHaveLength(1);
+ expect(targetCalls[0]).toMatchObject({
+ behavior: 'smooth',
+ block: 'start',
+ });
+ expect(targetCalls[0].time).toBeGreaterThanOrEqual(firstImageLoadTime);
+ expect(targetCalls[0].time).toBeGreaterThanOrEqual(secondImageLoadTime);
+ expect(targetTop).toBeGreaterThanOrEqual(-1);
+ expect(targetTop).toBeLessThan(80);
+ });
+
+ test('keeps a direct anchor aligned when images load after the fallback scroll', async ({
+ page,
+ }) => {
+ await recordScrollIntoViewCalls(page);
+
+ let releaseImage = () => {};
+ const imageReleased = new Promise(resolve => {
+ releaseImage = resolve;
+ });
+
+ await routeDelayedImage(
+ page,
+ 'very-slow-anchor-image.svg',
+ imageReleased,
+ 1200,
+ );
+
+ const initPromise = docsifyInit({
+ config: {
+ topMargin: 90,
+ },
+ testURL: '/docsify-init.html#/?id=target-section',
+ markdown: {
+ homepage: `
+ # Anchor Scroll
+
+ 
+
+ ## Middle Section
+
+ This section should not stay at the top after the image loads.
+
+ ## Target Section
+
+ This is the linked section.
+
+ Trailing content keeps the target scrollable.
+ `,
+ },
+ routes: {
+ '/docsify-init.html': `
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ style: `
+ .markdown-section {
+ overflow-anchor: none;
+ padding-bottom: 2200px;
+ }
+
+ .markdown-section img {
+ display: block;
+ width: 100%;
+ height: auto;
+ }
+ `,
+ styleURLs: ['/dist/themes/core.css'],
+ });
+
+ await page.locator('#target-section').waitFor();
+ await page.locator('img[alt="Very slow image"]').waitFor({
+ state: 'attached',
+ });
+ await page.waitForFunction(() => {
+ return (window.__scrollIntoViewCalls ?? []).some(
+ call => call.id === 'target-section',
+ );
+ });
+
+ const targetCallsBeforeImage = await page.evaluate(() => {
+ return (window.__scrollIntoViewCalls ?? []).filter(
+ call => call.id === 'target-section',
+ );
+ });
+
+ expect(targetCallsBeforeImage).toHaveLength(1);
+ expect(targetCallsBeforeImage[0]).toMatchObject({
+ behavior: 'smooth',
+ block: 'start',
+ });
+
+ releaseImage();
+ await initPromise;
+ await page.waitForFunction(() => {
+ const image = document.querySelector('img[alt="Very slow image"]');
+
+ return (
+ image instanceof HTMLImageElement &&
+ image.complete &&
+ image.naturalHeight > 0
+ );
+ });
+ await page.waitForFunction(() => {
+ const target = document.querySelector('#target-section');
+ const targetTop = target?.getBoundingClientRect().top;
+
+ return targetTop >= 70 && targetTop < 120;
+ });
+
+ const { imageLoadTime, targetCalls, targetTop } = await page.evaluate(
+ () => {
+ const target = document.querySelector('#target-section');
+
+ return {
+ imageLoadTime: window.__imageLoadEvents.find(event => {
+ return event.alt === 'Very slow image';
+ })?.time,
+ targetCalls: (window.__scrollIntoViewCalls ?? []).filter(
+ call => call.id === 'target-section',
+ ),
+ targetTop: target.getBoundingClientRect().top,
+ };
+ },
+ );
+
+ expect(imageLoadTime).toBeGreaterThanOrEqual(targetCalls[0].time);
+ expect(targetCalls).toHaveLength(1);
+ expect(targetCalls[0]).toMatchObject({
+ behavior: 'smooth',
+ block: 'start',
+ });
+ expect(targetTop).toBeGreaterThanOrEqual(70);
+ expect(targetTop).toBeLessThan(120);
+ });
+
+ test('cancels a pending direct anchor scroll after user input', async ({
+ page,
+ }) => {
+ await recordScrollIntoViewCalls(page);
+ await page.addInitScript(() => {
+ window.__wheelTime = undefined;
+ window.__anchorWheelListenerAttachedTime = undefined;
+ const originalAddEventListener = window.addEventListener;
+
+ window.addEventListener = function (eventName, listener, options) {
+ if (
+ eventName === 'wheel' &&
+ options?.once === true &&
+ options?.passive === true
+ ) {
+ window.__anchorWheelListenerAttachedTime = performance.now();
+ }
+
+ return originalAddEventListener.call(
+ this,
+ eventName,
+ listener,
+ options,
+ );
+ };
+
+ window.addEventListener(
+ 'wheel',
+ () => {
+ window.__wheelTime = performance.now();
+ },
+ { capture: true },
+ );
+ });
+
+ let releaseImage = () => {};
+ const imageReleased = new Promise(resolve => {
+ releaseImage = resolve;
+ });
+
+ await routeDelayedImage(page, 'slow-anchor-image.svg', imageReleased, 900);
+
+ const initPromise = docsifyInit({
+ testURL: '/docsify-init.html#/?id=target-section',
+ markdown: {
+ homepage: `
+ # Anchor Scroll
+
+ 
+
+ ## Middle Section
+
+ This section should not stay at the top after the image loads.
+
+ ## Target Section
+
+ This is the linked section.
+
+ Trailing content keeps the target scrollable.
+ `,
+ },
+ routes: {
+ '/docsify-init.html': `
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ style: `
+ .markdown-section {
+ overflow-anchor: none;
+ padding-bottom: 2200px;
+ }
+
+ .markdown-section img {
+ display: block;
+ width: 100%;
+ height: auto;
+ }
+ `,
+ styleURLs: ['/dist/themes/core.css'],
+ });
+
+ await page.locator('#target-section').waitFor();
+ await page.locator('img[alt="Slow image"]').waitFor({
+ state: 'attached',
+ });
+ await page.waitForFunction(() => {
+ return window.__anchorWheelListenerAttachedTime !== undefined;
+ });
+
+ await page.mouse.wheel(0, 900);
+ const wheelTimeHandle = await page.waitForFunction(
+ () => window.__wheelTime,
+ );
+ const wheelTime = await wheelTimeHandle.jsonValue();
+ releaseImage();
+ await initPromise;
+ await page.waitForFunction(() => {
+ const image = document.querySelector('img[alt="Slow image"]');
+
+ return (
+ image instanceof HTMLImageElement &&
+ image.complete &&
+ image.naturalHeight > 0
+ );
+ });
+ await page.waitForFunction(wheelTime => {
+ return performance.now() - wheelTime > 700;
+ }, wheelTime);
+
+ const { scrollStopsAfterWheel, targetCalls, targetCallsAfterWheel } =
+ await page.evaluate(wheelTime => {
+ return {
+ scrollStopsAfterWheel: (window.__scrollToCalls ?? []).filter(call => {
+ return call.time >= wheelTime;
+ }),
+ targetCalls: (window.__scrollIntoViewCalls ?? []).filter(
+ call => call.id === 'target-section',
+ ),
+ targetCallsAfterWheel: (window.__scrollIntoViewCalls ?? []).filter(
+ call => call.id === 'target-section' && call.time >= wheelTime,
+ ),
+ };
+ }, wheelTime);
+
+ expect(targetCalls).toEqual([]);
+ expect(targetCallsAfterWheel).toEqual([]);
+ expect(scrollStopsAfterWheel).toEqual([]);
+ });
+
+ test('does not pull back after user input following a fallback scroll', async ({
+ page,
+ }) => {
+ await recordScrollIntoViewCalls(page);
+ await page.addInitScript(() => {
+ window.__wheelTime = undefined;
+
+ window.addEventListener(
+ 'wheel',
+ () => {
+ window.__wheelTime = performance.now();
+ },
+ { capture: true },
+ );
+ });
+
+ let releaseImage = () => {};
+ const imageReleased = new Promise(resolve => {
+ releaseImage = resolve;
+ });
+
+ await routeDelayedImage(
+ page,
+ 'post-scroll-slow-image.svg',
+ imageReleased,
+ 1200,
+ );
+
+ const initPromise = docsifyInit({
+ testURL: '/docsify-init.html#/?id=target-section',
+ markdown: {
+ homepage: `
+ # Anchor Scroll
+
+ 
+
+ ## Middle Section
+
+ This section should not pull the user back after wheel input.
+
+ ## Target Section
+
+ This is the linked section.
+
+ Trailing content keeps the target scrollable.
+ `,
+ },
+ routes: {
+ '/docsify-init.html': `
+
+
+
+
+
+
+
+
+
+ `,
+ },
+ style: `
+ .markdown-section {
+ overflow-anchor: none;
+ padding-bottom: 3200px;
+ }
+
+ .markdown-section img {
+ display: block;
+ width: 100%;
+ height: auto;
+ }
+ `,
+ styleURLs: ['/dist/themes/core.css'],
+ });
+
+ await page.locator('#target-section').waitFor();
+ await page.locator('img[alt="Post-scroll slow image"]').waitFor({
+ state: 'attached',
+ });
+ await page.waitForFunction(() => {
+ return (window.__scrollIntoViewCalls ?? []).some(
+ call => call.id === 'target-section',
+ );
+ });
+
+ const scrollYBeforeWheel = await page.evaluate(() => scrollY);
+ await page.mouse.wheel(0, 900);
+ const wheelTimeHandle = await page.waitForFunction(
+ () => window.__wheelTime,
+ );
+ const wheelTime = await wheelTimeHandle.jsonValue();
+ await page.waitForFunction(
+ scrollYBeforeWheel => Math.abs(scrollY - scrollYBeforeWheel) > 100,
+ scrollYBeforeWheel,
+ );
+ const scrollYAfterWheel = await page.evaluate(() => scrollY);
+ await page.waitForFunction(wheelTime => {
+ return performance.now() - wheelTime > 200;
+ }, wheelTime);
+ const scrollYBeforeImage = await page.evaluate(() => scrollY);
+
+ releaseImage();
+ await initPromise;
+ await page.waitForFunction(() => {
+ const image = document.querySelector('img[alt="Post-scroll slow image"]');
+
+ return (
+ image instanceof HTMLImageElement &&
+ image.complete &&
+ image.naturalHeight > 0
+ );
+ });
+ await page.waitForFunction(() => {
+ const imageLoadTime = window.__imageLoadEvents.find(event => {
+ return event.alt === 'Post-scroll slow image';
+ })?.time;
+
+ return (
+ imageLoadTime !== undefined && performance.now() - imageLoadTime > 300
+ );
+ });
+
+ const { scrollStopsAfterWheel, scrollYAfterImage, targetCallsAfterWheel } =
+ await page.evaluate(wheelTime => {
+ return {
+ scrollStopsAfterWheel: (window.__scrollToCalls ?? []).filter(call => {
+ return call.time >= wheelTime;
+ }),
+ scrollYAfterImage: scrollY,
+ targetCallsAfterWheel: (window.__scrollIntoViewCalls ?? []).filter(
+ call => call.id === 'target-section' && call.time >= wheelTime,
+ ),
+ };
+ }, wheelTime);
+
+ expect(Math.abs(scrollYAfterWheel - scrollYBeforeWheel)).toBeGreaterThan(
+ 100,
+ );
+ expect(targetCallsAfterWheel).toEqual([]);
+ expect(scrollStopsAfterWheel).toEqual([]);
+ expect(Math.abs(scrollYAfterImage - scrollYBeforeImage)).toBeLessThan(200);
+ });
+});
diff --git a/test/e2e/configuration.test.js b/test/e2e/configuration.test.js
new file mode 100644
index 0000000000..10af07faf0
--- /dev/null
+++ b/test/e2e/configuration.test.js
@@ -0,0 +1,259 @@
+/* global fail */
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+test.describe('Configuration options', () => {
+ test.describe('catchPluginErrors', () => {
+ test('true (handles uncaught errors)', async ({ page }) => {
+ let consoleMsg, errorMsg;
+
+ page.on('console', msg => (consoleMsg = msg.text()));
+ page.on('pageerror', err => (errorMsg = err.message));
+
+ await docsifyInit({
+ config: {
+ catchPluginErrors: true,
+ plugins: [
+ function (hook, vm) {
+ hook.init(function () {
+ fail();
+ });
+ hook.beforeEach(markdown => {
+ return `${markdown}\n\nbeforeEach`;
+ });
+ },
+ ],
+ },
+ markdown: {
+ homepage: '# Hello World',
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = page.locator('#main');
+
+ expect(errorMsg).toBeUndefined();
+ expect(consoleMsg).toContain('Docsify plugin error');
+ await expect(mainElm).toContainText('Hello World');
+ await expect(mainElm).toContainText('beforeEach');
+ });
+
+ test('false (throws uncaught errors)', async ({ page }) => {
+ let consoleMsg, errorMsg;
+
+ page.on('console', msg => {
+ const text = msg.text();
+ if (text.startsWith('DEPRECATION:')) {
+ return;
+ } // ignore expected deprecation warnings
+ consoleMsg = text;
+ });
+ page.on('pageerror', err => (errorMsg = err.message));
+
+ await docsifyInit({
+ config: {
+ catchPluginErrors: false,
+ plugins: [
+ function (hook, vm) {
+ hook.ready(function () {
+ fail();
+ });
+ },
+ ],
+ },
+ markdown: {
+ homepage: '# Hello World',
+ },
+ // _logHTML: true,
+ });
+
+ expect(consoleMsg).toBeUndefined();
+ expect(errorMsg).toContain('fail');
+ });
+ });
+
+ test.describe('notFoundPage', () => {
+ test.describe('renders default error content', () => {
+ test.beforeEach(async ({ page }) => {
+ await page.route('README.md', async route => {
+ await route.fulfill({
+ status: 500,
+ });
+ });
+ });
+
+ test('false', async ({ page }) => {
+ await docsifyInit({
+ config: {
+ notFoundPage: false,
+ },
+ });
+
+ await expect(page.locator('#main')).toContainText('500');
+ });
+
+ test('true with non-404 error', async ({ page }) => {
+ await docsifyInit({
+ config: {
+ notFoundPage: true,
+ },
+ routes: {
+ '_404.md': '',
+ },
+ });
+
+ await expect(page.locator('#main')).toContainText('500');
+ });
+
+ test('string with non-404 error', async ({ page }) => {
+ await docsifyInit({
+ config: {
+ notFoundPage: '404.md',
+ },
+ routes: {
+ '404.md': '',
+ },
+ });
+
+ await expect(page.locator('#main')).toContainText('500');
+ });
+ });
+
+ test('true: renders _404.md page', async ({ page }) => {
+ const expectText = 'Pass';
+
+ await docsifyInit({
+ config: {
+ notFoundPage: true,
+ },
+ routes: {
+ '_404.md': expectText,
+ },
+ });
+
+ await page.evaluate(() => (window.location.hash = '#/fail'));
+ await expect(page.locator('#main')).toContainText(expectText);
+ });
+
+ test('string: renders specified 404 page', async ({ page }) => {
+ const expectText = 'Pass';
+
+ await docsifyInit({
+ config: {
+ notFoundPage: '404.md',
+ },
+ routes: {
+ '404.md': expectText,
+ },
+ });
+
+ await page.evaluate(() => (window.location.hash = '#/fail'));
+ await expect(page.locator('#main')).toContainText(expectText);
+ });
+ });
+});
+
+test.describe('keyBindings', () => {
+ test('handles toggleSidebar binding (default)', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+ # Heading 1
+ `,
+ },
+ };
+
+ await docsifyInit(docsifyInitConfig);
+
+ const sidebarElm = page.locator('.sidebar');
+
+ await expect(sidebarElm).toHaveClass(/show/);
+ await page.keyboard.press('\\');
+ await expect(sidebarElm).not.toHaveClass(/show/);
+ });
+
+ test('handles custom binding', async ({ page }) => {
+ const docsifyInitConfig = {
+ config: {
+ keyBindings: {
+ customBinding: {
+ bindings: 'z',
+ callback(e) {
+ const elm = document.querySelector('main input[type="text"]');
+
+ elm.value = 'foo';
+ },
+ },
+ },
+ },
+ markdown: {
+ homepage: `
+
+ `,
+ },
+ };
+
+ const inputElm = page.locator('main input[type="text"]');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await expect(inputElm).toHaveValue('');
+ await page.keyboard.press('z');
+ await expect(inputElm).toHaveValue('foo');
+ });
+
+ test('ignores event when focused on text input elements', async ({
+ page,
+ }) => {
+ const docsifyInitConfig = {
+ config: {
+ keyBindings: {
+ customBinding: {
+ bindings: 'z',
+ callback(e) {
+ document.body.setAttribute('data-foo', '');
+ },
+ },
+ },
+ },
+ markdown: {
+ homepage: `
+
+
+ a
+ z
+
+
+ `,
+ },
+ };
+
+ const bodyElm = page.locator('body');
+ const inputElm = page.locator('input[type="text"]');
+ const selectElm = page.locator('select');
+ const textareaElm = page.locator('textarea');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await inputElm.focus();
+ await expect(inputElm).toHaveValue('');
+ await page.keyboard.press('z');
+ await expect(inputElm).toHaveValue('z');
+ await inputElm.blur();
+
+ await textareaElm.focus();
+ await expect(textareaElm).toHaveValue('');
+ await page.keyboard.press('z');
+ await expect(textareaElm).toHaveValue('z');
+ await textareaElm.blur();
+
+ await selectElm.focus();
+ await page.keyboard.press('z');
+ await expect(selectElm).toHaveValue('z');
+ await selectElm.blur();
+
+ await expect(bodyElm).not.toHaveAttribute('data-foo');
+ await page.keyboard.press('z');
+ await expect(bodyElm).toHaveAttribute('data-foo');
+ });
+});
diff --git a/test/e2e/example.test.js b/test/e2e/example.test.js
new file mode 100644
index 0000000000..bf69139c02
--- /dev/null
+++ b/test/e2e/example.test.js
@@ -0,0 +1,230 @@
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+test.describe('Creating a Docsify site (e2e tests in Playwright)', () => {
+ test('manual docsify site using playwright methods', async ({ page }) => {
+ // Add docsify target element
+ await page.setContent('
');
+
+ // Set docsify configuration
+ await page.evaluate(() => {
+ window.$docsify = {
+ el: '#app',
+ themeColor: 'red',
+ };
+ });
+
+ // Inject docsify theme
+ await page.addStyleTag({ url: '/dist/themes/core.css' });
+
+ // Inject docsify.js
+ await page.addScriptTag({ url: '/dist/docsify.js' });
+
+ // Wait for docsify to initialize
+ await page.locator('#main').waitFor();
+
+ // Create handle for JavaScript object in browser
+ const $docsify = await page.evaluate(() => window.$docsify);
+ // const $docsify = await page.evaluateHandle(() => window.$docsify);
+
+ // Test object property and value
+ expect($docsify).toHaveProperty('themeColor', 'red');
+ });
+
+ test('Docsify /docs/ site using docsifyInit()', async ({ page }) => {
+ // Load custom docsify
+ // (See ./helpers/docsifyInit.js for details)
+ await docsifyInit({
+ // _logHTML: true,
+ });
+
+ // Verify docsifyInitConfig.markdown content was rendered
+ const mainElm = page.locator('#main');
+ await expect(mainElm).toHaveCount(1);
+ await expect(mainElm).toContainText(
+ 'A magical documentation site generator',
+ );
+ });
+
+ test('custom docsify site using docsifyInit()', async ({ page }) => {
+ const docsifyInitConfig = {
+ config: {
+ name: 'Docsify Name',
+ themeColor: 'red',
+ },
+ markdown: {
+ coverpage: `
+ # Docsify Test
+
+ > Testing a magical documentation site generator
+
+ [GitHub](https://github.com/docsifyjs/docsify/)
+ `,
+ homepage: `
+ # Hello World
+
+ This is the homepage.
+ `,
+ navbar: `
+ - [docsify.js.org](https://docsify.js.org/#/)
+ `,
+ sidebar: `
+ - [Test Page](test)
+ `,
+ },
+ routes: {
+ 'test.md': `
+ # Test Page
+
+ This is a custom route.
+ `,
+ 'data-test-scripturls.js': `
+ document.body.setAttribute('data-test-scripturls', 'pass');
+ `,
+ },
+ script: `
+ document.body.setAttribute('data-test-script', 'pass');
+ `,
+ scriptURLs: [
+ // docsifyInit() route
+ 'data-test-scripturls.js',
+ // Server route
+ '/dist/plugins/search.js',
+ ],
+ style: `
+ body {
+ background: red !important;
+ }
+ `,
+ styleURLs: ['/dist/themes/core.css'],
+ };
+
+ await docsifyInit({
+ ...docsifyInitConfig,
+ // _logHTML: true,
+ });
+
+ const $docsify = await page.evaluate(() => window.$docsify);
+
+ // Verify config options
+ expect(typeof $docsify).toEqual('object');
+ expect($docsify).toHaveProperty('themeColor', 'red');
+ await expect(page.locator('.app-name')).toHaveText('Docsify Name');
+
+ // Verify docsifyInitConfig.markdown content was rendered
+ await expect(page.locator('section.cover h1')).toHaveText('Docsify Test'); // Coverpage
+ await expect(page.locator('nav.app-nav')).toHaveText('docsify.js.org'); // Navbar
+ await expect(page.locator('aside.sidebar')).toContainText('Test Page'); // Sidebar
+ await expect(page.locator('#main')).toContainText('This is the homepage'); // Homepage
+
+ // Verify docsifyInitConfig.scriptURLs were added to the DOM
+ for (const scriptURL of docsifyInitConfig.scriptURLs) {
+ await expect(page.locator(`script[src$="${scriptURL}"]`)).toHaveCount(1);
+ }
+
+ // Verify docsifyInitConfig.scriptURLs were executed
+ await expect(page.locator('body[data-test-scripturls]')).toHaveCount(1);
+ await expect(page.locator('.search input[type="search"]')).toHaveCount(1);
+
+ // Verify docsifyInitConfig.script was added to the DOM
+ expect(
+ await page.evaluate(
+ scriptText => {
+ return [...document.querySelectorAll('script')].some(
+ elm => elm.textContent.replace(/\s+/g, '') === scriptText,
+ );
+ },
+ docsifyInitConfig.script.replace(/\s+/g, ''),
+ ),
+ ).toBe(true);
+
+ // Verify docsifyInitConfig.script was executed
+ await expect(page.locator('body[data-test-script]')).toHaveCount(1);
+
+ // Verify docsifyInitConfig.styleURLs were added to the DOM
+ for (const styleURL of docsifyInitConfig.styleURLs) {
+ await expect(
+ page.locator(`link[rel*="stylesheet"][href$="${styleURL}"]`),
+ ).toHaveCount(1);
+ }
+
+ // Verify docsifyInitConfig.style was added to the DOM
+ expect(
+ await page.evaluate(
+ styleText => {
+ return [...document.querySelectorAll('style')].some(
+ elm => elm.textContent.replace(/\s+/g, '') === styleText,
+ );
+ },
+ docsifyInitConfig.style.replace(/\s+/g, ''),
+ ),
+ ).toBe(true);
+
+ // Verify docsify navigation and docsifyInitConfig.routes
+ await page.click('a[href="#/test"]');
+ expect(page.url()).toMatch(/\/test$/);
+ await expect(page.locator('#main')).toContainText('This is a custom route');
+ });
+
+ // test.fixme('image snapshots', async ({ page }) => {
+ // await docsifyInit({
+ // config: {
+ // name: 'Docsify Test',
+ // },
+ // markdown: {
+ // homepage: `
+ // # The Cosmos Awaits
+
+ // [Carl Sagan](https://en.wikipedia.org/wiki/Carl_Sagan)
+
+ // Cosmic ocean take root and flourish decipherment hundreds of thousands
+ // dream of the mind's eye courage of our questions. At the edge of forever
+ // network of wormholes ship of the imagination two ghostly white figures
+ // in coveralls and helmets are softly dancing are creatures of the cosmos
+ // the only home we've ever known? How far away emerged into consciousness
+ // bits of moving fluff gathered by gravity with pretty stories for which
+ // there's little good evidence vanquish the impossible.
+
+ // The ash of stellar alchemy permanence of the stars shores of the cosmic
+ // ocean billions upon billions Drake Equation finite but unbounded.
+ // Hundreds of thousands cosmic ocean hearts of the stars Hypatia invent
+ // the universe hearts of the stars? Realm of the galaxies muse about dream
+ // of the mind's eye hundreds of thousands the only home we've ever known
+ // how far away. Extraordinary claims require extraordinary evidence
+ // citizens of distant epochs invent the universe as a patch of light the
+ // carbon in our apple pies gathered by gravity.
+
+ // Billions upon billions gathered by gravity white dwarf intelligent
+ // beings vanquish the impossible descended from astronomers. A still more
+ // glorious dawn awaits cosmic ocean star stuff harvesting star light the
+ // sky calls to us kindling the energy hidden in matter rich in heavy
+ // atoms. A mote of dust suspended in a sunbeam across the centuries the
+ // only home we've ever known bits of moving fluff a very small stage in a
+ // vast cosmic arena courage of our questions.
+
+ // Euclid the only home we've ever known realm of the galaxies trillion
+ // radio telescope Apollonius of Perga. The carbon in our apple pies invent
+ // the universe muse about stirred by starlight great turbulent clouds
+ // emerged into consciousness? Invent the universe vastness is bearable
+ // only through love a still more glorious dawn awaits descended from
+ // astronomers as a patch of light the sky calls to us. Great turbulent
+ // clouds citizens of distant epochs invent the universe two ghostly white
+ // figures in coveralls and helmets are softly dancing courage of our
+ // questions rich in heavy atoms and billions upon billions upon billions
+ // upon billions upon billions upon billions upon billions.
+ // `,
+ // },
+ // styleURLs: [`/dist/themes/core.css`],
+ // // _logHTML: true,
+ // });
+
+ // // Viewport screenshot
+ // const viewportShot = await page.screenshot();
+ // expect(viewportShot).toMatchSnapshot('viewport.png');
+
+ // // Element screenshot
+ // const elmHandle = await page.locator('h1').first();
+ // const elmShot = await elmHandle.screenshot();
+ // expect(elmShot).toMatchSnapshot('element.png');
+ // });
+});
diff --git a/test/e2e/fixtures/docsify-init-fixture.js b/test/e2e/fixtures/docsify-init-fixture.js
new file mode 100644
index 0000000000..1c4260b20c
--- /dev/null
+++ b/test/e2e/fixtures/docsify-init-fixture.js
@@ -0,0 +1,17 @@
+import { test as _test, expect as _expect } from '@playwright/test';
+
+export const test = _test.extend({
+ page: async ({ page }, use) => {
+ global.page = page;
+
+ // Navigate to a real URL by default
+ // Playwright tests are executed on "about:blank" by default, which will
+ // cause operations that require the window location to be a valid URL to
+ // fail (e.g. AJAX requests). Navigating to a blank document with a real
+ // URL solved this problem.
+ await page.goto('/_blank.html');
+ await use(page);
+ },
+});
+
+export const expect = _expect;
diff --git a/test/e2e/gtag.test.js b/test/e2e/gtag.test.js
new file mode 100644
index 0000000000..5c2f747e3e
--- /dev/null
+++ b/test/e2e/gtag.test.js
@@ -0,0 +1,84 @@
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+const gtagList = [
+ 'AW-YYYYYY', // Google Ads
+ 'DC-ZZZZZZ', // Floodlight
+ 'G-XXXXXX', // Google Analytics 4 (GA4)
+ 'UA-XXXXXX', // Google Universal Analytics (GA3)
+];
+
+test.describe('Gtag Plugin Tests', () => {
+ // page request listened, print collect url
+ function pageRequestListened(page) {
+ page.on('request', request => {
+ if (request.url().indexOf('www.google-analytics.com') !== -1) {
+ // console.log(request.url());
+ }
+ });
+
+ page.on('response', response => {
+ const request = response.request();
+ // googleads.g.doubleclick.net
+ // www.google-analytics.com
+ // www.googletagmanager.com
+ const reg =
+ /googleads\.g\.doubleclick\.net|www\.google-analytics\.com|www\.googletagmanager\.com/g;
+ if (request.url().match(reg)) {
+ // console.log(request.url(), response.status());
+ }
+ });
+ }
+
+ test('single gtag', async ({ page }) => {
+ pageRequestListened(page);
+
+ const docsifyInitConfig = {
+ config: {
+ gtag: gtagList[0],
+ },
+ scriptURLs: ['/dist/plugins/gtag.js'],
+ styleURLs: ['/dist/themes/core.css'],
+ };
+
+ await docsifyInit({
+ ...docsifyInitConfig,
+ });
+
+ const $docsify = await page.evaluate(() => window.$docsify);
+
+ // Verify config options
+ expect(typeof $docsify).toEqual('object');
+
+ // console.log($docsify.gtag, $docsify.gtag === '');
+
+ // Tests
+ expect($docsify.gtag).not.toEqual('');
+ });
+
+ test('multi gtag', async ({ page }) => {
+ pageRequestListened(page);
+
+ const docsifyInitConfig = {
+ config: {
+ gtag: gtagList,
+ },
+ scriptURLs: ['/dist/plugins/gtag.js'],
+ styleURLs: ['/dist/themes/core.css'],
+ };
+
+ await docsifyInit({
+ ...docsifyInitConfig,
+ });
+
+ const $docsify = await page.evaluate(() => window.$docsify);
+
+ // Verify config options
+ expect(typeof $docsify).toEqual('object');
+
+ // console.log($docsify.gtag, $docsify.gtag === '');
+
+ // Tests
+ expect($docsify.gtag).not.toEqual('');
+ });
+});
diff --git a/test/e2e/index-file.test.js b/test/e2e/index-file.test.js
new file mode 100644
index 0000000000..79a4f04cd2
--- /dev/null
+++ b/test/e2e/index-file.test.js
@@ -0,0 +1,28 @@
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+test.describe('Index file hosting', () => {
+ const sharedOptions = {
+ config: {
+ basePath: '/index.html#/',
+ },
+ testURL: '/index.html#/',
+ };
+
+ test('should serve from index file', async ({ page }) => {
+ await docsifyInit(sharedOptions);
+ await expect(page.locator('#main')).toContainText(
+ 'A magical documentation site generator',
+ );
+ expect(page.url()).toMatch(/index\.html#\/$/);
+ });
+
+ test('should use index file links in sidebar from index file hosting', async ({
+ page,
+ }) => {
+ await docsifyInit(sharedOptions);
+ await page.click('a[href="#/quickstart"]');
+ await expect(page.locator('#main')).toContainText('Quick start');
+ expect(page.url()).toMatch(/index\.html#\/quickstart$/);
+ });
+});
diff --git a/test/e2e/plugins.test.js b/test/e2e/plugins.test.js
new file mode 100644
index 0000000000..b1e53d729a
--- /dev/null
+++ b/test/e2e/plugins.test.js
@@ -0,0 +1,240 @@
+import docsifyInit from '../helpers/docsify-init.js';
+import { waitForFunction } from '../helpers/wait-for.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+test.describe('Plugins', () => {
+ test('Hook order', async ({ page }) => {
+ const consoleMsgs = [];
+ const expectedMsgs = [
+ 'init',
+ 'mounted',
+ 'beforeEach-async',
+ 'beforeEach',
+ 'afterEach-async',
+ 'afterEach',
+ 'doneEach',
+ 'ready',
+ ];
+
+ page.on('console', msg => {
+ const text = msg.text();
+ if (text.startsWith('DEPRECATION:')) {
+ return;
+ } // ignore expected deprecation warnings
+ consoleMsgs.push(text);
+ });
+
+ await docsifyInit({
+ config: {
+ plugins: [
+ function (hook, vm) {
+ hook.init(() => {
+ console.log('init');
+ });
+
+ hook.mounted(() => {
+ console.log('mounted');
+ });
+
+ hook.beforeEach((markdown, next) => {
+ setTimeout(() => {
+ console.log('beforeEach-async');
+ next(markdown);
+ }, 100);
+ });
+
+ hook.beforeEach(markdown => {
+ console.log('beforeEach');
+ return markdown;
+ });
+
+ hook.afterEach((html, next) => {
+ setTimeout(() => {
+ console.log('afterEach-async');
+ next(html);
+ }, 100);
+ });
+
+ hook.afterEach(html => {
+ console.log('afterEach');
+ return html;
+ });
+
+ hook.doneEach(() => {
+ console.log('doneEach');
+ });
+
+ hook.ready(() => {
+ console.log('ready');
+ });
+ },
+ ],
+ },
+ markdown: {
+ homepage: '# Hello World',
+ },
+ // _logHTML: true,
+ });
+
+ expect(consoleMsgs).toEqual(expectedMsgs);
+ });
+
+ test.describe('beforeEach()', () => {
+ test('return value', async ({ page }) => {
+ await docsifyInit({
+ config: {
+ plugins: [
+ function (hook, vm) {
+ hook.beforeEach(markdown => {
+ return 'beforeEach';
+ });
+ },
+ ],
+ },
+ // _logHTML: true,
+ });
+
+ await expect(page.locator('#main')).toContainText('beforeEach');
+ });
+
+ test('async return value', async ({ page }) => {
+ await docsifyInit({
+ config: {
+ plugins: [
+ function (hook, vm) {
+ hook.beforeEach((markdown, next) => {
+ setTimeout(() => {
+ next('beforeEach');
+ }, 100);
+ });
+ },
+ ],
+ },
+ markdown: {
+ homepage: '# Hello World',
+ },
+ // _logHTML: true,
+ });
+
+ await expect(page.locator('#main')).toContainText('beforeEach');
+ });
+ });
+
+ test.describe('afterEach()', () => {
+ test('return value', async ({ page }) => {
+ await docsifyInit({
+ config: {
+ plugins: [
+ function (hook, vm) {
+ hook.afterEach(html => {
+ return 'afterEach
';
+ });
+ },
+ ],
+ },
+ markdown: {
+ homepage: '# Hello World',
+ },
+ // _logHTML: true,
+ });
+
+ await expect(page.locator('#main')).toContainText('afterEach');
+ });
+
+ test('async return value', async ({ page }) => {
+ await docsifyInit({
+ config: {
+ plugins: [
+ function (hook, vm) {
+ hook.afterEach((html, next) => {
+ setTimeout(() => {
+ next('afterEach
');
+ }, 100);
+ });
+ },
+ ],
+ },
+ markdown: {
+ homepage: '# Hello World',
+ },
+ // _logHTML: true,
+ });
+
+ await expect(page.locator('#main')).toContainText('afterEach');
+ });
+ });
+
+ test.describe('route data accessible to plugins', () => {
+ let routeData = null;
+
+ test.beforeEach(async ({ page }) => {
+ // Store route data set via plugin hook (below)
+ page.on('console', async msg => {
+ for (const arg of msg.args()) {
+ const val = await arg.jsonValue();
+ if (typeof val === 'string' && val.startsWith('DEPRECATION:')) {
+ continue;
+ }
+ try {
+ const obj = typeof val === 'string' ? JSON.parse(val) : val;
+ obj && obj.response && (routeData = obj);
+ } catch {
+ // ignore non-JSON console messages
+ }
+ }
+ });
+ });
+
+ test.afterEach(async ({ page }) => {
+ routeData = null;
+ });
+
+ test('success (200)', async ({ page }) => {
+ await docsifyInit({
+ config: {
+ plugins: [
+ function (hook, vm) {
+ hook.doneEach(html => {
+ console.log(JSON.stringify(vm.route));
+ });
+ },
+ ],
+ },
+ });
+
+ expect(routeData).toHaveProperty('response');
+ expect(routeData.response).toHaveProperty('ok', true);
+ expect(routeData.response).toHaveProperty('status', 200);
+ expect(routeData.response).toHaveProperty('statusText', 'OK');
+ });
+
+ test('fail (404)', async ({ page }) => {
+ const link404Elm = page.locator('a[href*="404"]');
+
+ await docsifyInit({
+ markdown: {
+ sidebar: `
+ - [404](404.md)
+ `,
+ },
+ config: {
+ plugins: [
+ function (hook, vm) {
+ hook.doneEach(html => {
+ console.log(JSON.stringify(vm.route));
+ });
+ },
+ ],
+ },
+ });
+
+ await link404Elm.click();
+ await waitForFunction(() => routeData?.response?.status === 404);
+
+ expect(routeData).toHaveProperty('response');
+ expect(routeData.response).toHaveProperty('ok', false);
+ expect(routeData.response).toHaveProperty('status', 404);
+ expect(routeData.response).toHaveProperty('statusText', 'Not Found');
+ });
+ });
+});
diff --git a/test/e2e/search.test.js b/test/e2e/search.test.js
new file mode 100644
index 0000000000..c36c0a1812
--- /dev/null
+++ b/test/e2e/search.test.js
@@ -0,0 +1,514 @@
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+test.describe('Search Plugin Tests', () => {
+ test('search readme', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+ # Hello World
+
+ This is the homepage.
+ `,
+ sidebar: `
+ - [Test Page](test)
+ `,
+ },
+ routes: {
+ '/test.md': `
+ # Test Page
+
+ This is a custom route.
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .title');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await searchFieldElm.fill('hello');
+ await expect(resultsHeadingElm).toHaveText('Hello World');
+ await page.click('.clear-button');
+ await searchFieldElm.fill('test');
+ await expect(resultsHeadingElm).toHaveText('Test Page');
+ });
+
+ test('search ignore title', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+ # Hello World
+
+ This is the homepage.
+ `,
+ sidebar: `
+ - [Home page](/)
+ - [GitHub Pages](github)
+ `,
+ },
+ routes: {
+ '/github.md': `
+ # GitHub Pages
+
+ This is the GitHub Pages.
+
+ ## GitHub Pages ignore1
+
+ There're three places to populate your docs for your GitHub repository1.
+
+ ## GitHub Pages ignore2 {docsify-ignore}
+
+ There're three places to populate your docs for your GitHub repository2.
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .title');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await searchFieldElm.fill('repository1');
+ await expect(resultsHeadingElm).toHaveText('GitHub Pages ignore1');
+ await page.click('.clear-button');
+ await searchFieldElm.fill('repository2');
+ await expect(resultsHeadingElm).toHaveText('GitHub Pages ignore2');
+ });
+
+ test('search only one homepage', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ sidebar: `
+ - [README](README)
+ - [Test Page](test)
+ `,
+ },
+ routes: {
+ '/README.md': `
+ # Hello World
+
+ This is the homepage.
+ `,
+ '/test.md': `
+ # Test Page
+
+ This is a custom route.
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .title');
+ const resultElm = page.locator('.matching-post');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await searchFieldElm.fill('hello');
+ await expect(resultElm).toHaveCount(1);
+ await expect(resultsHeadingElm).toHaveText('Hello World');
+ await page.click('.clear-button');
+ await searchFieldElm.fill('test');
+ await expect(resultsHeadingElm).toHaveText('Test Page');
+ });
+
+ test('search ignore diacritical marks', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+ # Qué es
+
+ docsify genera su sitio web de documentación sobre la marcha. A diferencia de GitBook, no genera archivos estáticos html. En cambio, carga y analiza de forma inteligente sus archivos de Markdown y los muestra como sitio web. Todo lo que necesita hacer es crear un index.html para comenzar y desplegarlo en GitHub Pages.
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .title');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await searchFieldElm.fill('documentacion');
+ await expect(resultsHeadingElm).toHaveText('Que es');
+ await page.click('.clear-button');
+ await searchFieldElm.fill('estáticos');
+ await expect(resultsHeadingElm).toHaveText('Que es');
+ });
+
+ test('search when there is no title', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+ This is some description. We assume autoHeader added the # Title. A long paragraph.
+ `,
+ sidebar: `
+ - [Changelog](changelog)
+ `,
+ },
+ routes: {
+ '/changelog.md': `
+ feat: Support search when there is no title
+
+ ## Changelog Title
+
+ hello, this is a changelog
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .title');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await searchFieldElm.fill('paragraph');
+ await expect(resultsHeadingElm).toHaveText('Home Page');
+ await page.click('.clear-button');
+ await searchFieldElm.fill('Support');
+ await expect(resultsHeadingElm).toHaveText('changelog');
+ await page.click('.clear-button');
+ await searchFieldElm.fill('hello');
+ await expect(resultsHeadingElm).toHaveText('Changelog Title');
+ });
+
+ test('search when there is no body', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+ # EmptyContent
+ ---
+ ---
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .title');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await searchFieldElm.fill('empty');
+ await expect(resultsHeadingElm).toHaveText('EmptyContent');
+ });
+
+ test('keeps saving index when one auto path request fails with cached records', async ({
+ page,
+ }) => {
+ const indexKey = 'docsify.search.index';
+ const expireKey = 'docsify.search.expires';
+
+ const pageErrors = [];
+ page.on('pageerror', error => pageErrors.push(error.message));
+
+ await page.evaluate(
+ ({ indexKey, expireKey }) => {
+ return new Promise((resolve, reject) => {
+ const request = indexedDB.open('docsify', 1);
+
+ request.onupgradeneeded = () => {
+ const db = request.result;
+
+ if (!db.objectStoreNames.contains('search')) {
+ db.createObjectStore('search', { keyPath: 'slug' });
+ }
+
+ if (!db.objectStoreNames.contains('expires')) {
+ db.createObjectStore('expires', { keyPath: 'key' });
+ }
+ };
+
+ request.onerror = () => reject(request.error);
+ request.onsuccess = () => {
+ const db = request.result;
+ const tx = db.transaction(['search', 'expires'], 'readwrite');
+
+ tx.objectStore('search').put({
+ slug: '/cached',
+ title: 'Cached Page',
+ body: 'cached record',
+ path: '/cached',
+ indexKey,
+ });
+ tx.objectStore('expires').put({
+ key: expireKey,
+ value: Date.now() + 60 * 1000,
+ });
+
+ tx.oncomplete = () => {
+ db.close();
+ resolve();
+ };
+ tx.onerror = () => reject(tx.error);
+ };
+ });
+ },
+ { indexKey, expireKey },
+ );
+
+ await docsifyInit({
+ markdown: {
+ homepage: '# Home',
+ sidebar: `
+ - [Cached](cached)
+ - [Success](success)
+ - [Fail](fail)
+ `,
+ },
+ routes: {
+ '/success.md': '# Success\n\nregressionKeyword',
+ '/fail.md': {
+ status: 404,
+ body: 'Not Found',
+ contentType: 'text/markdown',
+ },
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ });
+
+ await expect
+ .poll(async () => {
+ return await page.evaluate(indexKey => {
+ return new Promise((resolve, reject) => {
+ const request = indexedDB.open('docsify');
+
+ request.onerror = () => reject(request.error);
+ request.onsuccess = () => {
+ const db = request.result;
+ const tx = db.transaction(['search', 'expires'], 'readonly');
+ const searchStore = tx.objectStore('search');
+ const expiresStore = tx.objectStore('expires');
+ const searchReq = searchStore.getAll();
+ const expiresReq = expiresStore.get('docsify.search.expires');
+
+ tx.onerror = () => reject(tx.error);
+ tx.oncomplete = () => {
+ const records = Array.isArray(searchReq.result)
+ ? searchReq.result
+ : [];
+ const hasSuccessRecord = records.some(
+ record =>
+ record &&
+ record.indexKey === indexKey &&
+ record.path === '/success',
+ );
+ const hasInvalidRecord = records.some(
+ record => !record || typeof record.slug !== 'string',
+ );
+ const hasExpireRecord = Boolean(expiresReq.result?.value);
+
+ db.close();
+ resolve(
+ hasSuccessRecord && hasExpireRecord && !hasInvalidRecord,
+ );
+ };
+ };
+ });
+ }, indexKey);
+ })
+ .toBe(true);
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .title');
+
+ await searchFieldElm.fill('regressionKeyword');
+ await expect(resultsHeadingElm).toHaveText('Success');
+ expect(pageErrors).toEqual([]);
+ });
+
+ test('handles default focusSearch binding', async ({ page }) => {
+ const docsifyInitConfig = {
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type="search"]');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await expect(searchFieldElm).not.toBeFocused();
+ await page.keyboard.press('/');
+ await expect(searchFieldElm).toBeFocused();
+ });
+
+ test('handles custom focusSearch binding', async ({ page }) => {
+ const docsifyInitConfig = {
+ config: {
+ search: {
+ keyBindings: ['z'],
+ },
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type="search"]');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await expect(searchFieldElm).not.toBeFocused();
+ await page.keyboard.press('/');
+ await expect(searchFieldElm).not.toBeFocused();
+ await page.keyboard.press('z');
+ await expect(searchFieldElm).toBeFocused();
+ });
+ test('search result should remove markdown code block', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+# Hello World
+
+searchHere
+\`\`\`js
+console.log('Hello World');
+\`\`\`
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .content');
+
+ await docsifyInit(docsifyInitConfig);
+ await searchFieldElm.fill('searchHere');
+ // there is a newline after searchHere and the markdown part ```js ``` it should be removed
+ expect(await resultsHeadingElm.textContent()).toContain(
+ "...searchHere\nconsole.log('Hello World');...",
+ );
+ });
+
+ test('search result should remove file markdown and keep href attribution for files', async ({
+ page,
+ }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+# Hello World
+
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .content');
+
+ await docsifyInit(docsifyInitConfig);
+ await searchFieldElm.fill('filename');
+ expect(await resultsHeadingElm.textContent()).toContain(
+ 'filename _media/example.js :include :type=code :fragment=demo',
+ );
+ });
+
+ test('search should index embedded include content', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+# Include Search
+
+
+ `,
+ },
+ routes: {
+ '/snippet.js': `
+const embeddedSearchKeyword = 'ok';
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .title');
+
+ await docsifyInit(docsifyInitConfig);
+ await searchFieldElm.fill('embeddedSearchKeyword');
+ await expect(resultsHeadingElm).toHaveText('Include Search');
+ });
+
+ test('search should index embedded include content from relative path', async ({
+ page,
+ }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: '# Home',
+ sidebar: '- [Guide Intro](guide/intro)',
+ },
+ routes: {
+ '/guide/intro.md': `
+# Relative Include Search
+
+
+ `,
+ '/guide/snippets/demo.js': `
+const embeddedRelativeKeyword = 'ok';
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .title');
+
+ await docsifyInit(docsifyInitConfig);
+ await searchFieldElm.fill('embeddedRelativeKeyword');
+ await expect(resultsHeadingElm).toHaveText('Relative Include Search');
+ });
+
+ test('search result should remove checkbox markdown and keep related values', async ({
+ page,
+ }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+# Hello World
+
+- [ ] Task 1
+- [x] SearchHere
+- [ ] Task 3
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .content');
+
+ await docsifyInit(docsifyInitConfig);
+ await searchFieldElm.fill('SearchHere');
+ // remove the checkbox markdown and keep the related values
+ expect(await resultsHeadingElm.textContent()).toContain(
+ '...Task 1 SearchHere Task 3...',
+ );
+ });
+
+ test('search result should remove docsify self helper markdown and keep related values', async ({
+ page,
+ }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ homepage: `
+# Hello World
+
+!> SearchHere to check it!
+
+ `,
+ },
+ scriptURLs: ['/dist/plugins/search.js'],
+ };
+
+ const searchFieldElm = page.locator('input[type=search]');
+ const resultsHeadingElm = page.locator('.results-panel .content');
+
+ await docsifyInit(docsifyInitConfig);
+ await searchFieldElm.fill('SearchHere');
+ // remove the helper markdown and keep the related values
+ expect(await resultsHeadingElm.textContent()).toContain(
+ '...SearchHere to check it!...',
+ );
+ });
+});
diff --git a/test/e2e/security.test.js b/test/e2e/security.test.js
new file mode 100644
index 0000000000..44913b334e
--- /dev/null
+++ b/test/e2e/security.test.js
@@ -0,0 +1,34 @@
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+test.describe('Security - Cross Site Scripting (XSS)', () => {
+ const sharedOptions = {
+ markdown: {
+ homepage: '# Hello World',
+ },
+ routes: {
+ 'test.md': '# Test Page',
+ },
+ };
+ const slashStrings = ['//', '///'];
+
+ for (const slashString of slashStrings) {
+ const hash = `#${slashString}domain.com/file.md`;
+
+ test(`should not load remote content from hash (${hash})`, async ({
+ page,
+ }) => {
+ const mainElm = page.locator('#main');
+
+ await docsifyInit(sharedOptions);
+ await expect(mainElm).toContainText('Hello World');
+ await page.evaluate(() => (location.hash = '#/test'));
+ await expect(mainElm).toContainText('Test Page');
+ await page.evaluate(newHash => {
+ location.hash = newHash;
+ }, hash);
+ await expect(mainElm).toContainText('Hello World');
+ expect(page.url()).toMatch(/#\/$/);
+ });
+ }
+});
diff --git a/test/e2e/sidebar.test.js b/test/e2e/sidebar.test.js
new file mode 100644
index 0000000000..ff4526601b
--- /dev/null
+++ b/test/e2e/sidebar.test.js
@@ -0,0 +1,157 @@
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+// Suite
+// -----------------------------------------------------------------------------
+test.describe('Sidebar Tests', () => {
+ // Tests
+ // ---------------------------------------------------------------------------
+ test('Active Test', async ({ page }) => {
+ const docsifyInitConfig = {
+ markdown: {
+ sidebar: `
+ - [Test Space](test%20space)
+ - [Test _](test_foo)
+ - [Test -](test-foo)
+ - [Test .](test.foo)
+ - [Test >](test>foo)
+ - [Test](test)
+ `,
+ },
+ routes: {
+ '/test space.md': `
+ # Test Space
+ `,
+ '/test_foo.md': `
+ # Test _
+ `,
+ '/test-foo.md': `
+ # Test -
+ `,
+ '/test.foo.md': `
+ # Test .
+ `,
+ '/test>foo.md': `
+ # Test >
+ `,
+ '/test.md': `
+ # Test page
+ `,
+ },
+ };
+
+ const activeLinkElm = page.locator('.sidebar-nav li[class=active]');
+
+ await docsifyInit(docsifyInitConfig);
+
+ await page.click('a[href="#/test"]');
+ await expect(activeLinkElm).toHaveText('Test');
+ expect(page.url()).toMatch(/\/test$/);
+
+ await page.click('a[href="#/test%20space"]');
+ await expect(activeLinkElm).toHaveText('Test Space');
+ expect(page.url()).toMatch(/\/test%20space$/);
+
+ await page.click('a[href="#/test_foo"]');
+ await expect(activeLinkElm).toHaveText('Test _');
+ expect(page.url()).toMatch(/\/test_foo$/);
+
+ await page.click('a[href="#/test-foo"]');
+ await expect(activeLinkElm).toHaveText('Test -');
+ expect(page.url()).toMatch(/\/test-foo$/);
+
+ await page.click('a[href="#/test.foo"]');
+ await expect(activeLinkElm).toHaveText('Test .');
+ expect(page.url()).toMatch(/\/test.foo$/);
+
+ await page.click('a[href="#/test>foo"]');
+ await expect(activeLinkElm).toHaveText('Test >');
+ expect(page.url()).toMatch(/\/test%3Efoo$/);
+ });
+});
+
+test.describe('Configuration: autoHeader', () => {
+ test('autoHeader=false', async ({ page }) => {
+ const docsifyInitConfig = {
+ config: {
+ loadSidebar: '_sidebar.md',
+ autoHeader: false,
+ },
+ markdown: {
+ sidebar: `
+ - [QuickStartAutoHeader](quickstart.md)
+ `,
+ },
+ routes: {
+ '/quickstart.md': `
+ the content of quickstart space
+ ## In the main content there is no h1
+ `,
+ },
+ };
+
+ await docsifyInit(docsifyInitConfig);
+
+ await page.click('a[href="#/quickstart"]');
+ expect(page.url()).toMatch(/\/quickstart$/);
+ // not heading
+ await expect(page.locator('#quickstart')).toBeHidden();
+ });
+
+ test('autoHeader=true', async ({ page }) => {
+ const docsifyInitConfig = {
+ config: {
+ loadSidebar: '_sidebar.md',
+ autoHeader: true,
+ },
+ markdown: {
+ sidebar: `
+ - [QuickStartAutoHeader](quickstart.md )
+ `,
+ },
+ routes: {
+ '/quickstart.md': `
+ the content of quickstart space
+ ## In the main content there is no h1
+ `,
+ },
+ };
+
+ await docsifyInit(docsifyInitConfig);
+
+ await page.click('a[href="#/quickstart"]');
+ expect(page.url()).toMatch(/\/quickstart$/);
+
+ // auto generate default heading id
+ const autoHeader = page.locator('#quickstartautoheader');
+ expect(await autoHeader.innerText()).toContain('QuickStartAutoHeader');
+ });
+
+ test('autoHeader=true and custom headingId', async ({ page }) => {
+ const docsifyInitConfig = {
+ config: {
+ loadSidebar: '_sidebar.md',
+ autoHeader: true,
+ },
+ markdown: {
+ sidebar: `
+ - [QuickStartAutoHeader](quickstart.md ":id=quickstartId")
+ `,
+ },
+ routes: {
+ '/quickstart.md': `
+ the content of quickstart space
+ ## In the main content there is no h1
+ `,
+ },
+ };
+
+ await docsifyInit(docsifyInitConfig);
+
+ await page.click('a[href="#/quickstart"]');
+ expect(page.url()).toMatch(/\/quickstart$/);
+ // auto generate custom heading id
+ const autoHeader = page.locator('#quickstartId');
+ expect(await autoHeader.innerText()).toContain('QuickStartAutoHeader');
+ });
+});
diff --git a/test/e2e/virtual-routes.test.js b/test/e2e/virtual-routes.test.js
new file mode 100644
index 0000000000..6c0885fc67
--- /dev/null
+++ b/test/e2e/virtual-routes.test.js
@@ -0,0 +1,291 @@
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+/**
+ * Navigate to a specific route in the site
+ * @param {import('playwright-core').Page} page the playwright page instance from the test
+ * @param {string} route the route you want to navigate to
+ */
+async function navigateToRoute(page, route) {
+ await page.evaluate(r => (window.location.hash = r), route);
+ await page.waitForLoadState('load');
+}
+
+test.describe('Virtual Routes - Generate Dynamic Content via Config', () => {
+ test.describe('Different Types of Virtual Routes', () => {
+ test('rendering virtual routes specified as string', async ({ page }) => {
+ const routes = {
+ '/my-awesome-route': '# My Awesome Route',
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/my-awesome-route');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('My Awesome Route');
+ });
+
+ test('rendering virtual routes specified as functions', async ({
+ page,
+ }) => {
+ const routes = {
+ '/my-awesome-function-route': function () {
+ return '# My Awesome Function Route';
+ },
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/my-awesome-function-route');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('My Awesome Function Route');
+ });
+
+ test('rendering virtual routes specified functions that use the "next" callback', async ({
+ page,
+ }) => {
+ const routes = {
+ '/my-awesome-async-function-route': async function (
+ route,
+ matched,
+ next,
+ ) {
+ setTimeout(() => next('# My Awesome Function Route'), 100);
+ },
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/my-awesome-async-function-route');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('My Awesome Function Route');
+ });
+ });
+
+ test.describe('Routes with Regex Matches', () => {
+ test('rendering virtual routes with regex matches', async ({ page }) => {
+ const routes = {
+ '/items/(.*)': '# Item Page',
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/items/banana');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('Item Page');
+ });
+
+ test('virtual route functions should get the route as first parameter', async ({
+ page,
+ }) => {
+ const routes = {
+ '/pets/(.*)': route => '# Route: /pets/dog',
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/pets/dog');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('Route: /pets/dog');
+ });
+
+ test('virtual route functions should get the matched array as second parameter', async ({
+ page,
+ }) => {
+ const routes = {
+ '/pets/(.*)'(_, matched) {
+ return `# Pets Page (${matched[1]})`;
+ },
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/pets/cat');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('Pets Page (cat)');
+ });
+ });
+
+ test.describe('Route Matching Specifics', () => {
+ test('routes should be exact match if no regex was passed', async ({
+ page,
+ }) => {
+ const routes = {
+ '/my': '# Incorrect Route - only prefix',
+ '/route': '# Incorrect Route - only postfix',
+ '/my/route': '# Correct Route',
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/my/route');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('Correct Route');
+ });
+
+ test('if there are two routes that match, the first one should be taken', async ({
+ page,
+ }) => {
+ const routes = {
+ '/multiple/(.+)': '# First Match',
+ '/multiple/(.*)': '# Second Match',
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/multiple/matches');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('First Match');
+ });
+
+ test('prefer virtual route over a real file, if a virtual route exists', async ({
+ page,
+ }) => {
+ const routes = {
+ '/': '# Virtual Homepage',
+ };
+
+ await docsifyInit({
+ markdown: {
+ homepage: '# Real File Homepage',
+ },
+ config: {
+ routes,
+ },
+ });
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('Virtual Homepage');
+ });
+
+ test('fallback to default routing if no route was matched', async ({
+ page,
+ }) => {
+ const routes = {
+ '/a': '# A',
+ '/b': '# B',
+ '/c': '# C',
+ };
+
+ await docsifyInit({
+ markdown: {
+ homepage: '# Real File Homepage',
+ },
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/d');
+
+ const mainElm = page.locator('#main');
+ await expect(mainElm).toContainText('404 - Not Found');
+ });
+
+ test('skip routes that returned a falsy value that is not a boolean', async ({
+ page,
+ }) => {
+ const routes = {
+ '/multiple/(.+)': () => null,
+ '/multiple/(.*)': () => undefined,
+ '/multiple/.+': () => 0,
+ '/multiple/.*': () => '# Last Match',
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/multiple/matches');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('Last Match');
+ });
+
+ test('abort virtual routes and not try the next one, if any matched route returned an explicit "false" boolean', async ({
+ page,
+ }) => {
+ const routes = {
+ '/multiple/(.+)': () => false,
+ '/multiple/(.*)': () => "# You Shouldn't See Me",
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/multiple/matches');
+
+ const mainElm = page.locator('#main');
+ await expect(mainElm).toContainText('404 - Not Found');
+ });
+
+ test('skip routes that are not a valid string or function', async ({
+ page,
+ }) => {
+ const routes = {
+ '/multiple/(.+)': 123,
+ '/multiple/(.*)': false,
+ '/multiple/.+': null,
+ '/multiple/..+': [],
+ '/multiple/..*': {},
+ '/multiple/.*': '# Last Match',
+ };
+
+ await docsifyInit({
+ config: {
+ routes,
+ },
+ });
+
+ await navigateToRoute(page, '/multiple/matches');
+
+ const titleElm = page.locator('#main h1');
+ await expect(titleElm).toContainText('Last Match');
+ });
+ });
+});
diff --git a/test/e2e/vue.test.js b/test/e2e/vue.test.js
new file mode 100644
index 0000000000..3347881018
--- /dev/null
+++ b/test/e2e/vue.test.js
@@ -0,0 +1,194 @@
+import { stripIndent } from 'common-tags';
+import docsifyInit from '../helpers/docsify-init.js';
+import { test, expect } from './fixtures/docsify-init-fixture.js';
+
+const vueURL = '/node_modules/vue/dist/vue.global.js';
+
+test.describe('Vue.js Compatibility', () => {
+ function getSharedConfig() {
+ const config = {
+ config: {
+ vueComponents: {
+ 'button-counter': {
+ template: `
+ {{ counter }}
+ `,
+ data: function () {
+ return {
+ counter: 0,
+ };
+ },
+ },
+ },
+ vueGlobalOptions: {
+ data: () => ({
+ counter: 0,
+ msg: 'vueglobaloptions',
+ }),
+ },
+ vueMounts: {
+ '#vuemounts': {
+ data() {
+ return {
+ counter: 0,
+ msg: 'vuemounts',
+ };
+ },
+ },
+ },
+ },
+ markdown: {
+ homepage: stripIndent`
+ {{ i }}
+
+ ---
+
+
+
---
+
+
+
{{ counter }}
+
+
+
+
---
+
+
+
{{ counter }}
+
+
+
+
---
+
+
+
{{ counter }}
+
+
+
+ `,
+ },
+ };
+
+ return config;
+ }
+
+ // Tests
+ // ----------------------------------------------------------------------------
+ test('Parse templates and render content when import Vue resources', async ({
+ page,
+ }) => {
+ const docsifyInitConfig = {
+ config: {},
+ markdown: {
+ homepage: stripIndent`
+ {{ i }}
+ `,
+ },
+ };
+
+ docsifyInitConfig.scriptURLs = vueURL;
+
+ await docsifyInit(docsifyInitConfig);
+ await expect(page.locator('#vuefor')).toHaveText('12345');
+ });
+
+ for (const executeScript of [true, undefined]) {
+ test(`renders content when executeScript is ${executeScript}`, async ({
+ page,
+ }) => {
+ const docsifyInitConfig = getSharedConfig();
+
+ docsifyInitConfig.config.executeScript = executeScript;
+ docsifyInitConfig.scriptURLs = vueURL;
+
+ await docsifyInit(docsifyInitConfig);
+
+ // Static
+ await expect(page.locator('#vuefor')).toHaveText('12345');
+ await expect(page.locator('#vuecomponent')).toHaveText('0');
+ await expect(page.locator('#vueglobaloptions p')).toHaveText(
+ 'vueglobaloptions',
+ );
+ await expect(page.locator('#vueglobaloptions > span')).toHaveText('0');
+ await expect(page.locator('#vuemounts p')).toHaveText('vuemounts');
+ await expect(page.locator('#vuemounts > span')).toHaveText('0');
+ await expect(page.locator('#vuescript p')).toHaveText('vuescript');
+ await expect(page.locator('#vuescript > span')).toHaveText('0');
+
+ // Reactive
+ await page.click('#vuecomponent');
+ await expect(page.locator('#vuecomponent')).toHaveText('1');
+ await page.click('#vueglobaloptions button');
+ await expect(page.locator('#vueglobaloptions > span')).toHaveText('1');
+ await page.click('#vuemounts button');
+ await expect(page.locator('#vuemounts > span')).toHaveText('1');
+ await page.click('#vuescript button');
+ await expect(page.locator('#vuescript > span')).toHaveText('1');
+ });
+ }
+
+ test('ignores content when Vue is not present', async ({ page }) => {
+ const docsifyInitConfig = getSharedConfig();
+
+ await docsifyInit(docsifyInitConfig);
+ await page.evaluate(() => 'Vue' in window === false);
+ await expect(page.locator('#vuefor')).toHaveText('{{ i }}');
+ await expect(page.locator('#vuecomponent')).toHaveText('---');
+ await expect(page.locator('#vueglobaloptions p')).toHaveText('---');
+ await expect(page.locator('#vuemounts p')).toHaveText('---');
+ await expect(page.locator('#vuescript p')).toHaveText('---');
+ });
+
+ test('ignores content when vueGlobalOptions is undefined', async ({
+ page,
+ }) => {
+ const docsifyInitConfig = getSharedConfig();
+
+ docsifyInitConfig.config.vueGlobalOptions = undefined;
+ docsifyInitConfig.scriptURLs = vueURL;
+
+ await docsifyInit(docsifyInitConfig);
+ await expect(page.locator('#vuefor')).toHaveText('12345');
+ await expect(page.locator('#vuecomponent')).toHaveText('0');
+ await expect(page.locator('#vuecomponent')).toHaveText('0');
+ // eslint-disable-next-line playwright/prefer-web-first-assertions
+ expect(await page.locator('#vueglobaloptions p').innerText()).toBe('');
+ await expect(page.locator('#vuemounts p')).toHaveText('vuemounts');
+ await expect(page.locator('#vuescript p')).toHaveText('vuescript');
+ });
+
+ test('ignores content when vueMounts is undefined', async ({ page }) => {
+ const docsifyInitConfig = getSharedConfig();
+
+ docsifyInitConfig.config.vueMounts['#vuemounts'] = undefined;
+ docsifyInitConfig.scriptURLs = vueURL;
+
+ await docsifyInit(docsifyInitConfig);
+ await expect(page.locator('#vuefor')).toHaveText('12345');
+ await expect(page.locator('#vuecomponent')).toHaveText('0');
+ await expect(page.locator('#vueglobaloptions p')).toHaveText(
+ 'vueglobaloptions',
+ );
+ await expect(page.locator('#vuemounts p')).toHaveText('vueglobaloptions');
+ await expect(page.locator('#vuescript p')).toHaveText('vuescript');
+ });
+
+ test('ignores
+ :100
+ "
+`;
+
+exports[`Emoji Ignores emoji shorthand codes in comments 1`] = `"Text
"`;
+
+exports[`Emoji Ignores emoji shorthand codes in html attributes 1`] = `"
"`;
+
+exports[`Emoji Ignores emoji shorthand codes in style url() values 1`] = `""`;
+
+exports[`Emoji Ignores unmatched emoji shorthand codes 1`] = `"hh:mm
hh:mm:ss
Namespace::SubNameSpace
Namespace::SubNameSpace::Class
2014-12-29T16:11:20+00:00
"`;
+
+exports[`Emoji Renders GitHub emoji images (nativeEmoji:false) 1`] = `"
text
text
text text
"`;
+
+exports[`Emoji Renders native emoji characters (nativeEmoji:true) 1`] = `"😄︎
😄︎ 😄︎
😄︎ 😄︎
😄︎ 😄︎ 😄︎
😄︎ 😄︎ 😄︎
text😄︎
😄︎ text
text😄︎ text
"`;
diff --git a/test/integration/callouts.test.js b/test/integration/callouts.test.js
new file mode 100644
index 0000000000..da6fee1996
--- /dev/null
+++ b/test/integration/callouts.test.js
@@ -0,0 +1,45 @@
+import { waitForFunction, waitForText } from '../helpers/wait-for.js';
+import docsifyInit from '../helpers/docsify-init.js';
+
+describe('callouts', () => {
+ test('render fully after returning to a previously visited page', async () => {
+ const calloutText = 'This callout should remain fully rendered.';
+
+ await docsifyInit({
+ testURL: '/docsify-init.html#/custom-navbar',
+ markdown: {
+ sidebar: `
+ - [Custom Navbar](custom-navbar)
+ - [Configuration](configuration)
+ `,
+ },
+ routes: {
+ 'custom-navbar.md': `
+ > [!IMPORTANT]
+ > ${calloutText}
+ `,
+ 'configuration.md': '# Configuration',
+ },
+ });
+
+ expect(await waitForText('#main', calloutText)).toBeTruthy();
+ expect(document.querySelector('#main .callout.important')).toBeTruthy();
+
+ document.querySelector('a[href="#/configuration"]').click();
+ expect(
+ await waitForFunction(() =>
+ /#\/configuration$/.test(window.location.href),
+ ),
+ ).toBeTruthy();
+ expect(await waitForText('#main', 'Configuration')).toBeTruthy();
+
+ document.querySelector('a[href="#/custom-navbar"]').click();
+ expect(
+ await waitForFunction(() =>
+ /#\/custom-navbar$/.test(window.location.href),
+ ),
+ ).toBeTruthy();
+ expect(await waitForText('#main', calloutText)).toBeTruthy();
+ expect(document.querySelector('#main .callout.important')).toBeTruthy();
+ });
+});
diff --git a/test/integration/docs.test.js b/test/integration/docs.test.js
new file mode 100644
index 0000000000..c4528addc5
--- /dev/null
+++ b/test/integration/docs.test.js
@@ -0,0 +1,67 @@
+import { jest } from '@jest/globals';
+import docsifyInit from '../helpers/docsify-init.js';
+
+// Suite
+// -----------------------------------------------------------------------------
+describe('Docs Site', function () {
+ // Tests
+ // ---------------------------------------------------------------------------
+ test('coverpage renders and is unchanged', async () => {
+ // Override Math.random implementation to prevent random gradient values
+ // used as background image from causing test to fail
+ const mathSpy = jest.spyOn(Math, 'random').mockReturnValue(0.5);
+
+ await docsifyInit({
+ config: {
+ coverpage: '_coverpage.md',
+ },
+ markdown: {
+ homepage: '# Hello World',
+ },
+ waitForSelector: '.cover-main > *',
+ });
+
+ const coverpageElm = document.querySelector('section.cover');
+
+ // Test snapshots
+ expect(mathSpy).toHaveBeenCalled();
+ expect(coverpageElm).not.toBeNull();
+ expect(coverpageElm.outerHTML).toMatchSnapshot();
+ });
+
+ test('sidebar renders and is unchanged', async () => {
+ await docsifyInit({
+ config: {
+ loadSidebar: '_sidebar.md',
+ },
+ markdown: {
+ homepage: '# Hello World',
+ },
+ waitForSelector: '.sidebar-nav > ul',
+ });
+
+ const sidebarElm = document.querySelector('.sidebar');
+
+ // Test snapshots
+ expect(sidebarElm).not.toBeNull();
+ expect(sidebarElm.outerHTML).toMatchSnapshot();
+ });
+
+ test('navbar renders and is unchanged', async () => {
+ await docsifyInit({
+ config: {
+ loadNavbar: '_navbar.md',
+ },
+ markdown: {
+ homepage: '# Hello World',
+ },
+ waitForSelector: '.app-nav > ul',
+ });
+
+ const navbarElm = document.querySelector('nav.app-nav');
+
+ // Test snapshots
+ expect(navbarElm).not.toBeNull();
+ expect(navbarElm.outerHTML).toMatchSnapshot();
+ });
+});
diff --git a/test/integration/docsify.test.js b/test/integration/docsify.test.js
new file mode 100644
index 0000000000..438030314c
--- /dev/null
+++ b/test/integration/docsify.test.js
@@ -0,0 +1,52 @@
+import { jest } from '@jest/globals';
+import docsifyInit from '../helpers/docsify-init.js';
+
+// Suite
+// -----------------------------------------------------------------------------
+describe('Docsify', function () {
+ // Tests
+ // ---------------------------------------------------------------------------
+ test('allows $docsify configuration to be a function', async () => {
+ const testConfig = jest.fn(vm => {
+ expect(vm).toBeInstanceOf(Object);
+ expect(vm.constructor.name).toBe('Docsify');
+ expect(vm.$fetch).toBeInstanceOf(Function);
+ expect(vm.route).toBeInstanceOf(Object);
+ });
+
+ await docsifyInit({
+ config: testConfig,
+ });
+
+ expect(typeof Docsify).toBe('object');
+ expect(testConfig).toHaveBeenCalled();
+ });
+
+ test('provides the hooks and vm API to plugins', async () => {
+ const testConfig = jest.fn(vm => {
+ const vm1 = vm;
+
+ return {
+ plugins: [
+ function (hook, vm2) {
+ expect(vm1).toEqual(vm2);
+
+ expect(hook.init).toBeInstanceOf(Function);
+ expect(hook.beforeEach).toBeInstanceOf(Function);
+ expect(hook.afterEach).toBeInstanceOf(Function);
+ expect(hook.doneEach).toBeInstanceOf(Function);
+ expect(hook.mounted).toBeInstanceOf(Function);
+ expect(hook.ready).toBeInstanceOf(Function);
+ },
+ ],
+ };
+ });
+
+ await docsifyInit({
+ config: testConfig,
+ });
+
+ expect(typeof Docsify).toBe('object');
+ expect(testConfig).toHaveBeenCalled();
+ });
+});
diff --git a/test/integration/embed.test.js b/test/integration/embed.test.js
new file mode 100644
index 0000000000..577fd0bfa5
--- /dev/null
+++ b/test/integration/embed.test.js
@@ -0,0 +1,373 @@
+import { waitForFunction, waitForText } from '../helpers/wait-for.js';
+import docsifyInit from '../helpers/docsify-init.js';
+
+describe('Embed', function () {
+ test('embed file code fragment renders', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ # Embed Test
+
+ [filename](_media/example1.js ':include :type=code :fragment=demo')
+ `,
+ },
+ routes: {
+ '_media/example1.js': `
+ let myURL = 'https://api.example.com/data';
+ /// [demo]
+ const result = fetch(myURL)
+ .then(response => {
+ return response.json();
+ })
+ .then(myJson => {
+ console.log(JSON.stringify(myJson));
+ });
+ /// [demo]
+ result.then(console.log).catch(console.error);
+ `,
+ },
+ });
+
+ // Wait for the embedded fragment to be fetched and rendered into #main
+ expect(
+ await waitForText('#main', 'console.log(JSON.stringify(myJson));'),
+ ).toBeTruthy();
+
+ const mainText = document.querySelector('#main').textContent;
+ expect(mainText).not.toContain('https://api.example.com/data');
+ expect(mainText).not.toContain(
+ 'result.then(console.log).catch(console.error);',
+ );
+ });
+
+ test('embed file full line fragment identifier', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ # Embed Test
+
+ [filename](_media/example1.html ':include :type=code :fragment=demo :omitFragmentLine')
+ `,
+ },
+ routes: {
+ '_media/example1.html': `
+
+ `,
+ },
+ });
+
+ // Wait for the embedded fragment to be fetched and rendered into #main
+ expect(
+ await waitForText('#main', 'console.log(JSON.stringify(myJson));'),
+ ).toBeTruthy();
+
+ const mainText = document.querySelector('#main').textContent;
+ expect(mainText).not.toContain('https://api.example.com/data');
+ expect(mainText).not.toContain('Full line fragment identifier');
+ expect(mainText).not.toContain('-->');
+ expect(mainText).not.toContain(
+ 'result.then(console.log).catch(console.error);',
+ );
+ });
+
+ test('embed multiple file code fragments', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ # Embed Test
+
+ [filename](_media/example1.js ':include :type=code :fragment=demo')
+
+ [filename](_media/example2.js ":include :type=code :fragment=something")
+
+ # Text between
+
+ [filename](_media/example3.js ':include :fragment=something_else_not_code')
+
+ [filename](_media/example4.js ':include :fragment=demo')
+
+ # Text after
+ `,
+ },
+ routes: {
+ '_media/example1.js': `
+ let example1 = 1;
+ /// [demo]
+ example1 += 10;
+ /// [demo]
+ console.log(example1);`,
+ '_media/example2.js': `
+ let example1 = 1;
+ ### [something]
+ example2 += 10;
+ ### [something]
+ console.log(example2);`,
+ '_media/example3.js': `
+ let example3 = 1;
+ ### [something_else_not_code]
+ example3 += 10;
+ /// [something_else_not_code]
+ console.log(example3);`,
+ '_media/example4.js': `
+ let example4 = 1;
+ ### No fragment here
+ example4 += 10;
+ /// No fragment here
+ console.log(example4);`,
+ },
+ });
+
+ expect(await waitForText('#main', 'example1 += 10;')).toBeTruthy();
+ expect(await waitForText('#main', 'example2 += 10;')).toBeTruthy();
+ expect(await waitForText('#main', 'example3 += 10;')).toBeTruthy();
+
+ const mainText = document.querySelector('#main').textContent;
+ expect(mainText).toContain('Text between');
+ expect(mainText).toContain('Text after');
+ expect(mainText).not.toContain('let example1 = 1;');
+ expect(mainText).not.toContain('let example2 = 1;');
+ expect(mainText).not.toContain('let example3 = 1;');
+ expect(mainText).not.toContain('console.log(example1);');
+ expect(mainText).not.toContain('console.log(example2);');
+ expect(mainText).not.toContain('console.log(example3);');
+ expect(mainText).not.toContain('console.log(example4);');
+ expect(mainText).not.toContain('example4 += 10;');
+ expect(mainText).not.toContain('No fragment here');
+ });
+
+ test('embed multiple includes in same paragraph', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ # Embed Test
+
+ [first](_media/first.md ':include') middle paragraph text [second](_media/second.md ':include')
+ `,
+ },
+ routes: {
+ '_media/first.md': 'first include content',
+ '_media/second.md': 'second include content',
+ },
+ });
+
+ expect(await waitForText('#main', 'first include content')).toBeTruthy();
+ expect(await waitForText('#main', 'second include content')).toBeTruthy();
+
+ const mainText = document.querySelector('#main').textContent;
+ const firstIndex = mainText.indexOf('first include content');
+ const middleIndex = mainText.indexOf('middle paragraph text');
+ const secondIndex = mainText.indexOf('second include content');
+
+ expect(firstIndex).toBeGreaterThan(-1);
+ expect(middleIndex).toBeGreaterThan(-1);
+ expect(secondIndex).toBeGreaterThan(-1);
+ expect(firstIndex).toBeLessThan(middleIndex);
+ expect(middleIndex).toBeLessThan(secondIndex);
+ expect(mainText).not.toContain("_media/first.md ':include'");
+ expect(mainText).not.toContain("_media/second.md ':include'");
+ });
+
+ test('embed markdown file strips front matter when plugin is installed', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ ---
+ title: Homepage
+ ---
+
+ # Embed Test
+
+ [front matter include](_media/content.md ':include')
+ `,
+ },
+ routes: {
+ '_media/content.md': `
+ ---
+ title: Include
+ ---
+
+ included front matter content
+ `,
+ },
+ scriptURLs: ['/dist/plugins/front-matter.js'],
+ });
+
+ expect(
+ await waitForText('#main', 'included front matter content'),
+ ).toBeTruthy();
+
+ const mainText = document.querySelector('#main').textContent;
+ expect(mainText).not.toContain('title: Homepage');
+ expect(mainText).not.toContain('title: Include');
+ });
+
+ test('embed multiple include code fragments in same paragraph', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ # Embed Test
+
+ [first](_media/first.js ':include :type=code :fragment=demo') [second](_media/second.js ':include :type=code :fragment=demo')
+ `,
+ },
+ routes: {
+ '_media/first.js': `
+ const first = 1;
+ /// [demo]
+ console.log('first demo line');
+ /// [demo]
+ console.log('first outside');
+ `,
+ '_media/second.js': `
+ const second = 1;
+ /// [demo]
+ console.log('second demo line');
+ /// [demo]
+ console.log('second outside');
+ `,
+ },
+ });
+
+ expect(
+ await waitForText('#main', "console.log('first demo line');"),
+ ).toBeTruthy();
+ expect(
+ await waitForText('#main', "console.log('second demo line');"),
+ ).toBeTruthy();
+
+ const mainText = document.querySelector('#main').textContent;
+ const firstIndex = mainText.indexOf("console.log('first demo line');");
+ const secondIndex = mainText.indexOf("console.log('second demo line');");
+
+ expect(firstIndex).toBeGreaterThan(-1);
+ expect(secondIndex).toBeGreaterThan(-1);
+ expect(firstIndex).toBeLessThan(secondIndex);
+ expect(mainText).not.toContain('first outside');
+ expect(mainText).not.toContain('second outside');
+ });
+
+ test('embed multiple includes in same table cell', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ # Embed Test
+
+Command | Description | Parameters
+---: | --- | ---
+\`do-something\` | Does something. | [first include](_media/first.md ':include') middle table text [second include](_media/second.md ':include')
+ `,
+ },
+ routes: {
+ '_media/first.md': 'first table include content',
+ '_media/second.md': 'second table include content',
+ },
+ });
+
+ expect(
+ await waitForText('#main', 'first table include content'),
+ ).toBeTruthy();
+ expect(
+ await waitForText('#main', 'second table include content'),
+ ).toBeTruthy();
+
+ const mainText = document.querySelector('#main').textContent;
+ const firstIndex = mainText.indexOf('first table include content');
+ const middleIndex = mainText.indexOf('middle table text');
+ const secondIndex = mainText.indexOf('second table include content');
+
+ expect(firstIndex).toBeGreaterThan(-1);
+ expect(middleIndex).toBeGreaterThan(-1);
+ expect(secondIndex).toBeGreaterThan(-1);
+ expect(firstIndex).toBeLessThan(middleIndex);
+ expect(middleIndex).toBeLessThan(secondIndex);
+ expect(mainText).not.toContain("_media/first.md ':include'");
+ expect(mainText).not.toContain("_media/second.md ':include'");
+ });
+
+ test('failed embed URL does not block page render', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ # Embed Test
+
+ [missing](_media/missing.md ':include')
+
+ Text after missing embed
+
+ [ok](_media/ok.md ':include')
+ `,
+ },
+ routes: {
+ '_media/missing.md': {
+ status: 404,
+ body: 'Not Found',
+ contentType: 'text/markdown',
+ },
+ '_media/ok.md': 'reachable include content',
+ },
+ });
+
+ expect(await waitForText('#main', 'Text after missing embed')).toBeTruthy();
+ expect(
+ await waitForText('#main', 'reachable include content'),
+ ).toBeTruthy();
+ });
+
+ test('embed file table cell', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ # Embed Test
+
+Command | Description | Parameters
+---: | --- | ---
+**Something** | |
+\`do-something\` | Does something. | [include content](_media/content.md ':include')
+**Something else** | |
+\`etc.\` | Etc. | |
+ `,
+ },
+ routes: {
+ '_media/content.md': `this is include content`,
+ },
+ });
+
+ const mainText = document.querySelector('#main').textContent;
+ expect(mainText).toContain('Something');
+ expect(mainText).toContain('this is include content');
+ });
+
+ test.each([
+ { type: 'iframe', selector: 'iframe' },
+ { type: 'video', selector: 'video' },
+ { type: 'audio', selector: 'audio' },
+ ])('embed %s escapes URL for XSS safety', async ({ type, selector }) => {
+ const dangerousUrl = 'https://example.com/?q=">';
+
+ await docsifyInit({
+ markdown: {
+ homepage: `[media](${dangerousUrl} ':include :type=${type}')`,
+ },
+ });
+
+ expect(
+ await waitForFunction(() => !!document.querySelector(selector)),
+ ).toBe(true);
+
+ const mediaElm = document.querySelector(selector);
+ expect(mediaElm.getAttribute('src')).toBe(dangerousUrl);
+ expect(mediaElm.hasAttribute('onload')).toBe(false);
+ });
+});
diff --git a/test/integration/emoji.test.js b/test/integration/emoji.test.js
new file mode 100644
index 0000000000..7b93752996
--- /dev/null
+++ b/test/integration/emoji.test.js
@@ -0,0 +1,189 @@
+import docsifyInit from '../helpers/docsify-init.js';
+
+// Suite
+// -----------------------------------------------------------------------------
+describe('Emoji', function () {
+ // Tests
+ // ---------------------------------------------------------------------------
+ const emojiMarkdown = `
+ :smile:
+
+ :smile::smile:
+
+ :smile: :smile:
+
+ :smile::smile::smile:
+
+ :smile: :smile: :smile:
+
+ text:smile:
+
+ :smile:text
+
+ text:smile:text
+ `;
+
+ test('Renders native emoji characters (nativeEmoji:true)', async () => {
+ await docsifyInit({
+ config: {
+ nativeEmoji: true,
+ },
+ markdown: {
+ homepage: emojiMarkdown,
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+
+ test('Renders GitHub emoji images (nativeEmoji:false)', async () => {
+ await docsifyInit({
+ config: {
+ nativeEmoji: false,
+ },
+ markdown: {
+ homepage: emojiMarkdown,
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+
+ test('Ignores all emoji shorthand codes (noEmoji:true)', async () => {
+ await docsifyInit({
+ config: {
+ noEmoji: true,
+ },
+ markdown: {
+ homepage: emojiMarkdown,
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+
+ test('Ignores unmatched emoji shorthand codes', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: `
+ hh:mm
+
+ hh:mm:ss
+
+ Namespace::SubNameSpace
+
+ Namespace::SubNameSpace::Class
+
+ 2014-12-29T16:11:20+00:00
+ `,
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+
+ test('Ignores emoji shorthand codes in comments', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: 'Text ',
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+
+ test('Ignores emoji shorthand codes in URIs', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage:
+ 'Url https://docsify.js.org/:foo:/ http://docsify.js.org/:100:/ ftp://docsify.js.org/:smile:/',
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+
+ test('Ignores emoji shorthand codes in URIs while handling anchor content', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: 'Achor tags [:100:](http://docsify.js.org/:100:/)',
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+
+ test('Ignores emoji shorthand codes in html attributes', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage:
+ /* html */ ' ',
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+
+ test('Ignores emoji shorthand codes in style url() values', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage:
+ /* html */ '',
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+
+ test('Ignores emoji shorthand codes in code, pre, script, and template tags', async () => {
+ await docsifyInit({
+ markdown: {
+ homepage: /* html */ `
+ :100:
+
+ :100:
+
+
+
+
+ :100
+
+ `,
+ },
+ // _logHTML: true,
+ });
+
+ const mainElm = document.querySelector('#main');
+
+ expect(mainElm.innerHTML).toMatchSnapshot();
+ });
+});
diff --git a/test/integration/example.test.js b/test/integration/example.test.js
new file mode 100644
index 0000000000..4f6b57378e
--- /dev/null
+++ b/test/integration/example.test.js
@@ -0,0 +1,137 @@
+import { waitForFunction, waitForText } from '../helpers/wait-for.js';
+import docsifyInit from '../helpers/docsify-init.js';
+
+describe('Creating a Docsify site (integration tests in Jest)', function () {
+ test('Docsify /docs/ site using docsifyInit()', async () => {
+ await docsifyInit({
+ // _logHTML: true,
+ });
+
+ // Verify config options
+ expect(typeof window.$docsify).toBe('object');
+
+ // Verify options.markdown content was rendered
+ expect(document.querySelector('#main').textContent).toContain(
+ 'A magical documentation site generator',
+ );
+ });
+
+ test('kitchen sink docsify site using docsifyInit()', async () => {
+ const docsifyInitConfig = {
+ config: {
+ name: 'Docsify Name',
+ },
+ markdown: {
+ coverpage: `
+ # Docsify Test
+
+ > Testing a magical documentation site generator
+
+ [GitHub](https://github.com/docsifyjs/docsify/)
+ `,
+ homepage: `
+ # Hello World
+
+ This is the homepage.
+ `,
+ navbar: `
+ - [docsify.js.org](https://docsify.js.org/#/)
+ `,
+ sidebar: `
+ - [Test Page](test)
+ `,
+ },
+ routes: {
+ 'test.md': `
+ # Test Page
+
+ This is a custom route.
+ `,
+ 'data-test-scripturls.js': `
+ document.body.setAttribute('data-test-scripturls', 'pass');
+ `,
+ },
+ script: `
+ document.body.setAttribute('data-test-script', 'pass');
+ `,
+ scriptURLs: [
+ // docsifyInit() route
+ 'data-test-scripturls.js',
+ ],
+ style: `
+ body {
+ background: red !important;
+ }
+ `,
+ styleURLs: ['/dist/themes/core.css'],
+ };
+
+ await docsifyInit({
+ ...docsifyInitConfig,
+ // _logHTML: true,
+ });
+
+ // Verify config options
+ expect(typeof window.$docsify).toBe('object');
+ expect(document.querySelector('.app-name').textContent).toContain(
+ 'Docsify Name',
+ );
+
+ // Verify docsifyInitConfig.markdown content was rendered
+ Object.entries({
+ 'section.cover': 'Docsify Test', // Coverpage
+ 'nav.app-nav': 'docsify.js.org', // Navbar
+ 'aside.sidebar': 'Test Page', // Sidebar
+ '#main': 'This is the homepage', // Homepage
+ }).forEach(([selector, content]) => {
+ expect(document.querySelector(selector).textContent).toContain(content);
+ });
+
+ // Verify docsifyInitConfig.scriptURLs were added to the DOM
+ for (const scriptURL of docsifyInitConfig.scriptURLs) {
+ const matchElm = document.querySelector(
+ `script[data-src$="${scriptURL}"]`,
+ );
+ expect(matchElm).toBeTruthy();
+ }
+
+ // Verify docsifyInitConfig.scriptURLs were executed
+ expect(document.body.hasAttribute('data-test-scripturls')).toBe(true);
+
+ // Verify docsifyInitConfig.script was added to the DOM
+ expect(
+ [...document.querySelectorAll('script')].some(
+ elm =>
+ elm.textContent.replace(/\s+/g, '') ===
+ docsifyInitConfig.script.replace(/\s+/g, ''),
+ ),
+ ).toBe(true);
+
+ // Verify docsifyInitConfig.script was executed
+ expect(document.body.hasAttribute('data-test-script')).toBe(true);
+
+ // Verify docsifyInitConfig.styleURLs were added to the DOM
+ for (const styleURL of docsifyInitConfig.styleURLs) {
+ const matchElm = document.querySelector(
+ `link[rel*="stylesheet"][href$="${styleURL}"]`,
+ );
+ expect(matchElm).toBeTruthy();
+ }
+
+ // Verify docsifyInitConfig.style was added to the DOM
+ expect(
+ [...document.querySelectorAll('style')].some(
+ elm =>
+ elm.textContent.replace(/\s+/g, '') ===
+ docsifyInitConfig.style.replace(/\s+/g, ''),
+ ),
+ ).toBe(true);
+
+ // Verify docsify navigation and docsifyInitConfig.routes
+ document.querySelector('a[href="#/test"]').click();
+ expect(
+ await waitForFunction(() => /#\/test$/.test(window.location.href)),
+ ).toBeTruthy();
+ expect(await waitForText('#main', 'This is a custom route')).toBeTruthy();
+ });
+});
diff --git a/test/integration/global-apis.test.js b/test/integration/global-apis.test.js
new file mode 100644
index 0000000000..457ead3bf2
--- /dev/null
+++ b/test/integration/global-apis.test.js
@@ -0,0 +1,21 @@
+import initGlobalAPI from '../../src/core/global-api.js';
+
+// Suite
+// -----------------------------------------------------------------------------
+describe('Global APIs', function () {
+ // Tests
+ // ---------------------------------------------------------------------------
+ test('APIs are available', () => {
+ initGlobalAPI();
+
+ expect(typeof window.Docsify).toBe('object');
+ expect(typeof window.Docsify.util).toBe('object');
+ expect(typeof window.Docsify.dom).toBe('object');
+ expect(typeof window.Docsify.get).toBe('function');
+ expect(typeof window.Docsify.slugify).toBe('function');
+ expect(typeof window.Docsify.version).toBe('string');
+ expect(typeof window.DocsifyCompiler).toBe('function');
+ expect(typeof window.marked).toBe('function');
+ expect(typeof window.Prism).toBe('object');
+ });
+});
diff --git a/test/integration/render.js b/test/integration/render.js
deleted file mode 100644
index 7b2b253c1b..0000000000
--- a/test/integration/render.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const path = require('path')
-
-const {expect} = require('chai')
-
-const {init, expectSameDom} = require('../_helper')
-
-describe('full docsify initialization', function() {
- it('TODO: check generated markup', async function() {
- const {docsify, dom} = await init('simple', {loadSidebar: true})
- console.log(dom.window.document.body.innerHTML)
- // TODO: add some expectations
- })
-
-})
diff --git a/test/integration/render.test.js b/test/integration/render.test.js
new file mode 100644
index 0000000000..bb49c98e27
--- /dev/null
+++ b/test/integration/render.test.js
@@ -0,0 +1,468 @@
+import { stripIndent } from 'common-tags';
+import docsifyInit from '../helpers/docsify-init.js';
+import { waitForText } from '../helpers/wait-for.js';
+
+// Suite
+// -----------------------------------------------------------------------------
+describe('render', function () {
+ // Helpers
+ // ---------------------------------------------------------------------------
+ describe('callouts', () => {
+ beforeEach(async () => {
+ await docsifyInit();
+ });
+
+ test('caution', () => {
+ const output = window.marked('> [!CAUTION]\n> Text');
+
+ expect(output).toMatchInlineSnapshot(`
+""
+`);
+ });
+
+ test('important', () => {
+ const output = window.marked('> [!IMPORTANT]\n> Text');
+
+ expect(output).toMatchInlineSnapshot(`
+""
+`);
+ });
+
+ test('note', () => {
+ const output = window.marked('> [!NOTE]\n> Text');
+
+ expect(output).toMatchInlineSnapshot(`
+""
+`);
+ });
+
+ test('tip', () => {
+ const output = window.marked('> [!TIP]\n> Text');
+
+ expect(output).toMatchInlineSnapshot(`
+""
+`);
+ });
+
+ test('warning', () => {
+ const output = window.marked('> [!WARNING]\n> Text');
+
+ expect(output).toMatchInlineSnapshot(`
+""
+`);
+ });
+
+ test('important (legacy)', () => {
+ const output = window.marked('!> Important content');
+
+ expect(output).toMatchInlineSnapshot(
+ `"Important content
"`,
+ );
+ });
+
+ test('tip (legacy)', () => {
+ const output = window.marked('?> General tip');
+
+ expect(output).toMatchInlineSnapshot(
+ `"General tip
"`,
+ );
+ });
+ });
+
+ // Lists
+ // ---------------------------------------------------------------------------
+ describe('lists', function () {
+ beforeEach(async () => {
+ await docsifyInit();
+ });
+
+ test('as unordered task list', async function () {
+ const output = window.marked(stripIndent`
+ - [x] Task 1
+ - [ ] Task 2
+ - [ ] Task 3
+ `);
+
+ expect(output).toMatchInlineSnapshot(
+ '""',
+ );
+ });
+
+ test('as ordered task list', async function () {
+ const output = window.marked(stripIndent`
+ 1. [ ] Task 1
+ 2. [x] Task 2
+ `);
+
+ expect(output).toMatchInlineSnapshot(
+ '" Task 1 Task 2 "',
+ );
+ });
+
+ test('normal unordered', async function () {
+ const output = window.marked(stripIndent`
+ - [linktext](link)
+ - just text
+ `);
+
+ expect(output).toMatchInlineSnapshot(
+ '""',
+ );
+ });
+
+ test('unordered with custom start', async function () {
+ const output = window.marked(stripIndent`
+ 1. first
+ 2. second
+
+ text
+
+ 3. third
+ `);
+
+ expect(output).toMatchInlineSnapshot(
+ '"first second text
third "',
+ );
+ });
+
+ test('nested', async function () {
+ const output = window.marked(stripIndent`
+ - 1
+ - 2
+ - 2 a
+ - 2 b
+ - 3
+ `);
+
+ expect(output).toMatchInlineSnapshot(
+ '""',
+ );
+ });
+ });
+
+ // Code
+ // ---------------------------------------------------------------------------
+ describe('code', function () {
+ beforeEach(async () => {
+ await docsifyInit();
+ });
+
+ test('escapes language metadata to prevent attribute injection', async function () {
+ const output = window.marked(stripIndent`
+ \`\`\`js" onmouseover="alert(1)
+ const answer = 42;
+ \`\`\`
+ `);
+
+ expect(output).not.toContain('" onmouseover="alert(1)');
+ expect(output).toContain(
+ 'data-lang="js" onmouseover="alert(1)"',
+ );
+ expect(output).toContain(
+ 'class="language-js" onmouseover="alert(1)"',
+ );
+ });
+
+ test('keeps declared language class for normal fences', async function () {
+ const output = window.marked(stripIndent`
+ \`\`\`js
+ const answer = 42;
+ \`\`\`
+ `);
+
+ expect(output).toContain('data-lang="js"');
+ expect(output).toContain('class="language-js"');
+ expect(output).toContain('token keyword');
+ });
+ });
+
+ // Images
+ // ---------------------------------------------------------------------------
+ describe('images', function () {
+ beforeEach(async () => {
+ await docsifyInit();
+ });
+
+ test('regular', async function () {
+ const output = window.marked('');
+
+ expect(output).toMatchInlineSnapshot(
+ '"
"',
+ );
+ });
+
+ test('class', async function () {
+ const output = window.marked(
+ "",
+ );
+
+ expect(output).toMatchInlineSnapshot(
+ '"
"',
+ );
+ });
+
+ test('id', async function () {
+ const output = window.marked(
+ "",
+ );
+
+ expect(output).toMatchInlineSnapshot(
+ '"
"',
+ );
+ });
+
+ test('no-zoom', async function () {
+ const output = window.marked("");
+
+ expect(output).toMatchInlineSnapshot(
+ '"
"',
+ );
+ });
+
+ test('width and height', async function () {
+ const output = window.marked(
+ "",
+ );
+
+ expect(output).toMatchInlineSnapshot(
+ '"
"',
+ );
+ });
+
+ test('width', async function () {
+ const output = window.marked("");
+
+ expect(output).toMatchInlineSnapshot(
+ '"
"',
+ );
+ });
+
+ test('escapes image alt and title to prevent attribute injection', async function () {
+ const output = window.marked(
+ '\')',
+ );
+
+ expect(output).not.toContain(' onerror="alert(1)"');
+ expect(output).toContain('alt="alt" onerror="alert(1)"');
+ expect(output).toContain('title="title" onerror="alert(1)"');
+ });
+ });
+
+ // Headings
+ // ---------------------------------------------------------------------------
+ describe('headings', function () {
+ beforeEach(async () => {
+ await docsifyInit();
+ });
+
+ test('h1', async function () {
+ const output = window.marked('# h1 tag');
+
+ expect(output).toMatchInlineSnapshot(
+ '""',
+ );
+ });
+
+ test('h2', async function () {
+ const output = window.marked('## h2 tag');
+
+ expect(output).toMatchInlineSnapshot(
+ '""',
+ );
+ });
+
+ test('h3', async function () {
+ const output = window.marked('### h3 tag');
+
+ expect(output).toMatchInlineSnapshot(
+ '""',
+ );
+ });
+
+ test('h4', async function () {
+ const output = window.marked('#### h4 tag');
+
+ expect(output).toMatchInlineSnapshot(
+ '""',
+ );
+ });
+
+ test('h5', async function () {
+ const output = window.marked('##### h5 tag');
+
+ expect(output).toMatchInlineSnapshot(
+ '""',
+ );
+ });
+
+ test('h6', async function () {
+ const output = window.marked('###### h6 tag');
+
+ expect(output).toMatchInlineSnapshot(
+ '""',
+ );
+ });
+ });
+
+ // Links
+ // ---------------------------------------------------------------------------
+ describe('link', function () {
+ beforeEach(async () => {
+ await docsifyInit();
+ });
+
+ test('regular', async function () {
+ const output = window.marked('[alt text](http://url)');
+
+ expect(output).toMatchInlineSnapshot(
+ `"alt text
"`,
+ );
+ });
+
+ test('linkrel', async function () {
+ // const { docsify } = await init('default', {
+ // externalLinkTarget: '_blank',
+ // externalLinkRel: 'noopener',
+ // });
+ const output = window.marked('[alt text](http://www.example.com)');
+
+ expect(output).toMatchInlineSnapshot(
+ `"alt text
"`,
+ );
+ });
+
+ test('disabled', async function () {
+ const output = window.marked("[alt text](http://url ':disabled')");
+
+ expect(output).toMatchInlineSnapshot(
+ `"alt text
"`,
+ );
+ });
+
+ test('target for absolute path', async function () {
+ const output = window.marked("[alt text](http://url ':target=_self')");
+
+ expect(output).toMatchInlineSnapshot(
+ `"alt text
"`,
+ );
+ });
+
+ test('target for relative path', async function () {
+ const output = window.marked("[alt text](/url ':target=_blank')");
+
+ expect(output).toMatchInlineSnapshot(
+ '"alt text
"',
+ );
+ });
+
+ test('class', async function () {
+ const output = window.marked(
+ "[alt text](http://url ':class=someCssClass')",
+ );
+
+ expect(output).toMatchInlineSnapshot(
+ `"alt text
"`,
+ );
+ });
+
+ test('multi class config', async function () {
+ const output = window.marked(
+ "[alt text](http://url ':class=someCssClass :class=anotherCssClass')",
+ );
+
+ expect(output).toMatchInlineSnapshot(
+ `"alt text
"`,
+ );
+ });
+
+ test('id', async function () {
+ const output = window.marked("[alt text](http://url ':id=someCssID')");
+
+ expect(output).toMatchInlineSnapshot(
+ `"alt text
"`,
+ );
+ });
+
+ test('escapes link title to prevent attribute injection', async function () {
+ const output = window.marked(
+ `[alt text](http://url 'title" onclick="alert(1)')`,
+ );
+
+ expect(output).not.toContain(' onclick="alert(1)"');
+ expect(output).toContain('title="title" onclick="alert(1)"');
+ });
+ });
+
+ // Skip Link
+ // ---------------------------------------------------------------------------
+ describe('skip link', () => {
+ test('renders default skip link and label', async () => {
+ await docsifyInit();
+
+ const elm = document.getElementById('skip-to-content');
+ const expectText = 'Skip to main content';
+
+ expect(elm.textContent).toBe(expectText);
+ expect(elm.outerHTML).toMatchInlineSnapshot(
+ `"Skip to main content "`,
+ );
+ });
+
+ test('renders custom label from config string', async () => {
+ const expectText = 'test';
+
+ await docsifyInit({
+ config: {
+ skipLink: expectText,
+ },
+ });
+
+ const elm = document.getElementById('skip-to-content');
+
+ expect(elm.textContent).toBe(expectText);
+ });
+
+ test('renders custom label from config object', async () => {
+ const getSkipLinkText = () =>
+ document.getElementById('skip-to-content').textContent;
+
+ await docsifyInit({
+ config: {
+ skipLink: {
+ '/dir1/dir2/': 'baz',
+ '/dir1/': 'bar',
+ },
+ },
+ });
+
+ window.location.hash = '/dir1/dir2/';
+ await waitForText('#skip-to-content', 'baz');
+ expect(getSkipLinkText()).toBe('baz');
+
+ window.location.hash = '/dir1/';
+ await waitForText('#skip-to-content', 'bar');
+ expect(getSkipLinkText()).toBe('bar');
+
+ // Fallback to default
+ window.location.hash = '';
+ await waitForText('#skip-to-content', 'Skip to main content');
+ expect(getSkipLinkText()).toBe('Skip to main content');
+ });
+
+ test('does not render skip link when false', async () => {
+ await docsifyInit({
+ config: {
+ skipLink: false,
+ },
+ });
+ const elm = document.getElementById('skip-to-content') || false;
+
+ expect(elm).toBe(false);
+ });
+ });
+});
diff --git a/test/integration/router.js b/test/integration/router.js
deleted file mode 100644
index b87e8022d5..0000000000
--- a/test/integration/router.js
+++ /dev/null
@@ -1,14 +0,0 @@
-const path = require('path')
-
-const {expect} = require('chai')
-
-const {init, expectSameDom} = require('../_helper')
-
-describe('router', function() {
- it('TODO: trigger to load another page', async function() {
- const {docsify} = await init()
- window.location = '/?foo=bar'
- // TODO: add some expectations
- })
-
-})
diff --git a/test/integration/sidebar.test.js b/test/integration/sidebar.test.js
new file mode 100644
index 0000000000..1ee61f7868
--- /dev/null
+++ b/test/integration/sidebar.test.js
@@ -0,0 +1,145 @@
+import docsifyInit from '../helpers/docsify-init.js';
+
+describe('Test sidebar render toc structure', function () {
+ test('Render sidebar with loadSidebar=true and the _sidebar.md file', async () => {
+ await docsifyInit({
+ config: {
+ loadSidebar: '_sidebar.md',
+ },
+ markdown: {
+ homepage: '# Hello World',
+ sidebar: `
+ - Getting started
+ - [Level1](QuickStart.md)
+ - [Level2](QuickStart2.md)
+ `,
+ },
+ waitForSelector: '.sidebar-nav > ul',
+ });
+
+ const sidebarElm = document.querySelector('.sidebar');
+ /**
+ * Expected render result
+ * ==========================
+ *
+ *
+ * Getting started
+ *
+ *
+ *
+ */
+
+ const GettingStarted = document.querySelector('.sidebar-nav > ul > li');
+ const level1_Elm = document.querySelector(
+ '.sidebar-nav > ul > li > ul> li',
+ );
+ const level1_A_tag = level1_Elm.querySelector('a');
+
+ const level2_Elm = level1_Elm.querySelector(' ul > li ');
+
+ const level2_A_tag = level2_Elm.querySelector('a');
+
+ expect(sidebarElm).not.toBeNull();
+ expect(GettingStarted).not.toBeNull();
+ expect(level1_Elm).not.toBeNull();
+ expect(level1_A_tag).not.toBeNull();
+ expect(level2_Elm).not.toBeNull();
+ expect(level2_A_tag).not.toBeNull();
+ expect(level1_A_tag.textContent).toContain('Level1');
+ expect(level2_A_tag.textContent).toContain('Level2');
+ });
+
+ test('Render sidebar with loadSidebar=false should be same to loadSidebar=true sidebar structure', async () => {
+ await docsifyInit({
+ config: {
+ loadSidebar: false,
+ },
+ markdown: {
+ homepage: `
+ # Getting started
+ some thing
+ ## Level1
+ foo
+ ### Level2
+ bar
+ `,
+ },
+ waitForSelector: '.sidebar-nav > ul',
+ });
+
+ const sidebarElm = document.querySelector('.sidebar');
+ /**
+ * Expected render result
+ * ==========================
+ *
+ *
+ * Getting started
+ *
+ *
+ *
+ */
+
+ const appSubSidebarTargetElm = document.querySelector('.sidebar-nav > ul');
+ expect(appSubSidebarTargetElm).not.toBeNull();
+ const ulClass = appSubSidebarTargetElm.className;
+ // the sidebar-nav > ul should have the class app-sub-sidebar
+ expect(ulClass).toContain('app-sub-sidebar');
+
+ const GettingStarted = document.querySelector('.sidebar-nav > ul > li');
+ const level1_Elm = document.querySelector(
+ '.sidebar-nav > ul > li > ul> li',
+ );
+ const level1_A_tag = level1_Elm.querySelector('a');
+
+ const level2_Elm = level1_Elm.querySelector(' ul > li ');
+
+ const level2_A_tag = level2_Elm.querySelector('a');
+
+ expect(sidebarElm).not.toBeNull();
+ expect(GettingStarted).not.toBeNull();
+ expect(level1_Elm).not.toBeNull();
+ expect(level1_A_tag).not.toBeNull();
+ expect(level2_Elm).not.toBeNull();
+ expect(level2_A_tag).not.toBeNull();
+ expect(level1_A_tag.textContent).toContain('Level1');
+ expect(level2_A_tag.textContent).toContain('Level2');
+ });
+
+ test('Render sidebar should ignore headings in blockquote by default', async () => {
+ await docsifyInit({
+ config: {
+ loadSidebar: false,
+ },
+ markdown: {
+ homepage: `
+ # Normal Title
+ > # Quoted Title
+ > #Quoted Title Without Space
+ ## Section Title
+ `,
+ },
+ waitForSelector: '.sidebar-nav > ul',
+ });
+
+ const sidebarText = document.querySelector('.sidebar-nav').textContent;
+
+ expect(sidebarText).toContain('Normal Title');
+ expect(sidebarText).toContain('Section Title');
+ expect(sidebarText).not.toContain('Quoted Title');
+ expect(sidebarText).not.toContain('Quoted Title Without Space');
+ });
+});
diff --git a/test/unit/base.js b/test/unit/base.js
deleted file mode 100644
index 036700b99d..0000000000
--- a/test/unit/base.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/* eslint-env node, chai, mocha */
-require = require('esm')(module/*, options*/)
-const {expect} = require('chai')
-const {History} = require('../../src/core/router/history/base')
-
-class MockHistory extends History {
- parse(path) {
- return {path}
- }
-}
-
-describe('router/history/base', function () {
- describe('relativePath true', function () {
- var history
-
- beforeEach(function () {
- history = new MockHistory({relativePath: true})
- })
-
- it('toURL', function () {
- // WHEN
- const url = history.toURL('guide.md', {}, '/zh-ch/')
-
- // THEN
- expect(url).equal('/zh-ch/guide')
- })
-
- it('toURL with double dot', function () {
- // WHEN
- const url = history.toURL('../README.md', {}, '/zh-ch/')
-
- // THEN
- expect(url).equal('/README')
- })
-
- it('toURL child path', function () {
- // WHEN
- const url = history.toURL('config/example.md', {}, '/zh-ch/')
-
- // THEN
- expect(url).equal('/zh-ch/config/example')
- })
-
- it('toURL absolute path', function () {
- // WHEN
- const url = history.toURL('/README', {}, '/zh-ch/')
-
- // THEN
- expect(url).equal('/README')
- })
- })
-
- it('toURL without relative path', function () {
- const history = new MockHistory({relativePath: false})
-
- // WHEN
- const url = history.toURL('README', {}, '/zh-ch/')
-
- // THEN
- expect(url).equal('/README')
- })
-})
diff --git a/test/unit/core-util.test.js b/test/unit/core-util.test.js
new file mode 100644
index 0000000000..34457238f7
--- /dev/null
+++ b/test/unit/core-util.test.js
@@ -0,0 +1,101 @@
+import { cached, isExternal } from '../../src/core/util/index.js';
+
+// Core util
+// -----------------------------------------------------------------------------
+describe('core/util', () => {
+ describe('cached()', () => {
+ test('memoizes falsy return values', () => {
+ let calls = 0;
+ const fn = cached(() => {
+ calls += 1;
+ return '';
+ });
+
+ expect(fn('same-key')).toBe('');
+ expect(fn('same-key')).toBe('');
+ expect(calls).toBe(1);
+ });
+
+ test('memoizes undefined return values', () => {
+ let calls = 0;
+ const fn = cached(() => {
+ calls += 1;
+ return undefined;
+ });
+
+ expect(fn('same-key')).toBeUndefined();
+ expect(fn('same-key')).toBeUndefined();
+ expect(calls).toBe(1);
+ });
+ });
+
+ // isExternal()
+ // ---------------------------------------------------------------------------
+ describe('isExternal()', () => {
+ // cases non-external
+ test('non external local url with one /', () => {
+ const result = isExternal(`/${location.host}/docsify/demo.md`);
+
+ expect(result).toBeFalsy();
+ });
+
+ test('non external local url with two //', () => {
+ const result = isExternal(`//${location.host}/docsify/demo.md`);
+
+ expect(result).toBeFalsy();
+ });
+
+ test('non external local url with three ///', () => {
+ const result = isExternal(`///${location.host}/docsify/demo.md`);
+
+ expect(result).toBeFalsy();
+ });
+
+ test('non external local url with more /', () => {
+ const result = isExternal(
+ `//////////////////${location.host}/docsify/demo.md`,
+ );
+
+ expect(result).toBeFalsy();
+ });
+
+ test('non external url with one /', () => {
+ const result = isExternal('/example.github.io/docsify/demo.md');
+
+ expect(result).toBeFalsy();
+ });
+
+ // cases is external
+ test('external url with two //', () => {
+ const result = isExternal('/docsify/demo.md');
+
+ expect(result).toBeFalsy();
+ });
+
+ test('external url with three ///', () => {
+ const result = isExternal('///example.github.io/docsify/demo.md');
+
+ expect(result).toBeTruthy();
+ });
+
+ test('external url with more /', () => {
+ const result = isExternal(
+ '//////////////////example.github.io/docsify/demo.md',
+ );
+
+ expect(result).toBeTruthy();
+ });
+
+ test('external url with one \\', () => {
+ const result = isExternal('/\\example.github.io/docsify/demo.md');
+
+ expect(result).toBeTruthy();
+ });
+
+ test('external url with two \\', () => {
+ const result = isExternal('/\\\\example.github.io/docsify/demo.md');
+
+ expect(result).toBeTruthy();
+ });
+ });
+});
diff --git a/test/unit/render-util.test.js b/test/unit/render-util.test.js
new file mode 100644
index 0000000000..9636c01e6b
--- /dev/null
+++ b/test/unit/render-util.test.js
@@ -0,0 +1,221 @@
+import {
+ removeAtag,
+ getAndRemoveConfig,
+ getAndRemoveDocsifyIgnoreConfig,
+} from '../../src/core/render/utils.js';
+import { tree } from '../../src/core/render/tpl.js';
+import { slugify } from '../../src/core/render/slugify.js';
+
+// Suite
+// -----------------------------------------------------------------------------
+describe('core/render/utils', () => {
+ // removeAtag()
+ // ---------------------------------------------------------------------------
+ describe('removeAtag()', () => {
+ test('removeAtag from a link', () => {
+ const result = removeAtag(' content ');
+
+ expect(result).toBe('content');
+ });
+ });
+
+ // getAndRemoveDocsifyIgnoreConfig()
+ // ---------------------------------------------------------------------------
+ describe('getAndRemoveDocsifyIgnoreConfig()', () => {
+ test('getAndRemoveDocsifyIgnoreConfig from ', () => {
+ const { content, ignoreAllSubs, ignoreSubHeading } =
+ getAndRemoveDocsifyIgnoreConfig(
+ 'My Ignore Title',
+ );
+ expect(content).toBe('My Ignore Title');
+ expect(ignoreSubHeading).toBeTruthy();
+ expect(ignoreAllSubs === undefined).toBeTruthy();
+ });
+
+ test('getAndRemoveDocsifyIgnoreConfig from ', () => {
+ const { content, ignoreAllSubs, ignoreSubHeading } =
+ getAndRemoveDocsifyIgnoreConfig(
+ 'My Ignore Title',
+ );
+ expect(content).toBe('My Ignore Title');
+ expect(ignoreAllSubs).toBeTruthy();
+ expect(ignoreSubHeading === undefined).toBeTruthy();
+ });
+
+ test('getAndRemoveDocsifyIgnoreConfig from {docsify-ignore}', () => {
+ const { content, ignoreAllSubs, ignoreSubHeading } =
+ getAndRemoveDocsifyIgnoreConfig('My Ignore Title{docsify-ignore}');
+ expect(content).toBe('My Ignore Title');
+ expect(ignoreSubHeading).toBeTruthy();
+ expect(ignoreAllSubs === undefined).toBeTruthy();
+ });
+
+ test('getAndRemoveDocsifyIgnoreConfig from {docsify-ignore-all}', () => {
+ const { content, ignoreAllSubs, ignoreSubHeading } =
+ getAndRemoveDocsifyIgnoreConfig('My Ignore Title{docsify-ignore-all}');
+ expect(content).toBe('My Ignore Title');
+ expect(ignoreAllSubs).toBeTruthy();
+ expect(ignoreSubHeading === undefined).toBeTruthy();
+ });
+ });
+
+ // getAndRemoveConfig()
+ // ---------------------------------------------------------------------------
+ describe('getAndRemoveConfig()', () => {
+ test('parse simple config', () => {
+ const result = getAndRemoveConfig(
+ "[filename](_media/example.md ':include')",
+ );
+
+ expect(result).toMatchObject({
+ config: {},
+ str: "[filename](_media/example.md ':include')",
+ });
+ });
+
+ test('parse config with arguments', () => {
+ const result = getAndRemoveConfig(
+ "[filename](_media/example.md ':include :foo=bar :baz test')",
+ );
+
+ expect(result).toMatchObject({
+ config: {
+ foo: 'bar',
+ baz: true,
+ },
+ str: "[filename](_media/example.md ':include test')",
+ });
+ });
+
+ test('parse config with key arguments img', () => {
+ const result = getAndRemoveConfig(
+ "",
+ );
+
+ expect(result).toMatchObject({
+ config: {
+ size: '50x100',
+ },
+ str: "",
+ });
+ });
+
+ test('parse config with key arguments', () => {
+ const result = getAndRemoveConfig(
+ "[filename](_media/example.md ' :class=foo ')",
+ );
+
+ expect(result).toMatchObject({
+ config: {
+ class: 'foo',
+ },
+ str: "[filename](_media/example.md ' ')",
+ });
+ });
+
+ test('parse config with same key arguments', () => {
+ const result = getAndRemoveConfig(
+ "[filename](_media/example.md ' :class=foo :class=bar :bb=aa ')",
+ );
+
+ expect(result).toMatchObject({
+ config: {
+ class: ['foo', 'bar'],
+ },
+ str: "[filename](_media/example.md ' ')",
+ });
+ });
+
+ test('parse config with double quotes', () => {
+ const result = getAndRemoveConfig(
+ '[filename](_media/example.md ":include")',
+ );
+
+ expect(result).toMatchObject({
+ config: {},
+ str: '[filename](_media/example.md ":include")',
+ });
+ });
+ });
+});
+
+describe('core/render/tpl', () => {
+ test('remove html tag in tree', () => {
+ const result = tree([
+ {
+ level: 2,
+ slug: '#/cover?id=basic-usage',
+ title: 'Basic usage ',
+ },
+ {
+ level: 2,
+ slug: '#/cover?id=custom-background',
+ title: 'Custom background',
+ },
+ {
+ level: 2,
+ slug: '#/cover?id=test',
+ title:
+ ' Test',
+ },
+ ]);
+
+ expect(result).toBe(
+ /* html */ '',
+ );
+ });
+});
+
+describe('core/render/slugify', () => {
+ test('slugify()', () => {
+ const htmlStrippedSlug = slugify(
+ 'Bla bla bla ',
+ );
+ expect(htmlStrippedSlug).toBe('bla-bla-bla-');
+
+ const nestedHtmlStrippedSlug = slugify(
+ 'Another broken example ',
+ );
+ expect(nestedHtmlStrippedSlug).toBe('another-broken-example');
+
+ const emojiRemovedSlug = slugify('emoji test ⚠️🔥✅');
+ expect(emojiRemovedSlug).toBe('emoji-test-');
+
+ const multiSpaceSlug = slugify('Title with multiple spaces');
+ expect(multiSpaceSlug).toBe('title----with---multiple-spaces');
+
+ const numberLeadingSlug = slugify('123abc');
+ expect(numberLeadingSlug).toBe('_123abc');
+
+ const firstDuplicate = slugify('duplicate');
+ expect(firstDuplicate).toBe('duplicate');
+
+ const secondDuplicate = slugify('duplicate');
+ expect(secondDuplicate).toBe('duplicate-1');
+
+ const thirdDuplicate = slugify('duplicate');
+ expect(thirdDuplicate).toBe('duplicate-2');
+
+ const mixedCaseSlug = slugify('This Is Mixed CASE');
+ expect(mixedCaseSlug).toBe('this-is-mixed-case');
+
+ const chinesePreservedSlug = slugify('你好 world');
+ expect(chinesePreservedSlug).toBe('你好-world');
+
+ const specialCharSlug = slugify('C++ vs. Java & Python!');
+ expect(specialCharSlug).toBe('c-vs-java--python');
+
+ const docsifyIgnoreSlug = slugify(
+ 'Ignore Heading ',
+ );
+ expect(docsifyIgnoreSlug).toBe('ignore-heading-');
+
+ const quoteCleanedSlug = slugify('"The content"');
+ expect(quoteCleanedSlug).toBe('the-content');
+
+ const markdownLinkSlug = slugify(
+ '[5.0.0-rc.4](https://github.com/docsifyjs/docsify/compare/v5.0.0-rc.3...v5.0.0-rc.4) (2026-03-11)',
+ );
+ expect(markdownLinkSlug).toBe('_500-rc4-2026-03-11');
+ });
+});
diff --git a/test/unit/render.js b/test/unit/render.js
deleted file mode 100644
index 25043cf0d6..0000000000
--- a/test/unit/render.js
+++ /dev/null
@@ -1,89 +0,0 @@
-const path = require('path')
-
-const {expect} = require('chai')
-
-const {init, expectSameDom} = require('../_helper')
-
-describe('render', function() {
- it('important content (tips)', async function() {
- const {docsify, dom} = await init()
- const output = docsify.compiler.compile('!> **Time** is money, my friend!')
- expect(output).equal('Time is money, my friend!
')
- })
-
- describe('lists', function() {
- it('as unordered task list', async function() {
- const {docsify, dom} = await init()
- const output = docsify.compiler.compile(`
-- [x] Task 1
-- [ ] Task 2
-- [ ] Task 3`)
- expect(output, ``)
- })
-
- it('as ordered task list', async function() {
- const {docsify, dom} = await init()
- const output = docsify.compiler.compile(`
-1. [ ] Task 1
-2. [x] Task 2`)
- expectSameDom(output, `
- Task 1
- Task 2
- `)
- })
-
- it('normal unordered', async function() {
- const {docsify, dom} = await init()
- const output = docsify.compiler.compile(`
-- [linktext](link)
-- just text`)
- expectSameDom(output, ``)
- })
-
- it('unordered with custom start', async function() {
- const {docsify, dom} = await init()
- const output = docsify.compiler.compile(`
-1. first
-2. second
-
-text
-
-3. third`)
- expectSameDom(output, `
- first
- second
-
- text
-
- third
- `)
- })
-
- it('nested', async function() {
- const {docsify, dom} = await init()
- const output = docsify.compiler.compile(`
-- 1
-- 2
- - 2 a
- - 2 b
-- 3`)
- expectSameDom(output, ``)
- })
- })
-
-})
diff --git a/test/unit/router-history-base.test.js b/test/unit/router-history-base.test.js
new file mode 100644
index 0000000000..58ff082466
--- /dev/null
+++ b/test/unit/router-history-base.test.js
@@ -0,0 +1,100 @@
+import { History } from '../../src/core/router/history/base.js';
+
+class MockHistory extends History {
+ parse(path) {
+ return { path };
+ }
+}
+
+// Suite
+// -----------------------------------------------------------------------------
+describe('router/history/base', () => {
+ // Setup & Teardown
+ // ---------------------------------------------------------------------------
+ let history;
+
+ // resolvePath: true
+ // ---------------------------------------------------------------------------
+ describe('relativePath: true', () => {
+ // Setup & Teardown
+ // -------------------------------------------------------------------------
+ beforeEach(() => {
+ history = new MockHistory({ relativePath: true });
+ });
+
+ // Tests
+ // -------------------------------------------------------------------------
+ test('toURL', () => {
+ const url = history.toURL('guide.md', {}, '/zh-ch/');
+
+ expect(url).toBe('/zh-ch/guide');
+ });
+
+ test('toURL with double dot', () => {
+ const url = history.toURL('../README.md', {}, '/zh-ch/');
+
+ expect(url).toBe('/README');
+ });
+
+ test('toURL child path', () => {
+ const url = history.toURL('config/example.md', {}, '/zh-ch/');
+
+ expect(url).toBe('/zh-ch/config/example');
+ });
+
+ test('toURL absolute path', () => {
+ const url = history.toURL('/README', {}, '/zh-ch/');
+
+ expect(url).toBe('/README');
+ });
+ });
+
+ // resolvePath: false
+ // ---------------------------------------------------------------------------
+ describe('relativePath: false', () => {
+ // Setup & Teardown
+ // -------------------------------------------------------------------------
+ beforeEach(() => {
+ history = new MockHistory({ relativePath: false });
+ });
+
+ // Tests
+ // -------------------------------------------------------------------------
+ test('toURL', () => {
+ const url = history.toURL('README', {}, '/zh-ch/');
+
+ expect(url).toBe('/README');
+ });
+ });
+
+ // getFile test
+ // ---------------------------------------------------------------------------
+ describe('getFile', () => {
+ // Tests
+ // -------------------------------------------------------------------------
+ test('path is url', () => {
+ const file = history.getFile('https://some/raw/url/README.md');
+
+ expect(file).toBe('https://some/raw/url/README.md');
+ });
+ test('path is url, but ext is .html', () => {
+ const file = history.getFile('https://foo.com/index.html');
+
+ expect(file).toBe('https://foo.com/index.html');
+ });
+ test('path is url, but with parameters', () => {
+ const file = history.getFile(
+ 'https://some/raw/url/README.md?token=Mytoken',
+ );
+
+ expect(file).toBe('https://some/raw/url/README.md?token=Mytoken');
+ });
+ test('path is url, but ext is different', () => {
+ history = new MockHistory({ ext: '.ext' });
+
+ const file = history.getFile('https://some/raw/url/README.md');
+
+ expect(file).toBe('https://some/raw/url/README.md.ext');
+ });
+ });
+});
diff --git a/test/unit/router-util.test.js b/test/unit/router-util.test.js
new file mode 100644
index 0000000000..82973fa3a5
--- /dev/null
+++ b/test/unit/router-util.test.js
@@ -0,0 +1,27 @@
+import { resolvePath } from '../../src/core/util/index.js';
+
+// Suite
+// -----------------------------------------------------------------------------
+describe('router/util', () => {
+ // resolvePath()
+ // ---------------------------------------------------------------------------
+ describe('resolvePath()', () => {
+ test('resolvePath with filename', () => {
+ const result = resolvePath('hello.md');
+
+ expect(result).toBe('/hello.md');
+ });
+
+ test('resolvePath with ./', () => {
+ const result = resolvePath('./hello.md');
+
+ expect(result).toBe('/hello.md');
+ });
+
+ test('resolvePath with ../', () => {
+ const result = resolvePath('test/../hello.md');
+
+ expect(result).toBe('/hello.md');
+ });
+ });
+});
diff --git a/test/unit/util.js b/test/unit/util.js
deleted file mode 100644
index 1e65dafe00..0000000000
--- a/test/unit/util.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/* eslint-env node, chai, mocha */
-require = require('esm')(module/*, options*/)
-const {expect} = require('chai')
-const {resolvePath} = require('../../src/core/router/util')
-
-describe('router/util', function () {
- it('resolvePath', async function () {
- // WHEN
- const result = resolvePath('hello.md')
-
- // THEN
- expect(result).equal('/hello.md')
- })
-
- it('resolvePath with dot', async function () {
- // WHEN
- const result = resolvePath('./hello.md')
-
- // THEN
- expect(result).equal('/hello.md')
- })
-
- it('resolvePath with two dots', async function () {
- // WHEN
- const result = resolvePath('test/../hello.md')
-
- // THEN
- expect(result).equal('/hello.md')
- })
-})
diff --git a/themes/.gitkeep b/themes/.gitkeep
deleted file mode 100644
index 8b13789179..0000000000
--- a/themes/.gitkeep
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000000..ef671d3627
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,34 @@
+{
+ "compilerOptions": {
+ "allowJs": true,
+ "checkJs": true,
+
+ "module": "esnext",
+ "moduleResolution": "node",
+ "target": "es2023",
+ "lib": ["ES2023", "DOM", "DOM.AsyncIterable", "DOM.Iterable"],
+ "declaration": true,
+ "declarationMap": true, // This (along with also shipping src/, not only dist/), makes "Go To Definition" go to the source files in IDEs for a better DX.
+ "emitDeclarationOnly": true,
+ "resolveJsonModule": true,
+
+ // Output declarations next to source files (the default when outDir is not
+ // defined), rather than in dist/, to avoid conflicting with the global
+ // build in dist/.
+ // "outDir": "dist/",
+
+ "strict": true,
+ "skipLibCheck": true,
+ "skipDefaultLibCheck": true,
+
+ // TODO: Remove once tinydate import is refactored to non-default, or replace/delete non-standards-aligned libs.
+ // Enables default import interop for CJS modules like tinydate
+ "allowSyntheticDefaultImports": true,
+
+ // TODO: Remove this once all implicit any errors are fixed with proper JSDoc types
+ // Currently suppressing ~600 implicit any errors across the codebase
+ // See: https://github.com/docsifyjs/docsify/pull/2392
+ "noImplicitAny": false
+ },
+ "include": ["src/**/*.js", "src/core/modules.ts", "src/core/globals.ts"]
+}
diff --git a/vercel.json b/vercel.json
new file mode 100644
index 0000000000..da3464f69c
--- /dev/null
+++ b/vercel.json
@@ -0,0 +1,13 @@
+{
+ "headers": [
+ {
+ "source": "/(.*)",
+ "headers": [{ "key": "x-robots-tag", "value": "noindex" }]
+ }
+ ],
+ "redirects": [{ "source": "/", "destination": "/preview/" }],
+ "rewrites": [
+ { "source": "/preview/CHANGELOG.md", "destination": "/CHANGELOG.md" },
+ { "source": "/preview/:path*", "destination": "/docs/:path*" }
+ ]
+}