diff --git a/.commitlintrc.js b/.commitlintrc.js new file mode 100644 index 00000000..8ea100e3 --- /dev/null +++ b/.commitlintrc.js @@ -0,0 +1,8 @@ +const config = { + extends: ['@commitlint/config-conventional'], + rules: { + 'footer-max-line-length': [1, 'always', 72], + }, +}; + +export default config; diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 003ecbc6..00000000 --- a/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -.idea -node_modules -dist -coverage -CHANGELOG.md -!.eslintrc.cjs -!.prettierrc.cjs -!.github diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 951b0181..00000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,52 +0,0 @@ -const commonJSRules = { - 'unicorn/filename-case': 'off', - 'unicorn/prevent-abbreviations': 'off', - 'unicorn/no-null': 'off', - 'unicorn/no-array-for-each': 'off', - - '@typescript-eslint/no-meaningless-void-operator': 'off', - '@typescript-eslint/no-confusing-void-expression': 'off', -}; - -module.exports = { - root: true, - - parserOptions: { - extraFileExtensions: ['.md'], - }, - - settings: { - 'import/ignore': ['react-apexcharts'], - }, - - overrides: [ - { - files: ['*.js', '*.cjs', '*.jsx', '*.cjsx'], - extends: ['@react-hookz/eslint-config/base.cjs', '@react-hookz/eslint-config/react.cjs'], - rules: { - ...commonJSRules, - }, - }, - { - files: ['*.ts', '*.tsx'], - parserOptions: { - project: './tsconfig.eslint.json', - }, - extends: [ - '@react-hookz/eslint-config/typescript.cjs', - '@react-hookz/eslint-config/react.cjs', - ], - rules: { - ...commonJSRules, - }, - }, - { - files: ['*.md'], - extends: ['@react-hookz/eslint-config/md.cjs'], - }, - { - files: ['*.mdx'], - extends: ['@react-hookz/eslint-config/mdx.cjs'], - }, - ], -}; diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 20dd300c..2ddcbb40 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -9,9 +9,6 @@ on: - master workflow_dispatch: -env: - HUSKY: 0 - jobs: lint: name: "Lint" @@ -21,15 +18,15 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - + - name: 'Enable corepack' + run: corepack enable - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 + cache: 'yarn' - - uses: bahmutov/npm-install@v1 - with: - useRollingCache: true - install-command: yarn --frozen-lockfile + - name: "Install dependencies" + run: yarn install --immutable - name: "Lint" run: yarn lint -f @react-hookz/gha @@ -42,22 +39,19 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - + - name: 'Enable corepack' + run: corepack enable - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 + cache: 'yarn' - - uses: bahmutov/npm-install@v1 - with: - useRollingCache: true - install-command: yarn --frozen-lockfile + - name: "Install dependencies" + run: yarn install --immutable - name: "Build" run: yarn build - - name: "Tests against built package" - run: yarn test - test: name: "Test" runs-on: ubuntu-latest @@ -66,24 +60,32 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 - + - name: 'Enable corepack' + run: corepack enable - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 + cache: 'yarn' - - uses: bahmutov/npm-install@v1 - with: - useRollingCache: true - install-command: yarn --frozen-lockfile + - name: "Install dependencies" + run: yarn install --immutable - name: "Test" - run: yarn build:clean && yarn test:coverage --testLocationInResults --reporters=default --reporters=@jamesacarr/jest-reporter-github-actions + run: yarn test:coverage --reporter='github-actions' --reporter='junit' --outputFile='./coverage/test-report.junit.xml' --reporter=default - name: "Upload coverage to Codecov" - uses: codecov/codecov-action@v4 + uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} - files: coverage/lcov.info + files: coverage/test-report.junit.xml + fail_ci_if_error: true + + - name: "Upload test results to Codecov" + if: ${{ !cancelled() }} + uses: codecov/test-results-action@v1 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: coverage/test-report.junit.xml fail_ci_if_error: true dependabot-merge: @@ -98,7 +100,6 @@ jobs: - uses: fastify/github-action-merge-dependabot@v3 with: github-token: ${{ secrets.GITHUB_TOKEN }} - target: 'minor' semantic-release: name: "Release" @@ -111,26 +112,28 @@ jobs: - name: "Checkout" uses: actions/checkout@v4 with: - fetch-depth: 0 - + ref: "master" + - name: 'Enable corepack' + run: corepack enable - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 + cache: 'yarn' - - uses: bahmutov/npm-install@v1 - with: - useRollingCache: true - install-command: yarn --frozen-lockfile + - name: Install dependencies + run: yarn install --immutable - - name: "Build package" + - name: "disable postinstall" + run: yarn pinst --disable + + - name: "Build" run: yarn build - name: "Release" - id: "release" - uses: codfish/semantic-release-action@v3.4.1 env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: yarn semantic-release gen-contributors: name: "Generate Contributors List" diff --git a/.gitignore b/.gitignore index a346c66a..42bb50f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,14 @@ -/.idea -node_modules +.idea + +yarn-error.log +.yarn/* +!.yarn/cache +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + /coverage -/src/**/*.js -/src/**/*.d.ts +/node_modules +/dist diff --git a/.husky/commit-msg b/.husky/commit-msg index 14aeed6b..e232fe61 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,10 +1,7 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - if [ "$CI" = "true" ] then # disable commitlint for CI environments exit 0 else - echo "Exists" + yarn commitlint --edit fi diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 00000000..b3736047 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,4 @@ +{ + "*.{js,ts}": "yarn lint:fix", + "*.mdx?": "yarn lint:fix" +} diff --git a/.npmignore b/.npmignore index ba968dd8..5b2b93e1 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,2 @@ * -!/src/**/*.js -!/src/**/*.d.ts +!/dist diff --git a/.prettierrc.cjs b/.prettierrc.cjs deleted file mode 100644 index a440250b..00000000 --- a/.prettierrc.cjs +++ /dev/null @@ -1,3 +0,0 @@ -const config = require('@react-hookz/eslint-config/.prettierrc.cjs'); - -module.exports = config; diff --git a/.releaserc.json b/.releaserc.json new file mode 100644 index 00000000..355240d4 --- /dev/null +++ b/.releaserc.json @@ -0,0 +1,11 @@ +{ + "branches": [ + "master" + ], + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@semantic-release/npm", + "@semantic-release/github" + ] +} diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 00000000..3186f3f0 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 24cfc39e..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,1140 +0,0 @@ -## [24.0.4](https://github.com/react-hookz/web/compare/v24.0.3...v24.0.4) (2024-02-04) - - -### Bug Fixes - -* **useDebouncedCallback:** make invoked function to be updated with deps ([#1510](https://github.com/react-hookz/web/issues/1510)) ([12658ee](https://github.com/react-hookz/web/commit/12658ee8176fca60b212af6a1f935f9975239ed1)), closes [#1357](https://github.com/react-hookz/web/issues/1357) - -## [24.0.3](https://github.com/react-hookz/web/compare/v24.0.2...v24.0.3) (2024-02-03) - - -### Bug Fixes - -* get rid of import alias as it still breaks everything around ([#1509](https://github.com/react-hookz/web/issues/1509)) ([90e4f9d](https://github.com/react-hookz/web/commit/90e4f9d2b62677b9da412c6787c0b201d2ee6931)) - -## [24.0.2](https://github.com/react-hookz/web/compare/v24.0.1...v24.0.2) (2023-12-21) - - -### Bug Fixes - -* lower engines requirements to ease usage for consumers ([8bd29f7](https://github.com/react-hookz/web/commit/8bd29f74340c9684160aaa445d24b81f229976b8)) - -## [24.0.1](https://github.com/react-hookz/web/compare/v24.0.0...v24.0.1) (2023-12-20) - - -### Bug Fixes - -* change build so development and distributed imports match ([6383cdd](https://github.com/react-hookz/web/commit/6383cdd5581d60aac3c0000686ebd4139eac6e65)) - -# [24.0.0](https://github.com/react-hookz/web/compare/v23.1.0...v24.0.0) (2023-12-20) - - -### Features - -* switch package to module type ([#1472](https://github.com/react-hookz/web/issues/1472)) ([50921ef](https://github.com/react-hookz/web/commit/50921efda58aefcd52d50bfff27c31755c9253d9)) - - -### BREAKING CHANGES - -* Hooks are now distrubutes as JS built form TS with target ESNext and ESM module resolution. There is no more sense to distribute CJS version as package is ESM-only. - -Consequent of above - no more esm and cjs subfolders - hooks are importable from index.js or its own directory which don't have a prefix anymore, thanks to exports directive. All of below examples will lead to same result, choose any on your taste: - -import { useFirstMountState } from '@react-hookz/web'; -import { useFirstMountState } from '@react-hookz/web/'; -import { useFirstMountState } from '@react-hookz/web/useFirstMountState/'; -import { useFirstMountState } from '@react-hookz/web/useFirstMountState/index.js'; -Thought is seems not to have subfolder, it is only due to exports directive, in real it is -@react-hookz/web/dist/useFirstMountState/index.js. - -Pakage uses imports directive to define path alias #root - it stays so even in distributed code, thus, some may be affected in case their bundler configured to somehow handle such alias. Those developer shoud configure import rewriter not to handle node_modules or @react-hookz/web package exclusively. - -Side-effect for current PR - documentation is broken, as storybook 6 is not working within ESM packages and I'm planning to switch to another domenting engine anyway. - -# [23.1.0](https://github.com/react-hookz/web/compare/v23.0.1...v23.1.0) (2023-06-30) - - -### Features - -* conform new linting configuration ([#1296](https://github.com/react-hookz/web/issues/1296)) ([e0bc4e1](https://github.com/react-hookz/web/commit/e0bc4e199da399de68b0527724952111332e6f43)) - -## [23.0.1](https://github.com/react-hookz/web/compare/v23.0.0...v23.0.1) (2023-05-24) - - -### Bug Fixes - -* **useThrottleCallback:** Cleared timeout on unmount ([#1173](https://github.com/react-hookz/web/issues/1173)) ([8681ad8](https://github.com/react-hookz/web/commit/8681ad84044a78ddf868a1dbe3382cc846faec14)) - -# [23.0.0](https://github.com/react-hookz/web/compare/v22.0.0...v23.0.0) (2023-03-23) - - -* Deprecate useSafeState (#1096) ([284e499](https://github.com/react-hookz/web/commit/284e499aeee125ffa67ca499a0579b4050d2888f)), closes [#1096](https://github.com/react-hookz/web/issues/1096) - - -### BREAKING CHANGES - -* `useSafeState` hook is removed - -# [22.0.0](https://github.com/react-hookz/web/compare/v21.0.0...v22.0.0) (2023-01-05) - - -### Features - -* rename all hook implementation files to `index.ts` ([#1065](https://github.com/react-hookz/web/issues/1065)) ([34c36f2](https://github.com/react-hookz/web/commit/34c36f20bb41c11db55bbf0ba54d78d344024807)) - - -### BREAKING CHANGES - -* all current hook implementation fies renamed to index to allow usage of directory imports and avoid redundant reexporting. -Such change breaks previous direct imports, but simplifies import string and solves redundant hook name duplication. - -4ex: -``` -// previously -import { useUpdate } from "@react-hookz/web/useUpdate/useUpdate" - -// now -import { useUpdate } from "@react-hookz/web/useUpdate" -``` - -# [21.0.0](https://github.com/react-hookz/web/compare/v20.1.0...v21.0.0) (2023-01-04) - - -### Features - -* Drop es5 versions support, leave only ESNext ([#963](https://github.com/react-hookz/web/issues/963)) ([5a622af](https://github.com/react-hookz/web/commit/5a622afe3f106036b807865faf6231ab20427113)) - - -### BREAKING CHANGES - -* `CJS ES5` and `ESM ES5` versions are removed from distribution, leaving only `ESM ESNext` version. - -We understand that this change can break existing pipelines for some developers, but such move eases library maintenance and is one of several moves towards module package. Address [Usage](https://github.com/react-hookz/web#usage) docs to actualize your pipeline if needed. - -This change is one of several braking changes regarding distribution and package usage. - -Sorry for any inconvenience. - -# [20.1.0](https://github.com/react-hookz/web/compare/v20.0.3...v20.1.0) (2023-01-02) - - -### Features - -* implement `useDocumentVisibility` hook ([#1049](https://github.com/react-hookz/web/issues/1049)) ([b00f793](https://github.com/react-hookz/web/commit/b00f79353fd025c61de995e88148e377fffad848)) - -## [20.0.3](https://github.com/react-hookz/web/compare/v20.0.2...v20.0.3) (2022-12-20) - - -### Bug Fixes - -* **useEventListener:** change the way listener added and removed ([#1050](https://github.com/react-hookz/web/issues/1050)) ([f2936a5](https://github.com/react-hookz/web/commit/f2936a5b9a20b6e26f7eba0b34327fdd09762ee0)) - -## [20.0.2](https://github.com/react-hookz/web/compare/v20.0.1...v20.0.2) (2022-12-18) - - -### Bug Fixes - -* **docs:** update link to GHA actions badge ([348cba7](https://github.com/react-hookz/web/commit/348cba7a0ba241e15386066b5f3ea464531e5f09)) - -## [20.0.1](https://github.com/react-hookz/web/compare/v20.0.0...v20.0.1) (2022-12-07) - - -### Bug Fixes - -* **useMediaQuery:** On misconfiguration, cause hydration error instead of SSR crash ([#1042](https://github.com/react-hookz/web/issues/1042)) ([46e5bcc](https://github.com/react-hookz/web/commit/46e5bcc287ab79d6436465cf90dfd6a837a535eb)), closes [#1000](https://github.com/react-hookz/web/issues/1000) [#1000](https://github.com/react-hookz/web/issues/1000) - -# [20.0.0](https://github.com/react-hookz/web/compare/v19.2.0...v20.0.0) (2022-12-02) - - -### Bug Fixes - -* **useMediaQuery:** add option to martch media query on first render ([#1020](https://github.com/react-hookz/web/issues/1020)) ([087b2b1](https://github.com/react-hookz/web/commit/087b2b1eb8db625f85f606a98b17077616dac968)), closes [#1000](https://github.com/react-hookz/web/issues/1000) - - -### BREAKING CHANGES - -* **useMediaQuery:** `useMediaQuery` and `useScreenOrientation` now returns matched media query state -on first render by default, SSR users can change that behaviour via hook options. - -# [19.2.0](https://github.com/react-hookz/web/compare/v19.1.0...v19.2.0) (2022-11-20) - - -### Features - -* implement `useRenderCount` hook ([#990](https://github.com/react-hookz/web/issues/990)) ([efbeeb1](https://github.com/react-hookz/web/commit/efbeeb1e365c386bf1368e703a3da01302987557)) - -# [19.1.0](https://github.com/react-hookz/web/compare/v19.0.0...v19.1.0) (2022-11-12) - - -### Features - -* **useStorageValue:** add custom parse and stringify functions to options ([#913](https://github.com/react-hookz/web/issues/913)) ([095d371](https://github.com/react-hookz/web/commit/095d371a25363cfefa9c2df607c4af10ed8ef01d)) - -# [19.0.0](https://github.com/react-hookz/web/compare/v18.0.1...v19.0.0) (2022-11-12) - - -### Bug Fixes - -* **useMeasure:** only expose with and height properties ([#954](https://github.com/react-hookz/web/issues/954)) ([161c18d](https://github.com/react-hookz/web/commit/161c18dd2f16e9e4f5164b6bb78799df184dde13)), closes [#951](https://github.com/react-hookz/web/issues/951) - - -### BREAKING CHANGES - -* **useMeasure:** Only width and height are now exposed from the element instead of the whole DOMRect - -## [18.0.1](https://github.com/react-hookz/web/compare/v18.0.0...v18.0.1) (2022-11-10) - - -### Bug Fixes - -* **useStorageValue:** make methods to be stable between renders ([#1015](https://github.com/react-hookz/web/issues/1015)) ([2211bb7](https://github.com/react-hookz/web/commit/2211bb7379ade02511ea49266bad3d8817ea5514)), closes [#1014](https://github.com/react-hookz/web/issues/1014) - -# [18.0.0](https://github.com/react-hookz/web/compare/v17.0.1...v18.0.0) (2022-11-09) - - -* Remove hooks that modify the head element (#1004) ([12f723d](https://github.com/react-hookz/web/commit/12f723d0d368913e7198012fb18db683c2a97689)), closes [#1004](https://github.com/react-hookz/web/issues/1004) [#386](https://github.com/react-hookz/web/issues/386) [#386](https://github.com/react-hookz/web/issues/386) [#386](https://github.com/react-hookz/web/issues/386) - - -### BREAKING CHANGES - -* useDocumentTitle has been removed. - -## [17.0.1](https://github.com/react-hookz/web/compare/v17.0.0...v17.0.1) (2022-11-05) - - -### Bug Fixes - -* **useStorageValue:** respect `initializeWithValue` default, fix docs and tests ([#1003](https://github.com/react-hookz/web/issues/1003)) ([1f730d6](https://github.com/react-hookz/web/commit/1f730d6de3700dfffb60440af4039a49556d7f77)), closes [#1002](https://github.com/react-hookz/web/issues/1002) - -# [17.0.0](https://github.com/react-hookz/web/compare/v16.1.0...v17.0.0) (2022-11-03) - - -* Rework `useStorageValue` to more simple and robust variant (#960) ([7bcc385](https://github.com/react-hookz/web/commit/7bcc3858d882afcf8e3d79c2ac2a5c0996922926)), closes [#960](https://github.com/react-hookz/web/issues/960) - - -### BREAKING CHANGES - -* new implementation brings different API. -It is not backward compatible! - -Co-authored-by: Arttu Olli - -# [16.1.0](https://github.com/react-hookz/web/compare/v16.0.1...v16.1.0) (2022-10-23) - - -### Features - -* **useDeepCompareMemo:** Implement useDeepCompareMemo ([#979](https://github.com/react-hookz/web/issues/979)) ([532cc41](https://github.com/react-hookz/web/commit/532cc41f3b2d55a7f6f297ea9a4b652072e0d311)), closes [#871](https://github.com/react-hookz/web/issues/871) - -## [16.0.1](https://github.com/react-hookz/web/compare/v16.0.0...v16.0.1) (2022-10-22) - - -### Bug Fixes - -* **useCustomCompareMemo:** Correctly infer the type of the value returned by the factory function ([#976](https://github.com/react-hookz/web/issues/976)) ([a625c55](https://github.com/react-hookz/web/commit/a625c55bc544dc1bc7544a5ff8811a0a78c568bd)), closes [#975](https://github.com/react-hookz/web/issues/975) - -# [16.0.0](https://github.com/react-hookz/web/compare/v15.1.0...v16.0.0) (2022-10-09) - - -### Styles - -* remove I prefix from types and interfaces ([c2a1ff4](https://github.com/react-hookz/web/commit/c2a1ff40909f1ddf5066c5d038b800bd42410a21)) - - -### BREAKING CHANGES - -* `I` prefix removed from all types having it. - -# [15.1.0](https://github.com/react-hookz/web/compare/v15.0.1...v15.1.0) (2022-08-14) - - -### Features - -* `useCustomCompareMemo` - like useMemo but uses custom deps comparator ([#895](https://github.com/react-hookz/web/issues/895)) ([5b38e8d](https://github.com/react-hookz/web/commit/5b38e8d182c1642a12dbf44050c44bb56f1a4884)) -* implement useTimeoutEffect ([#886](https://github.com/react-hookz/web/issues/886)) ([a3f6f07](https://github.com/react-hookz/web/commit/a3f6f07d4f3a0ca91810a9c88e31891bdb46fe00)) - -## [15.0.1](https://github.com/react-hookz/web/compare/v15.0.0...v15.0.1) (2022-07-04) - - -### Bug Fixes - -* **useLifecycleLogger:** rework hook and improve tests coverage ([#868](https://github.com/react-hookz/web/issues/868)) ([bfba4c2](https://github.com/react-hookz/web/commit/bfba4c25389a81677925d71645dd41da307bfe24)) - -# [15.0.0](https://github.com/react-hookz/web/compare/v14.7.1...v15.0.0) (2022-07-04) - - -### Bug Fixes - -* **useMediaQuery:** fix state stuck for concurrent mode ([#866](https://github.com/react-hookz/web/issues/866)) ([75db2b5](https://github.com/react-hookz/web/commit/75db2b5d73ab07beb53f335274b4413f36d625ab)), closes [#849](https://github.com/react-hookz/web/issues/849) - - -### Features - -* implement `useControlledRerenderState` hook ([#865](https://github.com/react-hookz/web/issues/865)) ([ea4545b](https://github.com/react-hookz/web/commit/ea4545b7ee45019c68d0edb2332bd9478e50b820)) -* **useToggle:** ignore react events passed to state setter ([#867](https://github.com/react-hookz/web/issues/867)) ([085f711](https://github.com/react-hookz/web/commit/085f711200edc9beb7ed5adedcb83d8ce45c0f77)), closes [#861](https://github.com/react-hookz/web/issues/861) - - -### BREAKING CHANGES - -* **useToggle:** `useToggle` now ignores react events passed to its -state setter, so it can be used as event handler directly. -* **useMediaQuery:** `useMediaQuery` and `useScreenOrientation` are -asynchronous now and yields `undefined` at very first render, but -updates to actual value right after. - -## [14.7.1](https://github.com/react-hookz/web/compare/v14.7.0...v14.7.1) (2022-07-03) - - -### Bug Fixes - -* **useCookieValue:** proper js-cookie import ([#864](https://github.com/react-hookz/web/issues/864)) ([bb6464b](https://github.com/react-hookz/web/commit/bb6464b9893370c73edcf462a65f09de23efbf44)), closes [#280](https://github.com/react-hookz/web/issues/280) - -# [14.7.0](https://github.com/react-hookz/web/compare/v14.6.0...v14.7.0) (2022-06-30) - - -### Features - -* implement `useFunctionalState` ([#862](https://github.com/react-hookz/web/issues/862)) ([1491d38](https://github.com/react-hookz/web/commit/1491d38024cf2c5c3646e5dcf5a31e9f0a0e1aec)), closes [#530](https://github.com/react-hookz/web/issues/530) - -# [14.6.0](https://github.com/react-hookz/web/compare/v14.5.1...v14.6.0) (2022-06-30) - - -### Features - -* **useIsMounted:** allow to set initial value ([a63188a](https://github.com/react-hookz/web/commit/a63188a79e6b920fb6d2bd4fd18f26b3dadb7036)) -* **useSafeState:** fix issue with inability to set state before mount ([af8f4cd](https://github.com/react-hookz/web/commit/af8f4cdcc498260a6cdb763dc13605102ab9ba9b)) - -## [14.5.1](https://github.com/react-hookz/web/compare/v14.5.0...v14.5.1) (2022-06-30) - - -### Bug Fixes - -* **useMeasure:** support conditional rendering ([76ac155](https://github.com/react-hookz/web/commit/76ac155f65223bdc51570138f55a4ca89d299079)), closes [#755](https://github.com/react-hookz/web/issues/755) - -# [14.5.0](https://github.com/react-hookz/web/compare/v14.4.0...v14.5.0) (2022-06-30) - - -### Features - -* implement `useHookableRef` hook ([f41ab22](https://github.com/react-hookz/web/commit/f41ab226d4708a827724be3580d74dcef2baaee9)) - -# [14.4.0](https://github.com/react-hookz/web/compare/v14.3.0...v14.4.0) (2022-06-30) - - -### Features - -* implement `useIntervalEffect` ([a3869a3](https://github.com/react-hookz/web/commit/a3869a35b80ded1f0abd96366038ccd0b10d9040)), closes [#33](https://github.com/react-hookz/web/issues/33) [#452](https://github.com/react-hookz/web/issues/452) - -# [14.3.0](https://github.com/react-hookz/web/compare/v14.2.3...v14.3.0) (2022-06-25) - - -### Features - -* **useList:** port useList from react-use ([#810](https://github.com/react-hookz/web/issues/810)) ([73639fb](https://github.com/react-hookz/web/commit/73639fb55793c01ff8a8f1d7ad8bb3c7a9665561)) - -## [14.2.3](https://github.com/react-hookz/web/compare/v14.2.2...v14.2.3) (2022-06-22) - - -### Bug Fixes - -* apply correct order of operations in `useRerender` ([#850](https://github.com/react-hookz/web/issues/850)) ([5fc735a](https://github.com/react-hookz/web/commit/5fc735ad2b582394c913ffc2440495213d1dff2d)) -* change storybook builder to webpack5 ([#830](https://github.com/react-hookz/web/issues/830)) ([2df44c1](https://github.com/react-hookz/web/commit/2df44c1fc206dd0f6108da0bd282db259ab73010)) - -## [14.2.2](https://github.com/react-hookz/web/compare/v14.2.1...v14.2.2) (2022-05-12) - - -### Bug Fixes - -* `useResizeObserver` now respects element changes within ref object ([#759](https://github.com/react-hookz/web/issues/759)) ([2a4e848](https://github.com/react-hookz/web/commit/2a4e8482c29a8374bcd3eabb2e26c7899bc5a4a2)), closes [#755](https://github.com/react-hookz/web/issues/755) - -## [14.2.1](https://github.com/react-hookz/web/compare/v14.2.0...v14.2.1) (2022-05-12) - - -### Bug Fixes - -* `useUnmountEffect` now invokes changing effect functions ([#758](https://github.com/react-hookz/web/issues/758)) ([380637a](https://github.com/react-hookz/web/commit/380637a1bd1e91d1f22ad5fb9ef7557598700cb3)), closes [#756](https://github.com/react-hookz/web/issues/756) - -# [14.2.0](https://github.com/react-hookz/web/compare/v14.1.0...v14.2.0) (2022-05-12) - - -### Features - -* `useVibration` hook implementation and docs ([#757](https://github.com/react-hookz/web/issues/757)) ([db40294](https://github.com/react-hookz/web/commit/db4029403dfa11a0e00fda8cf2427c6f94e406d2)) - -# [14.1.0](https://github.com/react-hookz/web/compare/v14.0.0...v14.1.0) (2022-05-12) - - -### Features - -* **useCounter:** port `useCounter` from `react-use` ([#751](https://github.com/react-hookz/web/issues/751)) ([510947b](https://github.com/react-hookz/web/commit/510947bdd9006fc9c5f0c15c37f7983e950955e6)), closes [#33](https://github.com/react-hookz/web/issues/33) - -# [14.0.0](https://github.com/react-hookz/web/compare/v13.3.0...v14.0.0) (2022-05-11) - - -### Bug Fixes - -* **`useMediatedState`:** make initial state be passed through mediator ([#753](https://github.com/react-hookz/web/issues/753)) ([727d224](https://github.com/react-hookz/web/commit/727d224bf55373a6f0ea15bc661a666b3f1e1631)) - - -### BREAKING CHANGES - -* **`useMediatedState`:** `useMediatedState` now passes initial state through mediator - -# [13.3.0](https://github.com/react-hookz/web/compare/v13.2.1...v13.3.0) (2022-04-25) - - -### Features - -* implement `useLifecycleEffect` hook ([#652](https://github.com/react-hookz/web/issues/652)) ([357b018](https://github.com/react-hookz/web/commit/357b01802ef2d98a17a36f653a3e6aa90ad5b4ef)) - -## [13.2.1](https://github.com/react-hookz/web/compare/v13.2.0...v13.2.1) (2022-04-10) - - -### Bug Fixes - -* make `useRerender` operate integer increment instead of bool switch ([#711](https://github.com/react-hookz/web/issues/711)) ([409a21f](https://github.com/react-hookz/web/commit/409a21f73d3250ad08e5a46da59cc2db88f29390)), closes [#691](https://github.com/react-hookz/web/issues/691) - -# [13.2.0](https://github.com/react-hookz/web/compare/v13.1.0...v13.2.0) (2022-03-30) - - -### Features - -* create `useRafEffect` ([#693](https://github.com/react-hookz/web/issues/693)) ([6548831](https://github.com/react-hookz/web/commit/65488314e7a0845a10f263e05026490171891bda)) - -# [13.1.0](https://github.com/react-hookz/web/compare/v13.0.0...v13.1.0) (2022-03-14) - - -### Features - -* implement `useRafState` hook ([6cd44ec](https://github.com/react-hookz/web/commit/6cd44ecead3864aa1f0ece8ab3f5e02ae4e42cbf)) -* implement `useWindowSize` hook ([81819cf](https://github.com/react-hookz/web/commit/81819cf63315564ee5f41174f5a036c158dad913)) - -# [13.0.0](https://github.com/react-hookz/web/compare/v12.3.0...v13.0.0) (2022-02-25) - - -### Features - -* **`useMediaQuery`:** add synchronous mql state fetch ([0e0be56](https://github.com/react-hookz/web/commit/0e0be5626bbe3ab0815e25f9aef49dbb1be681b1)) -* implement new hook - `useScreenOrientation` ([107cc21](https://github.com/react-hookz/web/commit/107cc2116f09d44757495d688f41eeb5cad11760)) - - -### BREAKING CHANGES - -* **`useMediaQuery`:** `useMediaQuery` now does synchronous fetch, this means -that in browser it will return final state on first render, while SSR -mode still return `undefined`. -SSR users should set second parameter of this hook to `true`, to -postpone state fetch until effects phase. - -# [12.3.0](https://github.com/react-hookz/web/compare/v12.2.0...v12.3.0) (2022-01-17) - - -### Features - -* new hook `usePreviousDistinct` ([#585](https://github.com/react-hookz/web/issues/585)) ([1bf69d6](https://github.com/react-hookz/web/commit/1bf69d66e951e8a09427aa5f9f652fb8be5d8229)), closes [#33](https://github.com/react-hookz/web/issues/33) - -# [12.2.0](https://github.com/react-hookz/web/compare/v12.1.2...v12.2.0) (2022-01-14) - - -### Features - -* new hook `useDeepCompareEffect` ([#581](https://github.com/react-hookz/web/issues/581)) ([3dfa7b5](https://github.com/react-hookz/web/commit/3dfa7b5664746fd5288d488fb477c23f8e765f43)) - -## [12.1.2](https://github.com/react-hookz/web/compare/v12.1.1...v12.1.2) (2022-01-13) - - -### Bug Fixes - -* move to stricter linting configuration ([#580](https://github.com/react-hookz/web/issues/580)) ([f455992](https://github.com/react-hookz/web/commit/f455992a60b06846fa86a4627d206053b279e96c)) - -## [12.1.1](https://github.com/react-hookz/web/compare/v12.1.0...v12.1.1) (2022-01-11) - - -### Bug Fixes - -* **`useLocalStorage`, `useSessionStorage`:** replace hook with noop in case of storage absence. ([#540](https://github.com/react-hookz/web/issues/540)) ([790b302](https://github.com/react-hookz/web/commit/790b30257a15e936f5c4d776917fc2dd6dcad931)), closes [#521](https://github.com/react-hookz/web/issues/521) - -# [12.1.0](https://github.com/react-hookz/web/compare/v12.0.3...v12.1.0) (2022-01-11) - - -### Features - -* **useMeasure,useResizeObserver:** ability yo disable observation ([#573](https://github.com/react-hookz/web/issues/573)) ([4c6f074](https://github.com/react-hookz/web/commit/4c6f074eca31604d0975a9c8de1262b2fa8bda48)), closes [#523](https://github.com/react-hookz/web/issues/523) - -## [12.0.3](https://github.com/react-hookz/web/compare/v12.0.2...v12.0.3) (2021-12-23) - - -### Bug Fixes - -* **451:** attempt to fix issue [#451](https://github.com/react-hookz/web/issues/451) ([#539](https://github.com/react-hookz/web/issues/539)) ([c2f99da](https://github.com/react-hookz/web/commit/c2f99da82b88d78488c84ad793d3e4c99b4c2141)) - -# [12.0.0](https://github.com/react-hookz/web/compare/v11.1.0...v12.0.0) (2021-10-01) - - -### Features - -* exclude `@types/react` and `@types/react-dom` from deps ([bcaca2e](https://github.com/react-hookz/web/commit/bcaca2e045136033cf587348a0cf791aa9065954)), closes [#353](https://github.com/react-hookz/web/issues/353) - - -### BREAKING CHANGES - -* `@types/react` and `@types/react-dom` are no more -presented in `dependencies`. - -# [11.1.0](https://github.com/react-hookz/web/compare/v11.0.0...v11.1.0) (2021-09-28) - - -### Features - -* new hook `useCustomCompareEffect` ([#346](https://github.com/react-hookz/web/issues/346)) ([ef4248a](https://github.com/react-hookz/web/commit/ef4248a1ea2bcac86472675d07cd9928985419f3)) - -# [11.0.0](https://github.com/react-hookz/web/compare/v10.1.1...v11.0.0) (2021-09-28) - - -### Bug Fixes - -* proper links in readme that don't break in firefox ([b406dc6](https://github.com/react-hookz/web/commit/b406dc69d0ad5a08d26ab85144d056b6916b18f7)) - - -### Features - -* improve `useConditionalEffect` and remove `useConditionalUpdateEffect` ([#345](https://github.com/react-hookz/web/issues/345)) ([4474cf7](https://github.com/react-hookz/web/commit/4474cf730f9e02599eb3c2674ac3304d9f33ec93)) - - -### BREAKING CHANGES - -* `useConditionalEffect` conditions and deps arguments now switched places. - -* feat(useConditionalEffect): added ability to wrap other effect hooks - -* feat: remove `useConditionalUpdateEffect` -* `useConditionalUpdateEffect` removed in favor of -composition with `useConditionalEffect`. - -Now you should simpy pass extra argument to achieve same functionality: -`useConditionalEffect(()=>{}, undefined, [], truthyAndArrayPredicate, -useUpdateEffect)` -* Interface `IUseConditionalEffectPredicate` renamed to -`IConditionsPredicate` - -* docs: cleanup, remove `useConditionalUpdateEffect` from readme - -Co-authored-by: Joe Duncko - -## [10.1.1](https://github.com/react-hookz/web/compare/v10.1.0...v10.1.1) (2021-09-24) - - -### Bug Fixes - -* fix the examples of useAsync ([#344](https://github.com/react-hookz/web/issues/344)) ([ee064ec](https://github.com/react-hookz/web/commit/ee064ec21bfe1ba5570f48b4c21daff717885680)) - -# [10.1.0](https://github.com/react-hookz/web/compare/v10.0.0...v10.1.0) (2021-09-23) - - -### Features - -* new hook `useAsyncAbortable` ([#340](https://github.com/react-hookz/web/issues/340)) ([5604d9c](https://github.com/react-hookz/web/commit/5604d9cd6bcf4d980af1b2281b0f9f6c51f30e04)) - -# [10.0.0](https://github.com/react-hookz/web/compare/v9.0.0...v10.0.0) (2021-09-23) - - -### Features - -* **useAsync:** remove effector behaviour from hook ([#339](https://github.com/react-hookz/web/issues/339)) ([0e47ff2](https://github.com/react-hookz/web/commit/0e47ff2c540b22b503f2dba31706d0c2d3cf5fee)) - - -### BREAKING CHANGES - -* **useAsync:** `useAsync` hook now has only 2 arguments, `asyncFn` and `initialValue` -and do not execute provided function on its own. - -* chore(useAsync): remove unused `IUseAsyncOptions` interface - -# [9.0.0](https://github.com/react-hookz/web/compare/v8.0.0...v9.0.0) (2021-08-30) - - -### Documentation - -* fix error on `useCookieValue` page ([#296](https://github.com/react-hookz/web/issues/296)) ([a390f10](https://github.com/react-hookz/web/commit/a390f10fb657c24c893eeaaf13e7545ae87d1bb1)) - - -### BREAKING CHANGES - -* `IAnyPermissionDescriptor` type removed in favor of -built-in `PermissionDescriptor`. - -* docs(useCookieValue): example been using old index import - -# [8.0.0](https://github.com/react-hookz/web/compare/v7.0.0...v8.0.0) (2021-08-30) - - -### chore - -* **TS:** migrate to TypeScript 4.4 ([#295](https://github.com/react-hookz/web/issues/295)) ([91429f4](https://github.com/react-hookz/web/commit/91429f4723c370c32abc1bb4b6cf4ba72f3918ea)) - - -### BREAKING CHANGES - -* **TS:** `IAnyPermissionDescriptor` type removed in favor of -built-in `PermissionDescriptor`. - -# [7.0.0](https://github.com/react-hookz/web/compare/v6.1.0...v7.0.0) (2021-08-06) - - -### Bug Fixes - -* **useMediaQuery:** add support for safari 13- that has obsolete `useMediaQuery` implementation ([#249](https://github.com/react-hookz/web/issues/249)) ([25c8599](https://github.com/react-hookz/web/commit/25c85991c7e3af1f474b67b3264d76b74744f768)), closes [#242](https://github.com/react-hookz/web/issues/242) - - -### Code Refactoring - -* **useKeyboardEvent:** improve the code and change signature ([#248](https://github.com/react-hookz/web/issues/248)) ([a0e1b24](https://github.com/react-hookz/web/commit/a0e1b243f5ad899d5617ce50016902bfc775b5c2)) - - -### BREAKING CHANGES - -* **useKeyboardEvent:** hook call signature has changed. - -# [6.1.0](https://github.com/react-hookz/web/compare/v6.0.1...v6.1.0) (2021-08-04) - - -### Features - -* new hook `useKeyboardEvent` ([#240](https://github.com/react-hookz/web/issues/240)) ([8ca6713](https://github.com/react-hookz/web/commit/8ca6713123e090a92286071adf99783ef76147ac)) - -## [6.0.1](https://github.com/react-hookz/web/compare/v6.0.0...v6.0.1) (2021-07-25) - - -### Bug Fixes - -* make hooks that not listed in index.ts to be built too ([c119371](https://github.com/react-hookz/web/commit/c11937193d391da32c810eae63e4a6ea87edf679)) - -# [6.0.0](https://github.com/react-hookz/web/compare/v5.0.0...v6.0.0) (2021-07-25) - - -### Bug Fixes - -* remove `useCookieValue` from index ([#225](https://github.com/react-hookz/web/issues/225)) ([c3b708d](https://github.com/react-hookz/web/commit/c3b708d5b08680b36884e926aec62fed30062aed)) - - -### BREAKING CHANGES - -* `useCookieValue` is no more exported from index file. - -# [5.0.0](https://github.com/react-hookz/web/compare/v4.0.0...v5.0.0) (2021-07-20) - - -### Bug Fixes - -* improve `useThrottledCallback` and `useDebouncedCallback` types ([04e965a](https://github.com/react-hookz/web/commit/04e965a520a60fbd3d12e4de16ddc57c4d990112)) - - -### BREAKING CHANGES - -* types changed, now only one generic argument received -by `useThrottledCallback` and `useDebouncedCallback` - the original -function type. - -# [4.0.0](https://github.com/react-hookz/web/compare/v3.8.0...v4.0.0) (2021-07-16) - - -### Features - -* deps for `useConditionalUpdateEffect` and `useConditionalEffect` ([#201](https://github.com/react-hookz/web/issues/201)) ([bd56af3](https://github.com/react-hookz/web/commit/bd56af3c775123450867931aa07a33eaf08415e7)) - - -### BREAKING CHANGES - -* `useConditionalUpdateEffect` and `useConditionalEffect` -now has changed call signature (new argument). - -# [3.8.0](https://github.com/react-hookz/web/compare/v3.7.0...v3.8.0) (2021-07-03) - - -### Features - -* new hook useIntersectionObserver ([#170](https://github.com/react-hookz/web/issues/170)) ([e97c163](https://github.com/react-hookz/web/commit/e97c16317b8113d957a7eb8fd6856c405956cb67)) - -# [3.7.0](https://github.com/react-hookz/web/compare/v3.6.0...v3.7.0) (2021-07-03) - - -### Features - -* improve `useEventListener` ([#169](https://github.com/react-hookz/web/issues/169)) ([d016ea9](https://github.com/react-hookz/web/commit/d016ea9f0d1ab42712695e886c2b3794fdb629de)) - -# [3.6.0](https://github.com/react-hookz/web/compare/v3.5.0...v3.6.0) (2021-07-03) - - -### Features - -* improve `useResizeObserver` ([#168](https://github.com/react-hookz/web/issues/168)) ([f6fa33a](https://github.com/react-hookz/web/commit/f6fa33a7d135f85a75c5e12bb9b0cc8a4d412fb1)) - -# [3.5.0](https://github.com/react-hookz/web/compare/v3.4.0...v3.5.0) (2021-06-24) - - -### Features - -* new hook `useMap` ([#155](https://github.com/react-hookz/web/issues/155)) ([523dd81](https://github.com/react-hookz/web/commit/523dd818b2a99b0996654b49416b0499d27d0063)) - -# [3.4.0](https://github.com/react-hookz/web/compare/v3.3.0...v3.4.0) (2021-06-24) - - -### Features - -* new hook `useClickOutside` ([#147](https://github.com/react-hookz/web/issues/147)) ([3dece07](https://github.com/react-hookz/web/commit/3dece073a5444d6f5f5acfe7c67dbff2781ce1b3)) -* new hook `useSet` ([#154](https://github.com/react-hookz/web/issues/154)) ([f1d781c](https://github.com/react-hookz/web/commit/f1d781cef81b6664699d8a4d648af918117aff6d)) - -# [3.3.0](https://github.com/react-hookz/web/compare/v3.2.0...v3.3.0) (2021-06-22) - - -### Features - -* new hook `useEventListener` ([#140](https://github.com/react-hookz/web/issues/140)) ([9c5dce3](https://github.com/react-hookz/web/commit/9c5dce34d04584fba9990cde76b144e2eb19818c)) - -# [3.2.0](https://github.com/react-hookz/web/compare/v3.1.0...v3.2.0) (2021-06-22) - - -### Features - -* new hook `usePermission` ([#143](https://github.com/react-hookz/web/issues/143)) ([9eb06f4](https://github.com/react-hookz/web/commit/9eb06f455338b034b89d1b8137a45beac16029df)) - -# [3.1.0](https://github.com/react-hookz/web/compare/v3.0.1...v3.1.0) (2021-06-17) - - -### Features - -* new hooks `useThrottledEffect` and `useThrottledState` ([#137](https://github.com/react-hookz/web/issues/137)) ([1cc6677](https://github.com/react-hookz/web/commit/1cc66777c847c166e760f47ce4526350f54217a3)) - -## [3.0.1](https://github.com/react-hookz/web/compare/v3.0.0...v3.0.1) (2021-06-16) - - -### Bug Fixes - -* improve `useAsync` typings ([#135](https://github.com/react-hookz/web/issues/135)) ([73b42ff](https://github.com/react-hookz/web/commit/73b42ffd2442b56f1e2f1c98e2d2215fe966b533)), closes [#134](https://github.com/react-hookz/web/issues/134) - -# [3.0.0](https://github.com/react-hookz/web/compare/v2.2.0...v3.0.0) (2021-06-16) - - -### Bug Fixes - -* rename useThrottleCallback and useDebounceCallback ([#130](https://github.com/react-hookz/web/issues/130)) ([77f66d7](https://github.com/react-hookz/web/commit/77f66d7be8e985e19db4ca4d19b5f05efdc6019e)), closes [#129](https://github.com/react-hookz/web/issues/129) - - -### Features - -* add `maxWait` parameter to `useDebouncedCallback` hook ([#131](https://github.com/react-hookz/web/issues/131)) ([600baa8](https://github.com/react-hookz/web/commit/600baa89831fa5d41e001612d1e2d2d256bdcc90)) -* change args for `useThrottledCallback` and `useDebouncedCallback` ([#132](https://github.com/react-hookz/web/issues/132)) ([131d98e](https://github.com/react-hookz/web/commit/131d98eb254bf78084c8cf2d996e29d6ecb35bf1)) -* new hooks `useDebouncedEffect` and `useDebouncedState` ([#133](https://github.com/react-hookz/web/issues/133)) ([1d164ff](https://github.com/react-hookz/web/commit/1d164ffd9226fbee919d9cc768df35208d65db2b)) - - -### BREAKING CHANGES - -* `delay` and `deps` arguments are swapped position for -`useThrottledCallback` and `useDebouncedCallback` hooks to be aligned -with `useCallback` signature. -* `useDebounceCallback` renamed to `useDebouncedCallback` -`useThrottleCallback` renamed to `useThrottledCallback` - -# [2.2.0](https://github.com/react-hookz/web/compare/v2.1.0...v2.2.0) (2021-06-15) - - -### Features - -* new hook useThrottleCallback ([#118](https://github.com/react-hookz/web/issues/118)) ([afec60b](https://github.com/react-hookz/web/commit/afec60b8ca945872ca24f86fc854abb39cddfb9e)) - -# [2.1.0](https://github.com/react-hookz/web/compare/v2.0.0...v2.1.0) (2021-06-14) - - -### Features - -* import reused hooks from the index file instead of its definition ([f4bd609](https://github.com/react-hookz/web/commit/f4bd60984472c90d2a06cc8c21439f69fc490b12)) - -# [2.0.0](https://github.com/react-hookz/web/compare/v1.28.0...v2.0.0) (2021-06-14) - - -### Features - -* add `initializeWithValue` option to `useCookie` hook ([#120](https://github.com/react-hookz/web/issues/120)) ([17c9543](https://github.com/react-hookz/web/commit/17c9543926bf870ddf8c2c161f987a03841fc6d2)) - - -### BREAKING CHANGES - -* `useCookie` renamed to `useCookieValue` -* `useCookieValue` default behaviour for browsers -changed to fetch cookie value on state initialisation. - -SSR remains untouched, but requires implicit setting of -`initializeWithValue` option to false, to avoid hydration mismatch. - -# [1.28.0](https://github.com/react-hookz/web/compare/v1.27.0...v1.28.0) (2021-06-14) - - -### Features - -* new hook `useAsync` ([#119](https://github.com/react-hookz/web/issues/119)) ([54bbc00](https://github.com/react-hookz/web/commit/54bbc006fd606cd31ea03ad00a3903d95303783c)) - -# [1.27.0](https://github.com/react-hookz/web/compare/v1.26.0...v1.27.0) (2021-06-11) - - -### Features - -* new hook `useCookie` ([#117](https://github.com/react-hookz/web/issues/117)) ([faae68b](https://github.com/react-hookz/web/commit/faae68b6826916b8b2bb5ddff3b9cccabbb9219e)) - -# [1.26.0](https://github.com/react-hookz/web/compare/v1.25.1...v1.26.0) (2021-06-11) - - -### Features - -* new hook `useMediaQuery` ([#116](https://github.com/react-hookz/web/issues/116)) ([be6fff9](https://github.com/react-hookz/web/commit/be6fff9a4752b59a59e7e0f5b02aa6e05fbea62c)) - -## [1.25.1](https://github.com/react-hookz/web/compare/v1.25.0...v1.25.1) (2021-06-02) - - -### Bug Fixes - -* tsconfig.build.json missconfig ([ba92152](https://github.com/react-hookz/web/commit/ba921522169d9c64495e6c5b0467eb12a355821e)), closes [#102](https://github.com/react-hookz/web/issues/102) - -# [1.25.0](https://github.com/react-hookz/web/compare/v1.24.1...v1.25.0) (2021-06-02) - - -### Features - -* new hook `useValidator` ([#101](https://github.com/react-hookz/web/issues/101)) ([8c517e0](https://github.com/react-hookz/web/commit/8c517e097ba26bccc4ffdc18dd700799b73b0dc0)) - -## [1.24.1](https://github.com/react-hookz/web/compare/v1.24.0...v1.24.1) (2021-06-02) - - -### Bug Fixes - -* make `useDebounceCallback` and `useRafCallback` return proper fns ([#100](https://github.com/react-hookz/web/issues/100)) ([906d6e4](https://github.com/react-hookz/web/commit/906d6e46410a044522176168f2753781926e80d8)) -* make `useDebounceCallback` and `useRafCallback` return proper fns ([#100](https://github.com/react-hookz/web/issues/100)) ([2495e53](https://github.com/react-hookz/web/commit/2495e537563462250e9ba5fc17c16f3a29e916c4)) -* make `useDebounceCallback` and `useRafCallback` return proper fns ([#100](https://github.com/react-hookz/web/issues/100)) ([1dcb083](https://github.com/react-hookz/web/commit/1dcb083931f00f1b0569790a10fb2423fa9c26e3)) - -# [1.24.0](https://github.com/react-hookz/web/compare/v1.23.0...v1.24.0) (2021-05-26) - - -### Features - -* `useTitle` -> `useDocumentTitle` ([24daf77](https://github.com/react-hookz/web/commit/24daf778815564185fd0c7c34c19011dea8b1e37)) - -# [1.23.0](https://github.com/react-hookz/web/compare/v1.22.0...v1.23.0) (2021-05-25) - - -### Features - -* new hook `useTitle` ([#68](https://github.com/react-hookz/web/issues/68)) ([84e4cbf](https://github.com/react-hookz/web/commit/84e4cbf5d966b11a0e637937e4cc975360602f7e)) - -# [1.22.0](https://github.com/react-hookz/web/compare/v1.21.0...v1.22.0) (2021-05-25) - - -### Features - -* new hook `useMeasure` ([#80](https://github.com/react-hookz/web/issues/80)) ([354efc6](https://github.com/react-hookz/web/commit/354efc61883e8ffc7aeb468b9367197c63da170c)) - -# [1.21.0](https://github.com/react-hookz/web/compare/v1.20.4...v1.21.0) (2021-05-25) - - -### Features - -* new hook `useResizeObserver` ([#67](https://github.com/react-hookz/web/issues/67)) ([ccf2c26](https://github.com/react-hookz/web/commit/ccf2c268636f66194f96ef8f232a1fb46b6af056)) - -## [1.20.4](https://github.com/react-hookz/web/compare/v1.20.3...v1.20.4) (2021-05-24) - - -### Bug Fixes - -* add `module` field to package.json so bundlers use proper version ([b0119ce](https://github.com/react-hookz/web/commit/b0119ce2a68af5cb2a40a224074425525bc0f73b)) - -## [1.20.3](https://github.com/react-hookz/web/compare/v1.20.2...v1.20.3) (2021-05-24) - - -### Bug Fixes - -* mark package as side-effects free ([74d6f1c](https://github.com/react-hookz/web/commit/74d6f1ce4e1073171b24d69b3657131b3cd0afcc)) - -## [1.20.2](https://github.com/react-hookz/web/compare/v1.20.1...v1.20.2) (2021-05-24) - - -### Bug Fixes - -* proper 'types' and 'esnext' fields values ([069ae24](https://github.com/react-hookz/web/commit/069ae249301ae4d0529d43f1e643a7d4acfa2ee9)) - -## [1.20.1](https://github.com/react-hookz/web/compare/v1.20.0...v1.20.1) (2021-05-20) - - -### Bug Fixes - -* remove `types` field in package.json ([#75](https://github.com/react-hookz/web/issues/75)) ([340e7d7](https://github.com/react-hookz/web/commit/340e7d765bad760737b477c3139e55a218d2a3b0)) - -# [1.20.0](https://github.com/react-hookz/web/compare/v1.19.0...v1.20.0) (2021-05-18) - - -### Features - -* new hook `useRafCallback` ([#66](https://github.com/react-hookz/web/issues/66)) ([9e2255e](https://github.com/react-hookz/web/commit/9e2255eadfb184b081ee65d70608ed0b9c60f511)) - -# [1.19.0](https://github.com/react-hookz/web/compare/v1.18.0...v1.19.0) (2021-05-16) - - -### Features - -* new hooks `useLocalStorageValue` and `useSessionStorageValue` ([#43](https://github.com/react-hookz/web/issues/43)) ([f02e8ea](https://github.com/react-hookz/web/commit/f02e8ea61adffe8626d4e4b31073b24996802479)) - -# [1.18.0](https://github.com/react-hookz/web/compare/v1.17.0...v1.18.0) (2021-05-06) - - -### Features - -* new hook `useSyncedRef` ([#42](https://github.com/react-hookz/web/issues/42)) ([49810a0](https://github.com/react-hookz/web/commit/49810a0d4c1e9055db8bcbc614768707837224d8)) - -# [1.17.0](https://github.com/react-hookz/web/compare/v1.16.0...v1.17.0) (2021-05-06) - - -### Features - -* use stricter TS config and fix issues caused by this ([6af7867](https://github.com/react-hookz/web/commit/6af786767f4d68c64b4116eb2e92f1343100aaf8)) - -# [1.16.0](https://github.com/react-hookz/web/compare/v1.15.0...v1.16.0) (2021-05-06) - - -### Features - -* new hook `useDebounceCallback` ([#40](https://github.com/react-hookz/web/issues/40)) ([8018be1](https://github.com/react-hookz/web/commit/8018be1acbcdaef69f283444c7f6b38249734c65)) - -# [1.15.0](https://github.com/react-hookz/web/compare/v1.14.0...v1.15.0) (2021-05-06) - - -### Features - -* new hook `useIsomorphicLayoutEffect` ([#41](https://github.com/react-hookz/web/issues/41)) ([8e17b3c](https://github.com/react-hookz/web/commit/8e17b3c3390ece7ab39e989cfd81d80f5130d321)) - -# [1.14.0](https://github.com/react-hookz/web/compare/v1.13.0...v1.14.0) (2021-05-03) - - -### Features - -* new hook, useNetworkState ([#35](https://github.com/react-hookz/web/issues/35)) ([b5b082c](https://github.com/react-hookz/web/commit/b5b082cc67820fcf87f6fd529bf5cbaad91d9aff)) - -# [1.13.0](https://github.com/react-hookz/web/compare/v1.12.0...v1.13.0) (2021-05-02) - - -### Features - -* make stateful hooks use `useSafeState` ([d181c7f](https://github.com/react-hookz/web/commit/d181c7f56c5abab1c6e2b7064425a10bec668062)) - -# [1.12.0](https://github.com/react-hookz/web/compare/v1.11.0...v1.12.0) (2021-05-01) - - -### Features - -* new hook useMediatedState ([#32](https://github.com/react-hookz/web/issues/32)) ([9c99e61](https://github.com/react-hookz/web/commit/9c99e61bdcb6abf6f285d676d24de74cd5048c17)) - -# [1.11.0](https://github.com/react-hookz/web/compare/v1.10.0...v1.11.0) (2021-04-30) - - -### Features - -* new hook `useSafeState` ([#31](https://github.com/react-hookz/web/issues/31)) ([0718afe](https://github.com/react-hookz/web/commit/0718afe1569d2b900147bc9756ba3fba0a1bdde5)) - -# [1.10.0](https://github.com/react-hookz/web/compare/v1.9.1...v1.10.0) (2021-04-28) - - -### Features - -* new hooks, useConditionalEffect and useConditionalUpdateEffect ([#26](https://github.com/react-hookz/web/issues/26)) ([eb7f0a5](https://github.com/react-hookz/web/commit/eb7f0a525d00e9b66955177599a4a77ae1647867)) - -## [1.9.1](https://github.com/react-hookz/web/compare/v1.9.0...v1.9.1) (2021-04-28) - - -### Bug Fixes - -* default useUnmountEffect example to false ([#27](https://github.com/react-hookz/web/issues/27)) ([2ed0aa3](https://github.com/react-hookz/web/commit/2ed0aa382f2e6f597192ad323b1ba24121b10ab2)) - -# [1.9.0](https://github.com/react-hookz/web/compare/v1.8.0...v1.9.0) (2021-04-28) - - -### Features - -* new hook useIsMounted ([#24](https://github.com/react-hookz/web/issues/24)) ([7ad0d7e](https://github.com/react-hookz/web/commit/7ad0d7ed044463ef82987c44ae72f34ec4cd717a)) - -# [1.8.0](https://github.com/react-hookz/web/compare/v1.7.5...v1.8.0) (2021-04-28) - - -### Features - -* new hook usePrevious ([#25](https://github.com/react-hookz/web/issues/25)) ([132032a](https://github.com/react-hookz/web/commit/132032a6193a71e793f320233774d46d9613bc36)) - -## [1.7.5](https://github.com/react-hookz/web/compare/v1.7.4...v1.7.5) (2021-04-28) - - -### Bug Fixes - -* rollback husky version and add it to dependabot ignore ([099ea5b](https://github.com/react-hookz/web/commit/099ea5bb95208951e98ea6c894ce135a7b149668)) - -## [1.7.4](https://github.com/react-hookz/web/compare/v1.7.3...v1.7.4) (2021-04-25) - - -### Bug Fixes - -* lint issues auto-fix with ESLint ([9f9e53e](https://github.com/react-hookz/web/commit/9f9e53edb87065b9a2bbbc2d851d9f5d1ed67aa3)) - -## [1.7.3](https://github.com/react-hookz/web/compare/v1.7.2...v1.7.3) (2021-04-24) - -### Bug Fixes - -* better not to split declarations from files ([c6a2d92](https://github.com/react-hookz/web/commit/c6a2d9210e7886f490973994da12c3bb88c09020)) -* lint issues auto-fix with ESLint ([63bf8e2](https://github.com/react-hookz/web/commit/63bf8e26878a705e632c185f3bf6a2232633be19)) - -## [1.7.2](https://github.com/react-hookz/web/compare/v1.7.1...v1.7.2) (2021-04-24) - -### Bug Fixes - -* lint issues auto-fix with ESLint ([11b9a07](https://github.com/react-hookz/web/commit/11b9a07fe6f23a305a0581d0e05bf93f55ca53a2)) -* replace husky v6 with husky v4 as v5+ ruins CI lint autofix ([a50955a](https://github.com/react-hookz/web/commit/a50955a44d9fe0d7a90cc481f7d0f2855f708d9a)) - -## [1.7.1](https://github.com/react-hookz/web/compare/v1.7.0...v1.7.1) (2021-04-23) - -### Bug Fixes - -* add ci yarn caching layer ([5aa8ae1](https://github.com/react-hookz/web/commit/5aa8ae199e72a88d17809cf5cc5023c7344ed025)) - -# [1.7.0](https://github.com/react-hookz/web/compare/v1.6.2...v1.7.0) (2021-04-23) - -### Bug Fixes - -* add `md` and `mdx` files to lint-staged hook glob ([d1d3d72](https://github.com/react-hookz/web/commit/d1d3d7200313c023f874e74720f9d787a9321d78)) -* add readme clarification about different lang level usages ([0632992](https://github.com/react-hookz/web/commit/0632992a39f18e99ca4bd9929d6bdcdb236e9182)) -* exclude new distributed directories from eslint and tsconfig ([058960e](https://github.com/react-hookz/web/commit/058960e9eb60893ce94504a3aac68d4ec1e131a4)) - -### Features - -* package now has /cjs, /esm distibuted versions ([4911c9d](https://github.com/react-hookz/web/commit/4911c9d3c0813bff5e52ae98cfc4dfc542996a0b)) - -# [1.7.0](https://github.com/react-hookz/web/compare/v1.6.2...v1.7.0) (2021-04-23) - -### Features - -* package now has /cjs, /esm distibuted versions ([4911c9d](https://github.com/react-hookz/web/commit/4911c9d3c0813bff5e52ae98cfc4dfc542996a0b)) - -## [1.6.2](https://github.com/react-hookz/web/compare/v1.6.1...v1.6.2) (2021-04-22) - -### Bug Fixes - -* add hook link to README.md ([368f1d9](https://github.com/react-hookz/web/commit/368f1d9b595eec113cadffa217ef01041a6a4c72)) - -# [1.7.0](https://github.com/react-hookz/web/compare/v1.6.1...v1.7.0) (2021-04-22) - -### Features - -* add storybook docs with deploy to gh-pages ([84de312](https://github.com/react-hookz/web/commit/84de312a607f202c8957ae3f6d32c453cffe134a)) - -## [1.6.1](https://github.com/react-hookz/web/compare/v1.6.0...v1.6.1) (2021-04-21) - -### Bug Fixes - -* useUnmountEffect and useMountEffect typings fix ([32ec0c7](https://github.com/react-hookz/web/commit/32ec0c7f7b63c8d8941b95f5f8e5c369e5e87f1a)) - -# [1.6.0](https://github.com/react-hookz/web/compare/v1.5.0...v1.6.0) (2021-04-21) - -### Features - -* useToggle hook ([#3](https://github.com/react-hookz/web/issues/3)) ([3a51779](https://github.com/react-hookz/web/commit/3a51779e21c83c51994a3da59aaf88d729ecc43f)) - -# [1.5.0](https://github.com/react-hookz/web/compare/v1.4.3...v1.5.0) (2021-04-21) - -### Features - -* make tests import hooks from the index ([3210650](https://github.com/react-hookz/web/commit/3210650220f6e685d91bb7921c725596199eec84)) - -## [1.4.3](https://github.com/react-hookz/web/compare/v1.4.2...v1.4.3) (2021-04-21) - -### Bug Fixes - -* dist package returned to bundle ([e92bd18](https://github.com/react-hookz/web/commit/e92bd18a2feafe9ae1770b992d723d31027c72d9)) - -## [1.4.2](https://github.com/react-hookz/web/compare/v1.4.1...v1.4.2) (2021-04-18) - -### Bug Fixes - -* add @semantic-release/github plugin ([9f7e1b3](https://github.com/react-hookz/web/commit/9f7e1b3a441674c03ab29af3682f9619fc668806)) - -## [1.4.1](https://github.com/react-hookz/web/compare/v1.4.0...v1.4.1) (2021-04-16) - -### Bug Fixes - -* add types field to package json and tweak build ([8d64b9a](https://github.com/react-hookz/web/commit/8d64b9a1e240df938f177f565c0427b9bedfe934)) - -# [1.4.0](https://github.com/react-hookz/web/compare/v1.3.0...v1.4.0) (2021-04-16) - -### Features - -* add main file and reexport new hooks ([e2ea1cb](https://github.com/react-hookz/web/commit/e2ea1cbf6b5de909945fadde15eafd5ab70cea9f)) - -# [1.3.0](https://github.com/react-hookz/web/compare/v1.2.3...v1.3.0) (2021-04-16) - -### Features - -* useUpdateEffect hook ([bc3a655](https://github.com/react-hookz/web/commit/bc3a655f5cbfe3b4edb94c6084f62e95806ea6de)) - -## [1.2.3](https://github.com/react-hookz/web/compare/v1.2.2...v1.2.3) (2021-04-16) - -### Bug Fixes - -* properly name useMountEffect and useUnmountEffect parameter ([5218bfc](https://github.com/react-hookz/web/commit/5218bfcc359b34fe61a46a635c41fb093182a56e)) - -## [1.2.2](https://github.com/react-hookz/web/compare/v1.2.1...v1.2.2) (2021-04-15) - -### Bug Fixes - -* attempt to make codecov push only occur on release publish ([ac5c221](https://github.com/react-hookz/web/commit/ac5c221659ce8173268c88d9da385411a07009f3)) - -## [1.2.1](https://github.com/react-hookz/web/compare/v1.2.0...v1.2.1) (2021-04-15) - -### Bug Fixes - -* codecov push should only occur on release publish ([2a9e024](https://github.com/react-hookz/web/commit/2a9e0249d83bd7df2b126ad62e5b3aee3ca8dfbc)) - -# [1.2.0](https://github.com/react-hookz/web/compare/v1.1.0...v1.2.0) (2021-04-15) - -### Features - -* add codecov coverage reporting ([3254871](https://github.com/react-hookz/web/commit/325487121b3fb8a27ab129e31a0cec3bcf7cce1f)) - -# [1.1.0](https://github.com/react-hookz/web/compare/v1.0.0...v1.1.0) (2021-04-15) - -### Features - -* implement useMountEffect and useUnmountEffect hooks ([98ec434](https://github.com/react-hookz/web/commit/98ec434d3b9b9e56ebb92ce4bf047a2ef9d19c8f)) - -# 1.0.0 (2021-04-14) - -### Features - -* add .npmignore and filler .gitignore files. ([e12375f](https://github.com/react-hookz/web/commit/e12375f2d489938e85dd7abb0fac4dae6d5be7fa)) -* add CI workflow and dependabot config. ([7e365cf](https://github.com/react-hookz/web/commit/7e365cfe16fe1f7ce6c4a5792f7f490890dc14b5)) -* add semantic release dep. ([4e39fa3](https://github.com/react-hookz/web/commit/4e39fa3ee5de0d7a1712601985567320a44b04c6)) -* configure basic builds. ([34aafe4](https://github.com/react-hookz/web/commit/34aafe4d67ea2c27b2a321df8fed15b7e2d50bab)) -* improve ci config and set initial version to 0.0.1 ([adf4dca](https://github.com/react-hookz/web/commit/adf4dca9cbd4e76ffed71fddc05d4875cb67365c)) -* introduce useFirstMountState ([bd7123b](https://github.com/react-hookz/web/commit/bd7123b08dd1dd4d25ce8ae1765bfde19368a7fe)) - -# 1.0.0 (2021-04-14) - -### Features - -* add .npmignore and filler .gitignore files. ([e12375f](https://github.com/react-hookz/web/commit/e12375f2d489938e85dd7abb0fac4dae6d5be7fa)) -* add CI workflow and dependabot config. ([7e365cf](https://github.com/react-hookz/web/commit/7e365cfe16fe1f7ce6c4a5792f7f490890dc14b5)) -* add semantic release dep. ([4e39fa3](https://github.com/react-hookz/web/commit/4e39fa3ee5de0d7a1712601985567320a44b04c6)) -* configure basic builds. ([34aafe4](https://github.com/react-hookz/web/commit/34aafe4d67ea2c27b2a321df8fed15b7e2d50bab)) -* improve ci config and set initial version to 0.0.1 ([adf4dca](https://github.com/react-hookz/web/commit/adf4dca9cbd4e76ffed71fddc05d4875cb67365c)) -* introduce useFirstMountState ([bd7123b](https://github.com/react-hookz/web/commit/bd7123b08dd1dd4d25ce8ae1765bfde19368a7fe)) - -# 1.0.0 (2021-04-12) - -### Features - -* add .npmignore and filler .gitignore files. ([e12375f](https://github.com/react-hookz/web/commit/e12375f2d489938e85dd7abb0fac4dae6d5be7fa)) -* add CI workflow and dependabot config. ([7e365cf](https://github.com/react-hookz/web/commit/7e365cfe16fe1f7ce6c4a5792f7f490890dc14b5)) -* add semantic release dep. ([4e39fa3](https://github.com/react-hookz/web/commit/4e39fa3ee5de0d7a1712601985567320a44b04c6)) -* configure basic builds. ([34aafe4](https://github.com/react-hookz/web/commit/34aafe4d67ea2c27b2a321df8fed15b7e2d50bab)) -* improve ci config and set initial version to 0.0.1 ([adf4dca](https://github.com/react-hookz/web/commit/adf4dca9cbd4e76ffed71fddc05d4875cb67365c)) -* introduce useFirstMountState ([bd7123b](https://github.com/react-hookz/web/commit/bd7123b08dd1dd4d25ce8ae1765bfde19368a7fe)) diff --git a/README.md b/README.md index eb7cf7d3..f37d1f74 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ [![Types](https://flat.badgen.net/npm/types/@react-hookz/web)](https://www.npmjs.com/package/@react-hookz/web) [![Tree Shaking](https://flat.badgen.net/bundlephobia/tree-shaking/@react-hookz/web)](https://bundlephobia.com/result?p=@react-hookz/web) -× **[DOCS](https://react-hookz.github.io/web/)** × **[DISCORD](https://discord.gg/Fjwphtu65f)** × -**[CHANGELOG](https://github.com/react-hookz/web/blob/master/CHANGELOG.md)** × +× **[DISCORD](https://discord.gg/Fjwphtu65f)** × +**[RELEASES](https://github.com/react-hookz/web/releases)** × @@ -45,9 +45,9 @@ You can import hooks two ways: ```ts // from the root of package -import { useMountEffect } from '@react-hookz/web'; +import {useMountEffect} from '@react-hookz/web'; // or single hook directly -import { useMountEffect } from '@react-hookz/web/useMountEffect/index.js'; +import {useMountEffect} from '@react-hookz/web/useMountEffect/index.js'; ``` In case your bundler supports tree-shaking (most of modern does) - both variants are equal and only @@ -55,156 +55,156 @@ necessary code will get into your bundle. Direct hook imports should be consider ## Migrating from react-use -`@react-hookz/web` was built as a [spiritual successor](https://github.com/streamich/react-use/issues/1974) -of `react-use` by one of its former maintainers. - -Coming from `react-use`? Check out our -[migration guide](https://react-hookz.github.io/web/?path=/docs/migrating-from-react-use--page). +`@react-hookz/web` was built as +a [spiritual successor](https://github.com/streamich/react-use/issues/1974) of `react-use` by one of +its former maintainers. ## Hooks list - #### Callback - - [**`useDebouncedCallback`**](https://react-hookz.github.io/web/?path=/docs/callback-usedebouncedcallback--example) - — Makes passed function debounced, otherwise acts like `useCallback`. - - [**`useRafCallback`**](https://react-hookz.github.io/web/?path=/docs/callback-userafcallback--example) - — Makes passed function to be called within next animation frame. - - [**`useThrottledCallback`**](https://react-hookz.github.io/web/?path=/docs/callback-usethrottledcallback--example) - — Makes passed function throttled, otherwise acts like `useCallback`. + - [**`useDebouncedCallback`**](./src/useDebouncedCallback/index.ts) + — Makes passed function debounced, otherwise acts like `useCallback`. + - [**`useRafCallback`**](./src/useRafCallback/index.ts) + — Makes passed function to be called within next animation frame. + - [**`useThrottledCallback`**](./src/useThrottledCallback/index.ts) + — Makes passed function throttled, otherwise acts like `useCallback`. - #### Lifecycle - - [**`useConditionalEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-useconditionaleffect--example) - — Like `useEffect` but callback invoked only if given conditions match a given predicate. - - [**`useCustomCompareEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-usecustomcompareeffect--example) - — Like `useEffect` but uses a provided comparator function to validate dependency changes. - - [**`useDebouncedEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-usedebouncedeffect--example) - — Like `useEffect`, but passed function is debounced. - - [**`useDeepCompareEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-usedeepcompareeffect--example) - — Like `useEffect` but uses `@react-hookz/deep-equal` comparator function to validate deep - dependency changes. - - [**`useFirstMountState`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-usefirstmountstate--example) - — Returns a boolean that is `true` only on first render. - - [**`useIntervalEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-useintervaleffect--example) - — Like `setInterval` but in the form of a React hook. - - [**`useIsMounted`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-useismounted--example) - — Returns a function that yields current mount state. - - [**`useIsomorphicLayoutEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-useisomorphiclayouteffect--page) - — Like `useLayoutEffect` but falls back to `useEffect` during SSR. - - [**`useMountEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-usemounteffect--example) - — Run an effect only when a component mounts. - - [**`useRafEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-useRafEffect--example) - — Like `useEffect`, but the effect is only run within an animation frame. - - [**`useRerender`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-usererender--example) - — Returns a callback that re-renders the component. - - [**`useThrottledEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-usethrottledeffect--example) - — Like `useEffect`, but the passed function is throttled. - - [**`useTimeoutEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-usetimeouteffect--example) - — Like `setTimeout`, but in the form of a React hook. - - [**`useUnmountEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-useunmounteffect--example) - — Run an effect only when a component unmounts. - - [**`useUpdateEffect`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-useupdateeffect--example) - — An effect hook that ignores the first render (not invoked on mount). - - [**`useLifecycleLogger`**](https://react-hookz.github.io/web/?path=/docs/lifecycle-uselifecycleLogger--example) - — This hook provides logging when the component mounts, updates and unmounts. + - [**`useConditionalEffect`**](./src/useConditionalEffect/index.ts) + — Like `useEffect` but callback invoked only if given conditions match a given predicate. + - [**`useCustomCompareEffect`**](./src/useCustomCompareEffect/index.ts) + — Like `useEffect` but uses a provided comparator function to validate dependency changes. + - [**`useDebouncedEffect`**](./src/useDebouncedEffect/index.ts) + — Like `useEffect`, but passed function is debounced. + - [**`useDeepCompareEffect`**](./src/useDeepCompareEffect/index.ts) + — Like `useEffect` but uses `@react-hookz/deep-equal` comparator function to validate deep + dependency changes. + - [**`useFirstMountState`**](./src/useFirstMountState/index.ts) + — Returns a boolean that is `true` only on first render. + - [**`useIntervalEffect`**](./src/useIntervalEffect/index.ts) + — Like `setInterval` but in the form of a React hook. + - [**`useIsMounted`**](./src/useIsMounted/index.ts) + — Returns a function that yields current mount state. + - [**`useIsomorphicLayoutEffect`**](./src/useIsomorphicLayoutEffect/index.ts) + — Like `useLayoutEffect` but falls back to `useEffect` during SSR. + - [**`useMountEffect`**](./src/useMountEffect/index.ts) + — Run an effect only when a component mounts. + - [**`useRafEffect`**](./src/useRafEffect/index.ts) + — Like `useEffect`, but the effect is only run within an animation frame. + - [**`useRerender`**](./src/useRerender/index.ts) + — Returns a callback that re-renders the component. + - [**`useThrottledEffect`**](./src/useThrottledEffect/index.ts) + — Like `useEffect`, but the passed function is throttled. + - [**`useTimeoutEffect`**](./src/useTimeoutEffect/index.ts) + — Like `setTimeout`, but in the form of a React hook. + - [**`useUnmountEffect`**](./src/useUnmountEffect/index.ts) + — Run an effect only when a component unmounts. + - [**`useUpdateEffect`**](./src/useUpdateEffect/index.ts) + — An effect hook that ignores the first render (not invoked on mount). + - [**`useLifecycleLogger`**](./src/useLifecycleLogger/index.ts) + — This hook provides logging when the component mounts, updates and unmounts. - #### State - - [**`useControlledRerenderState`**](https://react-hookz.github.io/web/?path=/docs/state-usecontrolledrerenderstate--example) - — Like `useState`, but its state setter accepts an extra argument, that allows cancelling - renders. - - [**`useCounter`**](https://react-hookz.github.io/web/?path=/docs/state-usecounter--example) - — Tracks a numeric value and offers functions for manipulating it. - - [**`useDebouncedState`**](https://react-hookz.github.io/web/?path=/docs/state-usedebouncedstate--example) - — Like `useState` but its state setter is debounced. - - [**`useFunctionalState`**](https://react-hookz.github.io/web/?path=/docs/state-usefunctionalstate--page) - — Like `useState` but instead of raw state, a state getter function is returned. - - [**`useList`**](https://react-hookz.github.io/web/?path=/docs/state-uselist--example) - — Tracks a list and offers functions for manipulating it. - - [**`useMap`**](https://react-hookz.github.io/web/?path=/docs/state-usemap--example) — Tracks the - state of a `Map`. - - [**`useMediatedState`**](https://react-hookz.github.io/web/?path=/docs/state-usemediatedstate--example) - — Like `useState`, but every value set is passed through a mediator function. - - [**`usePrevious`**](https://react-hookz.github.io/web/?path=/docs/state-useprevious--example) — - Returns the value passed to the hook on previous render. - - [**`usePreviousDistinct`**](https://react-hookz.github.io/web/?path=/docs/state-usepreviousdistinct--example) — - Returns the most recent distinct value passed to the hook on previous renders. - - [**`useQueue`**](https://react-hookz.github.io/web/?path=/docs/state-usequeue--example) — - A state hook implementing FIFO queue. - - [**`useRafState`**](https://react-hookz.github.io/web/?path=/docs/state-userafstate--example) — - Like `React.useState`, but state is only updated within animation frame. - - [**`useRenderCount`**](https://react-hookz.github.io/web/?path=/docs/state-userendercount--example) — - Tracks component's render count including first render. - - [**`useSet`**](https://react-hookz.github.io/web/?path=/docs/state-useset--example) — Tracks the - state of a `Set`. - - [**`useToggle`**](https://react-hookz.github.io/web/?path=/docs/state-usetoggle--example) — Like - `useState`, but can only be `true` or `false`. - - [**`useThrottledState`**](https://react-hookz.github.io/web/?path=/docs/state-usethrottledstate--example) - — Like `useState` but its state setter is throttled. - - [**`useValidator`**](https://react-hookz.github.io/web/?path=/docs/state-usevalidator--example) - — Performs validation when any of the provided dependencies change. + - [**`useControlledRerenderState`**](./src/useControlledRerenderState/index.ts) + — Like `useState`, but its state setter accepts an extra argument, that allows cancelling + renders. + - [**`useCounter`**](./src/useCounter/index.ts) + — Tracks a numeric value and offers functions for manipulating it. + - [**`useDebouncedState`**](./src/useDebouncedState/index.ts) + — Like `useState` but its state setter is debounced. + - [**`useFunctionalState`**](./src/useFunctionalState/index.ts) + — Like `useState` but instead of raw state, a state getter function is returned. + - [**`useList`**](./src/useList/index.ts) + — Tracks a list and offers functions for manipulating it. + - [**`useMap`**](./src/useMap/index.ts) — Tracks the + state of a `Map`. + - [**`useMediatedState`**](./src/useMediatedState/index.ts) + — Like `useState`, but every value set is passed through a mediator function. + - [**`usePrevious`**](./src/usePrevious/index.ts) — + Returns the value passed to the hook on previous render. + - [**`usePreviousDistinct`**](./src/usePreviousDistinct/index.ts) — + Returns the most recent distinct value passed to the hook on previous renders. + - [**`useQueue`**](./src/useQueue/index.ts) — + A state hook implementing FIFO queue. + - [**`useRafState`**](./src/useRafState/index.ts) — + Like `React.useState`, but state is only updated within animation frame. + - [**`useRenderCount`**](./src/useRenderCount/index.ts) — + Tracks component's render count including first render. + - [**`useSet`**](./src/useSet/index.ts) — Tracks the + state of a `Set`. + - [**`useToggle`**](./src/useToggle/index.ts) — Like + `useState`, but can only be `true` or `false`. + - [**`useThrottledState`**](./src/useThrottledState/index.ts) + — Like `useState` but its state setter is throttled. + - [**`useValidator`**](./src/useValidator/index.ts) + — Performs validation when any of the provided dependencies change. - #### Navigator - - [**`useNetworkState`**](https://react-hookz.github.io/web/?path=/docs/navigator-usenetworkstate--example) - — Tracks the state of the browser's network connection. - - [**`useVibrate`**](https://react-hookz.github.io/web/?path=/docs/navigator-usevibrate--example) - — Provides vibration feedback using the Vibration API. - - [**`usePermission`**](https://react-hookz.github.io/web/?path=/docs/navigator-usepermission--example) - — Tracks the state of a permission. + - [**`useNetworkState`**](./src/useNetworkState/index.ts) + — Tracks the state of the browser's network connection. + - [**`useVibrate`**](./src/useVibrate/index.ts) + — Provides vibration feedback using the Vibration API. + - [**`usePermission`**](./src/usePermission/index.ts) + — Tracks the state of a permission. - #### Miscellaneous - - [**`useSyncedRef`**](https://react-hookz.github.io/web/?path=/docs/miscellaneous-usesyncedref--example) - — Like `useRef`, but it returns an immutable ref that contains the actual value. - - [**`useCustomCompareMemo`**](https://react-hookz.github.io/web/?path=/docs/miscellaneous-useCustomCompareMemo--example) - — Like `useMemo` but uses provided comparator function to validate dependency changes. - - [**`useDeepCompareMemo`**](https://react-hookz.github.io/web/?path=/docs/miscellaneous-useDeepCompareMemo--example) - — Like `useMemo` but uses `@react-hookz/deep-equal` comparator function to validate deep - dependency changes. - - [**`useHookableRef`**](https://react-hookz.github.io/web/?path=/docs/miscellaneous-usehookableref--example) - — Like `useRef` but it is possible to define handlers for getting and setting the value. + - [**`useSyncedRef`**](./src/useSyncedRef/index.ts) + — Like `useRef`, but it returns an immutable ref that contains the actual value. + - [**`useCustomCompareMemo`**](./src/useCustomCompareMemo/index.ts) + — Like `useMemo` but uses provided comparator function to validate dependency changes. + - [**`useDeepCompareMemo`**](./src/useDeepCompareMemo/index.ts) + — Like `useMemo` but uses `@react-hookz/deep-equal` comparator function to validate deep + dependency changes. + - [**`useHookableRef`**](./src/useHookableRef/index.ts) + — Like `useRef` but it is possible to define handlers for getting and setting the value. - #### Side-effect - - [**`useAsync`**](https://react-hookz.github.io/web/?path=/docs/side-effect-useasync--example) — - Executes provided async function and tracks its results and errors. - - [**`useAsyncAbortable`**](https://react-hookz.github.io/web/?path=/docs/side-effect-useasyncabortable--example) - — Like `useAsync`, but also provides `AbortSignal` as first function argument to the async function. - - [**`useCookieValue`**](https://react-hookz.github.io/web/?path=/docs/side-effect-usecookievalue--example) - — Manages a single cookie. - - [**`useLocalStorageValue`**](https://react-hookz.github.io/web/?path=/docs/side-effect-uselocalstoragevalue--example) - — Manages a single LocalStorage key. - - [**`useSessionStorageValue`**](https://react-hookz.github.io/web/?path=/docs/side-effect-usesessionstoragevalue--example) - — Manages a single SessionStorage key. + - [**`useAsync`**](./src/useAsync/index.ts) + — Executes provided async function and tracks its results and errors. + - [**`useAsyncAbortable`**](./src/useAsyncAbortable/index.ts) + — Like `useAsync`, but also provides `AbortSignal` as first function argument to the async + function. + - [**`useCookieValue`**](./src/useCookieValue/index.ts) + — Manages a single cookie. + - [**`useLocalStorageValue`**](./src/useLocalStorageValue/index.ts) + — Manages a single LocalStorage key. + - [**`useSessionStorageValue`**](./src/useSessionStorageValue/index.ts) + — Manages a single SessionStorage key. - #### Sensor - - [**`useIntersectionObserver`**](https://react-hookz.github.io/web/?path=/docs/sensor-useintersectionobserver--example) - — Observe changes in the intersection of a target element with an ancestor element or with the - viewport. - - [**`useMeasure`**](https://react-hookz.github.io/web/?path=/docs/sensor-usemeasure--example) — - Uses `ResizeObserver` to track an element's dimensions and to re-render the component when they change. - - [**`useMediaQuery`**](https://react-hookz.github.io/web/?path=/docs/sensor-usemediaquery--example) - — Tracks the state of a CSS media query. - - [**`useResizeObserver`**](https://react-hookz.github.io/web/?path=/docs/sensor-useresizeobserver--example) - — Invokes a callback whenever `ResizeObserver` detects a change to the target's size. - - [**`useScreenOrientation`**](https://react-hookz.github.io/web/?path=/docs/sensor-usescreenorientation--example) - — Checks if the screen is in `portrait` or `landscape` orientation and automatically re-renders on - orientation change. - - [**`useDocumentVisibility`**](https://react-hookz.github.io/web/?path=/docs/sensor-usedocumentvisibility--example) - — Tracks document visibility state. + - [**`useIntersectionObserver`**](./src/useIntersectionObserver/index.ts) + — Observe changes in the intersection of a target element with an ancestor element or with the + viewport. + - [**`useMeasure`**](./src/useMeasure/index.ts) — + Uses `ResizeObserver` to track an element's dimensions and to re-render the component when they + change. + - [**`useMediaQuery`**](./src/useMediaQuery/index.ts) + — Tracks the state of a CSS media query. + - [**`useResizeObserver`**](./src/useResizeObserver/index.ts) + — Invokes a callback whenever `ResizeObserver` detects a change to the target's size. + - [**`useScreenOrientation`**](./src/useScreenOrientation/index.ts) + — Checks if the screen is in `portrait` or `landscape` orientation and automatically re-renders + on orientation change. + - [**`useDocumentVisibility`**](./src/useDocumentVisibility/index.ts) + — Tracks document visibility state. - #### Dom - - [**`useClickOutside`**](https://react-hookz.github.io/web/?path=/docs/dom-useclickoutside--example) - — Triggers a callback when the user clicks outside a target element. - - [**`useEventListener`**](https://react-hookz.github.io/web/?path=/docs/dom-useeventlistener--example) - — Subscribes an event listener to a target element. - - [**`useKeyboardEvent`**](https://react-hookz.github.io/web/?path=/docs/dom-usekeyboardevent--example) - — Invokes a callback when a keyboard event occurs on the chosen target. - - [**`useWindowSize`**](https://react-hookz.github.io/web/?path=/docs/dom-usewindowsize--example) - — Tracks the inner dimensions of the browser window. + - [**`useClickOutside`**](./src/useClickOutside/index.ts) + — Triggers a callback when the user clicks outside a target element. + - [**`useEventListener`**](./src/useEventListener/index.ts) + — Subscribes an event listener to a target element. + - [**`useKeyboardEvent`**](./src/useKeyboardEvent/index.ts) + — Invokes a callback when a keyboard event occurs on the chosen target. + - [**`useWindowSize`**](./src/useWindowSize/index.ts) + — Tracks the inner dimensions of the browser window. ## Contributors diff --git a/commitlint.config.cjs b/commitlint.config.cjs deleted file mode 100644 index 9ca4e70c..00000000 --- a/commitlint.config.cjs +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: ['@commitlint/config-conventional'], - rules: { - 'footer-max-line-length': [1, 'always', 100], - }, -}; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..e87ea8cf --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,20 @@ +import baseConfig from '@react-hookz/eslint-config/base.js'; +import mdConfig from '@react-hookz/eslint-config/md.js'; +import reactConfig from '@react-hookz/eslint-config/react.js'; +import typescriptConfig from '@react-hookz/eslint-config/typescript.js'; +import vitestConfig from '@react-hookz/eslint-config/vitest.js'; + +/** @typedef {import('eslint').Linter} Linter */ +/** @type {Linter.Config[]} */ +const config = [ + { + ignores: ['.idea', 'node_modules', 'dist', 'coverage', 'CHANGELOG.md'], + }, + ...baseConfig, + ...reactConfig, + ...mdConfig, + ...typescriptConfig, + ...vitestConfig, +]; + +export default config; diff --git a/jest.config.ts b/jest.config.ts deleted file mode 100644 index 0d2f0454..00000000 --- a/jest.config.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { type Config } from 'jest'; - -// eslint-disable-next-line @typescript-eslint/naming-convention -export const __esModule = true; - -const moduleNameMapper: Config['moduleNameMapper'] = { - '^((?:\\.{1,2}|#[^\\/]*)/.*)\\.[tj]sx?$': '$1', -}; - -const transform: Config['transform'] = { - '^.+\\.[tj]sx?$': ['@swc/jest', { module: { type: 'commonjs' } }], -}; - -export default { - extensionsToTreatAsEsm: ['.ts'], - testEnvironment: 'node', - projects: [ - { - displayName: 'dom', - moduleNameMapper, - transform, - testEnvironment: 'jsdom', - testMatch: ['/src/**/__tests__/dom.[jt]s?(x)'], - setupFiles: ['./src/__tests__/setup.ts'], - }, - - { - displayName: 'ssr', - moduleNameMapper, - transform, - testEnvironment: 'node', - testMatch: ['/src/**/__tests__/ssr.[jt]s?(x)'], - }, - ], - collectCoverage: false, - coverageDirectory: './coverage', - collectCoverageFrom: ['./src/**/*.{ts,js,tsx,jsx}', '!**/__tests__/**', '!**/__docs__/**'], -} satisfies Config; diff --git a/package.json b/package.json index 38555e5a..6efe7509 100644 --- a/package.json +++ b/package.json @@ -21,48 +21,31 @@ "access": "public" }, "type": "module", - "main": "./src/index.js", - "types": "./src/index.d.ts", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", "sideEffects": false, "exports": { - ".": "./src/index.js", - "./*/": "./src/*/index.js", - "./*": "./src/*" + ".": "./dist/index.js", + "./*/": "./dist/*/index.js", + "./*": "./dist/*" }, + "files": [ + "./dist" + ], "engines": { "node": ">=18.0.0" }, "scripts": { - "prepare": "husky", - "commit": "git-cz", - "build": "yarn build:clean && tsc --version && tsc", - "build:clean": "yarn rimraf -g ./src/**/*.js ./src/**/*.d.ts", - "new-hook": "node ./utility/add-new-hook.js", - "test": "jest --selectProjects dom ssr", - "test:coverage": "yarn test --coverage", - "lint": "eslint .", - "lint:fix": "yarn lint --fix --fix-type problem,suggestion,layout" - }, - "config": { - "commitizen": { - "path": "@commitlint/cz-commitlint" - } - }, - "lint-staged": { - "*.{js,jsx,ts,tsx,md,mdx}": "eslint --fix" - }, - "release": { - "plugins": [ - "@semantic-release/commit-analyzer", - "@semantic-release/release-notes-generator", - "@semantic-release/changelog", - "@semantic-release/npm", - "@semantic-release/git", - "@semantic-release/github" - ] + "postinstall": "husky", + "build": "yarn build:clean && tsc --version && tsc --project ./tsconfig.build.json", + "build:clean": "yarn rimraf ./dist", + "lint": "eslint --version && eslint", + "lint:fix": "eslint --fix", + "test": "vitest --run", + "test:coverage": "vitest --run --coverage" }, "dependencies": { - "@react-hookz/deep-equal": "^1.0.4" + "@react-hookz/deep-equal": "^3.0.1" }, "peerDependencies": { "js-cookie": "^3.0.5", @@ -75,43 +58,28 @@ } }, "devDependencies": { - "@babel/core": "^7.23.9", "@commitlint/cli": "^19.5.0", "@commitlint/config-conventional": "^19.5.0", - "@commitlint/cz-commitlint": "^19.5.0", - "@jamesacarr/jest-reporter-github-actions": "^0.0.4", - "@react-hookz/eslint-config": "^2.1.5", - "@react-hookz/eslint-formatter-gha": "^1.0.1", - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/git": "^10.0.1", - "@semantic-release/github": "^11.0.0", - "@swc/core": "^1.4.2", - "@swc/jest": "^0.2.36", + "@react-hookz/eslint-config": "^4.1.6", + "@react-hookz/eslint-formatter-gha": "^3.0.2", "@testing-library/react-hooks": "^8.0.1", - "@types/jest": "^29.5.12", "@types/js-cookie": "^3.0.6", - "@types/react": "^18.2.52", - "@types/react-dom": "^18.2.6", - "babel-loader": "^9.1.3", - "commitizen": "^4.3.0", + "@types/react": "^17.0.83", + "@types/react-dom": "^17.0.26", + "@vitest/coverage-v8": "^2.1.8", "commitlint": "^19.5.0", - "concurrently": "^9.0.1", - "eslint": "^8.57.0", - "eslint-plugin-prettier": "^5.1.3", - "husky": "^9.0.11", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", + "eslint": "^9.17.0", + "husky": "^9.1.7", "js-cookie": "^3.0.5", + "jsdom": "^25.0.1", "lint-staged": "^15.2.2", - "prettier": "^3.2.5", + "pinst": "^3.0.0", "react": "^17.0.2", "react-dom": "^17.0.2", - "rimraf": "^5.0.5", - "semantic-release": "^23.0.2", - "ts-jest": "^29.1.2", - "ts-node": "^10.9.2", + "rimraf": "^6.0.1", + "semantic-release": "^24.2.0", "typescript": "^5.3.3", - "yarn": "^1.22.21" + "vitest": "^2.1.8" }, - "packageManager": "yarn@1.22.22" + "packageManager": "yarn@4.5.3" } diff --git a/src/__docs__/Introduction.story.mdx b/src/__docs__/Introduction.story.mdx deleted file mode 100644 index b55a6920..00000000 --- a/src/__docs__/Introduction.story.mdx +++ /dev/null @@ -1,65 +0,0 @@ -
- -# ![@react-hookz/web](./logo.png) - -[![NPM Version](https://flat.badgen.net/npm/v/@react-hookz/web)](https://www.npmjs.com/package/@react-hookz/web) -[![NPM Downloads](https://flat.badgen.net/npm/dm/@react-hookz/web)](https://www.npmjs.com/package/@react-hookz/web) -[![NPM Dependents](https://flat.badgen.net/npm/dependents/@react-hookz/web)](https://www.npmjs.com/package/@react-hookz/web) -[![Build](https://img.shields.io/github/actions/workflow/status/react-hookz/web/ci-cd.yml?branch=master&style=flat-square)](https://github.com/react-hookz/web/actions) -[![Coverage](https://flat.badgen.net/codecov/c/github/react-hookz/web)](https://app.codecov.io/gh/react-hookz/web) -[![Types](https://flat.badgen.net/npm/types/@react-hookz/web)](https://www.npmjs.com/package/@react-hookz/web) -[![Tree Shaking](https://flat.badgen.net/bundlephobia/tree-shaking/@react-hookz/web)](https://bundlephobia.com/result?p=@react-hookz/web) - -× **[GITHUB](https://github.com/react-hookz/web)** × **[DISCORD](https://discord.gg/Fjwphtu65f)** × -**[CHANGELOG](https://github.com/react-hookz/web/blob/master/CHANGELOG.md)** × - -
- ---- - -`@react-hookz/web` is a library of general-purpose React hooks built with care and SSR compatibility -in mind. - -## Install - -This one is pretty simple, everyone knows what to do: - -```shell -npm i @react-hookz/web -# or -yarn add @react-hookz/web -``` - -As hooks was introduced to the world in React 16.8, `@react-hookz/web` requires - you guessed it - -`react` and `react-dom` 16.8+. -Also, as React does not support IE, `@react-hookz/web` does not do so either. You'll have to -transpile your `node-modules` in order to run in IE. - -## Usage - -> This package distributed with ESNext language level and both, CJS and ES imports. -> It means that depending on your browser target you might need to transpile it. Every major -> bundler provides a way to transpile `node_modules` fully or partially. -> Address your bundler documentation for more details. - -You can import hooks two ways: - -```ts -// from the root of package -import { useMountEffect } from '@react-hookz/web'; -// or single hook directly -import { useMountEffect } from '@react-hookz/web/esm/useMountEffect'; -``` - -In case your bundler supports tree-shaking (most of modern does) - both variants are equal and only -necessary code will get into your bundle. Direct hook imports should be considered otherwise. -In case, for some reason, you are not able to use ES imports - you should direct-import hooks from -`@react-hookz/web/esm` folder. - -## Migrating from react-use - -`@react-hookz/web` was built as a [spiritual successor](https://github.com/streamich/react-use/issues/1974) -of `react-use` by one of its former maintainers. - -Coming from `react-use`? Check out our -[migration guide](https://react-hookz.github.io/web/?path=/docs/migrating-from-react-use--page). diff --git a/src/__docs__/migrating-from-react-use.story.mdx b/src/__docs__/migrating-from-react-use.story.mdx deleted file mode 100644 index 72065f12..00000000 --- a/src/__docs__/migrating-from-react-use.story.mdx +++ /dev/null @@ -1,891 +0,0 @@ -One of `@react-hookz/web`'s primary goals is to replace -[react-use](https://github.com/streamich/react-use), the no longer maintained project -`@react-hookz/web` grew out of. - -## A note on missing hooks - -The most common `react-use` hooks have already been ported to `@react-hookz/web`. You can track our -progress porting the rest of `react-use`'s hooks in -[this issue](https://github.com/react-hookz/web/issues/33). - -If there is a `react-use` hook you need that isn't ported yet, please comment there - or even -better, make a PR! - -In the meantime, **feel free to use both `@react-hookz/web` and `react-use` in tandem**. - -## Installation - -See [our README](/docs/home--page). - -## Migrating Hooks - -### Sensors - -#### useBattery - -Not implemented yet - -#### useGeolocation - -Not implemented yet - -#### useHover - -Not implemented yet - -#### useHoverDirty - -Not implemented yet - -#### useHash - -Location-related hooks will not be implemented. Instead, consider using one of the various routing -libraries available. - -#### useIdle - -Not implemented yet - -#### useIntersection - -Implemented as [useIntersectionObserver](/docs/sensor-useintersectionobserver--example) - -OLD in `react-use`: - -```javascript -const intersection = useIntersection(elementRef, { - root: rootRef, - rootMargin: '0px', - threshold: 1, -}); -``` - -NEW in `@react-hookz/web`: - -```javascript -const intersection = useIntersectionObserver(elementRef, { - root: rootRef, - rootMargin: '0px', - threshold: [0, 0.5], -}); -``` - -#### useKey - -See [useKeyboardEvent](https://react-hookz.github.io/web/?path=/docs/dom-usekeyboardevent--example) - -#### useKeyPress - -See [useKeyboardEvent](https://react-hookz.github.io/web/?path=/docs/dom-usekeyboardevent--example) - -#### useKeyboardJs - -See [useKeyboardEvent](https://react-hookz.github.io/web/?path=/docs/dom-usekeyboardevent--example) - -#### useKeyPressEvent - -See [useKeyboardEvent](https://react-hookz.github.io/web/?path=/docs/dom-usekeyboardevent--example) - -#### useLocation - -Location-related hooks will not be implemented. Instead, consider using one of the various routing -libraries available. - -#### useSearchParam - -Location-related hooks will not be implemented. Instead, consider using one of the various routing -libraries available. - -#### useLongPress - -Not implemented yet - -#### useMedia - -Implemented as [useMediaQuery](/docs/sensor-usemediaquery--example) - -No API changes, besides name change. - -#### useMediaDevices - -Not implemented yet - -#### useMotion - -Not implemented yet - -#### useMouse - -Not implemented yet - -#### useMouseHovered - -Not implemented yet - -#### useMouseWheel - -Not implemented yet - -#### useNetworkState - -Implemented as [useNetworkState](/docs/navigator-usenetworkstate--example) - -No API changes, besides name change. - -#### useOrientation - -Not implemented yet - -#### usePageLeave - -Not implemented yet - -#### useScratch - -Not implemented yet - -#### useScroll - -Not implemented yet - -#### useScrolling - -Not implemented yet - -#### useStartTyping - -Not implemented yet - -#### useWindowScroll - -Not implemented yet - -#### useWindowSize - -Implemented as [useWindowSize](/docs/dom-usewindowsize--example) - -#### useMeasure - -Implemented as [useMeasure](/docs/sensor-usemeasure--example) - -No API changes. - -#### useSize - -Use [useMeasure](/docs/sensor-usemeasure--example) instead. - -#### createBreakpoint - -No plans to implement - -#### useScrollbarWidth - -Not implemented yet - -### UI - -#### useAudio - -Not implemented yet - -#### useClickAway - -Implemented as [useClickOutside](/docs/dom-useclickoutside--example)) - -No API changes, besides name change. - -#### useCss - -Not implemented yet - -#### useDrop - -Not implemented yet - -#### useDropArea - -Not implemented yet - -#### useFullscreen - -Not implemented yet - -#### useSlider - -Not implemented yet - -#### useSpeech - -Not implemented yet - -#### useVibrate - -Not implemented yet - -#### useVideo - -Not implemented yet - -### Animations - -#### useRaf - -Not implemented yet - -#### useInterval - -Implemented as [useIntervalEffect](/docs/lifecycle-useintervaleffect--example) - -No API changes, besides name change. - -#### useSpring - -Not implemented yet - -#### useTimeout - -No plans to implement, rather use [useTimeoutEffect](/docs/lifecycle-usetimeouteffect--example) and [useRerender](/docs/lifecycle-usererender--example) like this: - -```javascript -const rerender = useRerender(); -const [cancel, reset] = useTimeoutEffect(rerender, 123); -``` - -#### useTimeoutFn - -Implemented as [useTimeoutEffect](/docs/lifecycle-usetimeouteffect--example) - -API is backwards-compatible, minus the first `isReady` return value. - -In order to replicate the old functionality, you can do the following: - -```javascript -const isReady = (React.useRef < boolean) | (null > false); - -const [cancel, reset] = useTimeoutEffect(() => { - isReady.current = true; - console.log('Hello world'); -}, 123); - -const clear = () => { - isReady.current = null; - cancel(); -}; - -const set = () => { - isReady.current = false; - reset(); -}; - -// Use set and clear, same as in `react-use`. -``` - -#### useTween - -Not implemented yet - -#### useUpdate - -Implemented as [useRerender](/docs/lifecycle-useRerender--example) - -No API changes, besides name change. - -### Side-effects - -#### useAsync - -Implemented as [useAsync](/docs/side-effect-useasync--example) - -OLD in `react-use`: - -```javascript -const { loading, value, error } = useAsync(async () => { - const response = await fetch(url); - const result = await response.text(); - return result; -}, [url]); - -console.log(loading); -console.log(value); -console.log(error.message); -``` - -NEW in `@react-hookz/web`: - -```javascript -const [{ status, result, error }, { execute }] = useAsync(async () => { - const response = await fetch(url); - const result = await response.text(); - return result; -}); - -useMountEffect(execute); - -console.log(status === 'loading'); -console.log(result); -console.log(error.message); -``` - -#### useAsyncFn - -Implemented as part of [useAsync](/docs/side-effect-useasync--example) - -OLD in `react-use`: - -```javascript -const [{ loading, value, error }, doFetch] = useAsync(async () => { - const response = await fetch(url); - const result = await response.text(); - return result; -}, [url]); - -doFetch(); -``` - -NEW in `@react-hookz/web`: - -```javascript -const [{ status, result, error }, { execute }] = useAsync(async () => { - const response = await fetch(url); - const result = await response.text(); - return result; -}); - -execute(); -``` - -#### useAsyncRetry - -Implemented as part of [useAsync](/docs/side-effect-useasync--example) - -OLD in `react-use`: - -```javascript -const { loading, value, error, retry } = useAsync(async () => { - const response = await fetch(url); - const result = await response.text(); - return result; -}, [url]); - -retry(); -``` - -NEW in `@react-hookz/web`: - -```javascript -const [{ status, result, error }, { execute }] = useAsync(async () => { - const response = await fetch(url); - const result = await response.text(); - return result; -}); - -execute(); -``` - -#### useBeforeUnload - -No plans to implement. Use [useEventListener](/docs/dom-useeventlistener--example) instead: - -```javascript -useEventListener(window, 'beforeunload', () => { - /* do your stuff here */ -}); -``` - -#### useCookie - -Implemented as [useCookieValue](/docs/side-effect-useCookieValue--example) - -OLD in `react-use`: - -```javascript -const [value, set, remove] = useCookie('my-cookie'); - -console.log(value); -set('Hello world!', options); -remove(); -``` - -NEW in `@react-hookz/web`: - -```javascript -const [value, set, remove] = useCookieValue('react-hookz', options); - -console.log(value); -set('Hello world!'); -remove(); -``` - -NOTES: - -- `js-cookies` needs installed separately from `@react-hookz/web` to use `useCookie` -- `useCookie` instances with the same key on the same page are synchronised. This synchronisation - does not work across tabs or on changes that are triggered by third-party code. - -#### useCopyToClipboard - -Not implemented yet - -#### useDebounce - -`@react-hookz/web` has three options for debouncing, which we feel are both more ergonomic and -flexible than `react-use`'s implementation. - -Depending on your use case, [useDebouncedEffect](/docs/lifecycle-usedebouncedeffect--example), -[useDebounceCallback](/docs/callback-usedebouncecallback--example), or -[useDebouncedState](/docs/state-usedebouncedstate--example) may be more appropriate. - -#### useError - -Not implemented yet - -#### useFavicon - -Hooks that modify contents of the `` element will not be implemented. Instead, consider using -libraries such as [react-helmet](https://github.com/nfl/react-helmet) and [react-helmet-async](https://github.com/staylor/react-helmet-async). - -#### useLocalStorage - -Implemented as [useLocalStorageValue](/docs/side-effect-uselocalstoragevalue--example) - -Backwards compatible API, minus the `raw` option. - -NOTE: `useLocalStorage` instances with the same key on the same page are synchronised. This -synchronisation does not work across tabs or on changes that are triggered by third-party code. - -#### useLockBodyScroll - -Not implemented yet - -#### useRafLoop - -Not implemented yet - -#### useSessionStorage - -Implemented as [useSessionStorageValue](/docs/side-effect-usesessionstoragevalue--example) - -Backwards compatible API, minus the `raw` option. - -NOTE: `useSessionStorage` instances with the same key on the same page are synchronised. This -synchronisation does not work across tabs or on changes that are triggered by third-party code. - -#### useThrottle and useThrottleFn - -`@react-hookz/web` has three options for throttling, which we feel are both more ergonomic and -flexible than `react-use`'s implementations. - -Depending on your use case, [useThrottledEffect](/docs/lifecycle-usethrottledeffect--example), -[useThrottledCallback](/docs/callback-usethrottledcallback--example), or -[useThrottledState](/docs/state-usethrottledstate--example) may be more appropriate. - -#### useTitle - -Hooks that modify contents of the `` element will not be implemented. Instead, consider using -libraries such as [react-helmet](https://github.com/nfl/react-helmet) and [react-helmet-async](https://github.com/staylor/react-helmet-async). - -Backwards compatiable API. - -#### usePermission - -Implemented as [usePermission](/docs/navigator-usepermission--example) - -No API changes. - -### Lifecycles - -#### useEffectOnce - -Was just an alias for [useMountEffect](/docs/lifecycle-usemounteffect-example) - use that directly instead. - -#### useEvent - -Implemented as [useEventListener](/docs/dom-useeventlistener--example) - -OLD in `react-use`: - -```javascript -useEvent( - 'mousemove', - () => { - setState(new Date()); - }, - window, - { passive: true } -); -``` - -NEW in `@react-hookz/web`: - -```javascript -useEventListener( - window, - 'mousemove', - () => { - setState(new Date()); - }, - { passive: true } -); -``` - -#### useLifecycles - -No plans to implement - -#### useMountedState - -Implemented as [useIsMounted](/docs/lifecycle-useIsMounted--example) - -No API change, besides name change. - -#### useUnmountPromise - -Not implemented yet - -#### usePromise - -Not implemented yet - -#### useLogger - -Implemented as [useLifecycleLogger](/docs/lifecycle-useLifecycleLogger--example) - -#### useMount - -Implemented as [useMountEffect](/docs/lifecycle-useMountEffect--example) - -No API change, besides name change. - -#### useUnmount - -Implemented as [useUnmountEffect](/docs/lifecycle-useUnmountEffect--example) - -No API change, besides name change. - -#### useUpdateEffect - -Implemented as [useUpdateEffect](/docs/lifecycle-useUpdateEffect--example) - -No API changes. - -#### useIsomorphicLayoutEffect - -Implemented as [useIsomorphicLayoutEffect](/docs/lifecycle-useIsomorphicLayoutEffect--example) - -No API changes. - -#### useDeepCompareEffect - -Not implemented yet - -#### useShallowCompareEffect - -Not implemented yet - -#### useCustomCompareEffect - -Not implemented yet - -### State - -#### createMemo - -No plans to implement - -#### createReducer - -No plans to implement - -#### createReducerContext - -No plans to implement - -#### createStateContext - -No plans to implement - -#### useDefault - -No plans to implement, rather use [useMediatedState](/docs/state-useMediatedState--example) like -so: - -```javascript -const initialValue = 'world'; -const defaultValue = 'you'; -const [greeting, setGreeting] = useMediatedState( - initialValue, - (newValue) => newValue ?? defaultValue -); -console.log(`Hello ${greeting}`); -``` - -#### useGetSet - -Not implemented yet - -#### useGetSetState - -Not implemented yet - -#### useLatest - -Implemented as [useSyncedRef](/docs/miscellaneous-usesyncedref--example) - -No API changes, besides name change. - -#### usePrevious - -Implemented as [usePrevious](/docs/state-useprevious--example) - -No API changes. - -#### usePreviousDistinct - -Not implemented yet - -#### useObservable - -Not implemented yet - -#### useRafState - -Not implemented yet - -#### useSetState - -`React.useState` maybe used to achieve the same with minimal changes. - -OLD in `react-use`: - -```javascript -const [state, setState] = useSetState({}); - -setState({ hello: 'world' }); -setState({ foo: 'bar' }); -``` - -NEW in `@react-hookz/web`: - -```javascript -const [state, setState] = useState({}); - -setState((current) => { ...current, hello: 'world' }); -setState((current) => { ...current, foo: 'bar' }); -``` - -#### useStateList - -Not implemented yet - -#### useToggle - -Implemented as [useToggle](/docs/state-usetoggle--example) - -No API changes. - -#### useBoolean - -Use [useToggle](/docs/state-usetoggle--example) instead - -#### useCounter - -Implemented as [useCounter](/docs/state-usecounter--example) - -#### useNumber - -Use [useCounter](/docs/state-usecounter--example) instead. - -#### useList - -Implemented as [useList](/docs/state-uselist--example). - -#### useUpsert - -Use [useList](/docs/state-uselist--example) instead. - -#### useMap - -Implemented as [useMap](/docs/state-usemap--example) - -OLD in `react-use`: - -```javascript -const [map, { set, remove, reset, setAll }] = useMap({ - hello: 'there', -}); - -console.log(JSON.stringify(map, null, 2)); -set('some', 'thing'); -remove('hello'); -reset(); -setAll({ hello: 'there', some: 'thing' }); -``` - -NEW in `@react-hookz/web`: - -```javascript -const map = useMap(new Map([['hello', 'there']]);); - -console.log(JSON.stringify(Array.from(map), null, 2)); -map.set("some", "thing"); -map.delete("hello"); -map.clear(); -// There is no native `setAll` method on `Map`s, but we can create our own easily -const setAll = (values) => { - map.clear(); - valuePairs.forEach((valuePair) => map.set(valuePair[0], valuePair[1])); -} -setAll([['hello', 'there']]); -``` - -NOTES: `@react-hookz/web`'s implementation is the same signature as the native `Map` object, but its -methods are wrapped to cause components to rerender with changes. - -#### useSet - -Implemented as [useSet](/docs/state-useset--example) - -OLD in `react-use`: - -```javascript -const [set, { add, reset, remove, has, toggle }] = useSet(new Set(['hello', 'world'])); - -console.log(JSON.stringify(Array.from(set), null, 2)); -add(String(Date.now())); -reset(); -remove('hello'); -has('hello'); -toggle('hello'); -``` - -NEW in `@react-hookz/web`: - -```javascript -const set = useSet(['hello', 'world']); - -console.log(JSON.stringify(Array.from(set), null, 2)); -set.add(String(Date.now())); -set.clear(); -set.delete('hello'); -set.has('hello'); -// There is no native `toggle` method on `Set`s, but we can create our own easily -const toggle = (value) => (set.has(value) ? set.delete(value) : set.add(value)); -toggle('hello'); -``` - -NOTES: `@react-hookz/web`'s implementation is the same signature as the native `Set` object, but its -methods are wrapped to cause components to rerender with changes. - -#### useQueue - -Not implemented yet - -#### useStateValidator - -Implemented as [useValidator](/docs/state-usevalidator--example-stories) - -OLD in `react-use`: - -```javascript -// outside of React component -const validator = (s) => { - const isValid = !text.length || text.length % 2 === 1; - - const error = !isValid ? new Error("text length should be an odd length") : undefined, - - return [isValid, error] -}; - ------ -// inside of React component -const [text, setText] = useState(""); -const [[isValid, error], revalidate] = useStateValidator(text, validator); - -console.log(isValid); -console.log(error?.message); -revalidate(); -``` - -NEW in `@react-hookz/web`: - -```javascript -const [text, setText] = useState(""); - -const validator = - (d) => { - const isValid = !text.length || text.length % 2 === 1; - - const error = !isValid ? new Error("text length should be an odd length") : undefined, - - d({ - isValid, - error - }); - } - -const [validity] = useValidator(validator, [text]); - -console.log(validity.isValid); -console.log(validity.error?.message); -// no manual revalidation needed -``` - -#### useStateWithHistory - -Not implemented yet - -#### useMultiStateValidator - -See [useValidator](/docs/state-usevalidator--example-stories) - -#### useMediatedState - -Implemented as [useMediatedState](/docs/lifecycle-usemediatedstate--example) - -OLD in `react-use`: - -```javascript -const [state, setState] = useMediatedState((value) => value, ''); - -console.log(state); -setState('Hello world!'); -``` - -NEW in `@react-hookz/web`: - -```javascript -const [state, setState] = useMediatedState('', (value) => value); - -console.log(state); -setState('Hello world!'); -``` - -#### useFirstMountState - -Implemented as [useFirstMountState](/docs/lifecycle-usefirstmountstate--example) - -No API changes. - -#### useRendersCount - -Implemented as [useRenderCount](/docs/state-userendercount--example) - -No API changes. - -#### createGlobalState - -No plans to implement - -#### useMethods - -Not implemented yet - -### Miscellaneous - -#### useEnsuredForwardedRef - -Not implemented yet - -#### ensuredForwardRef - -Not implemented yet diff --git a/src/__tests__/navigator.vibrate.ts b/src/__tests__/navigator.vibrate.ts deleted file mode 100644 index 2ba25713..00000000 --- a/src/__tests__/navigator.vibrate.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const setupNavigatorVibrate = () => { - navigator.vibrate = (() => true) as typeof navigator.vibrate; -}; diff --git a/src/__tests__/setup.ts b/src/__tests__/setup.ts deleted file mode 100644 index bfd3fff2..00000000 --- a/src/__tests__/setup.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Here goes any setup code that should be performed before actual tests and/or code imports. - */ - -import { setupNavigatorVibrate } from './navigator.vibrate.js'; - -setupNavigatorVibrate(); diff --git a/src/index.ts b/src/index.ts index 833a84ba..ffcac791 100644 --- a/src/index.ts +++ b/src/index.ts @@ -71,9 +71,9 @@ export * from './useEventListener/index.js'; export * from './useWindowSize/index.js'; // Utils -export { isStrictEqual, truthyAndArrayPredicate, truthyOrArrayPredicate } from './util/const.js'; -export type { EffectCallback, EffectHook } from './util/misc.js'; -export { resolveHookState } from './util/resolveHookState.js'; +export {isStrictEqual, truthyAndArrayPredicate, truthyOrArrayPredicate} from './util/const.js'; +export type {EffectCallback, EffectHook} from './util/misc.js'; +export {resolveHookState} from './util/resolve-hook-state.js'; // Types export type * from './types.js'; diff --git a/src/types.ts b/src/types.ts index 5ebd7c93..b9722c91 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -import { type DependencyList } from 'react'; +import {type DependencyList} from 'react'; export type DependenciesComparator = ( a: Deps, diff --git a/src/useAsync/__docs__/example.stories.tsx b/src/useAsync/__docs__/example.stories.tsx deleted file mode 100644 index 6c36f766..00000000 --- a/src/useAsync/__docs__/example.stories.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import * as React from 'react'; -import { useAsync, useMountEffect } from '../../index.js'; - -export function Example() { - const [state, actions] = useAsync( - () => - new Promise((resolve) => { - setTimeout(() => { - resolve('react-hookz is awesome!'); - }, 3000); - }), - 'react-hookz is' - ); - - useMountEffect(actions.execute); - - return ( -
-
- Async function will resolve after 3 seconds of wait -
-
-
promise status: {state.status}
-
current value: {state.result ?? 'undefined'}
-
-
- {' '} - -
-
- ); -} diff --git a/src/useAsync/__docs__/story.mdx b/src/useAsync/__docs__/story.mdx deleted file mode 100644 index 31232780..00000000 --- a/src/useAsync/__docs__/story.mdx +++ /dev/null @@ -1,47 +0,0 @@ -# useAsync - -Tracks the result and errors of the provided async function and provides handles to control its execution. - -- Handles any async function. -- Safe - no worries about updating the state of an unmounted component. -- Stable - returned methods do not change between renders. -- Handles race conditions - only latest results are stored in state. -- Provides methods to manually trigger execution or reset state to initial. - -#### Example - -## Reference - -```ts -export function useAsync( - asyncFn: (...params: Args) => Promise, - initialValue?: Result -): [AsyncState, UseAsyncActions, UseAsyncMeta]; -``` - -#### Importing - -#### Arguments - -- **asyncFn** _`(...params: Args) => Promise`_ - Function that returns a promise. -- **initialValue** _`Result`_ _(default: `undefined`)_ - Value that will be set on initialisation - before the async function is executed. - -#### Return - -1. **state** - -- **status** _`'loading' | 'success' | 'error' | 'not-executed'`_ - The latest status of the returned promise. -- **result** _`Result | undefined`_ - Result of the promise if it was fulfilled. -- **error** _`Error | undefined`_ - Result of the promise if it was rejected. - -2. **methods** - -- **reset** _`() => void`_- Reset state to initial. -- **execute** _`(...args: Args) => Promise`_- Execute the async function manually. - -3. **meta** - -- **promise** _`Promise | undefined`_- Latest promise returned from the async function. -- **lastArgs** _`Args | undefined`_ - List of arguments applied to the latest async function - invocation. diff --git a/src/useAsync/__tests__/ssr.ts b/src/useAsync/__tests__/ssr.ts deleted file mode 100644 index 2b2c50fc..00000000 --- a/src/useAsync/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useAsync } from '../../index.js'; - -describe('useAsync', () => { - it('should be defined', () => { - expect(useAsync).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useAsync(async () => {})); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useAsync/__tests__/dom.ts b/src/useAsync/index.dom.test.ts similarity index 64% rename from src/useAsync/__tests__/dom.ts rename to src/useAsync/index.dom.test.ts index c77f0af3..a6ffb87a 100644 --- a/src/useAsync/__tests__/dom.ts +++ b/src/useAsync/index.dom.test.ts @@ -1,18 +1,19 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useAsync } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useAsync} from '../index.js'; -function getControllableAsync() { - const resolve: { current: undefined | ((result: Res) => void) } = { current: undefined }; - const reject: { current: undefined | ((err: Error) => void) } = { current: undefined }; +function getControllableAsync() { + const resolve: {current: undefined | ((result: Resp) => void)} = {current: undefined}; + const reject: {current: undefined | ((err: Error) => void)} = {current: undefined}; return [ - jest.fn( + vi.fn( (..._args: Args) => // eslint-disable-next-line promise/param-names - new Promise((res, rej) => { - resolve.current = res; + new Promise((reslv, rej) => { + resolve.current = reslv; reject.current = rej; - }) + }), ), resolve, reject, @@ -25,12 +26,12 @@ describe('useAsync', () => { }); it('should render', () => { - const { result } = renderHook(() => useAsync(async () => true)); + const {result} = renderHook(() => useAsync(async () => true)); expect(result.error).toBeUndefined(); }); it('should not invoke async function on mount if `skipMount` option is passed', () => { - const spy = jest.fn(async () => {}); + const spy = vi.fn(async () => {}); renderHook(() => useAsync(spy)); expect(spy).not.toHaveBeenCalled(); @@ -38,8 +39,12 @@ describe('useAsync', () => { it('should apply `initialValue` arg', async () => { await act(async () => { - const [spy, resolve] = getControllableAsync(); - const { result } = renderHook(() => useAsync(spy, 3)); + const [spy, resolve] = getControllableAsync(); + const {result} = renderHook(() => useAsync(spy, 3)); + + if (result.all[0] instanceof Error) { + throw result.all[0]; + } expect(result.all[0][0]).toStrictEqual({ status: 'not-executed', @@ -55,8 +60,8 @@ describe('useAsync', () => { it('should have `not-executed` status initially', async () => { await act(async () => { - const [spy, resolve] = getControllableAsync(); - const { result } = renderHook(() => useAsync(spy)); + const [spy, resolve] = getControllableAsync(); + const {result} = renderHook(() => useAsync(spy)); expect(result.current[0]).toStrictEqual({ status: 'not-executed', @@ -71,8 +76,8 @@ describe('useAsync', () => { }); it('should have `loading` status while promise invoked but not resolved', async () => { - const [spy, resolve] = getControllableAsync(); - const { result } = renderHook(() => useAsync(spy)); + const [spy, resolve] = getControllableAsync(); + const {result} = renderHook(() => useAsync(spy)); expect(result.current[0]).toStrictEqual({ status: 'not-executed', @@ -98,8 +103,8 @@ describe('useAsync', () => { }); it('should set `success` status and store `result` state field on fulfill', async () => { - const [spy, resolve] = getControllableAsync(); - const { result } = renderHook(() => useAsync(spy)); + const [spy, resolve] = getControllableAsync(); + const {result} = renderHook(() => useAsync(spy)); expect(result.current[0]).toStrictEqual({ status: 'not-executed', @@ -110,7 +115,9 @@ describe('useAsync', () => { await act(async () => { void result.current[1].execute(); - if (resolve.current) resolve.current(123); + if (resolve.current) { + resolve.current(123); + } }); expect(result.current[0]).toStrictEqual({ @@ -121,8 +128,8 @@ describe('useAsync', () => { }); it('should set `error` status and store `error` state field on reject', async () => { - const [spy, , reject] = getControllableAsync(); - const { result } = renderHook(() => useAsync(spy)); + const [spy, , reject] = getControllableAsync(); + const {result} = renderHook(() => useAsync(spy)); expect(result.current[0]).toStrictEqual({ status: 'not-executed', @@ -135,7 +142,9 @@ describe('useAsync', () => { await act(async () => { void result.current[1].execute(); - if (reject.current) reject.current(err); + if (reject.current) { + reject.current(err); + } }); expect(result.current[0]).toStrictEqual({ @@ -146,8 +155,8 @@ describe('useAsync', () => { }); it('should rollback state to initial on `reset` method call', async () => { - const [spy, resolve] = getControllableAsync(); - const { result } = renderHook(() => useAsync(spy, 42)); + const [spy, resolve] = getControllableAsync(); + const {result} = renderHook(() => useAsync(spy, 42)); expect(result.current[0]).toStrictEqual({ status: 'not-executed', @@ -158,7 +167,9 @@ describe('useAsync', () => { await act(async () => { void result.current[1].execute(); - if (resolve.current) resolve.current(1); + if (resolve.current) { + resolve.current(1); + } }); expect(result.current[0]).toStrictEqual({ @@ -179,8 +190,8 @@ describe('useAsync', () => { }); it('should not process results of promise if another was executed', async () => { - const [spy, resolve] = getControllableAsync(); - const { result } = renderHook(() => useAsync(spy, 42)); + const [spy, resolve] = getControllableAsync(); + const {result} = renderHook(() => useAsync(spy, 42)); await act(async () => { void result.current[1].execute(); @@ -193,8 +204,13 @@ describe('useAsync', () => { const resolve2 = resolve.current; await act(async () => { - if (resolve1) resolve1(1); - if (resolve2) resolve2(2); + if (resolve1) { + resolve1(1); + } + + if (resolve2) { + resolve2(2); + } }); expect(result.current[0]).toStrictEqual({ @@ -205,8 +221,8 @@ describe('useAsync', () => { }); it('should not process error of promise if another was executed', async () => { - const [spy, resolve, reject] = getControllableAsync(); - const { result } = renderHook(() => useAsync(spy, 42)); + const [spy, resolve, reject] = getControllableAsync(); + const {result} = renderHook(() => useAsync(spy, 42)); await act(async () => { void result.current[1].execute(); @@ -219,8 +235,13 @@ describe('useAsync', () => { const resolve2 = resolve.current; await act(async () => { - if (reject1) reject1(new Error('some err')); - if (resolve2) resolve2(2); + if (reject1) { + reject1(new Error('some err')); + } + + if (resolve2) { + resolve2(2); + } }); expect(result.current[0]).toStrictEqual({ @@ -231,13 +252,13 @@ describe('useAsync', () => { }); it('should not change methods between renders', () => { - const spy = jest.fn(async () => {}); - const { rerender, result } = renderHook(() => useAsync(spy)); + const spy = vi.fn(async () => {}); + const {rerender, result} = renderHook(() => useAsync(spy)); - const res1 = result.current; + const previous = result.current; rerender(); - expect(res1[1].execute).toBe(result.current[1].execute); - expect(res1[1].reset).toBe(result.current[1].reset); + expect(previous[1].execute).toBe(result.current[1].execute); + expect(previous[1].reset).toBe(result.current[1].reset); }); }); diff --git a/src/useAsync/index.ssr.test.ts b/src/useAsync/index.ssr.test.ts new file mode 100644 index 00000000..1d59583b --- /dev/null +++ b/src/useAsync/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useAsync} from '../index.js'; + +describe('useAsync', () => { + it('should be defined', () => { + expect(useAsync).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useAsync(async () => {})); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useAsync/index.ts b/src/useAsync/index.ts index 23dcc444..402631c1 100644 --- a/src/useAsync/index.ts +++ b/src/useAsync/index.ts @@ -1,29 +1,29 @@ -import { useMemo, useRef, useState } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; +import {useMemo, useRef, useState} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; export type AsyncStatus = 'loading' | 'success' | 'error' | 'not-executed'; export type AsyncState = | { - status: 'not-executed'; - error: undefined; - result: Result; - } + status: 'not-executed'; + error: undefined; + result: Result; + } | { - status: 'success'; - error: undefined; - result: Result; - } + status: 'success'; + error: undefined; + result: Result; + } | { - status: 'error'; - error: Error; - result: Result; - } + status: 'error'; + error: Error; + result: Result; + } | { - status: AsyncStatus; - error: Error | undefined; - result: Result; - }; + status: AsyncStatus; + error: Error | undefined; + result: Result; + }; export type UseAsyncActions = { /** @@ -65,7 +65,7 @@ export function useAsync( */ export function useAsync( asyncFn: (...params: Args) => Promise, - initialValue?: Result + initialValue?: Result, ): [AsyncState, UseAsyncActions, UseAsyncMeta] { const [state, setState] = useState>({ status: 'not-executed', @@ -81,7 +81,7 @@ export function useAsync( const promise = asyncFn(...params); promiseRef.current = promise; - setState((s) => ({ ...s, status: 'loading' })); + setState(s => ({...s, status: 'loading'})); // eslint-disable-next-line promise/catch-or-return promise.then( @@ -90,16 +90,17 @@ export function useAsync( // this approach helps to avoid race conditions if (promise === promiseRef.current) { - setState((s) => ({ ...s, status: 'success', error: undefined, result })); + setState(s => ({...s, status: 'success', error: undefined, result})); } }, + // eslint-disable-next-line @typescript-eslint/use-unknown-in-catch-callback-variable (error: Error) => { - // We dont want to handle result/error of non-latest function + // We don't want to handle result/error of non-latest function // this approach helps to avoid race conditions if (promise === promiseRef.current) { - setState((s) => ({ ...s, status: 'error', error })); + setState(previousState => ({...previousState, status: 'error', error})); } - } + }, ); return promise; @@ -125,8 +126,8 @@ export function useAsync( execute: (...params: Args) => methods.current.execute(...params), }), // eslint-disable-next-line react-hooks/exhaustive-deps - [] + [], ), - { promise: promiseRef.current, lastArgs: argsRef.current }, + {promise: promiseRef.current, lastArgs: argsRef.current}, ]; } diff --git a/src/useAsyncAbortable/__docs__/example.stories.tsx b/src/useAsyncAbortable/__docs__/example.stories.tsx deleted file mode 100644 index bbee4422..00000000 --- a/src/useAsyncAbortable/__docs__/example.stories.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import * as React from 'react'; -import { useAsyncAbortable, useMountEffect } from '../../index.js'; - -export function Example() { - const [state, actions, meta] = useAsyncAbortable( - (signal) => - new Promise((resolve, reject) => { - setTimeout(() => { - if (signal.aborted) { - reject(new Error('Aborted!')); - } else { - resolve('react-hookz is awesome!'); - } - }, 5000); - }), - 'react-hookz is' - ); - - useMountEffect(actions.execute); - - return ( -
-
- - Async function will resolve after 5 seconds. If the function is aborted, the promise will - be rejected. - -
-
-
promise status: {state.status}
-
current value: {state.result ?? 'undefined'}
-
error: {state.error ? state.error.message : 'undefined'}
-
-
- {' '} - {' '} - -
-
- ); -} diff --git a/src/useAsyncAbortable/__docs__/story.mdx b/src/useAsyncAbortable/__docs__/story.mdx deleted file mode 100644 index adbdc68d..00000000 --- a/src/useAsyncAbortable/__docs__/story.mdx +++ /dev/null @@ -1,53 +0,0 @@ -# useAsyncAbortable - -Like `useAsync`, but also provides `AbortSignal` as the first argument to the async function. - -- All the advantages of `useAsync`. -- Automatically aborts previous invocations of the async function. -- Provides `abort` handle. - -#### Example - -## Reference - -```ts -export function useAsyncAbortable( - asyncFn: (...params: ArgsWithAbortSignal) => Promise, - initialValue?: Result -): [ - AsyncState, - UseAsyncAbortableActions, - UseAsyncAbortableMeta, -]; -``` - -#### Importing - -#### Arguments - -- **asyncFn** _`(...params: ArgsWithAbortSignal) => Promise`_ - Function that returns - a promise. -- **initialValue** _`Result`_ _(default: `undefined`)_ - Value that will be set on initialisation, - before the async function is executed. - -#### Return - -1. **state** - -- **status** _`'loading' | 'success' | 'error' | 'not-executed'`_ - The latest status of the returned promise. -- **result** _`Result | undefined`_ - Result of the promise if it was fulfilled. -- **error** _`Error | undefined`_ - Result of the promise if it was rejected. - -2. **methods** - -- **reset** _`() => void`_- Abort the currently running async function invocation and reset state to initial. -- **execute** _`(...args: Args) => Promise`_- Execute the async function manually. -- **abort** _`() => void`_- Abort the currently running async function invocation. - -3. **meta** - -- **promise** _`Promise | undefined`_- Latest promise returned from the async function. -- **lastArgs** _`Args | undefined`_ - List of arguments applied to the latest async function - invocation. -- **abortController** _`AbortController | undefined`_ - Currently used `AbortController`. New one - is created on each execution of the async function. diff --git a/src/useAsyncAbortable/__tests__/ssr.ts b/src/useAsyncAbortable/__tests__/ssr.ts deleted file mode 100644 index dad431f8..00000000 --- a/src/useAsyncAbortable/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useAsyncAbortable } from '../../index.js'; - -describe('useAsyncAbortable', () => { - it('should be defined', () => { - expect(useAsyncAbortable).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useAsyncAbortable(async (_) => {})); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useAsyncAbortable/__tests__/dom.ts b/src/useAsyncAbortable/index.dom.test.ts similarity index 66% rename from src/useAsyncAbortable/__tests__/dom.ts rename to src/useAsyncAbortable/index.dom.test.ts index 206eb0be..37a7dfa2 100644 --- a/src/useAsyncAbortable/__tests__/dom.ts +++ b/src/useAsyncAbortable/index.dom.test.ts @@ -1,18 +1,19 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useAsyncAbortable } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useAsyncAbortable} from '../index.js'; -function getControllableAsync() { - const resolve: { current: undefined | ((result: Res) => void) } = { current: undefined }; - const reject: { current: undefined | ((err: Error) => void) } = { current: undefined }; +function getControllableAsync() { + const resolve: {current: undefined | ((result: Response) => void)} = {current: undefined}; + const reject: {current: undefined | ((err: Error) => void)} = {current: undefined}; return [ - jest.fn( + vi.fn( (..._args: Args) => // eslint-disable-next-line promise/param-names - new Promise((res, rej) => { - resolve.current = res; - reject.current = rej; - }) + new Promise((reslv, rejct) => { + resolve.current = reslv; + reject.current = rejct; + }), ), resolve, reject, @@ -25,25 +26,25 @@ describe('useAsyncAbortable', () => { }); it('should render', () => { - const { result } = renderHook(() => useAsyncAbortable(async (_) => {})); + const {result} = renderHook(() => useAsyncAbortable(async (_) => {})); expect(result.error).toBeUndefined(); }); it('should not change methods between renders', () => { - const spy = jest.fn(async () => {}); - const { rerender, result } = renderHook(() => useAsyncAbortable(spy)); + const spy = vi.fn(async () => {}); + const {rerender, result} = renderHook(() => useAsyncAbortable(spy)); - const res1 = result.current; + const result1 = result.current; rerender(); - expect(res1[1].execute).toBe(result.current[1].execute); - expect(res1[1].reset).toBe(result.current[1].reset); - expect(res1[1].abort).toBe(result.current[1].abort); + expect(result1[1].execute).toBe(result.current[1].execute); + expect(result1[1].reset).toBe(result.current[1].reset); + expect(result1[1].abort).toBe(result.current[1].abort); }); it('should pass abort signal as first argument', async () => { - const spy = jest.fn(async (s: AbortSignal, n: number) => n); - const { result } = renderHook(() => useAsyncAbortable(spy)); + const spy = vi.fn(async (s: AbortSignal, n: number) => n); + const {result} = renderHook(() => useAsyncAbortable(spy)); await act(async () => { void result.current[1].execute(123); @@ -62,7 +63,7 @@ describe('useAsyncAbortable', () => { it('should abort signal in case of actions.abort call', async () => { const [spy, resolve] = getControllableAsync(); - const { result } = renderHook(() => useAsyncAbortable(spy)); + const {result} = renderHook(() => useAsyncAbortable(spy)); await act(async () => { void result.current[1].execute(123); @@ -81,7 +82,7 @@ describe('useAsyncAbortable', () => { it('should also abort signal in case of actions.reset call', async () => { const [spy, resolve] = getControllableAsync(); - const { result } = renderHook(() => useAsyncAbortable(spy, 321)); + const {result} = renderHook(() => useAsyncAbortable(spy, 321)); await act(async () => { void result.current[1].execute(123); @@ -108,7 +109,7 @@ describe('useAsyncAbortable', () => { it('should abort previous async in case new one executed before first resolution', async () => { const [spy, resolve] = getControllableAsync(); - const { result } = renderHook(() => useAsyncAbortable(spy, 321)); + const {result} = renderHook(() => useAsyncAbortable(spy, 321)); await act(async () => { void result.current[1].execute(123); diff --git a/src/useAsyncAbortable/index.ssr.test.ts b/src/useAsyncAbortable/index.ssr.test.ts new file mode 100644 index 00000000..51900796 --- /dev/null +++ b/src/useAsyncAbortable/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useAsyncAbortable} from '../index.js'; + +describe('useAsyncAbortable', () => { + it('should be defined', () => { + expect(useAsyncAbortable).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useAsyncAbortable(async (_) => {})); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useAsyncAbortable/index.ts b/src/useAsyncAbortable/index.ts index dd2c02c6..8a80f2e0 100644 --- a/src/useAsyncAbortable/index.ts +++ b/src/useAsyncAbortable/index.ts @@ -1,4 +1,4 @@ -import { useMemo, useRef } from 'react'; +import {useMemo, useRef} from 'react'; import { type AsyncState, useAsync, @@ -53,12 +53,12 @@ export function useAsyncAbortable( */ export function useAsyncAbortable( asyncFn: (...params: ArgsWithAbortSignal) => Promise, - initialValue?: Result + initialValue?: Result, ): [ - AsyncState, - UseAsyncAbortableActions, - UseAsyncAbortableMeta, -] { + AsyncState, + UseAsyncAbortableActions, + UseAsyncAbortableMeta, + ] { const abortController = useRef(); const fn = async (...args: Args): Promise => { @@ -99,6 +99,6 @@ export function useAsyncAbortable( }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []), - { ...asyncMeta, abortController: abortController.current }, + {...asyncMeta, abortController: abortController.current}, ]; } diff --git a/src/useClickOutside/__docs__/example.stories.tsx b/src/useClickOutside/__docs__/example.stories.tsx deleted file mode 100644 index a72e4c42..00000000 --- a/src/useClickOutside/__docs__/example.stories.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import * as React from 'react'; -import { useRef } from 'react'; -import { useClickOutside, useToggle } from '../../index.js'; - -export function Example() { - const [toggled, toggle] = useToggle(); - - function ToggledComponent() { - const ref = useRef(null); - - useClickOutside(ref, () => { - // eslint-disable-next-line no-alert - window.alert('told ya!'); - toggle(); - }); - - return ( -
- DO NOT -
- CLICK OUTSIDE -
- THE RED SQUARE! -
- ); - } - - return ( -
-
Let's try some reverse psychology =)
-
- - {!toggled && ( - - )} - {toggled && } -
- ); -} diff --git a/src/useClickOutside/__docs__/story.mdx b/src/useClickOutside/__docs__/story.mdx deleted file mode 100644 index 667fa360..00000000 --- a/src/useClickOutside/__docs__/story.mdx +++ /dev/null @@ -1,31 +0,0 @@ -# useClickOutside - -Triggers a callback when the user clicks outside a targeted element. - -> This hook listens for events on the `document` object. Therefore, if any listener between the event -> target and the `document` object stops event propagation, the hook won't work. - -> By default, the `mousedown` and `touchstart` events are used, but any bubbling event can be used instead. - -#### Example - -## Reference - -```ts -const DEFAULT_EVENTS = ['mousedown', 'touchstart']; - -export function useClickOutside( - ref: RefObject | MutableRefObject, - callback: EventListener, - events: string[] = DEFAULT_EVENTS -): void; -``` - -#### Importing - -#### Arguments - -- **ref** _`RefObject | MutableRefObject`_ - React ref object containing the target element. -- **callback** _`EventListener`_ - Callback invoked when the user clicks outside the target element. -- **events**: _`string[]`_ _(default: `['mousedown', 'touchstart']`)_ - List of events that will be - used as triggers for the outside click. diff --git a/src/useClickOutside/__tests__/ssr.ts b/src/useClickOutside/__tests__/ssr.ts deleted file mode 100644 index 62a3a5ab..00000000 --- a/src/useClickOutside/__tests__/ssr.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useClickOutside } from '../../index.js'; - -describe('useClickOutside', () => { - it('should be defined', () => { - expect(useClickOutside).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => { - useClickOutside({ current: null }, () => {}); - }); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useClickOutside/__tests__/dom.ts b/src/useClickOutside/index.dom.test.ts similarity index 62% rename from src/useClickOutside/__tests__/dom.ts rename to src/useClickOutside/index.dom.test.ts index 828a7c29..563dd8f9 100644 --- a/src/useClickOutside/__tests__/dom.ts +++ b/src/useClickOutside/index.dom.test.ts @@ -1,6 +1,7 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { type MutableRefObject } from 'react'; -import { useClickOutside } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {type MutableRefObject} from 'react'; +import {describe, expect, it, vi} from 'vitest'; +import {useClickOutside} from '../index.js'; describe('useClickOutside', () => { it('should be defined', () => { @@ -8,19 +9,19 @@ describe('useClickOutside', () => { }); it('should render', () => { - const { result } = renderHook(() => { - useClickOutside({ current: null }, () => {}); + const {result} = renderHook(() => { + useClickOutside({current: null}, () => {}); }); expect(result.error).toBeUndefined(); }); it('should bind document listener on mount and unbind on unmount', () => { const div = document.createElement('div'); - const addSpy = jest.spyOn(document, 'addEventListener'); - const removeSpy = jest.spyOn(document, 'removeEventListener'); + const addSpy = vi.spyOn(document, 'addEventListener'); + const removeSpy = vi.spyOn(document, 'removeEventListener'); - const { rerender, unmount } = renderHook(() => { - useClickOutside({ current: div }, () => {}); + const {rerender, unmount} = renderHook(() => { + useClickOutside({current: div}, () => {}); }); expect(addSpy).toHaveBeenCalledTimes(2); @@ -40,11 +41,11 @@ describe('useClickOutside', () => { it('should bind any events passed as 3rd parameter', () => { const div = document.createElement('div'); - const addSpy = jest.spyOn(document, 'addEventListener'); - const removeSpy = jest.spyOn(document, 'removeEventListener'); + const addSpy = vi.spyOn(document, 'addEventListener'); + const removeSpy = vi.spyOn(document, 'removeEventListener'); - const { unmount } = renderHook(() => { - useClickOutside({ current: div }, () => {}, ['click']); + const {unmount} = renderHook(() => { + useClickOutside({current: div}, () => {}, ['click']); }); expect(addSpy).toHaveBeenCalledTimes(1); @@ -61,41 +62,41 @@ describe('useClickOutside', () => { it('should invoke callback if event target is not a child of target', () => { const div = document.createElement('div'); const div2 = document.createElement('div2'); - const spy = jest.fn(); + const spy = vi.fn(); renderHook(() => { - useClickOutside({ current: div }, spy); + useClickOutside({current: div}, spy); }); document.body.append(div, div2); - div2.dispatchEvent(new Event('mousedown', { bubbles: true })); + div2.dispatchEvent(new Event('mousedown', {bubbles: true})); expect(spy).toHaveBeenCalledTimes(1); }); it('should not execute callback if event target is a child of target', () => { const div = document.createElement('div'); const div2 = document.createElement('div2'); - const spy = jest.fn(); + const spy = vi.fn(); renderHook(() => { - useClickOutside({ current: div }, spy); + useClickOutside({current: div}, spy); }); document.body.append(div); div.append(div2); - div2.dispatchEvent(new Event('mousedown', { bubbles: true })); + div2.dispatchEvent(new Event('mousedown', {bubbles: true})); expect(spy).not.toHaveBeenCalled(); }); it('should not execute callback if target is unmounted', () => { const div = document.createElement('div'); const div2 = document.createElement('div2'); - const spy = jest.fn(); - const ref: MutableRefObject = { current: div }; + const spy = vi.fn(); + const ref: MutableRefObject = {current: div}; - const { rerender } = renderHook(() => { + const {rerender} = renderHook(() => { useClickOutside(ref, spy); }); @@ -105,7 +106,7 @@ describe('useClickOutside', () => { ref.current = null; rerender(); - div2.dispatchEvent(new Event('mousedown', { bubbles: true })); + div2.dispatchEvent(new Event('mousedown', {bubbles: true})); expect(spy).not.toHaveBeenCalled(); }); }); diff --git a/src/useClickOutside/index.ssr.test.ts b/src/useClickOutside/index.ssr.test.ts new file mode 100644 index 00000000..66cd7fc3 --- /dev/null +++ b/src/useClickOutside/index.ssr.test.ts @@ -0,0 +1,16 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useClickOutside} from '../index.js'; + +describe('useClickOutside', () => { + it('should be defined', () => { + expect(useClickOutside).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => { + useClickOutside({current: null}, () => {}); + }); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useClickOutside/index.ts b/src/useClickOutside/index.ts index bbc76354..21e45fbb 100644 --- a/src/useClickOutside/index.ts +++ b/src/useClickOutside/index.ts @@ -1,6 +1,6 @@ -import { type MutableRefObject, type RefObject, useEffect } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { off, on } from '../util/misc.js'; +import {type MutableRefObject, type RefObject, useEffect} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {off, on} from '../util/misc.js'; const DEFAULT_EVENTS = ['mousedown', 'touchstart']; @@ -15,16 +15,18 @@ const DEFAULT_EVENTS = ['mousedown', 'touchstart']; export function useClickOutside( ref: RefObject | MutableRefObject, callback: EventListener, - events: string[] = DEFAULT_EVENTS + events: string[] = DEFAULT_EVENTS, ): void { const cbRef = useSyncedRef(callback); const refRef = useSyncedRef(ref); useEffect(() => { function handler(this: HTMLElement, event: Event) { - if (!refRef.current.current) return; + if (!refRef.current.current) { + return; + } - const { target: evtTarget } = event; + const {target: evtTarget} = event; const cb = cbRef.current; if ( @@ -36,12 +38,12 @@ export function useClickOutside( } for (const name of events) { - on(document, name, handler, { passive: true }); + on(document, name, handler, {passive: true}); } return () => { for (const name of events) { - off(document, name, handler, { passive: true }); + off(document, name, handler, {passive: true}); } }; // eslint-disable-next-line react-hooks/exhaustive-deps diff --git a/src/useConditionalEffect/__docs__/example.stories.tsx b/src/useConditionalEffect/__docs__/example.stories.tsx deleted file mode 100644 index 59405fb2..00000000 --- a/src/useConditionalEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useConditionalEffect, useUpdateEffect } from '../../index.js'; - -export function Example() { - const [state1, setState1] = useState(2); - const [state2, setState2] = useState(2); - - useConditionalEffect( - () => { - // eslint-disable-next-line no-alert - alert('VALUES OF THE COUNTERS ARE EVEN'); - }, - [state1, state2], - [state1, state2], - (conditions) => conditions.every((i) => i && i % 2 === 0), - useUpdateEffect - ); - - return ( -
-
An alert will be displayed when both counters have even values.
- {' '} - -
- ); -} diff --git a/src/useConditionalEffect/__docs__/story.mdx b/src/useConditionalEffect/__docs__/story.mdx deleted file mode 100644 index 1f53ffe1..00000000 --- a/src/useConditionalEffect/__docs__/story.mdx +++ /dev/null @@ -1,47 +0,0 @@ -# useConditionalEffect - -Like `useEffect` but its callback is invoked only if all given conditions match a given predicate. -The default predicate matches if all given conditions are truthy. - -With this hook, you can make any effect hook that matches with `useEffect`'s call signature -conditional by passing the effect hook as an argument to the `effectHook` parameter. By wrapping -other effect hooks this way, you can implement almost any effect logic. - -#### Example - -## Reference - -```ts -export function useConditionalEffect< - Cond extends ConditionsList, - Callback extends EffectCallback = EffectCallback, - Deps extends DependencyList | undefined = DependencyList | undefined, - HookRestArgs extends any[] = any[], - R extends HookRestArgs = HookRestArgs, ->( - callback: Callback, - deps: Deps, - conditions: Cond, - predicate: ConditionsPredicate = truthyAndArrayPredicate, - effectHook: EffectHook = useEffect, - ...effectHookRestArgs: R -): void; -``` - -#### Importing - -#### Arguments - -- **callback** _`EffectCallback`_ - Function that will be passed to the underlying effect hook. -- **deps** _`React.DependencyList`_ - Dependency list like the one passed to `useEffect`. If not - `undefined`, the effect will be triggered when the dependencies change and the given `conditions` - satisfy the `predicate`. -- **conditions** _`ConditionsList`_ - List of conditions. -- **predicate** _`IUseConditionalEffectPredicate>`_ - Predicate that should be - satisfied by every condition in `conditions`. By default, the predicate checks that every condition - in `conditions` is truthy. -- **effectHook** _`EffectHook`_ - Effect hook that will be used to run - `callback`. Must match the type signature of `useEffect`, meaning that the `callback` should be - placed as the first argument and the dependency list as second. -- **...effectHookRestArgs** _`HookRestArgs`_ - Extra arguments that are passed to the `effectHook` - after the `callback` and the dependency list. diff --git a/src/useConditionalEffect/__tests__/dom.ts b/src/useConditionalEffect/index.dom.test.ts similarity index 61% rename from src/useConditionalEffect/__tests__/dom.ts rename to src/useConditionalEffect/index.dom.test.ts index 38e40c6f..1e37094c 100644 --- a/src/useConditionalEffect/__tests__/dom.ts +++ b/src/useConditionalEffect/index.dom.test.ts @@ -1,11 +1,12 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { type DependencyList, type EffectCallback } from 'react'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {type DependencyList, type EffectCallback} from 'react'; +import {describe, expect, it, vi} from 'vitest'; import { truthyAndArrayPredicate, truthyOrArrayPredicate, useConditionalEffect, useUpdateEffect, -} from '../../index.js'; +} from '../index.js'; describe('useConditionalEffect', () => { it('should be defined', () => { @@ -13,113 +14,113 @@ describe('useConditionalEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useConditionalEffect(() => {}, undefined, []); }); expect(result.error).toBeUndefined(); }); it('by default should invoke effect only in case all conditions are truthy', () => { - const spy = jest.fn(); - const { rerender } = renderHook( - ({ cond }) => { + const spy = vi.fn(); + const {rerender} = renderHook( + ({cond}) => { useConditionalEffect(spy, undefined, cond); }, { - initialProps: { cond: [1] as unknown[] }, - } + initialProps: {cond: [1] as unknown[]}, + }, ); expect(spy).toHaveBeenCalledTimes(1); - rerender({ cond: [0, 1, 1] }); + rerender({cond: [0, 1, 1]}); expect(spy).toHaveBeenCalledTimes(1); - rerender({ cond: [1, {}, null] }); + rerender({cond: [1, {}, null]}); expect(spy).toHaveBeenCalledTimes(1); - rerender({ cond: [true, {}, [], 25] }); + rerender({cond: [true, {}, [], 25]}); expect(spy).toHaveBeenCalledTimes(2); }); it('should not be called on mount if conditions are falsy', () => { - const spy = jest.fn(); + const spy = vi.fn(); renderHook( - ({ cond }) => { + ({cond}) => { useConditionalEffect(spy, undefined, cond); }, { - initialProps: { cond: [null] as unknown[] }, - } + initialProps: {cond: [null] as unknown[]}, + }, ); expect(spy).toHaveBeenCalledTimes(0); }); it('should invoke callback only if deps are changed and conditions match predicate', () => { - const spy = jest.fn(); - const { rerender } = renderHook( - ({ cond, deps }) => { + const spy = vi.fn(); + const {rerender} = renderHook( + ({cond, deps}) => { useConditionalEffect(spy, deps, cond); }, { - initialProps: { cond: [false] as unknown[], deps: [1] as any[] }, - } + initialProps: {cond: [false] as unknown[], deps: [1] as any[]}, + }, ); expect(spy).toHaveBeenCalledTimes(0); - rerender({ cond: [false], deps: [2] }); + rerender({cond: [false], deps: [2]}); expect(spy).toHaveBeenCalledTimes(0); - rerender({ cond: [true], deps: [2] }); + rerender({cond: [true], deps: [2]}); expect(spy).toHaveBeenCalledTimes(0); - rerender({ cond: [true], deps: [3] }); + rerender({cond: [true], deps: [3]}); expect(spy).toHaveBeenCalledTimes(1); - rerender({ cond: [true], deps: [3] }); + rerender({cond: [true], deps: [3]}); expect(spy).toHaveBeenCalledTimes(1); - rerender({ cond: [true], deps: [4] }); + rerender({cond: [true], deps: [4]}); expect(spy).toHaveBeenCalledTimes(2); - rerender({ cond: [false], deps: [5] }); + rerender({cond: [false], deps: [5]}); expect(spy).toHaveBeenCalledTimes(2); }); it('should apply custom predicate', () => { - const spy = jest.fn(); - const predicateSpy = jest.fn((conditions: any[]) => truthyOrArrayPredicate(conditions)); - const { rerender } = renderHook( - ({ cond }) => { + const spy = vi.fn(); + const predicateSpy = vi.fn((conditions: any[]) => truthyOrArrayPredicate(conditions)); + const {rerender} = renderHook( + ({cond}) => { useConditionalEffect(spy, undefined, cond, predicateSpy); }, { - initialProps: { cond: [null] as unknown[] }, - } + initialProps: {cond: [null] as unknown[]}, + }, ); expect(predicateSpy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledTimes(0); - rerender({ cond: [true, {}, [], 25] }); + rerender({cond: [true, {}, [], 25]}); expect(predicateSpy).toHaveBeenCalledTimes(2); expect(spy).toHaveBeenCalledTimes(1); - rerender({ cond: [true, false, 0, null] }); + rerender({cond: [true, false, 0, null]}); expect(predicateSpy).toHaveBeenCalledTimes(3); expect(spy).toHaveBeenCalledTimes(2); - rerender({ cond: [undefined, false, 0, null] }); + rerender({cond: [undefined, false, 0, null]}); expect(predicateSpy).toHaveBeenCalledTimes(4); expect(spy).toHaveBeenCalledTimes(2); }); it('should accept custom hooks and pass extra args to it', () => { - const callbackSpy = jest.fn(); - const effectSpy = jest.fn( + const callbackSpy = vi.fn(); + const effectSpy = vi.fn( (cb: EffectCallback, deps: DependencyList | undefined, _number: number) => { useUpdateEffect(cb, deps); - } + }, ); - const { rerender } = renderHook(() => { + const {rerender} = renderHook(() => { useConditionalEffect(callbackSpy, undefined, [true], truthyAndArrayPredicate, effectSpy, 123); }); diff --git a/src/useConditionalEffect/__tests__/ssr.ts b/src/useConditionalEffect/index.ssr.test.ts similarity index 62% rename from src/useConditionalEffect/__tests__/ssr.ts rename to src/useConditionalEffect/index.ssr.test.ts index 1af8ecee..a67fe1f2 100644 --- a/src/useConditionalEffect/__tests__/ssr.ts +++ b/src/useConditionalEffect/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useConditionalEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it, vi} from 'vitest'; +import {useConditionalEffect} from '../index.js'; describe('useConditionalEffect', () => { it('should be defined', () => { @@ -7,15 +8,15 @@ describe('useConditionalEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useConditionalEffect(() => {}, undefined, []); }); expect(result.error).toBeUndefined(); }); it('should not invoke nor effect nor predicate', () => { - const spy = jest.fn(); - const predicateSpy = jest.fn((array: unknown[]) => array.some(Boolean)); + const spy = vi.fn(); + const predicateSpy = vi.fn((array: unknown[]) => array.some(Boolean)); renderHook(() => { useConditionalEffect(spy, undefined, [true], predicateSpy); }); diff --git a/src/useConditionalEffect/index.ts b/src/useConditionalEffect/index.ts index 34613605..34e2d28d 100644 --- a/src/useConditionalEffect/index.ts +++ b/src/useConditionalEffect/index.ts @@ -1,7 +1,7 @@ -import { type DependencyList, useEffect } from 'react'; -import { type ConditionsList, type ConditionsPredicate } from '../types.js'; -import { truthyAndArrayPredicate } from '../util/const.js'; -import { type EffectCallback, type EffectHook } from '../util/misc.js'; +import {type DependencyList, useEffect} from 'react'; +import {type ConditionsList, type ConditionsPredicate} from '../types.js'; +import {truthyAndArrayPredicate} from '../util/const.js'; +import {type EffectCallback, type EffectHook} from '../util/misc.js'; /** * Like `useEffect` but its callback is invoked only if all given conditions match a given predicate. @@ -42,6 +42,6 @@ export function useConditionalEffect< } }) as Callback, deps, - ...effectHookRestArgs + ...effectHookRestArgs, ); } diff --git a/src/useControlledRerenderState/__docs__/example.stories.tsx b/src/useControlledRerenderState/__docs__/example.stories.tsx deleted file mode 100644 index 2ba82311..00000000 --- a/src/useControlledRerenderState/__docs__/example.stories.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import * as React from 'react'; -import { useControlledRerenderState, useToggle } from '../../index.js'; - -export function Example() { - const [state, setState] = useControlledRerenderState(0); - const [doRerender, toggleDoRerender] = useToggle(true); - - return ( -
-
State: {state}
-

- {' '} - -

-
- ); -} diff --git a/src/useControlledRerenderState/__docs__/story.mdx b/src/useControlledRerenderState/__docs__/story.mdx deleted file mode 100644 index 0d3a450a..00000000 --- a/src/useControlledRerenderState/__docs__/story.mdx +++ /dev/null @@ -1,33 +0,0 @@ -# useControlledRerenderState - -Like `React.useState`, but its state setter accepts extra argument, that allows to cancel rerender. - -- Allows to avoid rerender during state set. - -#### Example - -## Reference - -```ts -export type ControlledRerenderDispatch = (value: A, rerender?: boolean) => void; - -export function useControlledRerenderState( - initialState: S | (() => S) -): [S, ControlledRerenderDispatch>]; -export function useControlledRerenderState(): [ - S | undefined, - ControlledRerenderDispatch>, -]; -``` - -#### Importing - -#### Arguments - -Identical to `React.useState`. - -#### Return - -Returned state setter accepts extra-argument, in case it is set to false - component will not be -re-rendered after state set. -In case extra parameter omitted - state setter behaves exactly as native. diff --git a/src/useControlledRerenderState/__tests__/ssr.ts b/src/useControlledRerenderState/__tests__/ssr.ts deleted file mode 100644 index 970ca1eb..00000000 --- a/src/useControlledRerenderState/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useControlledRerenderState } from '../../index.js'; - -describe('useControlledRerenderState', () => { - it('should be defined', () => { - expect(useControlledRerenderState).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useControlledRerenderState()); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useControlledRerenderState/__tests__/dom.ts b/src/useControlledRerenderState/index.dom.test.ts similarity index 61% rename from src/useControlledRerenderState/__tests__/dom.ts rename to src/useControlledRerenderState/index.dom.test.ts index 42e40a65..d70cefc8 100644 --- a/src/useControlledRerenderState/__tests__/dom.ts +++ b/src/useControlledRerenderState/index.dom.test.ts @@ -1,5 +1,6 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useControlledRerenderState } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useControlledRerenderState} from '../index.js'; describe('useControlledRerenderState', () => { it('should be defined', () => { @@ -7,12 +8,12 @@ describe('useControlledRerenderState', () => { }); it('should render', () => { - const { result } = renderHook(() => useControlledRerenderState()); + const {result} = renderHook(() => useControlledRerenderState()); expect(result.error).toBeUndefined(); }); it('should behave as `useState` by default', () => { - const { result } = renderHook(() => useControlledRerenderState(() => 0)); + const {result} = renderHook(() => useControlledRerenderState(() => 0)); expect(result.current[0]).toBe(0); @@ -22,13 +23,13 @@ describe('useControlledRerenderState', () => { expect(result.current[0]).toBe(1); act(() => { - result.current[1]((i) => i + 3); + result.current[1](i => i + 3); }); expect(result.current[0]).toBe(4); }); it('should not re-render in case setter extra-argument set to false', () => { - const { result } = renderHook(() => useControlledRerenderState(() => 0)); + const {result} = renderHook(() => useControlledRerenderState(() => 0)); expect(result.current[0]).toBe(0); @@ -38,7 +39,7 @@ describe('useControlledRerenderState', () => { expect(result.current[0]).toBe(0); act(() => { - result.current[1]((i) => i + 3); + result.current[1](i => i + 3); }); expect(result.current[0]).toBe(4); }); diff --git a/src/useControlledRerenderState/index.ssr.test.ts b/src/useControlledRerenderState/index.ssr.test.ts new file mode 100644 index 00000000..af91bce1 --- /dev/null +++ b/src/useControlledRerenderState/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useControlledRerenderState} from '../index.js'; + +describe('useControlledRerenderState', () => { + it('should be defined', () => { + expect(useControlledRerenderState).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useControlledRerenderState()); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useControlledRerenderState/index.ts b/src/useControlledRerenderState/index.ts index 73d2806c..f4525901 100644 --- a/src/useControlledRerenderState/index.ts +++ b/src/useControlledRerenderState/index.ts @@ -1,7 +1,7 @@ -import { type SetStateAction, useCallback, useRef } from 'react'; -import { useFirstMountState } from '../useFirstMountState/index.js'; -import { useRerender } from '../useRerender/index.js'; -import { resolveHookState } from '../util/resolveHookState.js'; +import {type SetStateAction, useCallback, useRef} from 'react'; +import {useFirstMountState} from '../useFirstMountState/index.js'; +import {useRerender} from '../useRerender/index.js'; +import {resolveHookState} from '../util/resolve-hook-state.js'; export type ControlledRerenderDispatch = (value: A, rerender?: boolean) => void; @@ -9,8 +9,8 @@ export function useControlledRerenderState( initialState: S | (() => S) ): [S, ControlledRerenderDispatch>]; export function useControlledRerenderState(): [ - S | undefined, - ControlledRerenderDispatch>, + S | undefined, + ControlledRerenderDispatch>, ]; /** @@ -18,10 +18,10 @@ export function useControlledRerenderState(): [ * rerender. */ export function useControlledRerenderState( - initialState?: S | (() => S) + initialState?: S | (() => S), ): [S | undefined, ControlledRerenderDispatch>] { const state = useRef( - useFirstMountState() ? resolveHookState(initialState) : undefined + useFirstMountState() ? resolveHookState(initialState) : undefined, ); const rr = useRerender(); diff --git a/src/useCookieValue/__docs__/example.stories.tsx b/src/useCookieValue/__docs__/example.stories.tsx deleted file mode 100644 index 66e09f0a..00000000 --- a/src/useCookieValue/__docs__/example.stories.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import * as React from 'react'; -import { useCookieValue } from '../index.js'; - -export function Example() { - const [cookie, set, remove] = useCookieValue('react-hookz', { expires: 3600 }); - - return ( -
-
- Cookie name: react-hookz -
-
- Cookie value: {cookie} -
-
- { - set(ev.target.value); - }} - /> -
-
-
- -
-
- ); -} diff --git a/src/useCookieValue/__docs__/story.mdx b/src/useCookieValue/__docs__/story.mdx deleted file mode 100644 index a7fce15f..00000000 --- a/src/useCookieValue/__docs__/story.mdx +++ /dev/null @@ -1,59 +0,0 @@ -# useCookieValue - -Manages a single cookie. - -> **IMPORTANT**: Requires separate installation of the `js-cookie` package. - -> **IMPORTANT**: This hook should be directly imported as it has an optional dependency and therefore -> is not exported from the index file. See [importing](#importing) section below. - -- Uses the `js-cookie` package under the hood. -- SSR-friendly. -- Hooks with the same key on the same page are synchronised. This synchronisation does not work - across tabs or on changes that are triggered by third-party code. - -> **_This hook provides a stable API, meaning returned methods do not change between renders_** - -> Uses `null` value as the indicator of cookie absence. `undefined` value means that the cookie value -> hasn't been fetched yet. - -> While using SSR, to avoid hydration mismatch, consider setting the `initializeWithValue` option to -> `false`. This will make the hook yield `undefined` on first render and defer fetching of the cookie -> value until effects are executed. - -#### Example - -## Reference - -```ts -export type UseCookieOptions = Cookies.CookieAttributes & { - initializeWithValue?: boolean; -}; - -export type UseCookieReturn = [ - value: undefined | null | string, - set: (value: string) => void, - remove: () => void, - fetch: () => void, -]; - -export function useCookieValue(key: string, options: UseCookieOptions = {}): UseCookieReturn; -``` - -#### Importing - -#### Arguments - -- **key** _`string`_ - Name of the cookie to manage. -- **options** _`UseCookieOptions`_ _(default: {})_ - Cookie options that will be used during setting - and deleting the cookie. Has one extra option, that relates to the hook itself: -- **initializeWithValue** _`boolean`_ _(default: true)_ - Whether to initialize state with the cookie - value or `undefined`. _We suggest setting this to `false` during SSR._ - -#### Return - -0. **state** - Value of the managed cookie. `undefined` means the value has not been fetched yet, - `null` means the cookie is absent. -1. **set** - Set new value to the cookie. -2. **remove** - Remove the cookie. -3. **fetch** - Re-fetch the cookie value. diff --git a/src/useCookieValue/__tests__/ssr.ts b/src/useCookieValue/__tests__/ssr.ts deleted file mode 100644 index 918aa80d..00000000 --- a/src/useCookieValue/__tests__/ssr.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useCookieValue } from '../index.js'; - -describe('useCookieValue', () => { - it('should be defined', () => { - expect(useCookieValue).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useCookieValue('react-hookz')); - expect(result.error).toBeUndefined(); - }); - - it('should return undefined', () => { - const { result } = renderHook(() => useCookieValue('react-hookz')); - expect(result.current[0]).toBeUndefined(); - }); -}); diff --git a/src/useCookieValue/__tests__/dom.ts b/src/useCookieValue/index.dom.test.ts similarity index 53% rename from src/useCookieValue/__tests__/dom.ts rename to src/useCookieValue/index.dom.test.ts index cfeea9f7..35055b1f 100644 --- a/src/useCookieValue/__tests__/dom.ts +++ b/src/useCookieValue/index.dom.test.ts @@ -1,21 +1,17 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; import Cookies from 'js-cookie'; -import { type UseCookieValueReturn, useCookieValue } from '../index.js'; -import SpyInstance = jest.SpyInstance; +import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useCookieValue, type UseCookieValueReturn} from './index.js'; describe('useCookieValue', () => { - type CookiesGet = typeof Cookies.get; - type CookiesSet = typeof Cookies.set; - type CookiesRemove = typeof Cookies.remove; - - let getSpy: SpyInstance, Parameters>; - let setSpy: SpyInstance, Parameters>; - let removeSpy: SpyInstance, Parameters>; + let getSpy = vi.spyOn(Cookies, 'get'); + let setSpy = vi.spyOn(Cookies, 'set'); + let removeSpy = vi.spyOn(Cookies, 'remove'); beforeAll(() => { - getSpy = jest.spyOn(Cookies, 'get'); - setSpy = jest.spyOn(Cookies, 'set'); - removeSpy = jest.spyOn(Cookies, 'remove'); + getSpy = vi.spyOn(Cookies, 'get'); + setSpy = vi.spyOn(Cookies, 'set'); + removeSpy = vi.spyOn(Cookies, 'remove'); }); afterAll(() => { @@ -35,34 +31,33 @@ describe('useCookieValue', () => { }); it('should render', () => { - const { result } = renderHook(() => useCookieValue('react-hookz')); + const {result} = renderHook(() => useCookieValue('react-hookz')); expect(result.error).toBeUndefined(); }); it('should return cookie value on first render', () => { Cookies.set('react-hookz', 'awesome'); - const { result } = renderHook(() => useCookieValue('react-hookz')); + const {result} = renderHook(() => useCookieValue('react-hookz')); expect((result.all[0] as UseCookieValueReturn)[0]).toBe('awesome'); Cookies.remove('react-hookz'); }); it('should return undefined on first render if `initializeWithValue` set to false', () => { - const { result } = renderHook(() => - useCookieValue('react-hookz', { initializeWithValue: false }) - ); + const {result} = renderHook(() => + useCookieValue('react-hookz', {initializeWithValue: false})); expect((result.all[0] as UseCookieValueReturn)[0]).toBeUndefined(); }); it('should return null if cookie not exists', () => { - const { result } = renderHook(() => useCookieValue('react-hookz')); + const {result} = renderHook(() => useCookieValue('react-hookz')); expect(result.current[0]).toBe(null); expect(getSpy).toHaveBeenCalledWith('react-hookz'); }); it('should set the cookie value on call to `set`', () => { - const { result } = renderHook(() => useCookieValue('react-hookz')); + const {result} = renderHook(() => useCookieValue('react-hookz')); expect(result.current[0]).toBe(null); act(() => { @@ -74,7 +69,7 @@ describe('useCookieValue', () => { }); it('should remove cookie value on call to `remove`', () => { - const { result } = renderHook(() => useCookieValue('react-hookz')); + const {result} = renderHook(() => useCookieValue('react-hookz')); expect(result.current[0]).toBe(null); act(() => { @@ -91,7 +86,7 @@ describe('useCookieValue', () => { }); it('should re-fetch cookie value on call to `fetch`', () => { - const { result } = renderHook(() => useCookieValue('react-hookz')); + const {result} = renderHook(() => useCookieValue('react-hookz')); Cookies.set('react-hookz', 'rulez'); expect(result.current[0]).toBe(null); @@ -104,36 +99,36 @@ describe('useCookieValue', () => { }); it('should be synchronized between several hooks with the same key', () => { - const { result: res1 } = renderHook(() => useCookieValue('react-hookz')); - const { result: res2 } = renderHook(() => useCookieValue('react-hookz')); + const {result: result1} = renderHook(() => useCookieValue('react-hookz')); + const {result: result2} = renderHook(() => useCookieValue('react-hookz')); - expect(res1.current[0]).toBe(null); - expect(res2.current[0]).toBe(null); + expect(result1.current[0]).toBe(null); + expect(result2.current[0]).toBe(null); act(() => { - res1.current[1]('awesome'); + result1.current[1]('awesome'); }); - expect(res1.current[0]).toBe('awesome'); - expect(res2.current[0]).toBe('awesome'); + expect(result1.current[0]).toBe('awesome'); + expect(result2.current[0]).toBe('awesome'); act(() => { - res2.current[2](); + result2.current[2](); }); - expect(res1.current[0]).toBe(null); - expect(res2.current[0]).toBe(null); + expect(result1.current[0]).toBe(null); + expect(result2.current[0]).toBe(null); }); it('should return stable methods', () => { - const { result, rerender } = renderHook(() => useCookieValue('react-hookz')); + const {result, rerender} = renderHook(() => useCookieValue('react-hookz')); - const res1 = result.current; + const result1 = result.current; rerender(); - expect(res1[1]).toBe(result.current[1]); - expect(res1[2]).toBe(result.current[2]); - expect(res1[3]).toBe(result.current[3]); + expect(result1[1]).toBe(result.current[1]); + expect(result1[2]).toBe(result.current[2]); + expect(result1[3]).toBe(result.current[3]); }); }); diff --git a/src/useCookieValue/index.ssr.test.ts b/src/useCookieValue/index.ssr.test.ts new file mode 100644 index 00000000..7f56a74f --- /dev/null +++ b/src/useCookieValue/index.ssr.test.ts @@ -0,0 +1,19 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useCookieValue} from './index.js'; + +describe('useCookieValue', () => { + it('should be defined', () => { + expect(useCookieValue).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useCookieValue('react-hookz')); + expect(result.error).toBeUndefined(); + }); + + it('should return undefined', () => { + const {result} = renderHook(() => useCookieValue('react-hookz')); + expect(result.current[0]).toBeUndefined(); + }); +}); diff --git a/src/useCookieValue/index.ts b/src/useCookieValue/index.ts index aae012b5..ddc5e896 100644 --- a/src/useCookieValue/index.ts +++ b/src/useCookieValue/index.ts @@ -1,9 +1,9 @@ import Cookies from 'js-cookie'; -import { type Dispatch, useCallback, useEffect, useState } from 'react'; -import { useFirstMountState } from '../useFirstMountState/index.js'; -import { useMountEffect } from '../useMountEffect/index.js'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { isBrowser } from '../util/const.js'; +import {type Dispatch, useCallback, useEffect, useState} from 'react'; +import {useFirstMountState} from '../useFirstMountState/index.js'; +import {useMountEffect} from '../useMountEffect/index.js'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {isBrowser} from '../util/const.js'; const cookiesSetters = new Map>>(); @@ -21,9 +21,9 @@ const registerSetter = (key: string, setter: Dispatch) => { const unregisterSetter = (key: string, setter: Dispatch): void => { const setters = cookiesSetters.get(key); - // Almost impossible to test in normal situation - /* istanbul ignore next */ - if (!setters) return; + if (!setters) { + return; + } setters.delete(setter); @@ -35,36 +35,38 @@ const unregisterSetter = (key: string, setter: Dispatch): void => const invokeRegisteredSetters = ( key: string, value: string | null, - skipSetter?: Dispatch + skipSetter?: Dispatch, ) => { const setters = cookiesSetters.get(key); - // Almost impossible to test in normal situation - /* istanbul ignore next */ - if (!setters) return; + if (!setters) { + return; + } for (const s of setters) { - if (s !== skipSetter) s(value); + if (s !== skipSetter) { + s(value); + } } }; export type UseCookieValueOptions< InitializeWithValue extends boolean | undefined = boolean | undefined, > = Cookies.CookieAttributes & - (InitializeWithValue extends undefined - ? { - /** - * Whether to initialize state with the cookie value or `undefined`. - * - * _We suggest setting this to `false` during SSR._ - * - * @default true - */ - initializeWithValue?: InitializeWithValue; - } - : { - initializeWithValue: InitializeWithValue; - }); +(InitializeWithValue extends undefined + ? { + /** + * Whether to initialize state with the cookie value or `undefined`. + * + * _We suggest setting this to `false` during SSR._ + * + * @default true + */ + initializeWithValue?: InitializeWithValue; + } + : { + initializeWithValue: InitializeWithValue; + }); export type UseCookieValueReturn = [value: V, set: (value: string) => void, remove: () => void, fetch: () => void]; @@ -82,17 +84,15 @@ export function useCookieValue(key: string, options?: UseCookieValueOptions): Us */ export function useCookieValue( key: string, - options: UseCookieValueOptions = {} + options: UseCookieValueOptions = {}, ): UseCookieValueReturn { - // No need to test it, dev-only notification about 3rd party library requirement - /* istanbul ignore next */ if (process.env.NODE_ENV === 'development' && Cookies === undefined) { throw new ReferenceError( - 'Dependency `js-cookies` is not installed, it is required for `useCookieValue` work.' + 'Dependency `js-cookies` is not installed, it is required for `useCookieValue` work.', ); } - let { initializeWithValue = true, ...cookiesOptions } = options; + let {initializeWithValue = true, ...cookiesOptions} = options; if (!isBrowser) { initializeWithValue = false; @@ -120,7 +120,7 @@ export function useCookieValue( const isFirstMount = useFirstMountState(); const [state, setState] = useState( - isFirstMount && initializeWithValue ? methods.current.fetchVal() : undefined + isFirstMount && initializeWithValue ? methods.current.fetchVal() : undefined, ); useMountEffect(() => { diff --git a/src/useCounter/__docs__/example.stories.tsx b/src/useCounter/__docs__/example.stories.tsx deleted file mode 100644 index 4b22a9a0..00000000 --- a/src/useCounter/__docs__/example.stories.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { useCounter } from '../../index.js'; - -export function Example() { - const [min, { inc: incMin, dec: decMin }] = useCounter(1); - const [max, { inc: incMax, dec: decMax }] = useCounter(10); - const [value, { inc, dec, set, reset }] = useCounter(5, max, min); - - return ( -
-
- current: {value} [min: {min}; max: {max}] -
-
- Current value: - - - - - - - -
-
- Min value: - - -
-
- Max value: - - -
- ); -} diff --git a/src/useCounter/__docs__/story.mdx b/src/useCounter/__docs__/story.mdx deleted file mode 100644 index a4401eae..00000000 --- a/src/useCounter/__docs__/story.mdx +++ /dev/null @@ -1,43 +0,0 @@ -# useCounter - -Tracks a numeric value and offers functions for manipulating it. - -> **_This hook provides stable API, meaning returned functions do not change between renders_** - -#### Example - -## Reference - -```ts -export function useCounter( - initialValue: InitialState = 0, - max?: number, - min?: number -): [number, CounterActions]; -``` - -#### Importing - -#### Arguments - -- _**initialValue**_ _`InitialState` (default 0)_ - initial value for the counter. A number - or function returning a number. -- _**max**_ _`number` (default `undefined`)_ - maximum value the counter is allowed to be set. -- _**min**_ _`number` (default `undefined`)_ - minimum value the counter is allowed to be set. - -#### Return - -1. **counter** - The current value of the counter. - -2. **methods** - -- **get** - Returns the current value of the counter. -- **inc** - Increments the counter by the given delta (by default, 1). -- **dec** - Decrements the counter by the given delta (by default, 1). -- **set** - Sets the counter to the given value. -- **reset** - Resets the counter to its initial value. If a value is given, it - is set as the new initial value and any future calls to `reset` - without arguments will reset the counter to the given value. - -All methods respect the `max` and `min` parameters. Instead of numerical -arguments, they also accept functions returning numbers. diff --git a/src/useCounter/__tests__/ssr.ts b/src/useCounter/__tests__/ssr.ts deleted file mode 100644 index f55e7b8f..00000000 --- a/src/useCounter/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useCounter } from '../../index.js'; - -describe('useCounter', () => { - it('should be defined', () => { - expect(useCounter).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useCounter()); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useCounter/__tests__/dom.ts b/src/useCounter/index.dom.test.ts similarity index 66% rename from src/useCounter/__tests__/dom.ts rename to src/useCounter/index.dom.test.ts index 8649cae5..0e8654c0 100644 --- a/src/useCounter/__tests__/dom.ts +++ b/src/useCounter/index.dom.test.ts @@ -1,5 +1,6 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useCounter } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useCounter} from '../index.js'; describe('useCounter', () => { it('should be defined', () => { @@ -7,43 +8,43 @@ describe('useCounter', () => { }); it('should render', () => { - const { result } = renderHook(() => useCounter()); + const {result} = renderHook(() => useCounter()); expect(result.error).toBeUndefined(); }); it('should have default initial value of 0', () => { - const { result } = renderHook(() => useCounter()); + const {result} = renderHook(() => useCounter()); const counter = result.current[0]; expect(counter).toEqual(0); }); it('should accept custom initial value', () => { - const { result } = renderHook(() => useCounter(5)); + const {result} = renderHook(() => useCounter(5)); const counter = result.current[0]; expect(counter).toEqual(5); }); it('should accept function returning a number as initial value', () => { - const { result } = renderHook(() => useCounter(() => 5)); + const {result} = renderHook(() => useCounter(() => 5)); const counter = result.current[0]; expect(counter).toEqual(5); }); it('should force initial value to be at least the given minimum value', () => { - const { result } = renderHook(() => useCounter(0, 10, 5)); + const {result} = renderHook(() => useCounter(0, 10, 5)); const counter = result.current[0]; expect(counter).toEqual(5); }); it('should force initial value to be at most the given maximum value', () => { - const { result } = renderHook(() => useCounter(10, 5)); + const {result} = renderHook(() => useCounter(10, 5)); const counter = result.current[0]; expect(counter).toEqual(5); }); it('get returns the current counter value', () => { - const { result } = renderHook(() => useCounter(0)); - const { get } = result.current[1]; + const {result} = renderHook(() => useCounter(0)); + const {get} = result.current[1]; act(() => { expect(get()).toEqual(result.current[0]); @@ -51,8 +52,8 @@ describe('useCounter', () => { }); it('set sets the counter to any value', () => { - const { result } = renderHook(() => useCounter(0)); - const { set } = result.current[1]; + const {result} = renderHook(() => useCounter(0)); + const {set} = result.current[1]; act(() => { set(2); @@ -74,8 +75,8 @@ describe('useCounter', () => { }); it('set respects min and max parameters', () => { - const { result } = renderHook(() => useCounter(0, 10, 0)); - const { set } = result.current[1]; + const {result} = renderHook(() => useCounter(0, 10, 0)); + const {set} = result.current[1]; act(() => { set(-2); @@ -91,8 +92,8 @@ describe('useCounter', () => { }); it('inc increments the counter by 1 if no delta given', () => { - const { result } = renderHook(() => useCounter(0)); - const { inc } = result.current[1]; + const {result} = renderHook(() => useCounter(0)); + const {inc} = result.current[1]; act(() => { inc(); @@ -103,8 +104,8 @@ describe('useCounter', () => { }); it('inc increments the counter by the given delta', () => { - const { result } = renderHook(() => useCounter(0)); - const { inc } = result.current[1]; + const {result} = renderHook(() => useCounter(0)); + const {inc} = result.current[1]; act(() => { inc(2); @@ -113,15 +114,15 @@ describe('useCounter', () => { expect(result.current[0]).toEqual(2); act(() => { - inc((current) => current + 1); + inc(current => current + 1); }); expect(result.current[0]).toEqual(5); }); it('inc respects min and max parameters', () => { - const { result } = renderHook(() => useCounter(0, 5, 0)); - const { inc } = result.current[1]; + const {result} = renderHook(() => useCounter(0, 5, 0)); + const {inc} = result.current[1]; act(() => { inc(-2); @@ -137,8 +138,8 @@ describe('useCounter', () => { }); it('dec decrements the counter by 1 if no delta given', () => { - const { result } = renderHook(() => useCounter(0)); - const { dec } = result.current[1]; + const {result} = renderHook(() => useCounter(0)); + const {dec} = result.current[1]; act(() => { dec(); @@ -149,8 +150,8 @@ describe('useCounter', () => { }); it('dec decrements the counter by the given delta', () => { - const { result } = renderHook(() => useCounter(0)); - const { dec } = result.current[1]; + const {result} = renderHook(() => useCounter(0)); + const {dec} = result.current[1]; act(() => { dec(2); @@ -159,15 +160,15 @@ describe('useCounter', () => { expect(result.current[0]).toEqual(-2); act(() => { - dec((current) => current + 1); + dec(current => current + 1); }); expect(result.current[0]).toEqual(-1); }); it('dec respects min and max parameters', () => { - const { result } = renderHook(() => useCounter(0, 5, 0)); - const { dec } = result.current[1]; + const {result} = renderHook(() => useCounter(0, 5, 0)); + const {dec} = result.current[1]; act(() => { dec(2); @@ -183,8 +184,8 @@ describe('useCounter', () => { }); it('reset without arguments sets the counter to its initial value', () => { - const { result } = renderHook(() => useCounter(0)); - const { reset, inc } = result.current[1]; + const {result} = renderHook(() => useCounter(0)); + const {reset, inc} = result.current[1]; act(() => { inc(); @@ -195,8 +196,8 @@ describe('useCounter', () => { }); it('reset with argument sets the counter to its new initial value', () => { - const { result } = renderHook(() => useCounter(0)); - const { reset, inc } = result.current[1]; + const {result} = renderHook(() => useCounter(0)); + const {reset, inc} = result.current[1]; act(() => { inc(); @@ -214,8 +215,8 @@ describe('useCounter', () => { }); it('reset respects min and max parameters', () => { - const { result } = renderHook(() => useCounter(0, 10, 0)); - const { reset } = result.current[1]; + const {result} = renderHook(() => useCounter(0, 10, 0)); + const {reset} = result.current[1]; act(() => { reset(25); diff --git a/src/useCounter/index.ssr.test.ts b/src/useCounter/index.ssr.test.ts new file mode 100644 index 00000000..b2a0deb6 --- /dev/null +++ b/src/useCounter/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useCounter} from '../index.js'; + +describe('useCounter', () => { + it('should be defined', () => { + expect(useCounter).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useCounter()); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useCounter/index.ts b/src/useCounter/index.ts index ffe264a3..79f1bd33 100644 --- a/src/useCounter/index.ts +++ b/src/useCounter/index.ts @@ -1,7 +1,7 @@ -import { type SetStateAction, useMemo } from 'react'; -import { useMediatedState } from '../useMediatedState/index.js'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { type InitialState, resolveHookState } from '../util/resolveHookState.js'; +import {type SetStateAction, useMemo} from 'react'; +import {useMediatedState} from '../useMediatedState/index.js'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {type InitialState, resolveHookState} from '../util/resolve-hook-state.js'; export type CounterActions = { /** @@ -49,7 +49,7 @@ export type CounterActions = { export function useCounter( initialValue: InitialState = 0, max?: number, - min?: number + min?: number, ): [number, CounterActions] { const [state, setState] = useMediatedState(initialValue, (v: number): number => { if (max !== undefined) { @@ -71,16 +71,16 @@ export function useCounter( get: () => stateRef.current, set: setState, dec(delta = 1) { - setState((value) => value - resolveHookState(delta, value)); + setState(value => value - resolveHookState(delta, value)); }, inc(delta = 1) { - setState((value) => value + resolveHookState(delta, value)); + setState(value => value + resolveHookState(delta, value)); }, reset(value = initialValue) { - setState((v) => resolveHookState(value, v)); + setState(v => resolveHookState(value, v)); }, }), - [initialValue, setState, stateRef] + [initialValue, setState, stateRef], ), ]; } diff --git a/src/useCustomCompareEffect/__docs__/example.stories.tsx b/src/useCustomCompareEffect/__docs__/example.stories.tsx deleted file mode 100644 index 518d0808..00000000 --- a/src/useCustomCompareEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import * as React from 'react'; -import { useCustomCompareEffect, useUpdateEffect } from '../../index.js'; - -/** - * A little hash function to generate a random number used to identify a string. - * @see https://stackoverflow.com/a/52171480/7304377 - */ -const hashWithCYRB53 = (someString: string) => { - let h1 = 0xde_ad_be_ef; - let h2 = 0x41_c6_ce_57; - - /* eslint-disable no-bitwise */ - for (let i = 0, ch; i < someString.length; i++) { - ch = someString.codePointAt(i) ?? 0; - h1 = Math.imul(h1 ^ ch, 2_654_435_761); - h2 = Math.imul(h2 ^ ch, 1_597_334_677); - } - - h1 = Math.imul(h1 ^ (h1 >>> 16), 2_246_822_507) ^ Math.imul(h2 ^ (h2 >>> 13), 3_266_489_909); - h2 = Math.imul(h2 ^ (h2 >>> 16), 2_246_822_507) ^ Math.imul(h1 ^ (h1 >>> 13), 3_266_489_909); - - return 4_294_967_296 * (2_097_151 & h2) + (h1 >>> 0); - /* eslint-enable no-bitwise */ -}; - -export function Example() { - const [valueA, setValueA] = React.useState(0); - const [valueB, setValueB] = React.useState(0); - const [irrelevantValue, setIrrelevantValue] = React.useState(0); - - const incrementValueA = () => { - setValueA((previous) => previous + 1); - }; - - const incrementValueB = () => { - setValueB((previous) => previous + 1); - }; - - const incrementIrrelevantValue = () => { - setIrrelevantValue((previous) => previous + 1); - }; - - const objectA = { key: valueA }; - const objectB = { key: valueB }; - - useCustomCompareEffect( - () => { - // eslint-disable-next-line no-alert - window.alert('Detected checksum difference from previous render!'); - }, - [objectA, objectB], - (a, b) => hashWithCYRB53(JSON.stringify(a)) === hashWithCYRB53(JSON.stringify(b)), - useUpdateEffect - ); - - return ( -
-

- In this example, there exist two objects in memory that are initialized identically. There - is an alert that only appears when the objects differ. You can press either button to adjust - each object's only value. We hash the objects and use those hashes as a checksum to - determine if the objects have changed. This is ridiculous for the objects here (because - they're tiny and simple), but if you have potentially large, complex objects you may - wish to go this route instead of leveraging some sort of deep equality check. -

-

- We're also using `useUpdateEffect` instead of `useEffect` to avoid running the effect - on the initial mount of the component. -

- - - -
-
- Current valueA: {valueA}{' '} - -
-
- Current valueB: {valueB}{' '} - -
-
- Current irrelevantValue: {irrelevantValue}{' '} - -
- - Current hash objectA: {hashWithCYRB53(JSON.stringify(objectA))} - Current hash objectB: {hashWithCYRB53(JSON.stringify(objectB))} -
-
- ); -} diff --git a/src/useCustomCompareEffect/__docs__/story.mdx b/src/useCustomCompareEffect/__docs__/story.mdx deleted file mode 100644 index ec7b2590..00000000 --- a/src/useCustomCompareEffect/__docs__/story.mdx +++ /dev/null @@ -1,39 +0,0 @@ -# useCustomCompareEffect - -Like `useEffect` but uses provided comparator function to validate dependency changes. - -- SSR-friendly, meaning that comparator won't be called on the server. -- Ability to change the underlying effect hook (the default is `useEffect`). - -#### Example - -## Reference - -```ts -export function useCustomCompareEffect< - Callback extends EffectCallback = EffectCallback, - Deps extends DependencyList = DependencyList, - HookRestArgs extends any[] = any[], - R extends HookRestArgs = HookRestArgs, ->( - callback: Callback, - deps: Deps, - comparator: DependenciesComparator = basicDepsComparator, - effectHook: EffectHook = useEffect, - ...effectHookRestArgs: R -): void; -``` - -#### Importing - -#### Arguments - -- **callback** _`EffectCallback`_ - Function that will be passed to the underlying effect hook. -- **deps** _`DependencyList`_ - Dependency list like the one passed to `useEffect`. -- **comparator** _`DependenciesComparator `_ - Function that compares two dependency arrays, - and returns `true` if they're equal. -- **effectHook** _`EffectHook`_ - Effect hook that will be used to run - `callback`. Must match the type signature of `useEffect`, meaning that the `callback` should be - placed as the first argument and the dependency list as second. -- **...effectHookRestArgs** _`HookRestArgs`_ - Extra arguments that are passed to the `effectHook` - after the `callback` and the dependency list. diff --git a/src/useCustomCompareEffect/__tests__/dom.ts b/src/useCustomCompareEffect/index.dom.test.ts similarity index 66% rename from src/useCustomCompareEffect/__tests__/dom.ts rename to src/useCustomCompareEffect/index.dom.test.ts index c9a15b01..56abe902 100644 --- a/src/useCustomCompareEffect/__tests__/dom.ts +++ b/src/useCustomCompareEffect/index.dom.test.ts @@ -1,6 +1,7 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { type DependencyList } from 'react'; -import { type EffectCallback, useCustomCompareEffect, useUpdateEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {type DependencyList} from 'react'; +import {describe, expect, it, vi} from 'vitest'; +import {type EffectCallback, useCustomCompareEffect, useUpdateEffect} from '../index.js'; describe('useCustomCompareEffect', () => { it('should be defined', () => { @@ -8,14 +9,14 @@ describe('useCustomCompareEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useCustomCompareEffect(() => {}, []); }); expect(result.error).toBeUndefined(); }); it('should not call provided comparator on render', () => { - const spy = jest.fn(); + const spy = vi.fn(); renderHook(() => { useCustomCompareEffect(() => {}, [], spy, useUpdateEffect); }); @@ -23,14 +24,14 @@ describe('useCustomCompareEffect', () => { }); it('should call comparator with previous and current deps as args', () => { - const spy = jest.fn(); - const { rerender } = renderHook( - ({ deps }) => { + const spy = vi.fn(); + const {rerender} = renderHook( + ({deps}) => { useCustomCompareEffect(() => {}, deps, spy, useUpdateEffect); }, - { initialProps: { deps: [1, 2] } } + {initialProps: {deps: [1, 2]}}, ); - rerender({ deps: [1, 3] }); + rerender({deps: [1, 3]}); expect(spy).toHaveBeenCalledTimes(1); expect(spy.mock.calls[0][0]).toStrictEqual([1, 2]); @@ -38,20 +39,20 @@ describe('useCustomCompareEffect', () => { }); it('should not pass new deps to underlying effect only if comparator reported unequal deps', () => { - const spy = jest.fn(useUpdateEffect); - const { rerender } = renderHook( - ({ deps }) => { + const spy = vi.fn(useUpdateEffect); + const {rerender} = renderHook( + ({deps}) => { useCustomCompareEffect(() => {}, deps, undefined, spy); }, - { initialProps: { deps: [1, 2] } } + {initialProps: {deps: [1, 2]}}, ); - rerender({ deps: [1, 2] }); + rerender({deps: [1, 2]}); expect(spy).toHaveBeenCalledTimes(2); expect(spy.mock.calls[0][1]).toStrictEqual([1, 2]); expect(spy.mock.calls[0][1]).toBe(spy.mock.calls[1][1]); - rerender({ deps: [1, 3] }); + rerender({deps: [1, 3]}); expect(spy).toHaveBeenCalledTimes(3); expect(spy.mock.calls[2][1]).toStrictEqual([1, 3]); @@ -59,16 +60,16 @@ describe('useCustomCompareEffect', () => { }); it('should pass res argument to underlying hook', () => { - const spy = jest.fn((c: EffectCallback, d: DependencyList, _n: number) => { + const spy = vi.fn((c: EffectCallback, d: DependencyList, _n: number) => { useUpdateEffect(c, d); }); renderHook( - ({ deps }) => { + ({deps}) => { useCustomCompareEffect(() => {}, deps, undefined, spy, 123); }, { - initialProps: { deps: [1, 2] }, - } + initialProps: {deps: [1, 2]}, + }, ); expect(spy.mock.calls[0][2]).toBe(123); diff --git a/src/useCustomCompareEffect/__tests__/ssr.ts b/src/useCustomCompareEffect/index.ssr.test.ts similarity index 64% rename from src/useCustomCompareEffect/__tests__/ssr.ts rename to src/useCustomCompareEffect/index.ssr.test.ts index 09d38325..3a1dd90f 100644 --- a/src/useCustomCompareEffect/__tests__/ssr.ts +++ b/src/useCustomCompareEffect/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useCustomCompareEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it, vi} from 'vitest'; +import {useCustomCompareEffect} from '../index.js'; describe('useCustomCompareEffect', () => { it('should be defined', () => { @@ -7,14 +8,14 @@ describe('useCustomCompareEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useCustomCompareEffect(() => {}, []); }); expect(result.error).toBeUndefined(); }); it('should not invoke comparator', () => { - const spy = jest.fn(); + const spy = vi.fn(); renderHook(() => { useCustomCompareEffect(() => {}, [], spy); }); diff --git a/src/useCustomCompareEffect/index.ts b/src/useCustomCompareEffect/index.ts index 32fe8edc..fe128ff3 100644 --- a/src/useCustomCompareEffect/index.ts +++ b/src/useCustomCompareEffect/index.ts @@ -1,7 +1,7 @@ -import { type DependencyList, useEffect, useRef } from 'react'; -import { type DependenciesComparator } from '../types.js'; -import { isBrowser } from '../util/const.js'; -import { basicDepsComparator, type EffectCallback, type EffectHook } from '../util/misc.js'; +import {type DependencyList, useEffect, useRef} from 'react'; +import {type DependenciesComparator} from '../types.js'; +import {isBrowser} from '../util/const.js'; +import {basicDepsComparator, type EffectCallback, type EffectHook} from '../util/misc.js'; /** * Like `useEffect` but uses provided comparator function to validate dependency changes. diff --git a/src/useCustomCompareMemo/__docs__/example.stories.tsx b/src/useCustomCompareMemo/__docs__/example.stories.tsx deleted file mode 100644 index d5b8ce3c..00000000 --- a/src/useCustomCompareMemo/__docs__/example.stories.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { useReducer, useMemo, useRef } from 'react'; -import { useCustomCompareMemo } from '../../index.js'; - -// Data -const keys = ['firstname', 'name']; - -// Utils -const getRandom = (array: ArrayParameter) => - array[Math.floor(Math.random() * array.length)] as ArrayParameter[number]; -const displayAsJSON = (object: Record) => JSON.stringify(object, undefined, 2); -const reverse = (object: Record) => - Object.fromEntries(Object.entries(object).map(([key, value]) => [value, key])); - -// Hooks -const useForce = () => useReducer((state) => !state, false)[1]; - -export function Example() { - const force = useForce(); - - const reversedPerson = useRef | null>(null); - - const memoCalls = useRef(0); - const retainCalls = useRef(0); - - // eslint-disable-next-line react-hooks/exhaustive-deps - const person = { key: getRandom(keys), value: 'John' }; - - useCustomCompareMemo( - () => { - if (person) { - retainCalls.current++; - - reversedPerson.current = reverse(person); - } - }, - [person] as const, - (savedDeps, deps) => { - const savedDependency = savedDeps[0]; - const dependency = deps[0]; - - return savedDependency.key !== dependency.key; - } - ); - - useMemo(() => { - if (person) { - memoCalls.current++; - } - }, [person]); - - return ( -
- {person && displayAsJSON(person)} -

memo calls: {memoCalls.current}

-

custom memo calls: {retainCalls.current}

- -
- ); -} diff --git a/src/useCustomCompareMemo/__docs__/story.mdx b/src/useCustomCompareMemo/__docs__/story.mdx deleted file mode 100644 index c514f47e..00000000 --- a/src/useCustomCompareMemo/__docs__/story.mdx +++ /dev/null @@ -1,28 +0,0 @@ -# useCustomCompareMemo - -Like useMemo but uses provided comparator function to validate dependency changes. - -#### Example - -## Reference - -```ts -export type DependenciesComparator = ( - a: Deps, - b: Deps -) => boolean; - -function useCustomCompareMemo( - factory: () => T, - deps: Deps, - comparator: DependenciesComparator -): T; -``` - -#### Importing - -#### Arguments - -- **factory** _`() => unknown`_ - useMemo factory function. -- **deps** _`DependencyList`_ - useMemo dependency list. -- **comparator** _`DependenciesComparator`_ - comparator function to validate dependency changes. diff --git a/src/useCustomCompareMemo/__tests__/dom.ts b/src/useCustomCompareMemo/__tests__/dom.ts deleted file mode 100644 index e8e07b3a..00000000 --- a/src/useCustomCompareMemo/__tests__/dom.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks'; -import { useCustomCompareMemo } from '../../index.js'; - -const mockUser = { name: 'John' }; - -type User = typeof mockUser; - -describe('useCustomCompareMemo', () => { - it('should be defined', () => { - expect(useCustomCompareMemo).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => - useCustomCompareMemo( - () => mockUser, - [], - () => true - ) - ); - - expect(result.error).toBeUndefined(); - }); - - it(`should't invoke factory function on each rerender`, () => { - type Props = { user: User }; - const { result, rerender } = renderHook( - ({ user }: Props) => - useCustomCompareMemo( - () => user, - [user], - () => true - ), - { initialProps: { user: mockUser } } - ); - - rerender({ user: { name: 'Jack' } }); - - expect(result.current).toBe(mockUser); - }); - - it('should invoke factory function when user name is not the same', () => { - type Props = { user: User }; - const { result, rerender } = renderHook( - ({ user }: Props) => - useCustomCompareMemo( - () => user, - [user], - (savedDeps, deps) => savedDeps[0].name === deps[0].name - ), - { initialProps: { user: mockUser } } - ); - - rerender({ user: { name: 'John' } }); - - expect(result.current).toBe(mockUser); - - const newUser = { name: 'Mike' }; - rerender({ user: newUser }); - - expect(result.current).toBe(newUser); - }); -}); diff --git a/src/useCustomCompareMemo/__tests__/ssr.ts b/src/useCustomCompareMemo/__tests__/ssr.ts deleted file mode 100644 index f31180ed..00000000 --- a/src/useCustomCompareMemo/__tests__/ssr.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useCustomCompareMemo } from '../../index.js'; - -describe('useCustomCompareMemo', () => { - it('should be defined', () => { - expect(useCustomCompareMemo).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => - useCustomCompareMemo( - () => ({ user: { name: 'John' } }), - [], - () => true - ) - ); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useCustomCompareMemo/index.dom.test.ts b/src/useCustomCompareMemo/index.dom.test.ts new file mode 100644 index 00000000..7442ec71 --- /dev/null +++ b/src/useCustomCompareMemo/index.dom.test.ts @@ -0,0 +1,63 @@ +import {renderHook} from '@testing-library/react-hooks'; +import {describe, expect, it} from 'vitest'; +import {useCustomCompareMemo} from '../index.js'; + +const mockUser = {name: 'John'}; + +type User = typeof mockUser; + +describe('useCustomCompareMemo', () => { + it('should be defined', () => { + expect(useCustomCompareMemo).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => + useCustomCompareMemo( + () => mockUser, + [], + () => true, + )); + + expect(result.error).toBeUndefined(); + }); + + it('should\'t invoke factory function on each rerender', () => { + type Props = {user: User}; + const {result, rerender} = renderHook( + ({user}: Props) => + useCustomCompareMemo( + () => user, + [user], + () => true, + ), + {initialProps: {user: mockUser}}, + ); + + rerender({user: {name: 'Jack'}}); + + expect(result.current).toBe(mockUser); + }); + + it('should invoke factory function when user name is not the same', () => { + type Props = {user: User}; + const {result, rerender} = renderHook( + ({user}: Props) => + useCustomCompareMemo( + () => user, + [user], + (savedDeps, deps) => savedDeps[0].name === deps[0].name, + ), + {initialProps: {user: mockUser}}, + ); + + rerender({user: {name: 'John'}}); + + expect(result.current).toBe(mockUser); + + const newUser = {name: 'Mike'}; + rerender({user: newUser}); + + expect(result.current).toBe(newUser); + }); +}); diff --git a/src/useCustomCompareMemo/index.ssr.test.ts b/src/useCustomCompareMemo/index.ssr.test.ts new file mode 100644 index 00000000..b48c5df0 --- /dev/null +++ b/src/useCustomCompareMemo/index.ssr.test.ts @@ -0,0 +1,19 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useCustomCompareMemo} from '../index.js'; + +describe('useCustomCompareMemo', () => { + it('should be defined', () => { + expect(useCustomCompareMemo).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => + useCustomCompareMemo( + () => ({user: {name: 'John'}}), + [], + () => true, + )); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useCustomCompareMemo/index.ts b/src/useCustomCompareMemo/index.ts index 6f6152ec..cbaf9708 100644 --- a/src/useCustomCompareMemo/index.ts +++ b/src/useCustomCompareMemo/index.ts @@ -1,5 +1,5 @@ -import { useMemo, useRef, type DependencyList } from 'react'; -import { type DependenciesComparator } from '../types.js'; +import {type DependencyList, useMemo, useRef} from 'react'; +import {type DependenciesComparator} from '../types.js'; /** * Like useMemo but uses provided comparator function to validate dependency changes. @@ -12,7 +12,7 @@ import { type DependenciesComparator } from '../types.js'; export const useCustomCompareMemo = ( factory: () => T, deps: Deps, - comparator: DependenciesComparator + comparator: DependenciesComparator, ): T => { const dependencies = useRef(); diff --git a/src/useDebouncedCallback/__docs__/example.stories.tsx b/src/useDebouncedCallback/__docs__/example.stories.tsx deleted file mode 100644 index af2b8713..00000000 --- a/src/useDebouncedCallback/__docs__/example.stories.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { type ComponentProps, useState } from 'react'; -import { useDebouncedCallback } from '../../index.js'; - -export function Example() { - const [state, setState] = useState(''); - - const handleChange: React.ChangeEventHandler = useDebouncedCallback< - NonNullable['onChange']> - >( - (ev) => { - setState(ev.target.value); - }, - [], - 300, - 500 - ); - - return ( -
-
Below state will update 300ms after last change, but at least once every 500ms
-
-
The input`s value is: {state}
- -
- ); -} diff --git a/src/useDebouncedCallback/__docs__/story.mdx b/src/useDebouncedCallback/__docs__/story.mdx deleted file mode 100644 index 2176894f..00000000 --- a/src/useDebouncedCallback/__docs__/story.mdx +++ /dev/null @@ -1,36 +0,0 @@ -# useDebouncedCallback - -Makes passed function debounced, otherwise acts like `useCallback`. -[What is debouncing?](https://css-tricks.com/debouncing-throttling-explained-examples/#debounce) - -The third argument is dependencies list on `useCallback` manner, passed function will be re-wrapped -when delay or dependencies has changed. Changed debounce callbacks still has same timeout, meaning -that calling new debounced function will abort previously scheduled invocation. - -Debounced function is always a void function since original callback invoked later. - -Deferred execution automatically cancelled on component unmount. - -#### Example - -## Reference - -```ts -export function useDebouncedCallback( - callback: (this: This, ...args: Args) => any, - deps: DependencyList, - delay: number, - maxWait = 0 -): DebouncedFunction; -``` - -#### Importing - -#### Arguments - -- **callback** _`(...args: T) => unknown`_ - function that will be debounced. -- **deps** _`React.DependencyList`_ - dependencies list when to update callback. It also replaces - invoked callback for scheduled debounced invocations. -- **delay** _`number`_ - debounce delay. -- **maxWait** _`number`_ _(default: `0`)_ - The maximum time `callback` is allowed to be delayed - before it's invoked. `0` means no max wait. diff --git a/src/useDebouncedCallback/__tests__/dom.ts b/src/useDebouncedCallback/index.dom.test.ts similarity index 55% rename from src/useDebouncedCallback/__tests__/dom.ts rename to src/useDebouncedCallback/index.dom.test.ts index 3a480f8f..64223d1a 100644 --- a/src/useDebouncedCallback/__tests__/dom.ts +++ b/src/useDebouncedCallback/index.dom.test.ts @@ -1,19 +1,20 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useDebouncedCallback } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useDebouncedCallback} from '../index.js'; function testFn(_a: any, _b: any, _c: any) {} describe('useDebouncedCallback', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -21,72 +22,71 @@ describe('useDebouncedCallback', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useDebouncedCallback(() => {}, [], 200); }); expect(result.error).toBeUndefined(); }); it('should return function same length and wrapped name', () => { - let { result } = renderHook(() => - useDebouncedCallback((_a: any, _b: any, _c: any) => {}, [], 200) - ); + let {result} = renderHook(() => + useDebouncedCallback((_a: any, _b: any, _c: any) => {}, [], 200)); expect(result.current.length).toBe(3); - expect(result.current.name).toBe(`anonymous__debounced__200`); + expect(result.current.name).toBe('anonymous__debounced__200'); result = renderHook(() => useDebouncedCallback(testFn, [], 100)).result; expect(result.current.length).toBe(3); - expect(result.current.name).toBe(`testFn__debounced__100`); + expect(result.current.name).toBe('testFn__debounced__100'); }); it('should return new callback if delay is changed', () => { - const { result, rerender } = renderHook( - ({ delay }) => useDebouncedCallback(() => {}, [], delay), + const {result, rerender} = renderHook( + ({delay}) => useDebouncedCallback(() => {}, [], delay), { - initialProps: { delay: 200 }, - } + initialProps: {delay: 200}, + }, ); const cb1 = result.current; - rerender({ delay: 123 }); + rerender({delay: 123}); expect(cb1).not.toBe(result.current); }); it('should run given callback only after specified delay since last call', () => { - const cb = jest.fn(); - const { result } = renderHook(() => useDebouncedCallback(cb, [], 200)); + const cb = vi.fn(); + const {result} = renderHook(() => useDebouncedCallback(cb, [], 200)); result.current(); expect(cb).not.toHaveBeenCalled(); - jest.advanceTimersByTime(100); + vi.advanceTimersByTime(100); result.current(); - jest.advanceTimersByTime(199); + vi.advanceTimersByTime(199); expect(cb).not.toHaveBeenCalled(); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(cb).toHaveBeenCalledTimes(1); }); it('should pass parameters to callback', () => { - const cb = jest.fn((_a: number, _c: string) => {}); - const { result } = renderHook(() => useDebouncedCallback(cb, [], 200)); + const cb = vi.fn((_a: number, _c: string) => {}); + const {result} = renderHook(() => useDebouncedCallback(cb, [], 200)); result.current(1, 'abc'); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(cb).toHaveBeenCalledWith(1, 'abc'); }); it('should cancel previously scheduled call even if parameters changed', () => { - const cb1 = jest.fn(() => {}); - const cb2 = jest.fn(() => {}); + const cb1 = vi.fn(() => {}); + const cb2 = vi.fn(() => {}); - const { result, rerender } = renderHook( - ({ i }) => + const {result, rerender} = renderHook( + ({i}) => useDebouncedCallback( () => { if (i === 1) { @@ -96,88 +96,88 @@ describe('useDebouncedCallback', () => { } }, [i], - 200 + 200, ), - { initialProps: { i: 1 } } + {initialProps: {i: 1}}, ); result.current(); - jest.advanceTimersByTime(100); + vi.advanceTimersByTime(100); - rerender({ i: 2 }); + rerender({i: 2}); result.current(); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(cb1).not.toHaveBeenCalled(); expect(cb2).toHaveBeenCalledTimes(1); }); it('should cancel debounce execution after component unmount', () => { - const cb = jest.fn(); + const cb = vi.fn(); - const { result, unmount } = renderHook(() => useDebouncedCallback(cb, [], 150, 200)); + const {result, unmount} = renderHook(() => useDebouncedCallback(cb, [], 150, 200)); result.current(); expect(cb).not.toHaveBeenCalled(); - jest.advanceTimersByTime(149); + vi.advanceTimersByTime(149); expect(cb).not.toHaveBeenCalled(); unmount(); - jest.advanceTimersByTime(100); + vi.advanceTimersByTime(100); expect(cb).not.toHaveBeenCalled(); }); it('should force execute callback after maxWait milliseconds', () => { - const cb = jest.fn(); + const cb = vi.fn(); - const { result } = renderHook(() => useDebouncedCallback(cb, [], 150, 200)); + const {result} = renderHook(() => useDebouncedCallback(cb, [], 150, 200)); result.current(); expect(cb).not.toHaveBeenCalled(); - jest.advanceTimersByTime(149); + vi.advanceTimersByTime(149); result.current(); expect(cb).not.toHaveBeenCalled(); - jest.advanceTimersByTime(50); + vi.advanceTimersByTime(50); expect(cb).not.toHaveBeenCalled(); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(cb).toHaveBeenCalledTimes(1); }); it('should not execute callback twice if maxWait equals delay', () => { - const cb = jest.fn(); + const cb = vi.fn(); - const { result } = renderHook(() => useDebouncedCallback(cb, [], 200, 200)); + const {result} = renderHook(() => useDebouncedCallback(cb, [], 200, 200)); result.current(); expect(cb).not.toHaveBeenCalled(); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(cb).toHaveBeenCalledTimes(1); }); it('should call updated function only when deps changed', () => { - const cb = jest.fn(); + const cb = vi.fn(); - const { result, rerender } = renderHook( - ({ cb, deps }: { cb: () => void; deps: any[] }) => useDebouncedCallback(cb, deps, 200, 200), + const {result, rerender} = renderHook( + ({cb, deps}: {cb: () => void; deps: any[]}) => useDebouncedCallback(cb, deps, 200, 200), { initialProps: { cb() {}, deps: [0], }, - } + }, ); result.current(); - rerender({ cb, deps: [0] }); + rerender({cb, deps: [0]}); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(cb).toHaveBeenCalledTimes(0); result.current(); - rerender({ cb, deps: [1] }); + rerender({cb, deps: [1]}); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(cb).toHaveBeenCalledTimes(1); }); }); diff --git a/src/useDebouncedCallback/__tests__/ssr.ts b/src/useDebouncedCallback/index.ssr.test.ts similarity index 52% rename from src/useDebouncedCallback/__tests__/ssr.ts rename to src/useDebouncedCallback/index.ssr.test.ts index 75b2e23a..92699f3d 100644 --- a/src/useDebouncedCallback/__tests__/ssr.ts +++ b/src/useDebouncedCallback/index.ssr.test.ts @@ -1,17 +1,18 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useDebouncedCallback } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useDebouncedCallback} from '../index.js'; describe('useDebouncedCallback', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -19,35 +20,35 @@ describe('useDebouncedCallback', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useDebouncedCallback(() => {}, [], 200); }); expect(result.error).toBeUndefined(); }); it('should run given callback only after specified delay since last call', () => { - const cb = jest.fn(); - const { result } = renderHook(() => useDebouncedCallback(cb, [], 200)); + const cb = vi.fn(); + const {result} = renderHook(() => useDebouncedCallback(cb, [], 200)); result.current(); expect(cb).not.toHaveBeenCalled(); - jest.advanceTimersByTime(100); + vi.advanceTimersByTime(100); result.current(); - jest.advanceTimersByTime(199); + vi.advanceTimersByTime(199); expect(cb).not.toHaveBeenCalled(); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(cb).toHaveBeenCalledTimes(1); }); it('should pass parameters to callback', () => { - const cb = jest.fn((_a: number, _c: string) => {}); - const { result } = renderHook(() => useDebouncedCallback(cb, [], 200)); + const cb = vi.fn((_a: number, _c: string) => {}); + const {result} = renderHook(() => useDebouncedCallback(cb, [], 200)); result.current(1, 'abc'); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(cb).toHaveBeenCalledWith(1, 'abc'); }); }); diff --git a/src/useDebouncedCallback/index.ts b/src/useDebouncedCallback/index.ts index 60b3fd87..05fc4e7e 100644 --- a/src/useDebouncedCallback/index.ts +++ b/src/useDebouncedCallback/index.ts @@ -1,5 +1,5 @@ -import { type DependencyList, useEffect, useMemo, useRef } from 'react'; -import { useUnmountEffect } from '../useUnmountEffect/index.js'; +import {type DependencyList, useEffect, useMemo, useRef} from 'react'; +import {useUnmountEffect} from '../useUnmountEffect/index.js'; export type DebouncedFunction any> = ( this: ThisParameterType, @@ -20,12 +20,12 @@ export function useDebouncedCallback any>( callback: Fn, deps: DependencyList, delay: number, - maxWait = 0 + maxWait = 0, ): DebouncedFunction { const timeout = useRef>(); const waitTimeout = useRef>(); const cb = useRef(callback); - const lastCall = useRef<{ args: Parameters; this: ThisParameterType }>(); + const lastCall = useRef<{args: Parameters; this: ThisParameterType}>(); const clear = () => { if (timeout.current) { @@ -51,9 +51,9 @@ export function useDebouncedCallback any>( const execute = () => { clear(); - // Barely possible to test this line - /* istanbul ignore next */ - if (!lastCall.current) return; + if (!lastCall.current) { + return; + } const context = lastCall.current; lastCall.current = undefined; @@ -66,7 +66,7 @@ export function useDebouncedCallback any>( clearTimeout(timeout.current); } - lastCall.current = { args, this: this }; + lastCall.current = {args, this: this}; // Plan regular execution timeout.current = setTimeout(execute, delay); @@ -78,11 +78,11 @@ export function useDebouncedCallback any>( } as DebouncedFunction; Object.defineProperties(wrapped, { - length: { value: callback.length }, - name: { value: `${callback.name || 'anonymous'}__debounced__${delay}` }, + length: {value: callback.length}, + name: {value: `${callback.name || 'anonymous'}__debounced__${delay}`}, }); return wrapped; - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps,@typescript-eslint/no-unsafe-assignment }, [delay, maxWait, ...deps]); } diff --git a/src/useDebouncedEffect/__docs__/example.stories.tsx b/src/useDebouncedEffect/__docs__/example.stories.tsx deleted file mode 100644 index 24a934a6..00000000 --- a/src/useDebouncedEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useDebouncedEffect } from '../../index.js'; - -const HAS_DIGIT_REGEX = /\d/g; - -export function Example() { - const [state, setState] = useState(''); - const [hasNumbers, setHasNumbers] = useState(false); - - useDebouncedEffect( - () => { - setHasNumbers(HAS_DIGIT_REGEX.test(state)); - }, - [state], - 200, - 500 - ); - - return ( -
-
- Digit check will be performed 200ms after last change, but at least once every 500ms -
-
-
{hasNumbers ? 'Input has digits' : 'No digits found in input'}
- { - setState(ev.target.value); - }} - /> -
- ); -} diff --git a/src/useDebouncedEffect/__docs__/story.mdx b/src/useDebouncedEffect/__docs__/story.mdx deleted file mode 100644 index 66e0fb0e..00000000 --- a/src/useDebouncedEffect/__docs__/story.mdx +++ /dev/null @@ -1,27 +0,0 @@ -# useDebouncedEffect - -Like `useEffect`, but the passed function is debounced. - -#### Example - -## Reference - -```ts -export function useDebouncedEffect( - callback: (...args: any[]) => void, - deps: DependencyList, - delay: number, - maxWait = 0 -): void; -``` - -#### Importing - -#### Arguments - -- **callback** _`(...args: any[]) => void`_ - Callback like for `useEffect`, but without ability to - return a cleanup function. -- **deps** _`DependencyList`_ - Dependency list like the one passed to `useEffect`. -- **delay** _`number`_ - Debounce delay (in milliseconds). -- **maxWait** _`number`_ _(default: `0`)_ The maximum time `callback` is allowed to be delayed - before it's invoked. `0` means no max wait. diff --git a/src/useDebouncedEffect/__tests__/dom.ts b/src/useDebouncedEffect/index.dom.test.ts similarity index 59% rename from src/useDebouncedEffect/__tests__/dom.ts rename to src/useDebouncedEffect/index.dom.test.ts index d6ad28e0..483eca8b 100644 --- a/src/useDebouncedEffect/__tests__/dom.ts +++ b/src/useDebouncedEffect/index.dom.test.ts @@ -1,17 +1,18 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useDebouncedEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useDebouncedEffect} from '../index.js'; describe('useDebouncedEffect', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -19,24 +20,24 @@ describe('useDebouncedEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useDebouncedEffect(() => {}, [], 200); }); expect(result.error).toBeUndefined(); }); it('should call effect only after delay', () => { - const spy = jest.fn(); + const spy = vi.fn(); renderHook(() => { useDebouncedEffect(spy, [], 200); }); expect(spy).not.toHaveBeenCalled(); - jest.advanceTimersByTime(199); + vi.advanceTimersByTime(199); expect(spy).not.toHaveBeenCalled(); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(spy).toHaveBeenCalledTimes(1); }); }); diff --git a/src/useDebouncedEffect/__tests__/ssr.ts b/src/useDebouncedEffect/index.ssr.test.ts similarity index 52% rename from src/useDebouncedEffect/__tests__/ssr.ts rename to src/useDebouncedEffect/index.ssr.test.ts index 3b7e8372..3e2b1b4a 100644 --- a/src/useDebouncedEffect/__tests__/ssr.ts +++ b/src/useDebouncedEffect/index.ssr.test.ts @@ -1,17 +1,18 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useDebouncedEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useDebouncedEffect} from '../index.js'; describe('useDebouncedEffect', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -19,7 +20,7 @@ describe('useDebouncedEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useDebouncedEffect(() => {}, [], 200); }); expect(result.error).toBeUndefined(); diff --git a/src/useDebouncedEffect/index.ts b/src/useDebouncedEffect/index.ts index 63cd3567..c283ab9c 100644 --- a/src/useDebouncedEffect/index.ts +++ b/src/useDebouncedEffect/index.ts @@ -1,5 +1,5 @@ -import { type DependencyList, useEffect } from 'react'; -import { useDebouncedCallback } from '../useDebouncedCallback/index.js'; +import {type DependencyList, useEffect} from 'react'; +import {useDebouncedCallback} from '../useDebouncedCallback/index.js'; /** * Like `useEffect`, but the passed function is debounced. @@ -15,7 +15,7 @@ export function useDebouncedEffect( callback: (...args: any[]) => void, deps: DependencyList, delay: number, - maxWait = 0 + maxWait = 0, ): void { // eslint-disable-next-line react-hooks/exhaustive-deps useEffect(useDebouncedCallback(callback, deps, delay, maxWait), deps); diff --git a/src/useDebouncedState/__docs__/example.stories.tsx b/src/useDebouncedState/__docs__/example.stories.tsx deleted file mode 100644 index a89570fb..00000000 --- a/src/useDebouncedState/__docs__/example.stories.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import * as React from 'react'; -import { useDebouncedState } from '../../index.js'; - -export function Example() { - const [state, setState] = useDebouncedState('', 300, 500); - - return ( -
-
Below state will update 300ms after last change, but at least once every 500ms
-
-
The input`s value is: {state}
- { - setState(ev.target.value); - }} - /> -
- ); -} diff --git a/src/useDebouncedState/__docs__/story.mdx b/src/useDebouncedState/__docs__/story.mdx deleted file mode 100644 index 903ae656..00000000 --- a/src/useDebouncedState/__docs__/story.mdx +++ /dev/null @@ -1,29 +0,0 @@ -# useDebouncedState - -Like `useState` but its state setter is debounced. - -#### Example - -## Reference - -```ts -export function useDebouncedState( - initialState: S | (() => S), - delay: number, - maxWait = 0 -): [S, Dispatch>]; -``` - -#### Importing - -#### Arguments - -- **initialState** _`S | (() => S)`_ - Initial state to pass to underlying `useState`. -- **delay** _`number`_ - Debounce delay. -- **maxWait** _`number`_ _(default: `0`)_ - The maximum time `callback` is allowed to be delayed - before it's invoked. `0` means no max wait. - -#### Return - -0. **state** - current state. -1. **setState** - debounced state setter. diff --git a/src/useDebouncedState/__tests__/ssr.ts b/src/useDebouncedState/__tests__/ssr.ts deleted file mode 100644 index 7b9b4749..00000000 --- a/src/useDebouncedState/__tests__/ssr.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useDebouncedState } from '../../index.js'; - -describe('useDebouncedState', () => { - beforeAll(() => { - jest.useFakeTimers(); - }); - - afterEach(() => { - jest.clearAllTimers(); - }); - - afterAll(() => { - jest.useRealTimers(); - }); - - it('should be defined', () => { - expect(useDebouncedState).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useDebouncedState(undefined, 200)); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useDebouncedState/__tests__/dom.ts b/src/useDebouncedState/index.dom.test.ts similarity index 52% rename from src/useDebouncedState/__tests__/dom.ts rename to src/useDebouncedState/index.dom.test.ts index 1ec2d181..15d8f575 100644 --- a/src/useDebouncedState/__tests__/dom.ts +++ b/src/useDebouncedState/index.dom.test.ts @@ -1,17 +1,18 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useDebouncedState } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useDebouncedState} from '../index.js'; describe('useDebouncedState', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -19,23 +20,23 @@ describe('useDebouncedState', () => { }); it('should render', () => { - const { result } = renderHook(() => useDebouncedState(undefined, 200)); + const {result} = renderHook(() => useDebouncedState(undefined, 200)); expect(result.error).toBeUndefined(); }); it('should debounce state set', () => { - const { result } = renderHook(() => useDebouncedState(undefined, 200)); + const {result} = renderHook(() => useDebouncedState(undefined, 200)); expect(result.current[0]).toBe(undefined); result.current[1]('Hello world!'); act(() => { - jest.advanceTimersByTime(199); + vi.advanceTimersByTime(199); }); expect(result.current[0]).toBe(undefined); act(() => { - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); }); expect(result.current[0]).toBe('Hello world!'); }); diff --git a/src/useDebouncedState/index.ssr.test.ts b/src/useDebouncedState/index.ssr.test.ts new file mode 100644 index 00000000..96b91cc4 --- /dev/null +++ b/src/useDebouncedState/index.ssr.test.ts @@ -0,0 +1,26 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useDebouncedState} from '../index.js'; + +describe('useDebouncedState', () => { + beforeAll(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.clearAllTimers(); + }); + + afterAll(() => { + vi.useRealTimers(); + }); + + it('should be defined', () => { + expect(useDebouncedState).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useDebouncedState(undefined, 200)); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useDebouncedState/index.ts b/src/useDebouncedState/index.ts index fbc8fc0a..9069621e 100644 --- a/src/useDebouncedState/index.ts +++ b/src/useDebouncedState/index.ts @@ -1,5 +1,5 @@ -import { type Dispatch, type SetStateAction, useState } from 'react'; -import { useDebouncedCallback } from '../useDebouncedCallback/index.js'; +import {type Dispatch, type SetStateAction, useState} from 'react'; +import {useDebouncedCallback} from '../useDebouncedCallback/index.js'; /** * Like `useState` but its state setter is debounced. @@ -12,7 +12,7 @@ import { useDebouncedCallback } from '../useDebouncedCallback/index.js'; export function useDebouncedState( initialState: S | (() => S), delay: number, - maxWait = 0 + maxWait = 0, ): [S, Dispatch>] { const [state, setState] = useState(initialState); diff --git a/src/useDeepCompareEffect/__docs__/example.stories.tsx b/src/useDeepCompareEffect/__docs__/example.stories.tsx deleted file mode 100644 index b3d657ad..00000000 --- a/src/useDeepCompareEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import * as React from 'react'; -import { useEffect } from 'react'; -import { useDeepCompareEffect, useRerender } from '../../index.js'; - -export function Example() { - const rerender = useRerender(); - - // eslint-disable-next-line react-hooks/exhaustive-deps - const newOnEveryRender = { - name: 'Foo', - }; - - useEffect(() => { - console.log('I do get logged on every render.'); - }, [newOnEveryRender]); - - useDeepCompareEffect(() => { - console.log('I do not get logged on every render.'); - }, [newOnEveryRender]); - - return ( - <> -

Open you browser console and the code for this example.

-

- Repeatedly press the button below. Notice, how the useEffect gets run on every render, but - useDeepCompareEffect does not. This is because useDeepCompareEffect determines dependency - changes by deep comparison instead of by reference like useEffect. -

- - - ); -} diff --git a/src/useDeepCompareEffect/__docs__/story.mdx b/src/useDeepCompareEffect/__docs__/story.mdx deleted file mode 100644 index 3203f6e8..00000000 --- a/src/useDeepCompareEffect/__docs__/story.mdx +++ /dev/null @@ -1,38 +0,0 @@ -# useDeepCompareEffect - -Like `useEffect`, but uses `@react-hookz/deep-equal` comparator function to validate deep dependency -changes. - -- SSR-friendly, meaning that the comparator won't be called on the server. -- Ability to change the underlying effect hook (the default is `useEffect`). -- Uses the fastest deep-comparator yet - [@react-hookz/deep-equal](https://github.com/react-hookz/deep-equal). - -#### Example - -## Reference - -```ts -export function useCustomCompareEffect< - Callback extends EffectCallback = EffectCallback, - Deps extends DependencyList = DependencyList, - HookRestArgs extends any[] = any[], - R extends HookRestArgs = HookRestArgs, ->( - callback: Callback, - deps: Deps, - effectHook: EffectHook = useEffect, - ...effectHookRestArgs: R -): void; -``` - -#### Importing - -#### Arguments - -- **callback** _`EffectCallback`_ - Function that will be passed to the underlying effect hook. -- **deps** _`React.DependencyList`_ - Dependency list like the one passed to `useEffect`. -- **effectHook** _`EffectHook`_ - Effect hook that will be used to run - `callback`. Must match the type signature of `useEffect`, meaning that the `callback` should be - placed as the first argument and the dependency list as second. -- **...effectHookRestArgs** _`HookRestArgs`_ - Extra arguments that are passed to the `effectHook` - after the `callback` and the dependency list. diff --git a/src/useDeepCompareEffect/__tests__/dom.ts b/src/useDeepCompareEffect/index.dom.test.ts similarity index 55% rename from src/useDeepCompareEffect/__tests__/dom.ts rename to src/useDeepCompareEffect/index.dom.test.ts index faff4811..39cb0007 100644 --- a/src/useDeepCompareEffect/__tests__/dom.ts +++ b/src/useDeepCompareEffect/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useDeepCompareEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useDeepCompareEffect} from '../index.js'; describe('useDeepCompareEffect', () => { it('should be defined', () => { @@ -7,32 +8,32 @@ describe('useDeepCompareEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useDeepCompareEffect(() => {}, []); }); expect(result.error).toBeUndefined(); }); it('should run only in case deps are changed', () => { - const spy = jest.fn(); - const { rerender } = renderHook( - ({ deps }) => { + const spy = vi.fn(); + const {rerender} = renderHook( + ({deps}) => { useDeepCompareEffect(spy, deps); }, { - initialProps: { deps: [{ foo: 'bar' }] }, - } + initialProps: {deps: [{foo: 'bar'}]}, + }, ); expect(spy).toHaveBeenCalledTimes(1); - rerender({ deps: [{ foo: 'bar' }] }); + rerender({deps: [{foo: 'bar'}]}); expect(spy).toHaveBeenCalledTimes(1); - rerender({ deps: [{ foo: 'baz' }] }); + rerender({deps: [{foo: 'baz'}]}); expect(spy).toHaveBeenCalledTimes(2); - rerender({ deps: [{ foo: 'baz' }] }); + rerender({deps: [{foo: 'baz'}]}); expect(spy).toHaveBeenCalledTimes(2); }); }); diff --git a/src/useDeepCompareEffect/__tests__/ssr.ts b/src/useDeepCompareEffect/index.ssr.test.ts similarity index 55% rename from src/useDeepCompareEffect/__tests__/ssr.ts rename to src/useDeepCompareEffect/index.ssr.test.ts index 8372431a..14e4fa5b 100644 --- a/src/useDeepCompareEffect/__tests__/ssr.ts +++ b/src/useDeepCompareEffect/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useDeepCompareEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useDeepCompareEffect} from '../index.js'; describe('useDeepCompareEffect', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useDeepCompareEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useDeepCompareEffect(() => {}, []); }); expect(result.error).toBeUndefined(); diff --git a/src/useDeepCompareEffect/index.ts b/src/useDeepCompareEffect/index.ts index 0275e66d..d95c5f27 100644 --- a/src/useDeepCompareEffect/index.ts +++ b/src/useDeepCompareEffect/index.ts @@ -1,7 +1,7 @@ -import { isEqual } from '@react-hookz/deep-equal'; -import { type DependencyList, useEffect } from 'react'; -import { useCustomCompareEffect } from '../useCustomCompareEffect/index.js'; -import { type EffectCallback, type EffectHook } from '../util/misc.js'; +import {isEqual} from '@react-hookz/deep-equal'; +import {type DependencyList, useEffect} from 'react'; +import {useCustomCompareEffect} from '../useCustomCompareEffect/index.js'; +import {type EffectCallback, type EffectHook} from '../util/misc.js'; /** * Like `useEffect`, but uses `@react-hookz/deep-equal` comparator function to validate deep diff --git a/src/useDeepCompareMemo/__docs__/example.stories.tsx b/src/useDeepCompareMemo/__docs__/example.stories.tsx deleted file mode 100644 index b54bf8f5..00000000 --- a/src/useDeepCompareMemo/__docs__/example.stories.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import { useMemo } from 'react'; -import { useRerender, useDeepCompareMemo } from '../../index.js'; - -export function Example() { - const newOnEveryRender = { value: 'Foo' }; - // eslint-disable-next-line react-hooks/exhaustive-deps - const unstable = useMemo(() => Math.floor(Math.random() * 10), [newOnEveryRender]); - - const stable = useDeepCompareMemo(() => Math.floor(Math.random() * 10), [newOnEveryRender]); - - const rerender = useRerender(); - return ( - <> -
-

When you click this button:

- -

, you notice, that the useDeepCompareMemo value does not change at all,

-
-

even though its dependencies change on every render.

-
-

useMemo: {unstable}

-

useDeepCompareMemo: {stable}

- - ); -} diff --git a/src/useDeepCompareMemo/__docs__/story.mdx b/src/useDeepCompareMemo/__docs__/story.mdx deleted file mode 100644 index 926f173b..00000000 --- a/src/useDeepCompareMemo/__docs__/story.mdx +++ /dev/null @@ -1,27 +0,0 @@ -# useDeepCompareMemo - -Like `useMemo` but uses `@react-hookz/deep-equal` comparator function to validate deep dependency changes. - -- SSR-friendly, meaning that the comparator won't be called on the server. -- Uses yet fastest deep-comparator - [@react-hookz/deep-equal](https://github.com/react-hookz/deep-equal). - -#### Example - -## Reference - -```ts -export function useDeepCompareMemo(factory: () => T, deps: Deps): T; -``` - -#### Importing - -#### Arguments - -- **factory** `() => T` - Function calculating the memoized value. Passed to the underlying `useMemo`. -- **deps** `DependencyList` - List of all reactive values referenced by `factory`. Passed to the `deps` parameter of the underlying `useMemo`. - -#### Return - -Initially returns the result of calling `factory`. This value is memoized and returned on every -render, until the dependencies change, determined by deep comparison, at which point `factory` will be called again and the resulting -value will be memoized. diff --git a/src/useDeepCompareMemo/__tests__/dom.ts b/src/useDeepCompareMemo/index.dom.test.ts similarity index 50% rename from src/useDeepCompareMemo/__tests__/dom.ts rename to src/useDeepCompareMemo/index.dom.test.ts index d63a2cad..2f13d6a3 100644 --- a/src/useDeepCompareMemo/__tests__/dom.ts +++ b/src/useDeepCompareMemo/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useDeepCompareMemo } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useDeepCompareMemo} from '../index.js'; describe('useDeepCompareMemo', () => { it('should be defined', () => { @@ -7,28 +8,28 @@ describe('useDeepCompareMemo', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useDeepCompareMemo(() => {}, []); }); expect(result.error).toBeUndefined(); }); it('should run only if dependencies change, defined by deep comparison', () => { - const spy = jest.fn(); - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - const { rerender } = renderHook(({ deps }) => useDeepCompareMemo(spy, deps), { - initialProps: { deps: [{ foo: 'bar' }] }, + const spy = vi.fn(() => 1); + + const {rerender} = renderHook(({deps}) => useDeepCompareMemo(spy, deps), { + initialProps: {deps: [{foo: 'bar'}]}, }); expect(spy).toHaveBeenCalledTimes(1); - rerender({ deps: [{ foo: 'bar' }] }); + rerender({deps: [{foo: 'bar'}]}); expect(spy).toHaveBeenCalledTimes(1); - rerender({ deps: [{ foo: 'baz' }] }); + rerender({deps: [{foo: 'baz'}]}); expect(spy).toHaveBeenCalledTimes(2); - rerender({ deps: [{ foo: 'baz' }] }); + rerender({deps: [{foo: 'baz'}]}); expect(spy).toHaveBeenCalledTimes(2); }); }); diff --git a/src/useDeepCompareMemo/__tests__/ssr.ts b/src/useDeepCompareMemo/index.ssr.test.ts similarity index 55% rename from src/useDeepCompareMemo/__tests__/ssr.ts rename to src/useDeepCompareMemo/index.ssr.test.ts index 7f59df23..e4bd28aa 100644 --- a/src/useDeepCompareMemo/__tests__/ssr.ts +++ b/src/useDeepCompareMemo/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useDeepCompareMemo } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useDeepCompareMemo} from '../index.js'; describe('useDeepCompareMemo', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useDeepCompareMemo', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useDeepCompareMemo(() => {}, []); }); expect(result.error).toBeUndefined(); diff --git a/src/useDeepCompareMemo/index.ts b/src/useDeepCompareMemo/index.ts index 1175707b..86af2f5b 100644 --- a/src/useDeepCompareMemo/index.ts +++ b/src/useDeepCompareMemo/index.ts @@ -1,6 +1,6 @@ -import { isEqual } from '@react-hookz/deep-equal'; -import { type DependencyList } from 'react'; -import { useCustomCompareMemo } from '../useCustomCompareMemo/index.js'; +import {isEqual} from '@react-hookz/deep-equal'; +import {type DependencyList} from 'react'; +import {useCustomCompareMemo} from '../useCustomCompareMemo/index.js'; /** * Like useMemo but validates dependency changes using deep equality check instead of reference check. diff --git a/src/useDocumentVisibility/__docs__/example.stories.tsx b/src/useDocumentVisibility/__docs__/example.stories.tsx deleted file mode 100644 index fb7e6ffd..00000000 --- a/src/useDocumentVisibility/__docs__/example.stories.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import * as React from 'react'; -import { useEffect } from 'react'; -import { useDocumentVisibility } from '../../index.js'; - -export function Example() { - const isVisible = useDocumentVisibility(); - - useEffect(() => { - if (!isVisible) { - // eslint-disable-next-line no-alert - alert('Document was not visible'); - } - }, [isVisible]); - - return ( -
-

- The document is {isVisible ? 'visible' : 'hidden'} -

-
- ); -} diff --git a/src/useDocumentVisibility/__docs__/story.mdx b/src/useDocumentVisibility/__docs__/story.mdx deleted file mode 100644 index 8a28561f..00000000 --- a/src/useDocumentVisibility/__docs__/story.mdx +++ /dev/null @@ -1,18 +0,0 @@ -# useDocumentVisibility - -Returns a boolean indicating whether the document is visible or not. - -#### Example - -## Reference - -```ts -function useDocumentVisibility(initializeWithValue = true): boolean | undefined; -``` - -#### Importing - -#### Arguments - -- **initializeWithValue** _`boolean | undefined`_ _(default: `true`)_ - Whether to initialize state - with the document visibility state or `undefined`. _Set this to `false` during SSR._ diff --git a/src/useDocumentVisibility/__tests__/dom.ts b/src/useDocumentVisibility/index.dom.test.ts similarity index 81% rename from src/useDocumentVisibility/__tests__/dom.ts rename to src/useDocumentVisibility/index.dom.test.ts index 40370cf3..90b11790 100644 --- a/src/useDocumentVisibility/__tests__/dom.ts +++ b/src/useDocumentVisibility/index.dom.test.ts @@ -1,5 +1,6 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useDocumentVisibility } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useDocumentVisibility} from '../index.js'; describe('useDocumentVisibility', () => { it('should be defined', () => { @@ -27,7 +28,7 @@ describe('useDocumentVisibility', () => { }); { - const { result } = renderHook(() => useDocumentVisibility(false)); + const {result} = renderHook(() => useDocumentVisibility(false)); expect(result.current).toBe(false); expect(result.all[0]).toBe(undefined); @@ -39,7 +40,7 @@ describe('useDocumentVisibility', () => { }); { - const { result } = renderHook(() => useDocumentVisibility(false)); + const {result} = renderHook(() => useDocumentVisibility(false)); expect(result.current).toBe(true); expect(result.all[0]).toBe(undefined); @@ -52,7 +53,7 @@ describe('useDocumentVisibility', () => { value: 'hidden', }); - const { result } = renderHook(() => useDocumentVisibility()); + const {result} = renderHook(() => useDocumentVisibility()); expect(result.current).toBe(false); diff --git a/src/useDocumentVisibility/__tests__/ssr.ts b/src/useDocumentVisibility/index.ssr.test.ts similarity index 75% rename from src/useDocumentVisibility/__tests__/ssr.ts rename to src/useDocumentVisibility/index.ssr.test.ts index fe1a417b..8affd2ba 100644 --- a/src/useDocumentVisibility/__tests__/ssr.ts +++ b/src/useDocumentVisibility/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useDocumentVisibility } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useDocumentVisibility} from '../index.js'; describe('useDocumentVisibility', () => { it('should be defined', () => { diff --git a/src/useDocumentVisibility/index.ts b/src/useDocumentVisibility/index.ts index 15a6f8eb..c8377c4d 100644 --- a/src/useDocumentVisibility/index.ts +++ b/src/useDocumentVisibility/index.ts @@ -1,7 +1,7 @@ -import { useState } from 'react'; -import { useEventListener } from '../useEventListener/index.js'; -import { useMountEffect } from '../useMountEffect/index.js'; -import { isBrowser } from '../util/const.js'; +import {useState} from 'react'; +import {useEventListener} from '../useEventListener/index.js'; +import {useMountEffect} from '../useMountEffect/index.js'; +import {isBrowser} from '../util/const.js'; const isDocumentVisible = () => document.visibilityState === 'visible'; @@ -15,7 +15,7 @@ export function useDocumentVisibility(initializeWithValue?: true): boolean; */ export function useDocumentVisibility(initializeWithValue = true): boolean | undefined { const [isVisible, setIsVisible] = useState( - isBrowser && initializeWithValue ? isDocumentVisible() : undefined + isBrowser && initializeWithValue ? isDocumentVisible() : undefined, ); useMountEffect(() => { diff --git a/src/useEventListener/__docs__/example.stories.tsx b/src/useEventListener/__docs__/example.stories.tsx deleted file mode 100644 index efcfde71..00000000 --- a/src/useEventListener/__docs__/example.stories.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useEventListener, useToggle } from '../../index.js'; - -export function Example() { - const [state, setState] = useState(); - const [mounted, toggleMounted] = useToggle(true); - - function ToggledComponent() { - useEventListener( - window, - 'mousemove', - () => { - setState(new Date()); - }, - { passive: true } - ); - - return
Datetime updating component is mounted.
; - } - - return ( -
-
- The datetime shown below is updated on window's mousemove event. -
- You can unmount the datetime updating component by clicking the button below to ensure that - the event is unsubscribed from when the component unmounts. -
- -
-
{state ? `Cursor last moved: ${state.toString()}.` : 'Cursor not moved yet.'}
- -
-
- {mounted && } - -
-
- ); -} diff --git a/src/useEventListener/__docs__/story.mdx b/src/useEventListener/__docs__/story.mdx deleted file mode 100644 index a29966ed..00000000 --- a/src/useEventListener/__docs__/story.mdx +++ /dev/null @@ -1,29 +0,0 @@ -# useEventListener - -Subscribes an event listener to a target element. - -- Automatically unsubscribes the event listener on component unmount. -- Properly handles event listener objects. -- SSR-friendly. -- Full TypeScript support for any target element. - -#### Example - -## Reference - -```ts -export function useEventListener( - target: RefObject | T | null, - ...params: - | Parameters - | [string, EventListenerOrEventListenerObject | ((...args: any[]) => any), ...any] -): void; -``` - -#### Importing - -#### Arguments - -- **target** _`ITargetOrTargetRef`_ - An HTML element or ref object containing an HTML element. -- **params** - Parameters specific to the target element's `addEventListener` method. Commonly - something like `[eventName, listener, options]`. diff --git a/src/useEventListener/__tests__/dom.ts b/src/useEventListener/index.dom.test.ts similarity index 67% rename from src/useEventListener/__tests__/dom.ts rename to src/useEventListener/index.dom.test.ts index e246da68..1c71e093 100644 --- a/src/useEventListener/__tests__/dom.ts +++ b/src/useEventListener/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useEventListener } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useEventListener} from '../index.js'; describe('useEventListener', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useEventListener', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useEventListener(null, '', () => {}); }); expect(result.error).toBeUndefined(); @@ -15,11 +16,11 @@ describe('useEventListener', () => { it('should bind listener on mount and unbind on unmount', () => { const div = document.createElement('div'); - const addSpy = jest.spyOn(div, 'addEventListener'); - const removeSpy = jest.spyOn(div, 'removeEventListener'); + const addSpy = vi.spyOn(div, 'addEventListener'); + const removeSpy = vi.spyOn(div, 'removeEventListener'); - const { rerender, unmount } = renderHook(() => { - useEventListener(div, 'resize', () => {}, { passive: true }); + const {rerender, unmount} = renderHook(() => { + useEventListener(div, 'resize', () => {}, {passive: true}); }); expect(addSpy).toHaveBeenCalledTimes(1); @@ -36,16 +37,16 @@ describe('useEventListener', () => { it('should work with react refs', () => { const div = document.createElement('div'); - const addSpy = jest.spyOn(div, 'addEventListener'); - const removeSpy = jest.spyOn(div, 'removeEventListener'); + const addSpy = vi.spyOn(div, 'addEventListener'); + const removeSpy = vi.spyOn(div, 'removeEventListener'); - const ref = { current: div }; - const { rerender, unmount } = renderHook(() => { - useEventListener(ref, 'resize', () => {}, { passive: true }); + const ref = {current: div}; + const {rerender, unmount} = renderHook(() => { + useEventListener(ref, 'resize', () => {}, {passive: true}); }); expect(addSpy).toHaveBeenCalledTimes(1); - expect(addSpy.mock.calls[0][2]).toStrictEqual({ passive: true }); + expect(addSpy.mock.calls[0][2]).toStrictEqual({passive: true}); expect(removeSpy).toHaveBeenCalledTimes(0); rerender(); @@ -60,13 +61,13 @@ describe('useEventListener', () => { it('should invoke provided function on event trigger with proper context', () => { const div = document.createElement('div'); let context: any; - const spy = jest.fn(function (this: any) { + const spy = vi.fn(function (this: any) { // eslint-disable-next-line @typescript-eslint/no-this-alias,@typescript-eslint/no-unsafe-assignment,unicorn/no-this-assignment context = this; }); renderHook(() => { - useEventListener(div, 'resize', spy, { passive: true }); + useEventListener(div, 'resize', spy, {passive: true}); }); const evt = new Event('resize'); @@ -79,13 +80,13 @@ describe('useEventListener', () => { it('should properly handle event listener objects', () => { const div = document.createElement('div'); let context: any; - const spy = jest.fn(function (this: any) { + const spy = vi.fn(function (this: any) { // eslint-disable-next-line @typescript-eslint/no-this-alias,@typescript-eslint/no-unsafe-assignment,unicorn/no-this-assignment context = this; }); renderHook(() => { - useEventListener(div, 'resize', { handleEvent: spy }, { passive: true }); + useEventListener(div, 'resize', {handleEvent: spy}, {passive: true}); }); const evt = new Event('resize'); diff --git a/src/useEventListener/__tests__/ssr.ts b/src/useEventListener/index.ssr.test.ts similarity index 56% rename from src/useEventListener/__tests__/ssr.ts rename to src/useEventListener/index.ssr.test.ts index d3b5f65e..5ebeb215 100644 --- a/src/useEventListener/__tests__/ssr.ts +++ b/src/useEventListener/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useEventListener } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useEventListener} from '../index.js'; describe('useEventListener', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useEventListener', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useEventListener(null, 'random name', () => {}); }); expect(result.error).toBeUndefined(); diff --git a/src/useEventListener/index.ts b/src/useEventListener/index.ts index a3d08921..de4c07b7 100644 --- a/src/useEventListener/index.ts +++ b/src/useEventListener/index.ts @@ -1,7 +1,7 @@ -import { type RefObject, useEffect, useMemo } from 'react'; -import { useIsMounted } from '../useIsMounted/index.js'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { hasOwnProperty, off, on } from '../util/misc.js'; +import {type RefObject, useEffect, useMemo} from 'react'; +import {useIsMounted} from '../useIsMounted/index.js'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {hasOwnProperty, off, on} from '../util/misc.js'; /** * An HTML element or ref object containing an HTML element. @@ -22,18 +22,16 @@ export function useEventListener( const listenerRef = useSyncedRef(params[1]); const eventListener = useMemo( () => - // As some event listeners designed to be used through `this` - // it is better to make listener a conventional function as it - // infers call context + // As some event listeners designed to be used through `this` + // it is better to make listener a conventional function as it + // infers call context function (this: T, ...args) { - // Normally, such situation should not happen, but better to - // have back covered - /* istanbul ignore next */ - if (!isMounted()) return; + if (!isMounted()) { + return; + } // We dont care if non-listener provided, simply dont do anything - /* istanbul ignore else */ if (typeof listenerRef.current === 'function') { listenerRef.current.apply(this, args); } else if (typeof listenerRef.current!.handleEvent === 'function') { @@ -42,12 +40,14 @@ export function useEventListener( }, // eslint-disable-next-line react-hooks/exhaustive-deps - [] + [], ); useEffect(() => { const tgt = isRefObject(target) ? target.current : target; - if (!tgt) return; + if (!tgt) { + return; + } const restParams: unknown[] = params.slice(2); diff --git a/src/useFirstMountState/__docs__/example.stories.tsx b/src/useFirstMountState/__docs__/example.stories.tsx deleted file mode 100644 index bb00f3d0..00000000 --- a/src/useFirstMountState/__docs__/example.stories.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import * as React from 'react'; -import { useFirstMountState, useRerender } from '../../index.js'; - -export function Example() { - const isFirstMount = useFirstMountState(); - const rerender = useRerender(); - - return ( -
-
{isFirstMount ? 'This is the first render.' : 'This is not the first render.'}
- -
- ); -} diff --git a/src/useFirstMountState/__docs__/story.mdx b/src/useFirstMountState/__docs__/story.mdx deleted file mode 100644 index f0c4a2cc..00000000 --- a/src/useFirstMountState/__docs__/story.mdx +++ /dev/null @@ -1,17 +0,0 @@ -# useFirstMountState - -Returns a boolean that is `true` only on first render. - -#### Example - -## Reference - -```ts -function useFirstMountState(): boolean; -``` - -#### Importing - -#### Return - -`true` on first render, `false` otherwise. diff --git a/src/useFirstMountState/__tests__/ssr.ts b/src/useFirstMountState/__tests__/ssr.ts deleted file mode 100644 index 62077b8a..00000000 --- a/src/useFirstMountState/__tests__/ssr.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useFirstMountState } from '../../index.js'; - -describe('useFirstMountState', () => { - it('should return true on first render', () => { - const { result } = renderHook(() => useFirstMountState()); - - expect(result.current).toBe(true); - }); -}); diff --git a/src/useFirstMountState/__tests__/dom.ts b/src/useFirstMountState/index.dom.test.ts similarity index 55% rename from src/useFirstMountState/__tests__/dom.ts rename to src/useFirstMountState/index.dom.test.ts index 775f8f0d..46412b18 100644 --- a/src/useFirstMountState/__tests__/dom.ts +++ b/src/useFirstMountState/index.dom.test.ts @@ -1,15 +1,16 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useFirstMountState } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useFirstMountState} from '../index.js'; describe('useFirstMountState', () => { it('should return true on first render', () => { - const { result } = renderHook(() => useFirstMountState()); + const {result} = renderHook(() => useFirstMountState()); expect(result.current).toBe(true); }); it('should return false on second and next renders', () => { - const { result, rerender } = renderHook(() => useFirstMountState()); + const {result, rerender} = renderHook(() => useFirstMountState()); expect(result.current).toBe(true); diff --git a/src/useFirstMountState/index.ssr.test.ts b/src/useFirstMountState/index.ssr.test.ts new file mode 100644 index 00000000..0c8882d4 --- /dev/null +++ b/src/useFirstMountState/index.ssr.test.ts @@ -0,0 +1,11 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useFirstMountState} from '../index.js'; + +describe('useFirstMountState', () => { + it('should return true on first render', () => { + const {result} = renderHook(() => useFirstMountState()); + + expect(result.current).toBe(true); + }); +}); diff --git a/src/useFirstMountState/index.ts b/src/useFirstMountState/index.ts index 57c39ba5..0117b5ef 100644 --- a/src/useFirstMountState/index.ts +++ b/src/useFirstMountState/index.ts @@ -1,4 +1,4 @@ -import { useEffect, useRef } from 'react'; +import {useEffect, useRef} from 'react'; /** * Returns a boolean that is `true` only on first render. diff --git a/src/useFunctionalState/__docs__/story.mdx b/src/useFunctionalState/__docs__/story.mdx deleted file mode 100644 index 47da2f35..00000000 --- a/src/useFunctionalState/__docs__/story.mdx +++ /dev/null @@ -1,15 +0,0 @@ -# useFunctionalState - -Like `useState` but instead of raw state, state getter returned. - -## Reference - -```ts -export function useFunctionalState( - initialState: S | (() => S) -): [() => S, React.Dispatch>]; -export function useFunctionalState(): [ - () => S | undefined, - React.Dispatch>, -]; -``` diff --git a/src/useFunctionalState/__tests__/dom.ts b/src/useFunctionalState/index.dom.test.ts similarity index 61% rename from src/useFunctionalState/__tests__/dom.ts rename to src/useFunctionalState/index.dom.test.ts index 1aa159d0..298e00a3 100644 --- a/src/useFunctionalState/__tests__/dom.ts +++ b/src/useFunctionalState/index.dom.test.ts @@ -1,5 +1,6 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useFunctionalState } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useFunctionalState} from '../index.js'; describe('useFunctionalState', () => { it('should be defined', () => { @@ -7,18 +8,18 @@ describe('useFunctionalState', () => { }); it('should render', () => { - const { result } = renderHook(() => useFunctionalState()); + const {result} = renderHook(() => useFunctionalState()); expect(result.error).toBeUndefined(); }); it('should return proper values', () => { - const { result } = renderHook(() => useFunctionalState(1)); + const {result} = renderHook(() => useFunctionalState(1)); expect(result.current[1]).toBeInstanceOf(Function); expect(result.current[0]).toBeInstanceOf(Function); }); it('should return state getter', () => { - const { result } = renderHook(() => useFunctionalState(1)); + const {result} = renderHook(() => useFunctionalState(1)); expect(result.current[0]()).toBe(1); diff --git a/src/useFunctionalState/__tests__/ssr.ts b/src/useFunctionalState/index.ssr.test.ts similarity index 56% rename from src/useFunctionalState/__tests__/ssr.ts rename to src/useFunctionalState/index.ssr.test.ts index 656db4c6..85b037d8 100644 --- a/src/useFunctionalState/__tests__/ssr.ts +++ b/src/useFunctionalState/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useFunctionalState } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useFunctionalState} from '../index.js'; describe('useFunctionalState', () => { it('should be defined', () => { @@ -7,12 +8,12 @@ describe('useFunctionalState', () => { }); it('should render', () => { - const { result } = renderHook(() => useFunctionalState()); + const {result} = renderHook(() => useFunctionalState()); expect(result.error).toBeUndefined(); }); it('should return proper values', () => { - const { result } = renderHook(() => useFunctionalState(1)); + const {result} = renderHook(() => useFunctionalState(1)); expect(result.current[1]).toBeInstanceOf(Function); expect(result.current[0]).toBeInstanceOf(Function); }); diff --git a/src/useFunctionalState/index.ts b/src/useFunctionalState/index.ts index 96e82819..07e41022 100644 --- a/src/useFunctionalState/index.ts +++ b/src/useFunctionalState/index.ts @@ -1,5 +1,5 @@ -import { type Dispatch, type SetStateAction, useCallback, useState } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; +import {type Dispatch, type SetStateAction, useCallback, useState} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; export function useFunctionalState( initialState: S | (() => S) @@ -13,7 +13,7 @@ export function useFunctionalState(): [ * Like `useState` but instead of raw state, state getter returned. */ export function useFunctionalState( - initialState?: S | (() => S) + initialState?: S | (() => S), ): [() => S | undefined, Dispatch>] { const [state, setState] = useState(initialState); const stateRef = useSyncedRef(state); diff --git a/src/useHookableRef/__docs__/example.stories.tsx b/src/useHookableRef/__docs__/example.stories.tsx deleted file mode 100644 index d1afc845..00000000 --- a/src/useHookableRef/__docs__/example.stories.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useHookableRef } from '../../index.js'; - -export function Example() { - const [get, setGet] = useState(); - const [set, setSet] = useState(); - - const ref = useHookableRef( - 123, - (v) => { - setSet(new Date()); - return v; - }, - (v) => { - setGet(new Date()); - return v; - } - ); - - return ( -
-
Ref value read: {get?.toString()}
-
Ref value assign: {set?.toString()}
- -
- - -
-
- ); -} diff --git a/src/useHookableRef/__docs__/story.mdx b/src/useHookableRef/__docs__/story.mdx deleted file mode 100644 index 3d232bcb..00000000 --- a/src/useHookableRef/__docs__/story.mdx +++ /dev/null @@ -1,30 +0,0 @@ -# useHookableRef - -Like `React.useRef` but it is possible to define get and set handlers. - -#### Example - -## Reference - -```ts -export type HookableRefHandler = (v: T) => T; - -export function useHookableRef( - initialValue: T, - onSet?: HookableRefHandler, - onGet?: HookableRefHandler -): React.MutableRefObject; -export function useHookableRef(): React.MutableRefObject; -``` - -#### Importing - -#### Arguments - -- **initialValue** _`any`_ Initial value of a hook. -- **onSet** _`HookableRefHandler`_ Function to be called while `ref.current` value set. Return value will be stored in ref. -- **onGet** _`HookableRefHandler`_ Function to be called while `ref.current` value accessed. Return value will be used as a return value. - -#### Return - -- _`React.MutableRefObject`_ diff --git a/src/useHookableRef/__tests__/ssr.ts b/src/useHookableRef/__tests__/ssr.ts deleted file mode 100644 index fb538d15..00000000 --- a/src/useHookableRef/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useHookableRef } from '../../index.js'; - -describe('useHookableRef', () => { - it('should be defined', () => { - expect(useHookableRef).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useHookableRef()); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useHookableRef/__tests__/dom.ts b/src/useHookableRef/index.dom.test.ts similarity index 63% rename from src/useHookableRef/__tests__/dom.ts rename to src/useHookableRef/index.dom.test.ts index a55cd6b5..5afcd945 100644 --- a/src/useHookableRef/__tests__/dom.ts +++ b/src/useHookableRef/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useHookableRef } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useHookableRef} from '../index.js'; describe('useHookableRef', () => { it('should be defined', () => { @@ -7,17 +8,17 @@ describe('useHookableRef', () => { }); it('should render', () => { - const { result } = renderHook(() => useHookableRef()); + const {result} = renderHook(() => useHookableRef()); expect(result.error).toBeUndefined(); }); it('should return ref object with initial value', () => { - const { result } = renderHook(() => useHookableRef(123)); - expect(result.current).toEqual({ current: 123 }); + const {result} = renderHook(() => useHookableRef(123)); + expect(result.current).toEqual({current: 123}); }); it('should persist same reference between re-renders', () => { - const { result, rerender } = renderHook(() => useHookableRef(123)); + const {result, rerender} = renderHook(() => useHookableRef(123)); const firstResult = result.current; rerender(); @@ -28,10 +29,10 @@ describe('useHookableRef', () => { }); it('should call getter and setter hook', () => { - const getter = jest.fn((v: number) => v); - const setter = jest.fn((v: number) => v); + const getter = vi.fn((v: number) => v); + const setter = vi.fn((v: number) => v); - const { result } = renderHook(() => useHookableRef(123, setter, getter)); + const {result} = renderHook(() => useHookableRef(123, setter, getter)); expect(getter).not.toHaveBeenCalled(); expect(setter).not.toHaveBeenCalled(); @@ -46,7 +47,7 @@ describe('useHookableRef', () => { }); it('should work properly without getter and setter', () => { - const { result } = renderHook(() => useHookableRef(123)); + const {result} = renderHook(() => useHookableRef(123)); expect(result.current.current).toBe(123); result.current.current = 321; diff --git a/src/useHookableRef/index.ssr.test.ts b/src/useHookableRef/index.ssr.test.ts new file mode 100644 index 00000000..86509872 --- /dev/null +++ b/src/useHookableRef/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useHookableRef} from '../index.js'; + +describe('useHookableRef', () => { + it('should be defined', () => { + expect(useHookableRef).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useHookableRef()); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useHookableRef/index.ts b/src/useHookableRef/index.ts index feb950cc..698a7d54 100644 --- a/src/useHookableRef/index.ts +++ b/src/useHookableRef/index.ts @@ -1,5 +1,5 @@ -import { type MutableRefObject, useMemo } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; +import {type MutableRefObject, useMemo} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; export type HookableRefHandler = (v: T) => T; @@ -22,7 +22,7 @@ export function useHookableRef(): MutableRefObject export function useHookableRef( initialValue?: T, onSet?: HookableRefHandler, - onGet?: HookableRefHandler + onGet?: HookableRefHandler, ): MutableRefObject { const onSetRef = useSyncedRef(onSet); const onGetRef = useSyncedRef(onGet); diff --git a/src/useIntersectionObserver/__docs__/example.stories.tsx b/src/useIntersectionObserver/__docs__/example.stories.tsx deleted file mode 100644 index 3f37d4a1..00000000 --- a/src/useIntersectionObserver/__docs__/example.stories.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import * as React from 'react'; -import { useRef } from 'react'; -import { useIntersectionObserver } from '../../index.js'; - -export function Example() { - const rootRef = useRef(null); - const elementRef = useRef(null); - const intersection = useIntersectionObserver(elementRef, { root: rootRef, threshold: [0, 0.5] }); - - return ( -
-
- Below scrollable container holds a rectangle that turns green when 50% or more of it is - visible. -
- -
-
= 0.5 ? 'green' : 'red', - width: '10vw', - height: '10vw', - margin: '39vh auto', - }} - /> -
-
-				{JSON.stringify(
-					{
-						boundingClientRect: intersection?.boundingClientRect,
-						intersectionRatio: intersection?.intersectionRatio,
-						intersectionRect: intersection?.intersectionRect,
-						isIntersecting: intersection?.isIntersecting,
-						rootBounds: intersection?.rootBounds,
-						time: intersection?.time,
-					},
-					null,
-					2
-				)}
-			
-
- ); -} diff --git a/src/useIntersectionObserver/__docs__/story.mdx b/src/useIntersectionObserver/__docs__/story.mdx deleted file mode 100644 index 1507b683..00000000 --- a/src/useIntersectionObserver/__docs__/story.mdx +++ /dev/null @@ -1,43 +0,0 @@ -# useIntersectionObserver - -Tracks intersection of a target element with an ancestor element or with a top-level document's -viewport. - -- SSR-friendly. -- Effective - uses single `IntersectionObserver` for hooks with same options. -- Allows using React reference as root. -- Does not produce references for you. - -#### Example - -## Reference - -```ts -export function useIntersectionObserver( - target: RefObject | T | null, - { threshold = [0], root, rootMargin = '0px' }: IUseIntersectionObserverOptions = {} -): IntersectionObserverEntry | undefined; -``` - -#### Importing - -#### Arguments - -- **target** _`RefObject | T | null`_ - React reference or Element to track. -- **options** - Like `IntersectionObserver` options but `root` can also be react reference. -- **root** _`RefObject | Element | Document | null`_ _(default: `document`)_ - - An `Element` or `Document` object (or its react reference) which is an ancestor of the intended - target, whose bounding rectangle will be considered the viewport. Any part of the target not - visible in the visible area of the root is not considered visible. -- **rootMargin** _`string`_ _(default: `0px`)_ - A string which specifies a set of offsets to add - to the root's bounding_box when calculating intersections, effectively shrinking or growing the - root for calculation purposes. The syntax is approximately the same as that for the CSS margin - property. -- **threshold** _`number[]`_ _(default: `[0]`)_ - Array of numbers between 0.0 and 1.0, specifying - a ratio of intersection area to total bounding box area for the observed target. A value of 0.0 - means that even a single visible pixel counts as the target being visible. 1.0 means that the - entire target element is visible. - -#### Return - -`IntersectionObserverEntry` as it is returned from `IntersectionObserver` diff --git a/src/useIntersectionObserver/__tests__/dom.ts b/src/useIntersectionObserver/__tests__/dom.ts deleted file mode 100644 index 1205d7b3..00000000 --- a/src/useIntersectionObserver/__tests__/dom.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useIntersectionObserver } from '../../index.js'; -import Mock = jest.Mock; - -describe('useIntersectionObserver', () => { - let IntersectionObserverSpy: Mock; - const initialRO = global.ResizeObserver; - - beforeAll(() => { - IntersectionObserverSpy = jest.fn(() => ({ - observe: jest.fn(), - unobserve: jest.fn(), - disconnect: jest.fn(), - takeRecords: () => [], - root: document, - rootMargin: '0px', - thresholds: [0], - })); - - global.IntersectionObserver = IntersectionObserverSpy; - jest.useFakeTimers(); - }); - - beforeEach(() => { - IntersectionObserverSpy.mockClear(); - }); - - afterAll(() => { - global.ResizeObserver = initialRO; - jest.useRealTimers(); - }); - - it('should be defined', () => { - expect(useIntersectionObserver).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useIntersectionObserver(null)); - expect(result.error).toBeUndefined(); - }); - - it('should return undefined on first render', () => { - const div1 = document.createElement('div'); - const { result } = renderHook(() => useIntersectionObserver(div1)); - expect(result.current).toBeUndefined(); - }); - - it('should create IntersectionObserver instance only for unique set of options', () => { - expect(IntersectionObserverSpy).toHaveBeenCalledTimes(0); - const div1 = document.createElement('div'); - const div2 = document.createElement('div'); - - renderHook(() => useIntersectionObserver(div1)); - renderHook(() => useIntersectionObserver(div2)); - - expect(IntersectionObserverSpy).toHaveBeenCalledTimes(1); - }); - - it('should return intersection entry', () => { - const div1 = document.createElement('div'); - const div1Ref = { current: div1 }; - const div2 = document.createElement('div'); - - const { result: res1 } = renderHook(() => useIntersectionObserver(div1Ref)); - const { result: res2, unmount } = renderHook(() => - useIntersectionObserver(div2, { threshold: [0, 1] }) - ); - - expect(res1.current).toBeUndefined(); - expect(res2.current).toBeUndefined(); - - const entry1 = { target: div1 }; - const entry2 = { target: div2 }; - - act(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - IntersectionObserverSpy.mock.calls[0][0]([entry1]); - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - IntersectionObserverSpy.mock.calls[1][0]([entry2]); - jest.advanceTimersByTime(1); - }); - - expect(res1.current).toBe(entry1); - expect(res2.current).toBe(entry2); - - unmount(); - - const entry3 = { target: div1 }; - act(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - IntersectionObserverSpy.mock.calls[0][0]([entry3]); - jest.advanceTimersByTime(1); - }); - - expect(res1.current).toBe(entry3); - }); - - it('two hooks observing same target should use single observer', () => { - const div1 = document.createElement('div'); - const div2 = document.createElement('div'); - - const { result: res1 } = renderHook(() => - useIntersectionObserver(div1, { root: { current: div2 } }) - ); - const { result: res2 } = renderHook(() => - useIntersectionObserver(div1, { root: { current: div2 } }) - ); - - expect(res1.current).toBeUndefined(); - expect(res2.current).toBeUndefined(); - - const entry1 = { target: div1 }; - - act(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - IntersectionObserverSpy.mock.calls[0][0]([entry1]); - jest.advanceTimersByTime(1); - }); - - expect(res1.current).toBe(entry1); - expect(res2.current).toBe(entry1); - }); - - it('should disconnect observer if last hook unmounted', () => { - const div1 = document.createElement('div'); - - const { result, unmount } = renderHook(() => useIntersectionObserver(div1)); - const entry1 = { target: div1 }; - - act(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - IntersectionObserverSpy.mock.calls[0][0]([entry1]); - jest.advanceTimersByTime(1); - }); - - expect(result.current).toBe(entry1); - - unmount(); - expect(IntersectionObserverSpy.mock.results[0].value.disconnect).toHaveBeenCalled(); - }); -}); diff --git a/src/useIntersectionObserver/__tests__/ssr.ts b/src/useIntersectionObserver/__tests__/ssr.ts deleted file mode 100644 index 7839b15a..00000000 --- a/src/useIntersectionObserver/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useIntersectionObserver } from '../../index.js'; - -describe('useIntersectionObserver', () => { - it('should be defined', () => { - expect(useIntersectionObserver).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useIntersectionObserver(null)); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useIntersectionObserver/index.dom.test.ts b/src/useIntersectionObserver/index.dom.test.ts new file mode 100644 index 00000000..4916094e --- /dev/null +++ b/src/useIntersectionObserver/index.dom.test.ts @@ -0,0 +1,127 @@ +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useIntersectionObserver} from '../index.js'; + +describe('useIntersectionObserver', () => { + const IntersectionObserverMock = vi.fn((_cb: (entries: IntersectionObserverEntry[]) => void) => ({ + observe: vi.fn(), + unobserve: vi.fn(), + disconnect: vi.fn(), + takeRecords: () => [], + root: document, + rootMargin: '0px', + thresholds: [0], + })); + vi.stubGlobal('IntersectionObserver', IntersectionObserverMock); + + beforeEach(() => { + IntersectionObserverMock.mockClear(); + }); + + beforeAll(() => { + vi.useFakeTimers(); + }); + + afterAll(() => { + vi.useRealTimers(); + }); + + it('should be defined', () => { + expect(useIntersectionObserver).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useIntersectionObserver(null)); + expect(result.error).toBeUndefined(); + }); + + it('should return undefined on first render', () => { + const div1 = document.createElement('div'); + const {result} = renderHook(() => useIntersectionObserver(div1)); + expect(result.current).toBeUndefined(); + }); + + it('should create IntersectionObserver instance only for unique set of options', async () => { + expect(IntersectionObserverMock).toHaveBeenCalledTimes(0); + + renderHook(() => useIntersectionObserver(document.createElement('div'))); + renderHook(() => useIntersectionObserver(document.createElement('div'))); + + expect(IntersectionObserverMock).toHaveBeenCalledTimes(1); + }); + + it('should return intersection entry', () => { + const div1 = document.createElement('div'); + const div1Ref = {current: div1}; + const div2 = document.createElement('div'); + + const hook1 = renderHook(() => useIntersectionObserver(div1Ref)); + const hook2 = renderHook(() => + useIntersectionObserver(div2, {threshold: [0, 1]})); + + expect(hook1.result.current).toBeUndefined(); + expect(hook2.result.current).toBeUndefined(); + + const entry1 = {target: div1} as unknown as IntersectionObserverEntry; + const entry2 = {target: div2} as unknown as IntersectionObserverEntry; + + act(() => { + IntersectionObserverMock.mock.calls[0][0]([entry1]); + IntersectionObserverMock.mock.calls[1][0]([entry2]); + vi.advanceTimersByTime(1); + }); + + expect(hook1.result.current).toBe(entry1); + expect(hook2.result.current).toBe(entry2); + + hook2.unmount(); + + const entry3 = {target: div1} as unknown as IntersectionObserverEntry; + act(() => { + IntersectionObserverMock.mock.calls[0][0]([entry3]); + vi.advanceTimersByTime(1); + }); + + expect(hook1.result.current).toBe(entry3); + }); + + it('two hooks observing same target should use single observer', () => { + const div1 = document.createElement('div'); + const div2 = document.createElement('div'); + + const hook1 = renderHook(() => + useIntersectionObserver(div1, {root: {current: div2}})); + const hook2 = renderHook(() => + useIntersectionObserver(div1, {root: {current: div2}})); + + expect(hook1.result.current).toBeUndefined(); + expect(hook2.result.current).toBeUndefined(); + + const entry1 = {target: div1} as unknown as IntersectionObserverEntry; + + act(() => { + IntersectionObserverMock.mock.calls[0][0]([entry1]); + vi.advanceTimersByTime(1); + }); + + expect(hook1.result.current).toBe(entry1); + expect(hook1.result.current).toBe(entry1); + }); + + it('should disconnect observer if last hook unmounted', () => { + const div1 = document.createElement('div'); + + const {result, unmount} = renderHook(() => useIntersectionObserver(div1)); + const entry1 = {target: div1} as unknown as IntersectionObserverEntry; + + act(() => { + IntersectionObserverMock.mock.calls[0][0]([entry1]); + vi.advanceTimersByTime(1); + }); + + expect(result.current).toBe(entry1); + + unmount(); + expect(IntersectionObserverMock.mock.results[0].value.disconnect).toHaveBeenCalled(); + }); +}); diff --git a/src/useIntersectionObserver/index.ssr.test.ts b/src/useIntersectionObserver/index.ssr.test.ts new file mode 100644 index 00000000..65903a2b --- /dev/null +++ b/src/useIntersectionObserver/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useIntersectionObserver} from '../index.js'; + +describe('useIntersectionObserver', () => { + it('should be defined', () => { + expect(useIntersectionObserver).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useIntersectionObserver(null)); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useIntersectionObserver/index.ts b/src/useIntersectionObserver/index.ts index d3b3f9fb..fd81ae9f 100644 --- a/src/useIntersectionObserver/index.ts +++ b/src/useIntersectionObserver/index.ts @@ -1,4 +1,4 @@ -import { type RefObject, useEffect, useState } from 'react'; +import {type RefObject, useEffect, useState} from 'react'; const DEFAULT_THRESHOLD = [0]; const DEFAULT_ROOT_MARGIN = '0px'; @@ -25,21 +25,27 @@ const getObserverEntry = (options: IntersectionObserverInit): ObserverEntry => { const opt = JSON.stringify([options.rootMargin, options.threshold]); - let entry = rootObservers.get(opt); + let observerEntry = rootObservers.get(opt); - if (!entry) { + if (!observerEntry) { const callbacks = new Map>(); const observer = new IntersectionObserver((entries) => { - for (const e of entries) - callbacks.get(e.target)?.forEach((cb) => + for (const entry of entries) { + const cbs = callbacks.get(entry.target); + if (cbs === undefined || cbs.size === 0) { + continue; + } + + for (const cb of cbs) { setTimeout(() => { - cb(e); - }, 0) - ); + cb(entry); + }, 0); + } + } }, options); - entry = { + observerEntry = { observer, observe(target, callback) { let cbs = callbacks.get(target); @@ -60,7 +66,6 @@ const getObserverEntry = (options: IntersectionObserverInit): ObserverEntry => { // Else branch should never occur in case of normal execution // because callbacks map is hidden in closure - it is impossible to // simulate situation with non-existent `cbs` Set - /* istanbul ignore else */ if (cbs) { // Remove current observer cbs.delete(callback); @@ -85,10 +90,10 @@ const getObserverEntry = (options: IntersectionObserverInit): ObserverEntry => { }, }; - rootObservers.set(opt, entry); + rootObservers.set(opt, observerEntry); } - return entry; + return observerEntry; }; export type UseIntersectionObserverOptions = { @@ -130,13 +135,15 @@ export function useIntersectionObserver( threshold = DEFAULT_THRESHOLD, root: r, rootMargin = DEFAULT_ROOT_MARGIN, - }: UseIntersectionObserverOptions = {} + }: UseIntersectionObserverOptions = {}, ): IntersectionObserverEntry | undefined { const [state, setState] = useState(); useEffect(() => { const tgt = target && 'current' in target ? target.current : target; - if (!tgt) return; + if (!tgt) { + return; + } let subscribed = true; const observerEntry = getObserverEntry({ @@ -148,7 +155,6 @@ export function useIntersectionObserver( const handler: IntersectionEntryCallback = (entry) => { // It is reinsurance for the highly asynchronous invocations, almost // impossible to achieve in tests, thus excluding from LOC - /* istanbul ignore else */ if (subscribed) { setState(entry); } diff --git a/src/useIntervalEffect/__docs__/example.stories.tsx b/src/useIntervalEffect/__docs__/example.stories.tsx deleted file mode 100644 index 6e360a3e..00000000 --- a/src/useIntervalEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useIntervalEffect, useToggle } from '../../index.js'; - -export function Example() { - const [state, setState] = useState(); - const [enabled, toggleEnabled] = useToggle(); - - useIntervalEffect( - () => { - setState(new Date()); - }, - enabled ? 1000 : undefined - ); - - return ( -
- Last interval invocation: {state?.toString()} -
- -
- ); -} diff --git a/src/useIntervalEffect/__docs__/story.mdx b/src/useIntervalEffect/__docs__/story.mdx deleted file mode 100644 index 49dccfe6..00000000 --- a/src/useIntervalEffect/__docs__/story.mdx +++ /dev/null @@ -1,24 +0,0 @@ -# useIntervalEffect - -Like `setInterval` but in the form of a React hook. - -- Automatically cancels the interval on component unmount. -- The interval is reset when the interval duration is changed. -- Changing the interval callback does not cause the interval to reset. -- Ability to disable the interval. - -#### Example - -## Reference - -```ts -export function useIntervalEffect(callback: () => void, ms?: number): void; -``` - -#### Importing - -#### Arguments - -- **callback** _`() => void`_ - Function to call within the interval. -- **ms** _`number | undefined`_ - Delay passed to the underlying `setInterval`. If set to - `undefined`, the interval will be cancelled. diff --git a/src/useIntervalEffect/__tests__/dom.ts b/src/useIntervalEffect/index.dom.test.ts similarity index 52% rename from src/useIntervalEffect/__tests__/dom.ts rename to src/useIntervalEffect/index.dom.test.ts index 41af8fc5..f8f390ba 100644 --- a/src/useIntervalEffect/__tests__/dom.ts +++ b/src/useIntervalEffect/index.dom.test.ts @@ -1,18 +1,18 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useIntervalEffect } from '../../index.js'; -import advanceTimersByTime = jest.advanceTimersByTime; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useIntervalEffect} from '../index.js'; describe('useIntervalEffect', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); beforeEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -20,25 +20,25 @@ describe('useIntervalEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useIntervalEffect(() => {}, 123); }); expect(result.error).toBeUndefined(); }); it('should set interval and cancel it on unmount', () => { - const spy = jest.fn(); - const { unmount } = renderHook(() => { + const spy = vi.fn(); + const {unmount} = renderHook(() => { useIntervalEffect(spy, 100); }); - jest.advanceTimersByTime(99); + vi.advanceTimersByTime(99); expect(spy).not.toHaveBeenCalled(); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(spy).toHaveBeenCalledTimes(1); - jest.advanceTimersByTime(300); + vi.advanceTimersByTime(300); expect(spy).toHaveBeenCalledTimes(4); unmount(); @@ -46,43 +46,43 @@ describe('useIntervalEffect', () => { }); it('should reset interval in delay change', () => { - const spy = jest.fn(); - const { rerender } = renderHook( - ({ delay }) => { + const spy = vi.fn(); + const {rerender} = renderHook( + ({delay}) => { useIntervalEffect(spy, delay); }, { - initialProps: { delay: 100 }, - } + initialProps: {delay: 100}, + }, ); - advanceTimersByTime(99); + vi.advanceTimersByTime(99); expect(spy).not.toHaveBeenCalled(); - rerender({ delay: 50 }); - advanceTimersByTime(49); + rerender({delay: 50}); + vi.advanceTimersByTime(49); expect(spy).not.toHaveBeenCalled(); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(spy).toHaveBeenCalledTimes(1); }); it('should cancel interval if delay is undefined', () => { - const spy = jest.fn(); - const { rerender } = renderHook<{ delay: number | undefined }, void>( - ({ delay }) => { + const spy = vi.fn(); + const {rerender} = renderHook<{delay: number | undefined}, void>( + ({delay}) => { useIntervalEffect(spy, delay); }, { - initialProps: { delay: 100 }, - } + initialProps: {delay: 100}, + }, ); - advanceTimersByTime(99); + vi.advanceTimersByTime(99); expect(spy).not.toHaveBeenCalled(); - rerender({ delay: undefined }); - advanceTimersByTime(2000); + rerender({delay: undefined}); + vi.advanceTimersByTime(2000); expect(spy).not.toHaveBeenCalled(); }); }); diff --git a/src/useIntervalEffect/__tests__/ssr.ts b/src/useIntervalEffect/index.ssr.test.ts similarity index 55% rename from src/useIntervalEffect/__tests__/ssr.ts rename to src/useIntervalEffect/index.ssr.test.ts index ef5efc13..37f60377 100644 --- a/src/useIntervalEffect/__tests__/ssr.ts +++ b/src/useIntervalEffect/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useIntervalEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useIntervalEffect} from '../index.js'; describe('useIntervalEffect', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useIntervalEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useIntervalEffect(() => {}, 123); }); expect(result.error).toBeUndefined(); diff --git a/src/useIntervalEffect/index.ts b/src/useIntervalEffect/index.ts index 6a3a6de3..e7066cdf 100644 --- a/src/useIntervalEffect/index.ts +++ b/src/useIntervalEffect/index.ts @@ -1,5 +1,5 @@ -import { useEffect } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; +import {useEffect} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; /** * Like `setInterval` but in the form of a React hook. diff --git a/src/useIsMounted/__docs__/example.stories.tsx b/src/useIsMounted/__docs__/example.stories.tsx deleted file mode 100644 index 70abbd2f..00000000 --- a/src/useIsMounted/__docs__/example.stories.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import * as React from 'react'; -import { useIsMounted, useMountEffect, useToggle } from '../../index.js'; - -export function Example() { - const [isToggled, toggle] = useToggle(false); - - function ToggledComponent() { - const isMounted = useIsMounted(); - - // As you can see, below effect has no dependencies, it will be executed - // anyway, but alert will be displayed only in case component persist mounted - useMountEffect(() => { - setTimeout(() => { - if (isMounted()) { - // eslint-disable-next-line no-alert - alert('Component was not unmounted!'); - } - }, 5000); - }); - - return ( -

- This component will display an alert 5 seconds after mount. -
- Unmounting the component will prevent it. -

- ); - } - - return ( -
- {!isToggled && ( -
- Because the example component displays an alert without interaction, it is initially - unmounted. -
- )} - {' '} - {isToggled && } -
- ); -} diff --git a/src/useIsMounted/__docs__/story.mdx b/src/useIsMounted/__docs__/story.mdx deleted file mode 100644 index 4b873a50..00000000 --- a/src/useIsMounted/__docs__/story.mdx +++ /dev/null @@ -1,24 +0,0 @@ -# useIsMounted - -Returns a function that returns the current mount state. This hook is useful when you have to detect -component mount state within async effects. - -> **_This hook provides stable API, meaning returned methods does not change between renders_** - -#### Example - -## Reference - -```ts -function useIsMounted(initialValue = false): () => boolean; -``` - -#### Importing - -#### Arguments - -- **initialState** _`boolean`_ _(default: `false`)_ - Initial value. - -#### Return - -Function that returns `true` only if the component is mounted. diff --git a/src/useIsMounted/__tests__/dom.ts b/src/useIsMounted/index.dom.test.ts similarity index 67% rename from src/useIsMounted/__tests__/dom.ts rename to src/useIsMounted/index.dom.test.ts index 5550dd32..eff40bf5 100644 --- a/src/useIsMounted/__tests__/dom.ts +++ b/src/useIsMounted/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useIsMounted } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useIsMounted} from '../index.js'; describe('useIsMounted', () => { it('should be defined', () => { @@ -7,13 +8,13 @@ describe('useIsMounted', () => { }); it('should return a function', () => { - const { result } = renderHook(() => useIsMounted()); + const {result} = renderHook(() => useIsMounted()); expect(result.current).toBeInstanceOf(Function); }); it('should return false within first render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { const isMounted = useIsMounted(); return isMounted(); }); @@ -22,13 +23,13 @@ describe('useIsMounted', () => { }); it('should return true after mount', () => { - const { result } = renderHook(() => useIsMounted()); + const {result} = renderHook(() => useIsMounted()); expect(result.current()).toBe(true); }); it('should return same function on each render', () => { - const { result, rerender } = renderHook(() => useIsMounted()); + const {result, rerender} = renderHook(() => useIsMounted()); const fn1 = result.current; rerender(); @@ -41,7 +42,7 @@ describe('useIsMounted', () => { }); it('should return false after component unmount', () => { - const { result, unmount } = renderHook(() => useIsMounted()); + const {result, unmount} = renderHook(() => useIsMounted()); expect(result.current()).toBe(true); diff --git a/src/useIsMounted/__tests__/ssr.ts b/src/useIsMounted/index.ssr.test.ts similarity index 61% rename from src/useIsMounted/__tests__/ssr.ts rename to src/useIsMounted/index.ssr.test.ts index 52ed209f..f720e03e 100644 --- a/src/useIsMounted/__tests__/ssr.ts +++ b/src/useIsMounted/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useIsMounted } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useIsMounted} from '../index.js'; describe('useIsMounted', () => { it('should be defined', () => { @@ -7,13 +8,13 @@ describe('useIsMounted', () => { }); it('should return a function', () => { - const { result } = renderHook(() => useIsMounted()); + const {result} = renderHook(() => useIsMounted()); expect(result.current).toBeInstanceOf(Function); }); it('should return false within first render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { const isMounted = useIsMounted(); return isMounted(); }); @@ -22,7 +23,7 @@ describe('useIsMounted', () => { }); it('should return false after mount', () => { - const { result } = renderHook(() => useIsMounted()); + const {result} = renderHook(() => useIsMounted()); expect(result.current()).toBe(false); }); diff --git a/src/useIsMounted/index.ts b/src/useIsMounted/index.ts index 803b117e..d7172ab3 100644 --- a/src/useIsMounted/index.ts +++ b/src/useIsMounted/index.ts @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useRef } from 'react'; +import {useCallback, useEffect, useRef} from 'react'; /** * Returns a function that returns the current mount state. This hook is useful when you have to diff --git a/src/useIsomorphicLayoutEffect/__docs__/story.mdx b/src/useIsomorphicLayoutEffect/__docs__/story.mdx deleted file mode 100644 index 6e99c056..00000000 --- a/src/useIsomorphicLayoutEffect/__docs__/story.mdx +++ /dev/null @@ -1,13 +0,0 @@ -# useIsomorphicLayoutEffect - -Alias for `useLayoutEffect` in browser, but for `useEffect` at server side. Helps to avoid warning -shown during SSR. -[Read Alex Reardon's article](https://medium.com/@alexandereardon/uselayouteffect-and-ssr-192986cdcf7a) - -#### Example - -There is nothing to show in browser, as this hook affects SSR only. - -## Reference - -Use it exactly the same as `useLayoutEffect`. diff --git a/src/useIsomorphicLayoutEffect/__tests__/dom.ts b/src/useIsomorphicLayoutEffect/index.dom.test.ts similarity index 64% rename from src/useIsomorphicLayoutEffect/__tests__/dom.ts rename to src/useIsomorphicLayoutEffect/index.dom.test.ts index db334dc3..6635cc2c 100644 --- a/src/useIsomorphicLayoutEffect/__tests__/dom.ts +++ b/src/useIsomorphicLayoutEffect/index.dom.test.ts @@ -1,5 +1,6 @@ -import { useLayoutEffect } from 'react'; -import { useIsomorphicLayoutEffect } from '../../index.js'; +import {useLayoutEffect} from 'react'; +import {describe, expect, it} from 'vitest'; +import {useIsomorphicLayoutEffect} from '../index.js'; describe('useIsomorphicLayoutEffect', () => { it('should be defined', () => { diff --git a/src/useIsomorphicLayoutEffect/__tests__/ssr.ts b/src/useIsomorphicLayoutEffect/index.ssr.test.ts similarity index 64% rename from src/useIsomorphicLayoutEffect/__tests__/ssr.ts rename to src/useIsomorphicLayoutEffect/index.ssr.test.ts index 04bf787a..d679c236 100644 --- a/src/useIsomorphicLayoutEffect/__tests__/ssr.ts +++ b/src/useIsomorphicLayoutEffect/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { useEffect } from 'react'; -import { useIsomorphicLayoutEffect } from '../../index.js'; +import {useEffect} from 'react'; +import {describe, expect, it} from 'vitest'; +import {useIsomorphicLayoutEffect} from '../index.js'; describe('useIsomorphicLayoutEffect', () => { it('should be defined', () => { diff --git a/src/useIsomorphicLayoutEffect/index.ts b/src/useIsomorphicLayoutEffect/index.ts index 1adc019a..fa7a2201 100644 --- a/src/useIsomorphicLayoutEffect/index.ts +++ b/src/useIsomorphicLayoutEffect/index.ts @@ -1,5 +1,5 @@ -import { useEffect, useLayoutEffect } from 'react'; -import { isBrowser } from '../util/const.js'; +import {useEffect, useLayoutEffect} from 'react'; +import {isBrowser} from '../util/const.js'; /** * Alias for `useLayoutEffect` in browser, but for `useEffect` at server side. Helps to avoid diff --git a/src/useKeyboardEvent/__docs__/example.stories.tsx b/src/useKeyboardEvent/__docs__/example.stories.tsx deleted file mode 100644 index ef1f0e54..00000000 --- a/src/useKeyboardEvent/__docs__/example.stories.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useKeyboardEvent } from '../../index.js'; - -export function Example() { - const [list, setList] = useState([]); - - useKeyboardEvent( - true, - (ev) => { - setList((l) => [...l.slice(-10), ev.key]); - }, - [], - { eventOptions: { passive: true } } - ); - - return ( -
-
Press any keys on the keyboard and they will appear below.
- -

You have pressed

-
    - {list.map((k, i) => ( - // eslint-disable-next-line react/no-array-index-key -
  • {k}
  • - ))} -
-
- ); -} diff --git a/src/useKeyboardEvent/__docs__/story.mdx b/src/useKeyboardEvent/__docs__/story.mdx deleted file mode 100644 index 7f669ce4..00000000 --- a/src/useKeyboardEvent/__docs__/story.mdx +++ /dev/null @@ -1,35 +0,0 @@ -# useKeyboardEvent - -Invokes a callback when a keyboard event occurs on the chosen target element. - -#### Example - -## Reference - -```ts -type UseKeyboardEventOptions = { - event?: 'keydown' | 'keypress' | 'keyup'; - target?: RefObject | T | null; - eventOptions?: boolean | AddEventListenerOptions; -}; - -function useKeyboardEvent( - keyOrPredicate: KeyboardEventFilter, - callback: KeyboardEventHandler, - deps?: DependencyList, - options: UseKeyboardEventOptions = {} -): void; -``` - -#### Importing - -#### Arguments - -- **keyOrPredicate** _`KeyboardEventFilter`_ - Filters key presses on which `callback` is invoked. -- **callback** _`KeyboardEventHandler`_ - Function to call when a key is pressed and `keyOrPredicate` - matches positive. -- **deps** _`DependencyList`_ - Dependencies list that is passed to the underlying `useMemo`. -- **options** - Hook options: -- **event** _`'keydown' | 'keypress' | 'keyup'`_ (default: `keydown`) - Keyboard event which triggers `callback`. -- **target** _`RefObject | T | null`_ (default: `window`) - Target element that emits `event`. -- **eventOptions** _`boolean | AddEventListenerOptions`_ - Options passed to the underlying `useEventListener` hook. diff --git a/src/useKeyboardEvent/__tests__/dom.ts b/src/useKeyboardEvent/index.dom.test.ts similarity index 67% rename from src/useKeyboardEvent/__tests__/dom.ts rename to src/useKeyboardEvent/index.dom.test.ts index b7a60952..94e42720 100644 --- a/src/useKeyboardEvent/__tests__/dom.ts +++ b/src/useKeyboardEvent/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { type KeyboardEventFilter, useKeyboardEvent } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {type KeyboardEventFilter, useKeyboardEvent} from '../index.js'; describe('useKeyboardEvent', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useKeyboardEvent', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useKeyboardEvent('a', () => {}); }); expect(result.error).toBeUndefined(); @@ -15,15 +16,15 @@ describe('useKeyboardEvent', () => { it('should bind listener on mount and unbind on unmount', () => { const div = document.createElement('div'); - const addSpy = jest.spyOn(div, 'addEventListener'); - const removeSpy = jest.spyOn(div, 'removeEventListener'); + const addSpy = vi.spyOn(div, 'addEventListener'); + const removeSpy = vi.spyOn(div, 'removeEventListener'); - const { rerender, unmount } = renderHook(() => { + const {rerender, unmount} = renderHook(() => { useKeyboardEvent( () => true, () => {}, undefined, - { target: div, event: 'keydown', eventOptions: { passive: true } } + {target: div, event: 'keydown', eventOptions: {passive: true}}, ); }); @@ -41,21 +42,21 @@ describe('useKeyboardEvent', () => { it('should work with react refs', () => { const div = document.createElement('div'); - const addSpy = jest.spyOn(div, 'addEventListener'); - const removeSpy = jest.spyOn(div, 'removeEventListener'); + const addSpy = vi.spyOn(div, 'addEventListener'); + const removeSpy = vi.spyOn(div, 'removeEventListener'); - const ref = { current: div }; - const { rerender, unmount } = renderHook(() => { + const ref = {current: div}; + const {rerender, unmount} = renderHook(() => { useKeyboardEvent( () => true, () => {}, undefined, - { target: ref, eventOptions: { passive: true } } + {target: ref, eventOptions: {passive: true}}, ); }); expect(addSpy).toHaveBeenCalledTimes(1); - expect(addSpy.mock.calls[0][2]).toStrictEqual({ passive: true }); + expect(addSpy.mock.calls[0][2]).toStrictEqual({passive: true}); expect(removeSpy).toHaveBeenCalledTimes(0); rerender(); @@ -70,7 +71,7 @@ describe('useKeyboardEvent', () => { it('should invoke provided function on the event trigger with proper context', () => { const div = document.createElement('div'); let context: any; - const spy = jest.fn(function (this: any) { + const spy = vi.fn(function (this: any) { // eslint-disable-next-line @typescript-eslint/no-this-alias,@typescript-eslint/no-unsafe-assignment,unicorn/no-this-assignment context = this; }); @@ -79,23 +80,23 @@ describe('useKeyboardEvent', () => { useKeyboardEvent(() => true, spy, undefined, { target: div, event: 'keydown', - eventOptions: { passive: true }, + eventOptions: {passive: true}, }); }); - const evt = new KeyboardEvent('keydown', { key: 'a' }); + const evt = new KeyboardEvent('keydown', {key: 'a'}); div.dispatchEvent(evt); expect(context).toBe(div); expect(spy).toHaveBeenCalledWith(evt); - div.dispatchEvent(new KeyboardEvent('keyup', { key: 'a' })); + div.dispatchEvent(new KeyboardEvent('keyup', {key: 'a'})); expect(spy).toHaveBeenCalledTimes(1); }); it('should invoke provided function based on string key filter with proper context', () => { const div = document.createElement('div'); let context: any; - const spy = jest.fn(function (this: any) { + const spy = vi.fn(function (this: any) { // eslint-disable-next-line @typescript-eslint/no-this-alias,@typescript-eslint/no-unsafe-assignment,unicorn/no-this-assignment context = this; }); @@ -104,56 +105,56 @@ describe('useKeyboardEvent', () => { useKeyboardEvent('a', spy, undefined, { target: div, event: 'keydown', - eventOptions: { passive: true }, + eventOptions: {passive: true}, }); }); - const evt = new KeyboardEvent('keydown', { key: 'a' }); + const evt = new KeyboardEvent('keydown', {key: 'a'}); div.dispatchEvent(evt); expect(spy).toHaveBeenCalledWith(evt); expect(context).toBe(div); - div.dispatchEvent(new KeyboardEvent('keydown', { key: 'b' })); + div.dispatchEvent(new KeyboardEvent('keydown', {key: 'b'})); expect(spy).toHaveBeenCalledTimes(1); }); it('should invoke provided function based on function key filter with proper context', () => { const div = document.createElement('div'); let context: any; - const spy = jest.fn(function (this: any) { + const spy = vi.fn(function (this: any) { // eslint-disable-next-line @typescript-eslint/no-this-alias,@typescript-eslint/no-unsafe-assignment,unicorn/no-this-assignment context = this; }); renderHook(() => { - useKeyboardEvent((ev) => ev.metaKey, spy, undefined, { + useKeyboardEvent(ev => ev.metaKey, spy, undefined, { target: div, event: 'keydown', - eventOptions: { passive: true }, + eventOptions: {passive: true}, }); }); - const evt = new KeyboardEvent('keydown', { key: 'a', metaKey: true }); + const evt = new KeyboardEvent('keydown', {key: 'a', metaKey: true}); div.dispatchEvent(evt); expect(spy).toHaveBeenCalledWith(evt); expect(context).toBe(div); - div.dispatchEvent(new KeyboardEvent('keydown', { key: 'b' })); + div.dispatchEvent(new KeyboardEvent('keydown', {key: 'b'})); expect(spy).toHaveBeenCalledTimes(1); }); it('should fallback to boolean when key filter is not function or string', () => { const div = document.createElement('div'); - const spy = jest.fn(); + const spy = vi.fn(); - const { unmount } = renderHook(() => { + const {unmount} = renderHook(() => { useKeyboardEvent(null, spy, undefined, { target: div, event: 'keydown', - eventOptions: { passive: true }, + eventOptions: {passive: true}, }); }); - const evt = new KeyboardEvent('keydown', { key: 'a', metaKey: true }); + const evt = new KeyboardEvent('keydown', {key: 'a', metaKey: true}); div.dispatchEvent(evt); expect(spy).not.toHaveBeenCalledWith(evt); unmount(); @@ -162,7 +163,7 @@ describe('useKeyboardEvent', () => { useKeyboardEvent({} as KeyboardEventFilter, spy, undefined, { target: div, event: 'keydown', - eventOptions: { passive: true }, + eventOptions: {passive: true}, }); }); diff --git a/src/useKeyboardEvent/__tests__/ssr.ts b/src/useKeyboardEvent/index.ssr.test.ts similarity index 55% rename from src/useKeyboardEvent/__tests__/ssr.ts rename to src/useKeyboardEvent/index.ssr.test.ts index 1b1a3b7c..9d6d04ed 100644 --- a/src/useKeyboardEvent/__tests__/ssr.ts +++ b/src/useKeyboardEvent/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useKeyboardEvent } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useKeyboardEvent} from '../index.js'; describe('useKeyboardEvent', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useKeyboardEvent', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useKeyboardEvent('a', () => {}); }); expect(result.error).toBeUndefined(); diff --git a/src/useKeyboardEvent/index.ts b/src/useKeyboardEvent/index.ts index 906b67f3..19759bff 100644 --- a/src/useKeyboardEvent/index.ts +++ b/src/useKeyboardEvent/index.ts @@ -1,8 +1,8 @@ -import { type DependencyList, type RefObject, useMemo } from 'react'; -import { useEventListener } from '../useEventListener/index.js'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { isBrowser } from '../util/const.js'; -import { yieldFalse, yieldTrue } from '../util/misc.js'; +import {type DependencyList, type RefObject, useMemo} from 'react'; +import {useEventListener} from '../useEventListener/index.js'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {isBrowser} from '../util/const.js'; +import {yieldFalse, yieldTrue} from '../util/misc.js'; export type KeyboardEventPredicate = (event: KeyboardEvent) => boolean; export type KeyboardEventFilter = null | string | boolean | KeyboardEventPredicate; @@ -26,12 +26,18 @@ export type UseKeyboardEventOptions = { }; const createKeyPredicate = (keyFilter: KeyboardEventFilter): KeyboardEventPredicate => { - if (typeof keyFilter === 'function') return keyFilter; - if (typeof keyFilter === 'string') return (ev) => ev.key === keyFilter; + if (typeof keyFilter === 'function') { + return keyFilter; + } + + if (typeof keyFilter === 'string') { + return ev => ev.key === keyFilter; + } + return keyFilter ? yieldTrue : yieldFalse; }; -const WINDOW_OR_NULL = isBrowser ? window : null; +const WINDOW_OR_NULL = isBrowser ? globalThis : null; /** * Invokes a callback when a keyboard event occurs on the chosen target element. @@ -45,9 +51,9 @@ export function useKeyboardEvent( keyOrPredicate: KeyboardEventFilter, callback: KeyboardEventHandler, deps: DependencyList = [], - options: UseKeyboardEventOptions = {} + options: UseKeyboardEventOptions = {}, ): void { - const { event = 'keydown', target = WINDOW_OR_NULL, eventOptions } = options; + const {event = 'keydown', target = WINDOW_OR_NULL, eventOptions} = options; const cbRef = useSyncedRef(callback); const handler = useMemo>(() => { diff --git a/src/useLifecycleLogger/__docs__/example.stories.tsx b/src/useLifecycleLogger/__docs__/example.stories.tsx deleted file mode 100644 index 92eee286..00000000 --- a/src/useLifecycleLogger/__docs__/example.stories.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import * as React from 'react'; -import { useRerender, useLifecycleLogger } from '../../index.js'; - -export function Example() { - const rerender = useRerender(); - const dependency = 'test'; - useLifecycleLogger('Demo', [dependency]); - - return ( -
-
Check your console for useLifecycleLogger logs
- -
- ); -} diff --git a/src/useLifecycleLogger/__docs__/story.mdx b/src/useLifecycleLogger/__docs__/story.mdx deleted file mode 100644 index 4ee61636..00000000 --- a/src/useLifecycleLogger/__docs__/story.mdx +++ /dev/null @@ -1,18 +0,0 @@ -# useLifecycleLogger - -React lifecycle hook that console logs parameters as component transitions through lifecycles. - -#### Example - -## Reference - -```ts -function useLifecycleLogger(componentName: string, deps: []): void; -``` - -#### Importing - -#### Arguments - -- _**componentName**_ _`ComponentName`_ - String value to log the components name when logging the lifecycle. -- **deps** _`DependencyList`_ - Dependencies list that will be passed to underlying `useEffect`. diff --git a/src/useLifecycleLogger/__tests__/dom.ts b/src/useLifecycleLogger/__tests__/dom.ts deleted file mode 100644 index 9a1bee43..00000000 --- a/src/useLifecycleLogger/__tests__/dom.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useLifecycleLogger } from '../../index.js'; - -describe('useLifecycleLogger', () => { - let logSpy: jest.SpyInstance; - - beforeAll(() => { - logSpy = jest.spyOn(console, 'log'); - }); - - afterAll(() => { - logSpy.mockRestore(); - }); - - beforeEach(() => { - logSpy.mockReset(); - }); - - it('should log whole component lifecycle', () => { - const { unmount, rerender } = renderHook( - ({ deps }) => { - useLifecycleLogger('TestComponent', deps); - }, - { initialProps: { deps: [1, 2, 3] } } - ); - - expect(logSpy).toHaveBeenCalledTimes(1); - expect(logSpy).toHaveBeenCalledWith(`TestComponent mounted`, [1, 2, 3]); - - rerender({ deps: [3, 2, 1] }); - - expect(logSpy).toHaveBeenCalledTimes(2); - expect(logSpy).toHaveBeenCalledWith(`TestComponent updated`, [3, 2, 1]); - - rerender({ deps: [1, 5, 6] }); - - expect(logSpy).toHaveBeenCalledTimes(3); - expect(logSpy).toHaveBeenCalledWith(`TestComponent updated`, [1, 5, 6]); - - unmount(); - - expect(logSpy).toHaveBeenCalledTimes(4); - expect(logSpy).toHaveBeenCalledWith(`TestComponent unmounted`); - }); -}); diff --git a/src/useLifecycleLogger/index.dom.test.ts b/src/useLifecycleLogger/index.dom.test.ts new file mode 100644 index 00000000..dd237122 --- /dev/null +++ b/src/useLifecycleLogger/index.dom.test.ts @@ -0,0 +1,42 @@ +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useLifecycleLogger} from '../index.js'; + +describe('useLifecycleLogger', () => { + const logSpy = vi.spyOn(console, 'log'); + + afterAll(() => { + logSpy.mockRestore(); + }); + + beforeEach(() => { + logSpy.mockReset(); + }); + + it('should log whole component lifecycle', () => { + const {unmount, rerender} = renderHook( + ({deps}) => { + useLifecycleLogger('TestComponent', deps); + }, + {initialProps: {deps: [1, 2, 3]}}, + ); + + expect(logSpy).toHaveBeenCalledTimes(1); + expect(logSpy).toHaveBeenCalledWith('TestComponent mounted', [1, 2, 3]); + + rerender({deps: [3, 2, 1]}); + + expect(logSpy).toHaveBeenCalledTimes(2); + expect(logSpy).toHaveBeenCalledWith('TestComponent updated', [3, 2, 1]); + + rerender({deps: [1, 5, 6]}); + + expect(logSpy).toHaveBeenCalledTimes(3); + expect(logSpy).toHaveBeenCalledWith('TestComponent updated', [1, 5, 6]); + + unmount(); + + expect(logSpy).toHaveBeenCalledTimes(4); + expect(logSpy).toHaveBeenCalledWith('TestComponent unmounted'); + }); +}); diff --git a/src/useLifecycleLogger/__tests__/ssr.ts b/src/useLifecycleLogger/index.ssr.test.ts similarity index 55% rename from src/useLifecycleLogger/__tests__/ssr.ts rename to src/useLifecycleLogger/index.ssr.test.ts index 25eaaba5..e553b615 100644 --- a/src/useLifecycleLogger/__tests__/ssr.ts +++ b/src/useLifecycleLogger/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useLifecycleLogger } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useLifecycleLogger} from '../index.js'; describe('useLifecycleLogger', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useLifecycleLogger', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useLifecycleLogger('TestComponent'); }); expect(result.error).toBeUndefined(); diff --git a/src/useLifecycleLogger/index.ts b/src/useLifecycleLogger/index.ts index 10bb74c2..9e513f1a 100644 --- a/src/useLifecycleLogger/index.ts +++ b/src/useLifecycleLogger/index.ts @@ -1,4 +1,4 @@ -import { type DependencyList, useEffect, useRef } from 'react'; +import {type DependencyList, useEffect, useRef} from 'react'; /** * This hook provides a console log when the component mounts, updates and unmounts. @@ -11,6 +11,7 @@ export function useLifecycleLogger(componentName: string, deps?: DependencyList) useEffect(() => { if (mountedRef.current) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment console.log(`${componentName} updated`, deps && [...deps]); } // eslint-disable-next-line react-hooks/exhaustive-deps @@ -18,6 +19,7 @@ export function useLifecycleLogger(componentName: string, deps?: DependencyList) useEffect(() => { mountedRef.current = true; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment console.log(`${componentName} mounted`, deps && [...deps]); return () => { diff --git a/src/useList/__docs__/example.stories.tsx b/src/useList/__docs__/example.stories.tsx deleted file mode 100644 index 7bf24e7b..00000000 --- a/src/useList/__docs__/example.stories.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import * as React from 'react'; -import { useList } from '../../index.js'; - -export function Example() { - const [ - list, - { - set, - push, - updateAt, - insertAt, - update, - updateFirst, - upsert, - sort, - filter, - removeAt, - clear, - reset, - }, - ] = useList([1, 2, 3, 4, 5]); - - return ( -
- - - -
-
- - - -
-
- - - -
-
- - -
-
- - -
{JSON.stringify(list, null, 2)}
-
- ); -} diff --git a/src/useList/__docs__/story.mdx b/src/useList/__docs__/story.mdx deleted file mode 100644 index 104715bc..00000000 --- a/src/useList/__docs__/story.mdx +++ /dev/null @@ -1,48 +0,0 @@ -# useList - -Tracks a list and offers functions for manipulating it. - -Manipulating the list directly will not cause a rerender. Instead, use the offered functions. - -> **_This hook provides a stable API, meaning the returned functions do not change between renders_** - -#### Example - -## Reference - -```ts -function useList(initialList: InitialState): [T[], ListActions]; -``` - -#### Importing - -#### Arguments - -- _**initialList**_ _`InitialState`_ - Initial list or function returning a list - -#### Return - -1. **list** - The current list. - -2. **actions** - -- **set** - Replaces the current list. -- **push** - Adds an item or items to the end of the list. -- **updateAt** - Replaces the item at the given index of the list. If the given index is out of - bounds, empty elements are appended to the list until the given item can be set to the given index. -- **insertAt** - Inserts an item at the given index of the list. All items following the given - index are shifted one position. If the given index is out of bounds, empty elements are appended - to the list until the given item can be set to the given index. -- **update** - Replaces all items of the list that match the given predicate with the given item. -- **updateFirst** - Replaces the first item of the list that matches the given predicate with the - given item. -- **upsert** - Replaces the first item of the list that matches the given predicate with the - given item. If none of the items match the predicate, the given item is pushed to the list. -- **sort** - Sorts the list with the given sorting function. If no sorting function is given, - the default Array.prototype.sort() sorting is used. -- **filter** - Filters the list with the given filter function. -- **removeAt** - Removes the item at the given index of the list. All items following the given - index will be shifted. If the given index is out of the bounds of the list, the list will not be - modified, but a rerender will occur. -- **clear** - Deletes all items of the list. -- **reset** - Replaces the current list with the initial list given to this hook. diff --git a/src/useList/__tests__/ssr.ts b/src/useList/__tests__/ssr.ts deleted file mode 100644 index 676eddb7..00000000 --- a/src/useList/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useList } from '../../index.js'; - -describe('useList', () => { - it('should be defined', () => { - expect(useList).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useList([1, 0, 2])); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useList/__tests__/dom.ts b/src/useList/index.dom.test.ts similarity index 65% rename from src/useList/__tests__/dom.ts rename to src/useList/index.dom.test.ts index fd508a15..3c5a2d26 100644 --- a/src/useList/__tests__/dom.ts +++ b/src/useList/index.dom.test.ts @@ -1,6 +1,7 @@ /* eslint-disable max-nested-callbacks */ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useList } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, type Mock, vi} from 'vitest'; +import {useList} from '../index.js'; describe('useList', () => { it('should be defined', () => { @@ -8,17 +9,17 @@ describe('useList', () => { }); it('should render', () => { - const { result } = renderHook(() => useList([])); + const {result} = renderHook(() => useList([])); expect(result.error).toBeUndefined(); }); it('should accept an initial list', () => { - const { result } = renderHook(() => useList([0, 1, 2])); + const {result} = renderHook(() => useList([0, 1, 2])); expect(result.current[0]).toEqual([0, 1, 2]); }); it('should return same actions object on every render', () => { - const { result } = renderHook(() => useList([0, 1, 2])); + const {result} = renderHook(() => useList([0, 1, 2])); const actions = result.current[1]; act(() => { @@ -30,8 +31,8 @@ describe('useList', () => { describe('set', () => { it('should replace the current list', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { set } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {set} = result.current[1]; act(() => { set([3, 4, 5]); @@ -41,8 +42,8 @@ describe('useList', () => { }); it('should replace the current list with empty list', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { set } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {set} = result.current[1]; act(() => { set([]); @@ -52,11 +53,11 @@ describe('useList', () => { }); it('should functionally replace the current list', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { set } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {set} = result.current[1]; act(() => { - set((current) => [...current, 3]); + set(current => [...current, 3]); }); expect(result.current[0]).toEqual([0, 1, 2, 3]); @@ -65,8 +66,8 @@ describe('useList', () => { describe('push', () => { it('should push a new item to the list', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { push } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {push} = result.current[1]; act(() => { push(3); @@ -76,8 +77,8 @@ describe('useList', () => { }); it('should push multiple items to the list', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { push } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {push} = result.current[1]; act(() => { push(3, 4, 5); @@ -89,8 +90,8 @@ describe('useList', () => { describe('updateAt', () => { it('should update item at given position', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { updateAt } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {updateAt} = result.current[1]; act(() => { updateAt(1, 0); @@ -100,8 +101,8 @@ describe('useList', () => { }); it('should update item at position that is out of of bounds', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { updateAt } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {updateAt} = result.current[1]; act(() => { updateAt(4, 0); @@ -113,8 +114,8 @@ describe('useList', () => { describe('insertAt', () => { it('should insert item into given position in the list', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { insertAt } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {insertAt} = result.current[1]; act(() => { insertAt(1, 0); @@ -124,8 +125,8 @@ describe('useList', () => { }); it('should insert item into position that is out of bounds', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { insertAt } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {insertAt} = result.current[1]; act(() => { insertAt(4, 0); @@ -137,8 +138,8 @@ describe('useList', () => { describe('update', () => { it('should update all items that match given predicate', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { update } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {update} = result.current[1]; act(() => { update((iteratedItem: number) => iteratedItem > 0, 0); @@ -148,9 +149,9 @@ describe('useList', () => { }); it('should pass update predicate the iterated element and the replacement', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { update } = result.current[1]; - const predicate = jest.fn((_iteratedItem, _newElement) => false); + const {result} = renderHook(() => useList([0, 1, 2])); + const {update} = result.current[1]; + const predicate = vi.fn((_iteratedItem, _newElement) => false); act(() => { update(predicate, 0); @@ -162,8 +163,8 @@ describe('useList', () => { }); it('should not update any items if none match given predicate', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { update } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {update} = result.current[1]; act(() => { update((iteratedItem: number) => iteratedItem > 3, 0); @@ -175,8 +176,8 @@ describe('useList', () => { describe('updateFirst', () => { it('should update the first item matching the given predicate', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { updateFirst } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {updateFirst} = result.current[1]; act(() => { updateFirst((iteratedItem: number) => iteratedItem > 0, 0); @@ -186,8 +187,8 @@ describe('useList', () => { }); it('should not update any items if none match given predicate', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { updateFirst } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {updateFirst} = result.current[1]; act(() => { updateFirst((iteratedItem: number) => iteratedItem > 3, 0); @@ -199,8 +200,8 @@ describe('useList', () => { describe('upsert', () => { it('should update the first item matching the given predicate', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { upsert } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {upsert} = result.current[1]; act(() => { upsert((iteratedItem: number) => iteratedItem > 0, 0); @@ -210,8 +211,8 @@ describe('useList', () => { }); it('should push given item to list, if no item matches the predicate', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { upsert } = result.current[1]; + const {result} = renderHook(() => useList([0, 1, 2])); + const {upsert} = result.current[1]; act(() => { upsert((iteratedItem: number) => iteratedItem > 3, 0); @@ -221,9 +222,9 @@ describe('useList', () => { }); it('should pass predicate the iterated element and the new element', () => { - const { result } = renderHook(() => useList([0, 1, 2])); - const { upsert } = result.current[1]; - const predicate = jest.fn((_iteratedItem, _newElement) => false); + const {result} = renderHook(() => useList([0, 1, 2])); + const {upsert} = result.current[1]; + const predicate = vi.fn((_iteratedItem, _newElement) => false); act(() => { upsert(predicate, 0); @@ -237,8 +238,8 @@ describe('useList', () => { describe('sort', () => { it('should sort list with given sorting function', () => { - const { result } = renderHook(() => useList([1, 0, 2])); - const { sort } = result.current[1]; + const {result} = renderHook(() => useList([1, 0, 2])); + const {sort} = result.current[1]; act(() => { sort((a, b) => b - a); @@ -248,8 +249,8 @@ describe('useList', () => { }); it('should use default sorting if sort is called without arguments', () => { - const { result } = renderHook(() => useList([1, 0, 2])); - const { sort } = result.current[1]; + const {result} = renderHook(() => useList([1, 0, 2])); + const {sort} = result.current[1]; act(() => { sort(); @@ -261,20 +262,20 @@ describe('useList', () => { describe('filter', () => { it('should filter list with given filter function', () => { - const { result } = renderHook(() => useList([1, 0, 2])); - const { filter } = result.current[1]; + const {result} = renderHook(() => useList([1, 0, 2])); + const {filter} = result.current[1]; act(() => { - filter((a) => a > 0); + filter(a => a > 0); }); expect(result.current[0]).toEqual([1, 2]); }); it('should pass element, its index and iterated list to filter function', () => { - const { result } = renderHook(() => useList([1, 0, 2])); - const { filter } = result.current[1]; - const filterFunction = jest.fn((_element, _index, _list) => false); + const {result} = renderHook(() => useList([1, 0, 2])); + const {filter} = result.current[1]; + const filterFunction = vi.fn((_element, _index, _list) => false); act(() => { filter(filterFunction); @@ -289,8 +290,8 @@ describe('useList', () => { describe('removeAt', () => { it('should remove item from given index', () => { - const { result } = renderHook(() => useList([1, 0, 2])); - const { removeAt } = result.current[1]; + const {result} = renderHook(() => useList([1, 0, 2])); + const {removeAt} = result.current[1]; act(() => { removeAt(1); @@ -300,8 +301,8 @@ describe('useList', () => { }); it('should not remove items if given index is out of bounds', () => { - const { result } = renderHook(() => useList([1, 0, 2])); - const { removeAt } = result.current[1]; + const {result} = renderHook(() => useList([1, 0, 2])); + const {removeAt} = result.current[1]; act(() => { removeAt(6); @@ -313,8 +314,8 @@ describe('useList', () => { describe('clear', () => { it('should clear the list', () => { - const { result } = renderHook(() => useList([1, 0, 2])); - const { clear } = result.current[1]; + const {result} = renderHook(() => useList([1, 0, 2])); + const {clear} = result.current[1]; act(() => { clear(); @@ -326,8 +327,8 @@ describe('useList', () => { describe('reset', () => { it('should reset the list to initial value', () => { - const { result } = renderHook(() => useList([1, 0, 2])); - const { reset, set } = result.current[1]; + const {result} = renderHook(() => useList([1, 0, 2])); + const {reset, set} = result.current[1]; act(() => { set([1, 1, 1]); @@ -339,14 +340,14 @@ describe('useList', () => { }); }); -function numberOfMockFunctionCalls(mockFunction: jest.Mock) { +function numberOfMockFunctionCalls(mockFunction: Mock): number { return mockFunction.mock.calls.length; } function mockFunctionCallArgument( - mockFunction: jest.Mock, + mockFunction: Mock, callIndex: number, - argumentIndex: number + argumentIndex: number, ) { // eslint-disable-next-line @typescript-eslint/no-unsafe-return return mockFunction.mock.calls[callIndex][argumentIndex]; diff --git a/src/useList/index.ssr.test.ts b/src/useList/index.ssr.test.ts new file mode 100644 index 00000000..a7965169 --- /dev/null +++ b/src/useList/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useList} from '../index.js'; + +describe('useList', () => { + it('should be defined', () => { + expect(useList).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useList([1, 0, 2])); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useList/index.ts b/src/useList/index.ts index 7c805313..b0360158 100644 --- a/src/useList/index.ts +++ b/src/useList/index.ts @@ -1,7 +1,7 @@ -import { type SetStateAction, useMemo, useRef } from 'react'; -import { useRerender } from '../useRerender/index.js'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { type InitialState, resolveHookState } from '../util/resolveHookState.js'; +import {type SetStateAction, useMemo, useRef} from 'react'; +import {useRerender} from '../useRerender/index.js'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {type InitialState, resolveHookState} from '../util/resolve-hook-state.js'; export type ListActions = { /** @@ -114,8 +114,7 @@ export function useList(initialList: InitialState): [T[], ListActions update(predicate: (iteratedItem: T, newItem: T) => boolean, newItem: T) { actions.set((currentList: T[]) => - currentList.map((item: T) => (predicate(item, newItem) ? newItem : item)) - ); + currentList.map((item: T) => (predicate(item, newItem) ? newItem : item))); }, updateFirst(predicate: (iteratedItem: T, newItem: T) => boolean, newItem: T) { @@ -166,7 +165,7 @@ export function useList(initialList: InitialState): [T[], ListActions actions.set([...resolveHookState(initial.current)]); }, }), - [initial, rerender] + [initial, rerender], ); return [list.current, actions]; diff --git a/src/useLocalStorageValue/__docs__/example.stories.tsx b/src/useLocalStorageValue/__docs__/example.stories.tsx deleted file mode 100644 index 5111ea82..00000000 --- a/src/useLocalStorageValue/__docs__/example.stories.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { useLocalStorageValue } from '../../index.js'; - -type ExampleProps = { - /** - * Default value to return in case key not presented in LocalStorage. - */ - readonly defaultValue: string; - /** - * LocalStorage key to manage. - */ - readonly key: string; -}; - -export function Example({ - key = 'react-hookz-ls-test', - defaultValue = '@react-hookz is awesome', -}: ExampleProps) { - const lsValue = useLocalStorageValue(key, { - defaultValue, - }); - - return ( -
-
- Below input value will persist between page reloads and even browser restart as its value is - stored in LocalStorage. -
-
- { - lsValue.set(ev.currentTarget.value); - }} - /> - -
- ); -} diff --git a/src/useLocalStorageValue/__docs__/story.mdx b/src/useLocalStorageValue/__docs__/story.mdx deleted file mode 100644 index 917f818b..00000000 --- a/src/useLocalStorageValue/__docs__/story.mdx +++ /dev/null @@ -1,59 +0,0 @@ -# useLocalStorageValue - -Manages a single LocalStorage key. - -- Uses JSON serialisation to handle non-string values. -- Tracks window's `storage` event. -- Synchronized between all hooks on the page with the same key. -- SSR compatible. - -> **_This hook provides a stable API, meaning the returned methods do not change between renders._** - -> Does not allow usage of `null` as a value, since JSON allows serializing `null` - it would be -> impossible to separate `null` value from 'no such value' API result which is also `null`. - -> If you are doing SSR, set `initializeWithValue` to `false` in order for this hook to return -> `undefined` on first render. The LocalStorage value will be fetched client-side when effects -> are executed. - -> If you are using useLocalStorageValue in multiple places with the same key, all instances must -> use compatible serializers if you are overriding the serializers with the `parse` and `stringify` options. - -#### Example - -## Reference - -```ts -function useLocalStorageValue< - Type, - Default extends Type = Type, - Initialize extends boolean | undefined = boolean | undefined, ->( - key: string, - options?: UseStorageValueOptions -): UseStorageValueResult; -``` - -#### Importing - -#### Arguments - -- **key** _`string`_ - LocalStorage key to manage. -- **options** _`object`_ - Hook options: -- **defaultValue** _`T | null`_ - Value to return if `key` is not present in LocalStorage. -- **initializeWithValue** _`boolean`_ _(default: true)_ - Fetch storage value on first render. If - set to `false` will make the hook yield `undefined` on first render and defer fetching of the - value until effects are executed. -- **parse** _`(str: string | null, fallback: T | null) => T | null`_ - Custom parse function to use instead of JSON.parse -- **stringify** _`(data: unknown) => string | null`_ - Custom stringify function to use instead of JSON.stringify - -#### Return - -Object with following properties. Note that this object changes with `value`, but its methods are -stable between renders. Thus, it is safe to pass them as props. - -- **value** - LocalStorage value of the given `key` argument or `defaultValue`, if the key was not - present. -- **set** - Set a new value for the managed `key`. -- **remove** - Remove the current value of `key`. -- **fetch** - Manually retrieve the value of `key`. diff --git a/src/useLocalStorageValue/__tests__/dom.ts b/src/useLocalStorageValue/index.dom.test.ts similarity index 55% rename from src/useLocalStorageValue/__tests__/dom.ts rename to src/useLocalStorageValue/index.dom.test.ts index 5a6b6ddb..4f6161c3 100644 --- a/src/useLocalStorageValue/__tests__/dom.ts +++ b/src/useLocalStorageValue/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useLocalStorageValue } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useLocalStorageValue} from '../index.js'; describe('useLocalStorageValue', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useLocalStorageValue', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useLocalStorageValue('foo'); }); expect(result.error).toBeUndefined(); diff --git a/src/useLocalStorageValue/__tests__/ssr.ts b/src/useLocalStorageValue/index.ssr.test.ts similarity index 55% rename from src/useLocalStorageValue/__tests__/ssr.ts rename to src/useLocalStorageValue/index.ssr.test.ts index 22e64dc2..e5c7f91d 100644 --- a/src/useLocalStorageValue/__tests__/ssr.ts +++ b/src/useLocalStorageValue/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useLocalStorageValue } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useLocalStorageValue} from '../index.js'; describe('useLocalStorageValue', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useLocalStorageValue', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useLocalStorageValue('foo'); }); expect(result.error).toBeUndefined(); diff --git a/src/useLocalStorageValue/index.ts b/src/useLocalStorageValue/index.ts index 8c055778..4eecb59d 100644 --- a/src/useLocalStorageValue/index.ts +++ b/src/useLocalStorageValue/index.ts @@ -3,15 +3,13 @@ import { type UseStorageValueOptions, type UseStorageValueResult, } from '../useStorageValue/index.js'; -import { isBrowser, noop } from '../util/const.js'; +import {isBrowser, noop} from '../util/const.js'; let IS_LOCAL_STORAGE_AVAILABLE: boolean; try { - IS_LOCAL_STORAGE_AVAILABLE = isBrowser && Boolean(window.localStorage); + IS_LOCAL_STORAGE_AVAILABLE = isBrowser && Boolean(globalThis.localStorage); } catch { - // No need to test this flag leads to noop behaviour - /* istanbul ignore next */ IS_LOCAL_STORAGE_AVAILABLE = false; } @@ -27,21 +25,19 @@ type UseLocalStorageValue = < /** * Manages a single localStorage key. */ -export const useLocalStorageValue: UseLocalStorageValue = IS_LOCAL_STORAGE_AVAILABLE - ? (key, options) => { - return useStorageValue(localStorage, key, options); - } - : < +export const useLocalStorageValue: UseLocalStorageValue = IS_LOCAL_STORAGE_AVAILABLE ? + (key, options) => useStorageValue(localStorage, key, options) : + < Type, Default extends Type = Type, Initialize extends boolean | undefined = boolean | undefined, >( _key: string, - _options?: UseStorageValueOptions + _options?: UseStorageValueOptions, ): UseStorageValueResult => { if (isBrowser && process.env.NODE_ENV === 'development') { console.warn('LocalStorage is not available in this environment'); } - return { value: undefined as Type, set: noop, remove: noop, fetch: noop }; + return {value: undefined as Type, set: noop, remove: noop, fetch: noop}; }; diff --git a/src/useMap/__docs__/example.stories.tsx b/src/useMap/__docs__/example.stories.tsx deleted file mode 100644 index b7c7bba3..00000000 --- a/src/useMap/__docs__/example.stories.tsx +++ /dev/null @@ -1,32 +0,0 @@ -/* eslint-disable react/no-unescaped-entities */ -import * as React from 'react'; -import { useMap } from '../../index.js'; - -export function Example() { - const map = useMap([['@react-hooks', 'is awesome']]); - - return ( -
- - - - -
-
{JSON.stringify([...map], null, 2)}
-
- ); -} diff --git a/src/useMap/__docs__/story.mdx b/src/useMap/__docs__/story.mdx deleted file mode 100644 index db635389..00000000 --- a/src/useMap/__docs__/story.mdx +++ /dev/null @@ -1,28 +0,0 @@ -# useMap - -Tracks the state of a `Map`. - -- Returned map does not change between renders. -- 1-to-1 signature with the native `Map` object, but its methods are wrapped to cause components to - rerender with changes. - Otherwise, it is the JavaScript native `Map` object. -- SSR-friendly. - -#### Example - -## Reference - -```ts -export function useMap(entries?: readonly (readonly [K, V])[] | null): Map; -``` - -#### Importing - -#### Arguments - -- **entries** _`readonly (readonly [K, V])[] | null`_ - Initial entries iterator for underlying - `Map` constructor. - -#### Return - -- `Map` instance. diff --git a/src/useMap/__tests__/dom.ts b/src/useMap/index.dom.test.ts similarity index 71% rename from src/useMap/__tests__/dom.ts rename to src/useMap/index.dom.test.ts index 73795054..29c93e4c 100644 --- a/src/useMap/__tests__/dom.ts +++ b/src/useMap/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook, act } from '@testing-library/react-hooks/dom'; -import { useMap } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useMap} from '../index.js'; describe('useMap', () => { it('should be defined', () => { @@ -7,12 +8,12 @@ describe('useMap', () => { }); it('should render', () => { - const { result } = renderHook(() => useMap()); + const {result} = renderHook(() => useMap()); expect(result.error).toBeUndefined(); }); it('should return a Map instance with altered add, clear and delete methods', () => { - const { result } = renderHook(() => useMap()); + const {result} = renderHook(() => useMap()); expect(result.current).toBeInstanceOf(Map); expect(result.current.set).not.toBe(Map.prototype.set); expect(result.current.clear).not.toBe(Map.prototype.clear); @@ -20,13 +21,12 @@ describe('useMap', () => { }); it('should accept initial values', () => { - const { result } = renderHook(() => + const {result} = renderHook(() => useMap([ ['foo', 1], ['bar', 2], ['baz', 3], - ]) - ); + ])); expect(result.current.get('foo')).toBe(1); expect(result.current.get('bar')).toBe(2); expect(result.current.get('baz')).toBe(3); @@ -34,9 +34,9 @@ describe('useMap', () => { }); it('`set` should invoke original method and rerender component', () => { - const spy = jest.spyOn(Map.prototype, 'set'); + const spy = vi.spyOn(Map.prototype, 'set'); let i = 0; - const { result } = renderHook(() => [++i, useMap()] as const); + const {result} = renderHook(() => [++i, useMap()] as const); act(() => { expect(result.current[1].set('foo', 'bar')).toBe(result.current[1]); @@ -49,9 +49,9 @@ describe('useMap', () => { }); it('`clear` should invoke original method and rerender component', () => { - const spy = jest.spyOn(Map.prototype, 'clear'); + const spy = vi.spyOn(Map.prototype, 'clear'); let i = 0; - const { result } = renderHook(() => [++i, useMap()] as const); + const {result} = renderHook(() => [++i, useMap()] as const); act(() => { result.current[1].clear(); @@ -63,9 +63,9 @@ describe('useMap', () => { }); it('`delete` should invoke original method and rerender component', () => { - const spy = jest.spyOn(Map.prototype, 'delete'); + const spy = vi.spyOn(Map.prototype, 'delete'); let i = 0; - const { result } = renderHook(() => [++i, useMap([['foo', 1]])] as const); + const {result} = renderHook(() => [++i, useMap([['foo', 1]])] as const); act(() => { expect(result.current[1].delete('foo')).toBe(true); diff --git a/src/useMap/__tests__/ssr.ts b/src/useMap/index.ssr.test.ts similarity index 71% rename from src/useMap/__tests__/ssr.ts rename to src/useMap/index.ssr.test.ts index 1f6f6714..78a59897 100644 --- a/src/useMap/__tests__/ssr.ts +++ b/src/useMap/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook, act } from '@testing-library/react-hooks/server'; -import { useMap } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it, vi} from 'vitest'; +import {useMap} from '../index.js'; describe('useMap', () => { it('should be defined', () => { @@ -7,12 +8,12 @@ describe('useMap', () => { }); it('should render', () => { - const { result } = renderHook(() => useMap()); + const {result} = renderHook(() => useMap()); expect(result.error).toBeUndefined(); }); it('should return a Map instance with altered set, clear and delete methods', () => { - const { result } = renderHook(() => useMap()); + const {result} = renderHook(() => useMap()); expect(result.current).toBeInstanceOf(Map); expect(result.current.set).not.toBe(Map.prototype.set); expect(result.current.clear).not.toBe(Map.prototype.clear); @@ -20,13 +21,12 @@ describe('useMap', () => { }); it('should accept initial values', () => { - const { result } = renderHook(() => + const {result} = renderHook(() => useMap([ ['foo', 1], ['bar', 2], ['baz', 3], - ]) - ); + ])); expect(result.current.get('foo')).toBe(1); expect(result.current.get('bar')).toBe(2); expect(result.current.get('baz')).toBe(3); @@ -34,9 +34,9 @@ describe('useMap', () => { }); it('`set` should invoke original method and not rerender component', () => { - const spy = jest.spyOn(Map.prototype, 'set'); + const spy = vi.spyOn(Map.prototype, 'set'); let i = 0; - const { result } = renderHook(() => [++i, useMap()] as const); + const {result} = renderHook(() => [++i, useMap()] as const); act(() => { expect(result.current[1].set('foo', 'bar')).toBe(result.current[1]); @@ -49,9 +49,9 @@ describe('useMap', () => { }); it('`clear` should invoke original method and not rerender component', () => { - const spy = jest.spyOn(Map.prototype, 'clear'); + const spy = vi.spyOn(Map.prototype, 'clear'); let i = 0; - const { result } = renderHook(() => [++i, useMap()] as const); + const {result} = renderHook(() => [++i, useMap()] as const); act(() => { result.current[1].clear(); @@ -63,9 +63,9 @@ describe('useMap', () => { }); it('`delete` should invoke original method and not rerender component', () => { - const spy = jest.spyOn(Map.prototype, 'delete'); + const spy = vi.spyOn(Map.prototype, 'delete'); let i = 0; - const { result } = renderHook(() => [++i, useMap([['foo', 1]])] as const); + const {result} = renderHook(() => [++i, useMap([['foo', 1]])] as const); act(() => { expect(result.current[1].delete('foo')).toBe(true); diff --git a/src/useMap/index.ts b/src/useMap/index.ts index dbf86f9d..9b1435f3 100644 --- a/src/useMap/index.ts +++ b/src/useMap/index.ts @@ -1,5 +1,5 @@ -import { useRef } from 'react'; -import { useRerender } from '../useRerender/index.js'; +import {useRef} from 'react'; +import {useRerender} from '../useRerender/index.js'; const proto = Map.prototype; @@ -10,7 +10,7 @@ const proto = Map.prototype; */ export function useMap( - entries?: ReadonlyArray | null + entries?: ReadonlyArray | null, ): Map { const mapRef = useRef>(); const rerender = useRerender(); @@ -32,10 +32,10 @@ export function useMap( }; map.delete = (...args) => { - const res = proto.delete.apply(map, args); + const existed = proto.delete.apply(map, args); rerender(); - return res; + return existed; }; } diff --git a/src/useMeasure/__docs__/example.stories.tsx b/src/useMeasure/__docs__/example.stories.tsx deleted file mode 100644 index 82345456..00000000 --- a/src/useMeasure/__docs__/example.stories.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import * as React from 'react'; -import { useMeasure } from '../../index.js'; - -export function Example() { - const [measurements, ref] = useMeasure(); - - return ( -
-
{JSON.stringify(measurements)}
-
- resize me UwU -
-
- ); -} diff --git a/src/useMeasure/__docs__/story.mdx b/src/useMeasure/__docs__/story.mdx deleted file mode 100644 index a6442b9b..00000000 --- a/src/useMeasure/__docs__/story.mdx +++ /dev/null @@ -1,34 +0,0 @@ -# useMeasure - -Uses ResizeObserver to track element dimensions and re-render component when they change. - -- Its ResizeObserver callback uses RAF debouncing, therefore it is pretty performant. -- SSR friendly, returns `undefined` on initial mount. -- Automatically creates ref for you, that you can easily pass to needed element. -- Allows to dynamically enable and disable observation. - -#### Example - -## Reference - -```ts -interface Measures { - width: number; - height: number; -} - -function useMeasure(enabled = true): [Measures | undefined, React.RefObject]; -``` - -#### Importing - -#### Arguments - -- **enabled** _`boolean`_ _(default: `true`)_ - Whether resize observer is enabled or not. - -#### Return - -Array of two elements: - -- **0** _`Measures | undefined`_ - Width and height of the tracked element's `contentRect` -- **1** _`RefObject`_ - Ref object that should be passed to tracked element diff --git a/src/useMeasure/__tests__/dom.ts b/src/useMeasure/__tests__/dom.ts deleted file mode 100644 index 4836ee8d..00000000 --- a/src/useMeasure/__tests__/dom.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useEffect } from 'react'; -import { useMeasure } from '../../index.js'; -import Mock = jest.Mock; - -describe('useMeasure', () => { - const raf = global.requestAnimationFrame; - const caf = global.cancelAnimationFrame; - const observeSpy = jest.fn(); - const unobserveSpy = jest.fn(); - const disconnectSpy = jest.fn(); - - let ResizeObserverSpy: Mock; - const initialRO = global.ResizeObserver; - - beforeAll(() => { - jest.useFakeTimers(); - - global.requestAnimationFrame = (cb) => setTimeout(cb, 1); - global.cancelAnimationFrame = (cb) => { - clearTimeout(cb); - }; - - ResizeObserverSpy = jest.fn(() => ({ - observe: observeSpy, - unobserve: unobserveSpy, - disconnect: disconnectSpy, - })); - - global.ResizeObserver = ResizeObserverSpy; - }); - - beforeEach(() => { - observeSpy.mockClear(); - unobserveSpy.mockClear(); - disconnectSpy.mockClear(); - }); - - afterEach(() => { - jest.clearAllTimers(); - }); - - afterAll(() => { - jest.useRealTimers(); - - global.ResizeObserver = initialRO; - - global.requestAnimationFrame = raf; - global.cancelAnimationFrame = caf; - }); - - it('should be defined', () => { - expect(useMeasure).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useMeasure()); - - expect(result.error).toBeUndefined(); - }); - - it('should return undefined sate on initial render', () => { - const { result } = renderHook(() => useMeasure()); - - expect(result.current[0]).toBeUndefined(); - }); - - it('should return reference as a second array element', () => { - const { result } = renderHook(() => useMeasure()); - - expect(result.current[1]).toStrictEqual({ current: null }); - }); - - it('should only set state within animation frame', () => { - const div = document.createElement('div'); - const { result } = renderHook(() => { - const res = useMeasure(); - - useEffect(() => { - res[1].current = div; - }); - - return res; - }); - - const measures = { - width: 0, - height: 0, - }; - - const entry = { - target: div, - contentRect: { width: 0, height: 0 }, - borderBoxSize: {}, - contentBoxSize: {}, - } as unknown as ResizeObserverEntry; - - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - ResizeObserverSpy.mock.calls[0][0]([entry]); - expect(result.current[0]).toBeUndefined(); - - act(() => { - jest.advanceTimersByTime(1); - }); - - expect(result.current[1]).toStrictEqual({ current: div }); - expect(result.current[0]).toStrictEqual(measures); - }); -}); diff --git a/src/useMeasure/__tests__/ssr.ts b/src/useMeasure/__tests__/ssr.ts deleted file mode 100644 index 4f9797e5..00000000 --- a/src/useMeasure/__tests__/ssr.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useMeasure } from '../../index.js'; -import Mock = jest.Mock; - -describe('useMeasure', () => { - const observeSpy = jest.fn(); - const unobserveSpy = jest.fn(); - const disconnectSpy = jest.fn(); - - let ResizeObserverSpy: Mock; - const initialRO = global.ResizeObserver; - - beforeAll(() => { - ResizeObserverSpy = jest.fn(() => ({ - observe: observeSpy, - unobserve: unobserveSpy, - disconnect: disconnectSpy, - })); - - global.ResizeObserver = ResizeObserverSpy; - }); - - beforeEach(() => { - observeSpy.mockClear(); - unobserveSpy.mockClear(); - disconnectSpy.mockClear(); - }); - - afterAll(() => { - global.ResizeObserver = initialRO; - }); - - it('should be defined', () => { - expect(useMeasure).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useMeasure()); - - expect(result.error).toBeUndefined(); - }); - - it('should return undefined sate on initial render', () => { - const { result } = renderHook(() => useMeasure()); - - expect(result.current[0]).toBeUndefined(); - }); - - it('should return reference as a second array element', () => { - const { result } = renderHook(() => useMeasure()); - - expect(result.current[1]).toStrictEqual({ current: null }); - }); -}); diff --git a/src/useMeasure/index.dom.test.ts b/src/useMeasure/index.dom.test.ts new file mode 100644 index 00000000..abe132bf --- /dev/null +++ b/src/useMeasure/index.dom.test.ts @@ -0,0 +1,107 @@ +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {useEffect} from 'react'; +import {afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useMeasure} from '../index.js'; + +describe('useMeasure', () => { + const observeSpy = vi.fn(); + const unobserveSpy = vi.fn(); + const disconnectSpy = vi.fn(); + + const ResizeObserverSpy = vi.fn((_cb: (entries: ResizeObserverEntry[]) => void) => ({ + observe: observeSpy, + unobserve: unobserveSpy, + disconnect: disconnectSpy, + })); + const initialRO = globalThis.ResizeObserver; + + const raf = globalThis.requestAnimationFrame; + const caf = globalThis.cancelAnimationFrame; + + beforeAll(() => { + vi.useFakeTimers(); + + globalThis.requestAnimationFrame = cb => setTimeout(cb, 1); + globalThis.cancelAnimationFrame = (cb) => { + clearTimeout(cb); + }; + + vi.stubGlobal('ResizeObserver', ResizeObserverSpy); + }); + + beforeEach(() => { + observeSpy.mockClear(); + unobserveSpy.mockClear(); + disconnectSpy.mockClear(); + }); + + afterEach(() => { + vi.clearAllTimers(); + }); + + afterAll(() => { + vi.useRealTimers(); + + globalThis.ResizeObserver = initialRO; + + globalThis.requestAnimationFrame = raf; + globalThis.cancelAnimationFrame = caf; + }); + + it('should be defined', () => { + expect(useMeasure).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useMeasure()); + + expect(result.error).toBeUndefined(); + }); + + it('should return undefined sate on initial render', () => { + const {result} = renderHook(() => useMeasure()); + + expect(result.current[0]).toBeUndefined(); + }); + + it('should return reference as a second array element', () => { + const {result} = renderHook(() => useMeasure()); + + expect(result.current[1]).toStrictEqual({current: null}); + }); + + it('should only set state within animation frame', () => { + const div = document.createElement('div'); + const {result} = renderHook(() => { + const measure = useMeasure(); + + useEffect(() => { + measure[1].current = div; + }); + + return measure; + }); + + const measures = { + width: 0, + height: 0, + }; + + const entry = { + target: div, + contentRect: {width: 0, height: 0}, + borderBoxSize: {}, + contentBoxSize: {}, + } as unknown as ResizeObserverEntry; + + ResizeObserverSpy.mock.calls[0][0]([entry]); + expect(result.current[0]).toBeUndefined(); + + act(() => { + vi.advanceTimersByTime(1); + }); + + expect(result.current[1]).toStrictEqual({current: div}); + expect(result.current[0]).toStrictEqual(measures); + }); +}); diff --git a/src/useMeasure/index.ssr.test.ts b/src/useMeasure/index.ssr.test.ts new file mode 100644 index 00000000..659a389a --- /dev/null +++ b/src/useMeasure/index.ssr.test.ts @@ -0,0 +1,53 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useMeasure} from '../index.js'; + +describe('useMeasure', () => { + const observeSpy = vi.fn(); + const unobserveSpy = vi.fn(); + const disconnectSpy = vi.fn(); + + const ResizeObserverSpy = vi.fn((_cb: (entries: ResizeObserverEntry[]) => void) => ({ + observe: observeSpy, + unobserve: unobserveSpy, + disconnect: disconnectSpy, + })); + const initialRO = globalThis.ResizeObserver; + + beforeAll(() => { + vi.stubGlobal('ResizeObserver', ResizeObserverSpy); + vi.useFakeTimers(); + }); + + beforeEach(() => { + observeSpy.mockClear(); + unobserveSpy.mockClear(); + disconnectSpy.mockClear(); + }); + + afterAll(() => { + globalThis.ResizeObserver = initialRO; + }); + + it('should be defined', () => { + expect(useMeasure).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useMeasure()); + + expect(result.error).toBeUndefined(); + }); + + it('should return undefined sate on initial render', () => { + const {result} = renderHook(() => useMeasure()); + + expect(result.current[0]).toBeUndefined(); + }); + + it('should return reference as a second array element', () => { + const {result} = renderHook(() => useMeasure()); + + expect(result.current[1]).toStrictEqual({current: null}); + }); +}); diff --git a/src/useMeasure/index.ts b/src/useMeasure/index.ts index 9a8e54cd..d45b2c9a 100644 --- a/src/useMeasure/index.ts +++ b/src/useMeasure/index.ts @@ -1,7 +1,7 @@ -import { type MutableRefObject, useState } from 'react'; -import { useHookableRef } from '../useHookableRef/index.js'; -import { useRafCallback } from '../useRafCallback/index.js'; -import { useResizeObserver, type UseResizeObserverCallback } from '../useResizeObserver/index.js'; +import {type MutableRefObject, useState} from 'react'; +import {useHookableRef} from '../useHookableRef/index.js'; +import {useRafCallback} from '../useRafCallback/index.js'; +import {useResizeObserver, type UseResizeObserverCallback} from '../useResizeObserver/index.js'; export type Measures = { width: number; @@ -14,7 +14,7 @@ export type Measures = { * @param enabled Whether resize observer is enabled or not. */ export function useMeasure( - enabled = true + enabled = true, ): [Measures | undefined, MutableRefObject] { const [element, setElement] = useState(null); const elementRef = useHookableRef(null, (v) => { @@ -25,7 +25,7 @@ export function useMeasure( const [measures, setMeasures] = useState(); const [observerHandler] = useRafCallback((entry) => { - setMeasures({ width: entry.contentRect.width, height: entry.contentRect.height }); + setMeasures({width: entry.contentRect.width, height: entry.contentRect.height}); }); useResizeObserver(element, observerHandler, enabled); diff --git a/src/useMediaQuery/__docs__/example.stories.tsx b/src/useMediaQuery/__docs__/example.stories.tsx deleted file mode 100644 index 44731c6b..00000000 --- a/src/useMediaQuery/__docs__/example.stories.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import * as React from 'react'; -import { useMediaQuery } from '../../index.js'; - -export function Example() { - const isSmallDevice = useMediaQuery('only screen and (max-width : 768px)'); - const isMediumDevice = useMediaQuery( - 'only screen and (min-width : 769px) and (max-width : 992px)' - ); - const isLargeDevice = useMediaQuery( - 'only screen and (min-width : 993px) and (max-width : 1200px)' - ); - const isExtraLargeDevice = useMediaQuery('only screen and (min-width : 1201px)'); - - return ( -
- Resize your browser windows to see changes. -
-
-
- Small device (max-width : 768px):{' '} - {isSmallDevice === undefined ? 'unknown' : isSmallDevice ? 'yes' : 'no'} -
-
- Medium device (max-width : 992px):{' '} - {isMediumDevice === undefined ? 'unknown' : isMediumDevice ? 'yes' : 'no'} -
-
- Large device (max-width : 1200px):{' '} - {isLargeDevice === undefined ? 'unknown' : isLargeDevice ? 'yes' : 'no'} -
-
- Extra large device (min-width : 1201px):{' '} - {isExtraLargeDevice === undefined ? 'unknown' : isExtraLargeDevice ? 'yes' : 'no'} -
-
- ); -} diff --git a/src/useMediaQuery/__docs__/story.mdx b/src/useMediaQuery/__docs__/story.mdx deleted file mode 100644 index 0ca08de1..00000000 --- a/src/useMediaQuery/__docs__/story.mdx +++ /dev/null @@ -1,35 +0,0 @@ -# useMediaQuery - -Tracks the state of CSS media query. - -- Tracks the changes in media query. -- Automatically updates on media query status change. -- Performant, uses only single `matchMedia` entry to update all hooks using same key. -- SSR-friendly. - -#### Example - -## Reference - -```ts -interface UseMediaQueryOptions { - initializeWithValue?: boolean; -} - -export function useMediaQuery(query: string, options?: UseMediaQueryOptions): boolean | undefined; -``` - -#### Importing - -#### Arguments - -- **query** _`string`_ - CSS media query to track. -- **options** _`object`_ - Hook options: -- **initializeWithValue** _`boolean`_ _(default: true)_ - Determine media query match state on first - render. Setting this to false will make the hook yield `undefined` on first render. We suggest - setting this to `false` during SSR. - -#### Return - -`boolean` - `true` if document matches the media query, `false` if not. `undefined` on first render -if `initializeWithValue` was set to `false`. diff --git a/src/useMediaQuery/__tests__/dom.ts b/src/useMediaQuery/__tests__/dom.ts deleted file mode 100644 index 8776ab8d..00000000 --- a/src/useMediaQuery/__tests__/dom.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useMediaQuery } from '../../index.js'; - -describe('useMediaQuery', () => { - type MutableMediaQueryList = { - matches: boolean; - media: string; - onchange: null; - addListener: jest.Mock; // Deprecated - removeListener: jest.Mock; // Deprecated - addEventListener: jest.Mock; - removeEventListener: jest.Mock; - dispatchEvent: jest.Mock; - }; - - const matchMediaMock = jest.fn(); - let initialMatchMedia: typeof window.matchMedia; - - beforeAll(() => { - initialMatchMedia = window.matchMedia; - Object.defineProperty(window, 'matchMedia', { - writable: true, - value: matchMediaMock, - }); - }); - - afterAll(() => { - window.matchMedia = initialMatchMedia; - }); - - beforeEach(() => { - matchMediaMock.mockImplementation((query: string) => ({ - matches: false, - media: query, - onchange: null, - addListener: jest.fn(), // Deprecated - removeListener: jest.fn(), // Deprecated - addEventListener: jest.fn(), - removeEventListener: jest.fn(), - dispatchEvent: jest.fn(), - })); - }); - - afterEach(() => { - matchMediaMock.mockClear(); - }); - - it('should be defined', () => { - expect(useMediaQuery).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useMediaQuery('max-width : 768px')); - expect(result.error).toBeUndefined(); - }); - - it('should return undefined on first render, if initializeWithValue is false', () => { - const { result } = renderHook(() => - useMediaQuery('max-width : 768px', { initializeWithValue: false }) - ); - expect(result.all.length).toBe(2); - expect(result.all[0]).toBe(undefined); - expect(result.current).toBe(false); - }); - - it('should return value on first render, if initializeWithValue is true', () => { - const { result } = renderHook(() => - useMediaQuery('max-width : 768px', { initializeWithValue: true }) - ); - expect(result.all.length).toBe(1); - expect(result.current).toBe(false); - }); - - it('should return match state', () => { - const { result } = renderHook(() => useMediaQuery('max-width : 768px')); - expect(result.current).toBe(false); - }); - - it('should update state if query state changed', () => { - const { result } = renderHook(() => useMediaQuery('max-width : 768px')); - expect(result.current).toBe(false); - - const mql = matchMediaMock.mock.results[0].value as MutableMediaQueryList; - mql.matches = true; - - act(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - mql.addEventListener.mock.calls[0][1](); - }); - expect(result.current).toBe(true); - }); - - it('several hooks tracking same rule must listen same mql', () => { - const { result: result1 } = renderHook(() => useMediaQuery('max-width : 768px')); - const { result: result2 } = renderHook(() => useMediaQuery('max-width : 768px')); - const { result: result3 } = renderHook(() => useMediaQuery('max-width : 768px')); - expect(result1.current).toBe(false); - expect(result2.current).toBe(false); - expect(result3.current).toBe(false); - - const mql = matchMediaMock.mock.results[0].value as MutableMediaQueryList; - mql.matches = true; - - act(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - mql.addEventListener.mock.calls[0][1](); - }); - expect(result1.current).toBe(true); - expect(result2.current).toBe(true); - expect(result3.current).toBe(true); - }); - - it('should unsubscribe from previous mql when query changed', () => { - const { result: result1 } = renderHook(() => useMediaQuery('max-width : 768px')); - const { result: result2 } = renderHook(() => useMediaQuery('max-width : 768px')); - const { result: result3, rerender: rerender3 } = renderHook( - ({ query }) => useMediaQuery(query), - { - initialProps: { query: 'max-width : 768px' }, - } - ); - expect(result1.current).toBe(false); - expect(result2.current).toBe(false); - expect(result3.current).toBe(false); - - rerender3({ query: 'max-width : 760px' }); - - expect(matchMediaMock).toHaveBeenCalledTimes(2); - - const mql = matchMediaMock.mock.results[0].value as MutableMediaQueryList; - mql.matches = true; - - act(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - mql.addEventListener.mock.calls[0][1](); - }); - expect(result1.current).toBe(true); - expect(result2.current).toBe(true); - expect(result3.current).toBe(false); - }); - - it('should unsubscribe from mql only when no hooks are awaiting such value', () => { - const { unmount: unmount1 } = renderHook(() => useMediaQuery('max-width : 768px')); - const { unmount: unmount2 } = renderHook(() => useMediaQuery('max-width : 768px')); - const { unmount: unmount3 } = renderHook(() => useMediaQuery('max-width : 768px')); - - const mql = matchMediaMock.mock.results[0].value as MutableMediaQueryList; - expect(mql.removeEventListener).not.toHaveBeenCalled(); - unmount3(); - expect(mql.removeEventListener).not.toHaveBeenCalled(); - unmount2(); - expect(mql.removeEventListener).not.toHaveBeenCalled(); - unmount1(); - expect(mql.removeEventListener).toHaveBeenCalledTimes(1); - }); - - it('should use addListener and removeListener in case of absence of modern methods', () => { - matchMediaMock.mockImplementation((query: string) => ({ - matches: false, - media: query, - onchange: null, - addListener: jest.fn(), - removeListener: jest.fn(), - dispatchEvent: jest.fn(), - })); - - const { unmount } = renderHook(() => useMediaQuery('max-width : 1024px')); - - const mql = matchMediaMock.mock.results[0].value as MutableMediaQueryList; - expect(mql.addListener).toHaveBeenCalledTimes(1); - - unmount(); - expect(mql.removeListener).toHaveBeenCalledTimes(1); - }); -}); diff --git a/src/useMediaQuery/__tests__/ssr.ts b/src/useMediaQuery/__tests__/ssr.ts deleted file mode 100644 index 4651fb07..00000000 --- a/src/useMediaQuery/__tests__/ssr.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useMediaQuery } from '../../index.js'; - -describe('useMediaQuery', () => { - it('should be defined', () => { - expect(useMediaQuery).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => - useMediaQuery('max-width : 768px', { initializeWithValue: false }) - ); - expect(result.error).toBeUndefined(); - }); - - it('should return undefined on first render, if initializeWithValue is set to false', () => { - const { result } = renderHook(() => - useMediaQuery('max-width : 768px', { initializeWithValue: false }) - ); - expect(result.current).toBeUndefined(); - }); -}); diff --git a/src/useMediaQuery/index.dom.test.ts b/src/useMediaQuery/index.dom.test.ts new file mode 100644 index 00000000..4fa343a3 --- /dev/null +++ b/src/useMediaQuery/index.dom.test.ts @@ -0,0 +1,150 @@ +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useMediaQuery} from '../index.js'; + +describe('useMediaQuery', () => { + const matchMediaMock = vi.fn((query: string) => ({ + matches: false, + media: query, + onchange: null, + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn(), + })); + + vi.stubGlobal('matchMedia', matchMediaMock); + + beforeEach(() => { + matchMediaMock.mockClear(); + }); + afterEach(() => { + matchMediaMock.mockClear(); + }); + + it('should be defined', () => { + expect(useMediaQuery).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useMediaQuery('max-width : 768px')); + expect(result.error).toBeUndefined(); + }); + + it('should return undefined on first render, if initializeWithValue is false', () => { + const {result} = renderHook(() => + useMediaQuery('max-width : 768px', {initializeWithValue: false})); + expect(result.all.length).toBe(2); + expect(result.all[0]).toBe(undefined); + expect(result.current).toBe(false); + }); + + it('should return value on first render, if initializeWithValue is true', () => { + const {result} = renderHook(() => + useMediaQuery('max-width : 768px', {initializeWithValue: true})); + expect(result.all.length).toBe(1); + expect(result.current).toBe(false); + }); + + it('should return match state', () => { + const {result} = renderHook(() => useMediaQuery('max-width : 768px')); + expect(result.current).toBe(false); + }); + + it('should update state if query state changed', () => { + const {result} = renderHook(() => useMediaQuery('max-width : 768px')); + expect(result.current).toBe(false); + + expect(matchMediaMock.mock.results[0].type).toEqual('return'); + if (matchMediaMock.mock.results[0].type !== 'return') { + return; + } + + const mql = matchMediaMock.mock.results[0].value; + mql.matches = true; + + act(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + mql.addEventListener.mock.calls[0][1](); + }); + expect(result.current).toBe(true); + }); + + it('several hooks tracking same rule must listen same mql', () => { + const {result: result1} = renderHook(() => useMediaQuery('max-width : 768px')); + const {result: result2} = renderHook(() => useMediaQuery('max-width : 768px')); + const {result: result3} = renderHook(() => useMediaQuery('max-width : 768px')); + expect(result1.current).toBe(false); + expect(result2.current).toBe(false); + expect(result3.current).toBe(false); + + expect(matchMediaMock.mock.results[0].type).toEqual('return'); + if (matchMediaMock.mock.results[0].type !== 'return') { + return; + } + + const mql = matchMediaMock.mock.results[0].value; + mql.matches = true; + + act(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + mql.addEventListener.mock.calls[0][1](); + }); + expect(result1.current).toBe(true); + expect(result2.current).toBe(true); + expect(result3.current).toBe(true); + }); + + it('should unsubscribe from previous mql when query changed', () => { + const {result: result1} = renderHook(() => useMediaQuery('max-width : 768px')); + const {result: result2} = renderHook(() => useMediaQuery('max-width : 768px')); + const {result: result3, rerender: rerender3} = renderHook( + ({query}) => useMediaQuery(query), + { + initialProps: {query: 'max-width : 768px'}, + }, + ); + expect(result1.current).toBe(false); + expect(result2.current).toBe(false); + expect(result3.current).toBe(false); + + rerender3({query: 'max-width : 760px'}); + + expect(matchMediaMock).toHaveBeenCalledTimes(2); + + expect(matchMediaMock.mock.results[0].type).toEqual('return'); + if (matchMediaMock.mock.results[0].type !== 'return') { + return; + } + + const mql = matchMediaMock.mock.results[0].value; + mql.matches = true; + + act(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + mql.addEventListener.mock.calls[0][1](); + }); + expect(result1.current).toBe(true); + expect(result2.current).toBe(true); + expect(result3.current).toBe(false); + }); + + it('should unsubscribe from mql only when no hooks are awaiting such value', () => { + const {unmount: unmount1} = renderHook(() => useMediaQuery('max-width : 768px')); + const {unmount: unmount2} = renderHook(() => useMediaQuery('max-width : 768px')); + const {unmount: unmount3} = renderHook(() => useMediaQuery('max-width : 768px')); + + expect(matchMediaMock.mock.results[0].type).toEqual('return'); + if (matchMediaMock.mock.results[0].type !== 'return') { + return; + } + + const mql = matchMediaMock.mock.results[0].value; + expect(mql.removeEventListener).not.toHaveBeenCalled(); + unmount3(); + expect(mql.removeEventListener).not.toHaveBeenCalled(); + unmount2(); + expect(mql.removeEventListener).not.toHaveBeenCalled(); + unmount1(); + expect(mql.removeEventListener).toHaveBeenCalledTimes(1); + }); +}); diff --git a/src/useMediaQuery/index.ssr.test.ts b/src/useMediaQuery/index.ssr.test.ts new file mode 100644 index 00000000..d2e05c9c --- /dev/null +++ b/src/useMediaQuery/index.ssr.test.ts @@ -0,0 +1,21 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useMediaQuery} from '../index.js'; + +describe('useMediaQuery', () => { + it('should be defined', () => { + expect(useMediaQuery).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => + useMediaQuery('max-width : 768px', {initializeWithValue: false})); + expect(result.error).toBeUndefined(); + }); + + it('should return undefined on first render, if initializeWithValue is set to false', () => { + const {result} = renderHook(() => + useMediaQuery('max-width : 768px', {initializeWithValue: false})); + expect(result.current).toBeUndefined(); + }); +}); diff --git a/src/useMediaQuery/index.ts b/src/useMediaQuery/index.ts index e4d43b38..754137f8 100644 --- a/src/useMediaQuery/index.ts +++ b/src/useMediaQuery/index.ts @@ -1,9 +1,9 @@ -import { type Dispatch, useEffect, useState } from 'react'; -import { isBrowser } from '../util/const.js'; +import {type Dispatch, useEffect, useState} from 'react'; +import {isBrowser} from '../util/const.js'; const queriesMap = new Map< string, - { mql: MediaQueryList; dispatchers: Set>; listener: () => void } + {mql: MediaQueryList; dispatchers: Set>; listener: () => void} >(); type QueryStateSetter = (matches: boolean) => void; @@ -17,8 +17,7 @@ const createQueryEntry = (query: string) => { } }; - if (mql.addEventListener) mql.addEventListener('change', listener, { passive: true }); - else mql.addListener(listener); + mql.addEventListener('change', listener, {passive: true}); return { mql, @@ -43,16 +42,19 @@ const queryUnsubscribe = (query: string, setState: QueryStateSetter): void => { const entry = queriesMap.get(query); // Else path is impossible to test in normal situation - /* istanbul ignore else */ if (entry) { - const { mql, dispatchers, listener } = entry; + const {mql, dispatchers, listener} = entry; dispatchers.delete(setState); if (dispatchers.size === 0) { queriesMap.delete(query); - if (mql.removeEventListener) mql.removeEventListener('change', listener); - else mql.removeListener(listener); + if (mql.removeEventListener) { + mql.removeEventListener('change', listener); + } else { + // eslint-disable-next-line @typescript-eslint/no-deprecated + mql.removeListener(listener); + } } } }; @@ -71,9 +73,9 @@ type UseMediaQueryOptions = { */ export function useMediaQuery( query: string, - options: UseMediaQueryOptions = {} + options: UseMediaQueryOptions = {}, ): boolean | undefined { - let { initializeWithValue = true } = options; + let {initializeWithValue = true} = options; if (!isBrowser) { initializeWithValue = false; diff --git a/src/useMediatedState/__docs__/example.stories.tsx b/src/useMediatedState/__docs__/example.stories.tsx deleted file mode 100644 index 7702f934..00000000 --- a/src/useMediatedState/__docs__/example.stories.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useMediatedState } from '../../index.js'; - -export function Example() { - const nonLetterRe = /[^a-z]+/gi; - const [state, setState] = useMediatedState('123', (value: string) => - value.replaceAll(nonLetterRe, '') - ); - - return ( -
-
Below input will only receive letters
- { - setState(ev.currentTarget.value); - }} - /> -
- ); -} diff --git a/src/useMediatedState/__docs__/story.mdx b/src/useMediatedState/__docs__/story.mdx deleted file mode 100644 index 1033512b..00000000 --- a/src/useMediatedState/__docs__/story.mdx +++ /dev/null @@ -1,18 +0,0 @@ -# useMediatedState - -Like `useState`, but every value (including initial) set is passed through mediator function. - -> `setState` returned by this hook is stable between renders. - -#### Example - -## Reference - -```ts -function useMediatedState( - initialState?: S | (() => S), - mediator?: (state: R) => S -): [S, (value: R | ((prevState: S) => R)) => void]; -``` - -#### Importing diff --git a/src/useMediatedState/__tests__/dom.ts b/src/useMediatedState/index.dom.test.ts similarity index 69% rename from src/useMediatedState/__tests__/dom.ts rename to src/useMediatedState/index.dom.test.ts index 0268c8c4..3c1ca36f 100644 --- a/src/useMediatedState/__tests__/dom.ts +++ b/src/useMediatedState/index.dom.test.ts @@ -1,5 +1,6 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useMediatedState } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useMediatedState} from '../index.js'; describe('useMediatedState', () => { it('should be defined', () => { @@ -7,12 +8,12 @@ describe('useMediatedState', () => { }); it('should render', () => { - const { result } = renderHook(() => useMediatedState()); + const {result} = renderHook(() => useMediatedState()); expect(result.error).toBeUndefined(); }); it('should act like useState if mediator not passed', () => { - const { result } = renderHook(() => useMediatedState(123)); + const {result} = renderHook(() => useMediatedState(123)); expect(result.current[0]).toBe(123); act(() => { @@ -22,8 +23,8 @@ describe('useMediatedState', () => { }); it('should pass received sate through mediator', () => { - const spy = jest.fn((value: string) => Number.parseInt(value, 10)); - const { result } = renderHook(() => useMediatedState(123, spy)); + const spy = vi.fn((value: string) => Number.parseInt(value, 10)); + const {result} = renderHook(() => useMediatedState(123, spy)); expect(result.current[0]).toBe(123); act(() => { @@ -35,17 +36,15 @@ describe('useMediatedState', () => { }); it('should pass initial sate through mediator', () => { - const { result } = renderHook(() => - useMediatedState('a123', (value: string) => value.replaceAll(/[^a-z]+/gi, '')) - ); + const {result} = renderHook(() => + useMediatedState('a123', (value: string) => value.replaceAll(/[^a-z]+/gi, ''))); expect(result.current[0]).toBe('a'); }); it('should return same setState method each render even if callback is changed', () => { - const { result, rerender } = renderHook(() => - useMediatedState(123, (value: string) => Number.parseInt(value, 10)) - ); + const {result, rerender} = renderHook(() => + useMediatedState(123, (value: string) => Number.parseInt(value, 10))); const f1 = result.current[1]; rerender(); diff --git a/src/useMediatedState/__tests__/ssr.ts b/src/useMediatedState/index.ssr.test.ts similarity index 55% rename from src/useMediatedState/__tests__/ssr.ts rename to src/useMediatedState/index.ssr.test.ts index b4d13be5..a0f9202c 100644 --- a/src/useMediatedState/__tests__/ssr.ts +++ b/src/useMediatedState/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useMediatedState } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useMediatedState} from '../index.js'; describe('useMediatedState', () => { it('should be defined', () => { @@ -7,18 +8,17 @@ describe('useMediatedState', () => { }); it('should render', () => { - const { result } = renderHook(() => useMediatedState()); + const {result} = renderHook(() => useMediatedState()); expect(result.error).toBeUndefined(); }); it('should return initial state on first mount', () => { - const { result } = renderHook(() => useMediatedState(123)); + const {result} = renderHook(() => useMediatedState(123)); expect(result.current[0]).toBe(123); - const { result: result2 } = renderHook(() => - useMediatedState(123, (value: string) => Number.parseInt(value, 10)) - ); + const {result: result2} = renderHook(() => + useMediatedState(123, (value: string) => Number.parseInt(value, 10))); expect(result2.current[0]).toBe(123); }); diff --git a/src/useMediatedState/index.ts b/src/useMediatedState/index.ts index b1e38fb9..b1ac48ca 100644 --- a/src/useMediatedState/index.ts +++ b/src/useMediatedState/index.ts @@ -1,10 +1,10 @@ -import { type Dispatch, useCallback, useState } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { type InitialState, type NextState, resolveHookState } from '../util/resolveHookState.js'; +import {type Dispatch, useCallback, useState} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {type InitialState, type NextState, resolveHookState} from '../util/resolve-hook-state.js'; export function useMediatedState(): [ - State | undefined, - Dispatch>, + State | undefined, + Dispatch>, ]; export function useMediatedState( initialState: InitialState @@ -19,22 +19,19 @@ export function useMediatedState( */ export function useMediatedState( initialState?: InitialState, - mediator?: (state: RawState | State | undefined) => State + mediator?: (state: RawState | State | undefined) => State, ): [State | undefined, Dispatch>] { - const [state, setState] = useState(() => { - return mediator ? mediator(resolveHookState(initialState)) : initialState; - }); + const [state, setState] = useState(() => mediator ? mediator(resolveHookState(initialState)) : initialState); const mediatorRef = useSyncedRef(mediator); return [ state as State, useCallback((value) => { if (mediatorRef.current) { - setState((previousState) => + setState(previousState => mediatorRef.current?.( - resolveHookState(value, previousState as State) - ) - ); + resolveHookState(value, previousState as State), + )); } else { setState(value as unknown as State); } diff --git a/src/useMountEffect/__docs__/example.stories.tsx b/src/useMountEffect/__docs__/example.stories.tsx deleted file mode 100644 index db750b7b..00000000 --- a/src/useMountEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useRerender, useMountEffect } from '../../index.js'; - -export function Example() { - const [count, setCount] = useState(0); - const rerender = useRerender(); - - useMountEffect(() => { - setCount((i) => i + 1); - }); - - return ( -
-
useMountEffect has run {count} time(s)
- -
- ); -} diff --git a/src/useMountEffect/__docs__/story.mdx b/src/useMountEffect/__docs__/story.mdx deleted file mode 100644 index 7d84ef62..00000000 --- a/src/useMountEffect/__docs__/story.mdx +++ /dev/null @@ -1,22 +0,0 @@ -# useMountEffect - -Run effect only when component is first mounted. - -> This hook does not provide any cleanup functionality, meaning that effect's return not passed to -> underlying `useEffect`. - -#### Example - -## Reference - -```ts -function useMountEffect(effect: CallableFunction): void; -``` - -#### Importing - -#### Arguments - -- _**effect**_ _`CallableFunction`_ - Effector to call when component mounted. Can be a function - returning any value. In case the need of cleanup action - use common `useEffect` with empty deps - array. diff --git a/src/useMountEffect/__tests__/dom.ts b/src/useMountEffect/index.dom.test.ts similarity index 61% rename from src/useMountEffect/__tests__/dom.ts rename to src/useMountEffect/index.dom.test.ts index afad851c..330c9607 100644 --- a/src/useMountEffect/__tests__/dom.ts +++ b/src/useMountEffect/index.dom.test.ts @@ -1,11 +1,12 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useMountEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useMountEffect} from '../index.js'; describe('useMountEffect', () => { it('should call effector only on first render', () => { - const spy = jest.fn(); + const spy = vi.fn(); - const { result, rerender, unmount } = renderHook(() => { + const {result, rerender, unmount} = renderHook(() => { useMountEffect(spy); }); diff --git a/src/useMountEffect/__tests__/ssr.ts b/src/useMountEffect/index.ssr.test.ts similarity index 52% rename from src/useMountEffect/__tests__/ssr.ts rename to src/useMountEffect/index.ssr.test.ts index d69828e6..b602d744 100644 --- a/src/useMountEffect/__tests__/ssr.ts +++ b/src/useMountEffect/index.ssr.test.ts @@ -1,9 +1,10 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useMountEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it, vi} from 'vitest'; +import {useMountEffect} from '../index.js'; describe('useMountEffect', () => { it('should call effector only on first render', () => { - const spy = jest.fn(); + const spy = vi.fn(); renderHook(() => { useMountEffect(spy); diff --git a/src/useMountEffect/index.ts b/src/useMountEffect/index.ts index 6c40cf40..f94ab2ab 100644 --- a/src/useMountEffect/index.ts +++ b/src/useMountEffect/index.ts @@ -1,4 +1,4 @@ -import { useEffect } from 'react'; +import {useEffect} from 'react'; /** * Run effect only when component is first mounted. @@ -7,6 +7,7 @@ import { useEffect } from 'react'; */ export function useMountEffect(effect: CallableFunction): void { useEffect(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call effect(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); diff --git a/src/useNetworkState/__docs__/example.stories.tsx b/src/useNetworkState/__docs__/example.stories.tsx deleted file mode 100644 index c44c8003..00000000 --- a/src/useNetworkState/__docs__/example.stories.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { useNetworkState } from '../../index.js'; - -export function Example() { - const onlineState = useNetworkState(); - - return ( -
-
Your current internet connection state:
-
{JSON.stringify(onlineState, null, 2)}
-
- ); -} diff --git a/src/useNetworkState/__docs__/story.mdx b/src/useNetworkState/__docs__/story.mdx deleted file mode 100644 index 09b2d096..00000000 --- a/src/useNetworkState/__docs__/story.mdx +++ /dev/null @@ -1,43 +0,0 @@ -# useNetworkState - -Tracks the state of browser's network connection. - -> As of the standard, it is not guaranteed that browser connected to the _Internet_, it only -> guarantees the network connection. -> [[MDN Docs]](https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine) - -#### Example - -## Reference - -```ts -export interface IUseNetworkState { - online: boolean | undefined; - previous: boolean | undefined; - since: Date | undefined; - downlink: number | undefined; - downlinkMax: number | undefined; - effectiveType: 'slow-2g' | '2g' | '3g' | '4g' | undefined; - rtt: number | undefined; - saveData: boolean | undefined; - type: - | 'bluetooth' - | 'cellular' - | 'ethernet' - | 'none' - | 'wifi' - | 'wimax' - | 'other' - | 'unknown' - | undefined; -} - -export function useNetworkState(initialState?: InitialState): IUseNetworkState; -``` - -#### Importing - -#### Arguments - -- _**initialState**_ _`InitialState`_ - the value that will be used as default, - unless real network state is resolved. diff --git a/src/useNetworkState/__tests__/dom.ts b/src/useNetworkState/index.dom.test.ts similarity index 68% rename from src/useNetworkState/__tests__/dom.ts rename to src/useNetworkState/index.dom.test.ts index 61defcc4..079a763b 100644 --- a/src/useNetworkState/__tests__/dom.ts +++ b/src/useNetworkState/index.dom.test.ts @@ -1,19 +1,20 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useRef } from 'react'; -import { useNetworkState } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {useRef} from 'react'; +import {describe, expect, it} from 'vitest'; +import {useNetworkState} from '../index.js'; -describe(`useNetworkState`, () => { +describe('useNetworkState', () => { it('should be defined', () => { expect(useNetworkState).toBeDefined(); }); it('should render', () => { - const { result } = renderHook(() => useNetworkState()); + const {result} = renderHook(() => useNetworkState()); expect(result.error).toBeUndefined(); }); it('should return an object of certain structure', () => { - const hook = renderHook(() => useNetworkState(), { initialProps: false }); + const hook = renderHook(() => useNetworkState(), {initialProps: false}); expect(typeof hook.result.current).toEqual('object'); expect(Object.keys(hook.result.current)).toEqual([ @@ -35,14 +36,14 @@ describe(`useNetworkState`, () => { const renderCount = useRef(0); return [useNetworkState(), ++renderCount.current]; }, - { initialProps: false } + {initialProps: false}, ); expect(hook.result.current[1]).toBe(1); const previousNWState = hook.result.current[0]; act(() => { - window.dispatchEvent(new Event('online')); + globalThis.dispatchEvent(new Event('online')); }); expect(hook.result.current[1]).toBe(2); expect(hook.result.current[0]).not.toBe(previousNWState); diff --git a/src/useNetworkState/__tests__/ssr.ts b/src/useNetworkState/index.ssr.test.ts similarity index 67% rename from src/useNetworkState/__tests__/ssr.ts rename to src/useNetworkState/index.ssr.test.ts index fe6e034b..1b7010e0 100644 --- a/src/useNetworkState/__tests__/ssr.ts +++ b/src/useNetworkState/index.ssr.test.ts @@ -1,12 +1,13 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useNetworkState } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useNetworkState} from '../index.js'; -describe(`useNetworkState`, () => { +describe('useNetworkState', () => { it('should be defined', () => { expect(useNetworkState).toBeDefined(); }); it('should render', () => { - const { result } = renderHook(() => useNetworkState()); + const {result} = renderHook(() => useNetworkState()); expect(result.error).toBeUndefined(); }); diff --git a/src/useNetworkState/index.ts b/src/useNetworkState/index.ts index 59ce823a..f7837896 100644 --- a/src/useNetworkState/index.ts +++ b/src/useNetworkState/index.ts @@ -1,7 +1,7 @@ -import { useEffect, useState } from 'react'; -import { isBrowser } from '../util/const.js'; -import { off, on } from '../util/misc.js'; -import { type InitialState } from '../util/resolveHookState.js'; +import {useEffect, useState} from 'react'; +import {isBrowser} from '../util/const.js'; +import {off, on} from '../util/misc.js'; +import {type InitialState} from '../util/resolve-hook-state.js'; export type NetworkInformation = { readonly downlink: number; @@ -76,7 +76,7 @@ export type UseNetworkState = { type NavigatorWithConnection = Navigator & Partial>; -const navigator = isBrowser ? (window.navigator as NavigatorWithConnection) : undefined; +const navigator = isBrowser ? (globalThis.navigator as NavigatorWithConnection) : undefined; const conn: NetworkInformation | undefined = navigator && (navigator.connection ?? navigator.mozConnection ?? navigator.webkitConnection); @@ -109,20 +109,17 @@ export function useNetworkState(initialState?: InitialState): U setState(getConnectionState); }; - on(window, 'online', handleStateChange, { passive: true }); - on(window, 'offline', handleStateChange, { passive: true }); + on(globalThis, 'online', handleStateChange, {passive: true}); + on(globalThis, 'offline', handleStateChange, {passive: true}); - // It is quite hard to test it in jsdom environment maybe will be improved in future - /* istanbul ignore next */ if (conn) { - on(conn, 'change', handleStateChange, { passive: true }); + on(conn, 'change', handleStateChange, {passive: true}); } return () => { - off(window, 'online', handleStateChange); - off(window, 'offline', handleStateChange); + off(globalThis, 'online', handleStateChange); + off(globalThis, 'offline', handleStateChange); - /* istanbul ignore next */ if (conn) { off(conn, 'change', handleStateChange); } diff --git a/src/usePermission/__docs__/example.stories.tsx b/src/usePermission/__docs__/example.stories.tsx deleted file mode 100644 index 2ae2edc8..00000000 --- a/src/usePermission/__docs__/example.stories.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import * as React from 'react'; -import { usePermission } from '../../index.js'; - -export function Example() { - const status = usePermission({ name: 'notifications' }); - - return ( -
-
- - We do not use any notifications, notifications permission requested only for presentation - purposes. - -
-
-
- Notifications status: {status} -
-
- {status === 'prompt' && ( - - )} -
-
- ); -} diff --git a/src/usePermission/__docs__/story.mdx b/src/usePermission/__docs__/story.mdx deleted file mode 100644 index bde32944..00000000 --- a/src/usePermission/__docs__/story.mdx +++ /dev/null @@ -1,29 +0,0 @@ -# usePermission - -Tracks a permission state. - -- SSR-compatible -- Automatically updates on permission state change. - -#### Example - -## Reference - -```ts -export function usePermission(descriptor: AnyPermissionDescriptor): UsePermissionState; -``` - -#### Importing - -#### Arguments - -#### Return - -0. **state** - Permission state, can be one of the following strings: - -- **`not-requested`** - State not requested yet, yielded only on mount, before permission state - requested. -- **`requested`** - State requested, but request promise is pending yet. -- **`prompt`** - Permission not requested from user, and can be requested via target API. -- **`denied`** - User denied permission. -- **`granted`** - User granted permission. diff --git a/src/usePermission/__tests__/ssr.ts b/src/usePermission/__tests__/ssr.ts deleted file mode 100644 index 83f6a1fe..00000000 --- a/src/usePermission/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { usePermission } from '../../index.js'; - -describe('usePermission', () => { - it('should be defined', () => { - expect(usePermission).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => usePermission({ name: 'geolocation' })); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/usePermission/__tests__/dom.ts b/src/usePermission/index.dom.test.ts similarity index 55% rename from src/usePermission/__tests__/dom.ts rename to src/usePermission/index.dom.test.ts index 313955ed..7d5df95c 100644 --- a/src/usePermission/__tests__/dom.ts +++ b/src/usePermission/index.dom.test.ts @@ -1,33 +1,32 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { usePermission } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {usePermission} from '../index.js'; describe('usePermission', () => { - let querySpy: jest.SpyInstance; + const querySpy = vi.fn( + () => + new Promise((resolve) => { + setTimeout(() => { + resolve({state: 'prompt'} as PermissionStatus); + }, 1); + }), + ); const initialPermissions = navigator.permissions; beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); - querySpy = jest.fn( - () => - new Promise((resolve) => { - setTimeout(() => { - resolve({ state: 'prompt' } as PermissionStatus); - }, 1); - }) - ); - - (global.navigator.permissions as any) = { query: querySpy }; + (globalThis.navigator.permissions as any) = {query: querySpy}; }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); querySpy.mockClear(); }); afterAll(() => { - jest.useRealTimers(); - (global.navigator.permissions as any) = initialPermissions; + vi.useRealTimers(); + (globalThis.navigator.permissions as any) = initialPermissions; }); it('should be defined', () => { @@ -35,30 +34,30 @@ describe('usePermission', () => { }); it('should render', () => { - const { result } = renderHook(() => usePermission({ name: 'geolocation' })); + const {result} = renderHook(() => usePermission({name: 'geolocation'})); expect(result.error).toBeUndefined(); }); it('should have `not-requested` state initially', () => { - const { result } = renderHook(() => usePermission({ name: 'geolocation' })); + const {result} = renderHook(() => usePermission({name: 'geolocation'})); expect(result.all[0]).toBe('not-requested'); }); it('should have `requested` state initially', () => { - const { result } = renderHook(() => usePermission({ name: 'geolocation' })); + const {result} = renderHook(() => usePermission({name: 'geolocation'})); expect(result.current).toBe('requested'); }); it('should request permission state from `navigator.permissions.query`', () => { - renderHook(() => usePermission({ name: 'geolocation' })); - expect(querySpy).toHaveBeenCalledWith({ name: 'geolocation' }); + renderHook(() => usePermission({name: 'geolocation'})); + expect(querySpy).toHaveBeenCalledWith({name: 'geolocation'}); }); it('should have permission state on promise resolve', async () => { - const { result, waitForNextUpdate } = renderHook(() => usePermission({ name: 'geolocation' })); + const {result, waitForNextUpdate} = renderHook(() => usePermission({name: 'geolocation'})); act(() => { - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); }); await waitForNextUpdate(); @@ -81,18 +80,18 @@ describe('usePermission', () => { resolve(status); }, 1); - }) + }), ); - const { result, waitForNextUpdate } = renderHook(() => usePermission({ name: 'geolocation' })); + const {result, waitForNextUpdate} = renderHook(() => usePermission({name: 'geolocation'})); act(() => { - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); }); await waitForNextUpdate(); expect(result.current).toBe('prompt'); act(() => { - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); }); expect(result.current).toBe('granted'); }); diff --git a/src/usePermission/index.ssr.test.ts b/src/usePermission/index.ssr.test.ts new file mode 100644 index 00000000..62c056c8 --- /dev/null +++ b/src/usePermission/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {usePermission} from '../index.js'; + +describe('usePermission', () => { + it('should be defined', () => { + expect(usePermission).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => usePermission({name: 'geolocation'})); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/usePermission/index.ts b/src/usePermission/index.ts index 1736878f..db5c05f4 100644 --- a/src/usePermission/index.ts +++ b/src/usePermission/index.ts @@ -1,5 +1,5 @@ -import { type MutableRefObject, useEffect, useState } from 'react'; -import { off, on } from '../util/misc.js'; +import {type MutableRefObject, useEffect, useState} from 'react'; +import {off, on} from '../util/misc.js'; export type UsePermissionState = PermissionState | 'not-requested' | 'requested'; @@ -12,7 +12,7 @@ export function usePermission(descriptor: PermissionDescriptor): UsePermissionSt const [state, setState] = useState('not-requested'); useEffect(() => { - const unmount: MutableRefObject<(() => void) | null> = { current: null }; + const unmount: MutableRefObject<(() => void) | null> = {current: null}; setState('requested'); @@ -26,7 +26,7 @@ export function usePermission(descriptor: PermissionDescriptor): UsePermissionSt }; setState(status.state); - on(status, 'change', handleChange, { passive: true }); + on(status, 'change', handleChange, {passive: true}); unmount.current = () => { off(status, 'change', handleChange); diff --git a/src/usePrevious/__docs__/example.stories.tsx b/src/usePrevious/__docs__/example.stories.tsx deleted file mode 100644 index 57085f43..00000000 --- a/src/usePrevious/__docs__/example.stories.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useState } from 'react'; -import { usePrevious } from '../../index.js'; - -export function Example() { - const [value, setValue] = useState(0); - const [unrelatedValue, setUnrelatedValue] = useState(0); - const previousValue = usePrevious(value); - - const increment = () => { - setValue((v) => v + 1); - }; - - const decrement = () => { - setValue((v) => v - 1); - }; - - const triggerUnrelatedRerender = () => { - setUnrelatedValue((v) => v + 1); - }; - - return ( -
- Current value: {value} - -
-
- - -
- - -
- -
Previous value: "{previousValue ?? 'undefined'}"
-
- ); -} diff --git a/src/usePrevious/__docs__/story.mdx b/src/usePrevious/__docs__/story.mdx deleted file mode 100644 index 0f9ff282..00000000 --- a/src/usePrevious/__docs__/story.mdx +++ /dev/null @@ -1,24 +0,0 @@ -# usePrevious - -Returns the value passed to the hook on previous render. It is important to note that any renders -will cause an update if the value has changed. This is useful for keeping track of state changes; -however, if your desire is to track distinctly different values, you should use -[`usePreviousDistinct`](/docs/state-usepreviousdistinct--example). - -#### Example - -## Reference - -```ts -function usePrevious(value?: T): T | undefined; -``` - -#### Importing - -#### Arguments - -- _**value**_ _`T (any)`_ - the value that will be returned on next render - -#### Return - -Returns previously passed value or `undefined` for the case of first render. diff --git a/src/usePrevious/__tests__/dom.ts b/src/usePrevious/index.dom.test.ts similarity index 56% rename from src/usePrevious/__tests__/dom.ts rename to src/usePrevious/index.dom.test.ts index d5487b9d..4ff8e22d 100644 --- a/src/usePrevious/__tests__/dom.ts +++ b/src/usePrevious/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { usePrevious } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {usePrevious} from '../index.js'; describe('usePrevious', () => { it('should be defined', () => { @@ -7,35 +8,35 @@ describe('usePrevious', () => { }); it('should render', () => { - const { result } = renderHook(() => usePrevious()); + const {result} = renderHook(() => usePrevious()); expect(result.error).toBeUndefined(); }); it('should return undefined on first render', () => { - const { result } = renderHook(() => usePrevious()); + const {result} = renderHook(() => usePrevious()); expect(result.current).toBeUndefined(); }); it('should return previously passed value on rerender', () => { - const { result, rerender } = renderHook(({ state }) => usePrevious(state), { - initialProps: { state: 0 }, + const {result, rerender} = renderHook(({state}) => usePrevious(state), { + initialProps: {state: 0}, }); expect(result.current).toBeUndefined(); - rerender({ state: 1 }); + rerender({state: 1}); expect(result.current).toBe(0); - rerender({ state: 5 }); + rerender({state: 5}); expect(result.current).toBe(1); - rerender({ state: 10 }); + rerender({state: 10}); expect(result.current).toBe(5); - rerender({ state: 25 }); + rerender({state: 25}); expect(result.current).toBe(10); }); it('should return passed value after unrelated rerender', () => { - const { result, rerender } = renderHook(({ state }) => usePrevious(state), { - initialProps: { state: 0 }, + const {result, rerender} = renderHook(({state}) => usePrevious(state), { + initialProps: {state: 0}, }); expect(result.current).toBeUndefined(); diff --git a/src/usePrevious/__tests__/ssr.ts b/src/usePrevious/index.ssr.test.ts similarity index 53% rename from src/usePrevious/__tests__/ssr.ts rename to src/usePrevious/index.ssr.test.ts index ca5f3c9e..0507a081 100644 --- a/src/usePrevious/__tests__/ssr.ts +++ b/src/usePrevious/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { usePrevious } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {usePrevious} from '../index.js'; describe('usePrevious', () => { it('should be defined', () => { @@ -7,12 +8,12 @@ describe('usePrevious', () => { }); it('should render', () => { - const { result } = renderHook(() => usePrevious()); + const {result} = renderHook(() => usePrevious()); expect(result.error).toBeUndefined(); }); it('should return undefined on first render', () => { - const { result } = renderHook(() => usePrevious()); + const {result} = renderHook(() => usePrevious()); expect(result.current).toBeUndefined(); }); diff --git a/src/usePrevious/index.ts b/src/usePrevious/index.ts index 4e6d020d..ce2ac7c7 100644 --- a/src/usePrevious/index.ts +++ b/src/usePrevious/index.ts @@ -1,4 +1,4 @@ -import { useEffect, useRef } from 'react'; +import {useEffect, useRef} from 'react'; /** * Returns the value passed to the hook on previous render. diff --git a/src/usePreviousDistinct/__docs__/example.stories.tsx b/src/usePreviousDistinct/__docs__/example.stories.tsx deleted file mode 100644 index dad5890d..00000000 --- a/src/usePreviousDistinct/__docs__/example.stories.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useState } from 'react'; -import { usePreviousDistinct } from '../../index.js'; - -export function Example() { - const [value, setValue] = useState(0); - const [unrelatedValue, setUnrelatedValue] = useState(0); - const previousDistinctValue = usePreviousDistinct(value); - - const increment = () => { - setValue((v) => v + 1); - }; - - const decrement = () => { - setValue((v) => v - 1); - }; - - const triggerUnrelatedRerender = () => { - setUnrelatedValue((v) => v + 1); - }; - - return ( -
- Current value: {value} - -
-
- - -
- - -
- -
Previous value: "{previousDistinctValue ?? 'undefined'}"
-
- ); -} diff --git a/src/usePreviousDistinct/__docs__/story.mdx b/src/usePreviousDistinct/__docs__/story.mdx deleted file mode 100644 index 0d09bc20..00000000 --- a/src/usePreviousDistinct/__docs__/story.mdx +++ /dev/null @@ -1,34 +0,0 @@ -# usePreviousDistinct - -Returns the most recent _distinct_ value passed to the hook on previous render. Distinct here means -that the hook's return value will only update when the passed value updates. This is useful when -other renders are involved potentially making multiple, irrelevant updates. - -#### Example - -## Reference - -```ts -export type Predicate = (prev: T, next: any) => next is typeof prev; - -const isStrictEqual = (a: T, b: any): b is typeof a => a === b; - -export function usePreviousDistinct( - value: T, - predicate: Predicate = isStrictEqual -): T | undefined; -``` - -#### Importing - -#### Arguments - -- _**value**_ _`T (any)`_ - Value to yield on next render if it's different from the previous one. -- _**predicate**_ _`Predicate | undefined`_ - Optional predicate to determine if the value is - distinct. If not provided, the value will be updated if it is strictly equal (`===`) to the - previous value. - -#### Return - -Returns previously passed value (if different from previous) or `undefined` for the case of first -render. diff --git a/src/usePreviousDistinct/__tests__/dom.ts b/src/usePreviousDistinct/index.dom.test.ts similarity index 53% rename from src/usePreviousDistinct/__tests__/dom.ts rename to src/usePreviousDistinct/index.dom.test.ts index c20e85e0..5825c81c 100644 --- a/src/usePreviousDistinct/__tests__/dom.ts +++ b/src/usePreviousDistinct/index.dom.test.ts @@ -1,7 +1,8 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { usePreviousDistinct } from '../../index.js'; -import { type Predicate } from '../../types.js'; -import { isStrictEqual } from '../../util/const.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {usePreviousDistinct} from '../index.js'; +import {type Predicate} from '../types.js'; +import {isStrictEqual} from '../util/const.js'; describe('usePreviousDistinct', () => { it('should be defined', () => { @@ -9,31 +10,31 @@ describe('usePreviousDistinct', () => { }); it('should render', () => { - const { result } = renderHook(() => usePreviousDistinct(0)); + const {result} = renderHook(() => usePreviousDistinct(0)); expect(result.error).toBeUndefined(); }); it('should return undefined on first render', () => { - const { result } = renderHook(() => usePreviousDistinct(0)); + const {result} = renderHook(() => usePreviousDistinct(0)); expect(result.current).toBeUndefined(); }); it('should return undefined on first render with compare function passed', () => { - const { result } = renderHook(() => usePreviousDistinct(0, isStrictEqual)); + const {result} = renderHook(() => usePreviousDistinct(0, isStrictEqual)); expect(result.current).toBeUndefined(); }); it('should not invoke predicate on first render', () => { - const mockedCompare = jest.fn() as Predicate; + const mockedCompare = vi.fn() as Predicate; - const { result } = renderHook(() => usePreviousDistinct(0, mockedCompare)); + const {result} = renderHook(() => usePreviousDistinct(0, mockedCompare)); expect(result.current).toBeUndefined(); expect(mockedCompare).not.toHaveBeenCalled(); }); it('should not return passed value after unrelated rerender', () => { - const { result, rerender } = renderHook(({ state }) => usePreviousDistinct(state), { - initialProps: { state: 0 }, + const {result, rerender} = renderHook(({state}) => usePreviousDistinct(state), { + initialProps: {state: 0}, }); expect(result.current).toBeUndefined(); @@ -43,57 +44,57 @@ describe('usePreviousDistinct', () => { }); it('should return passed value after related rerender', () => { - const { result, rerender } = renderHook(({ state }) => usePreviousDistinct(state), { - initialProps: { state: 0 }, + const {result, rerender} = renderHook(({state}) => usePreviousDistinct(state), { + initialProps: {state: 0}, }); expect(result.current).toBeUndefined(); // Asserting against initial render. - rerender({ state: 1 }); + rerender({state: 1}); expect(result.current).toBe(0); // Asserting against first re-render. value has now changed }); it('should update previous value only after render with different value', () => { - const { result, rerender } = renderHook(({ state }) => usePreviousDistinct(state), { - initialProps: { state: 0 }, + const {result, rerender} = renderHook(({state}) => usePreviousDistinct(state), { + initialProps: {state: 0}, }); expect(result.current).toBeUndefined(); - rerender({ state: 1 }); // Update + rerender({state: 1}); // Update expect(result.current).toBe(0); - rerender({ state: 5 }); // Update + rerender({state: 5}); // Update expect(result.current).toBe(1); - rerender({ state: 5 }); // No update + rerender({state: 5}); // No update expect(result.current).toBe(1); }); it('should not update to value if it never changes, depsite rerenders', () => { const value = 'yo'; - const { result, rerender } = renderHook(({ state }) => usePreviousDistinct(state), { - initialProps: { state: value }, + const {result, rerender} = renderHook(({state}) => usePreviousDistinct(state), { + initialProps: {state: value}, }); expect(result.current).toBeUndefined(); - rerender({ state: value }); + rerender({state: value}); expect(result.current).toBeUndefined(); - rerender({ state: value }); + rerender({state: value}); expect(result.current).toBeUndefined(); - rerender({ state: value }); + rerender({state: value}); }); it('should update even when going between defined and undefined values', () => { - const { result, rerender } = renderHook<{ state: number | undefined }, number | undefined>( - ({ state }: { state: number | undefined }) => usePreviousDistinct(state), + const {result, rerender} = renderHook<{state: number | undefined}, number | undefined>( + ({state}: {state: number | undefined}) => usePreviousDistinct(state), { - initialProps: { state: 0 }, - } + initialProps: {state: 0}, + }, ); expect(result.current).toBeUndefined(); - rerender({ state: 1 }); + rerender({state: 1}); expect(result.current).toBe(0); - rerender({ state: undefined }); + rerender({state: undefined}); expect(result.current).toBe(1); - rerender({ state: 10 }); + rerender({state: 10}); expect(result.current).toBeUndefined(); }); }); diff --git a/src/usePreviousDistinct/__tests__/ssr.ts b/src/usePreviousDistinct/index.ssr.test.ts similarity index 52% rename from src/usePreviousDistinct/__tests__/ssr.ts rename to src/usePreviousDistinct/index.ssr.test.ts index 216dd230..7305df6b 100644 --- a/src/usePreviousDistinct/__tests__/ssr.ts +++ b/src/usePreviousDistinct/index.ssr.test.ts @@ -1,6 +1,7 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { usePreviousDistinct } from '../../index.js'; -import { isStrictEqual } from '../../util/const.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {usePreviousDistinct} from '../index.js'; +import {isStrictEqual} from '../util/const.js'; describe('usePreviousDistinct', () => { it('should be defined', () => { @@ -8,18 +9,18 @@ describe('usePreviousDistinct', () => { }); it('should render', () => { - const { result } = renderHook(() => usePreviousDistinct(0)); + const {result} = renderHook(() => usePreviousDistinct(0)); expect(result.error).toBeUndefined(); }); it('should return undefined on first render', () => { - const { result } = renderHook(() => usePreviousDistinct(0)); + const {result} = renderHook(() => usePreviousDistinct(0)); expect(result.current).toBeUndefined(); }); it('should return undefined on first render with compare function passed', () => { - const { result } = renderHook(() => usePreviousDistinct(0, isStrictEqual)); + const {result} = renderHook(() => usePreviousDistinct(0, isStrictEqual)); expect(result.current).toBeUndefined(); }); diff --git a/src/usePreviousDistinct/index.ts b/src/usePreviousDistinct/index.ts index 056996bd..a9a20340 100644 --- a/src/usePreviousDistinct/index.ts +++ b/src/usePreviousDistinct/index.ts @@ -1,7 +1,7 @@ -import { useRef, useState } from 'react'; -import { type Predicate } from '../types.js'; -import { useUpdateEffect } from '../useUpdateEffect/index.js'; -import { isStrictEqual } from '../util/const.js'; +import {useRef, useState} from 'react'; +import {type Predicate} from '../types.js'; +import {useUpdateEffect} from '../useUpdateEffect/index.js'; +import {isStrictEqual} from '../util/const.js'; /** * Returns the most recent _distinct_ value passed to the hook on previous render. Distinct here @@ -16,7 +16,7 @@ import { isStrictEqual } from '../util/const.js'; */ export function usePreviousDistinct( value: T, - predicate: Predicate = isStrictEqual + predicate: Predicate = isStrictEqual, ): T | undefined { const [previousState, setPreviousState] = useState(); const currentRef = useRef(value); diff --git a/src/useQueue/__docs__/example.stories.tsx b/src/useQueue/__docs__/example.stories.tsx deleted file mode 100644 index 8e89af82..00000000 --- a/src/useQueue/__docs__/example.stories.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import * as React from 'react'; -import { useQueue } from '../../index.js'; - -export function Example() { - const { add, remove, first, last, size, items } = useQueue([1, 2, 3]); - - return ( -
-
    -
  • first: {first}
  • -
  • last: {last}
  • -
  • size: {size}
  • -
- - -

All Items

-
    - {items.map((item, idx) => ( - // eslint-disable-next-line react/no-array-index-key -
  • {item}
  • - ))} -
-
- ); -} diff --git a/src/useQueue/__docs__/story.mdx b/src/useQueue/__docs__/story.mdx deleted file mode 100644 index ff4ed78f..00000000 --- a/src/useQueue/__docs__/story.mdx +++ /dev/null @@ -1,34 +0,0 @@ -# useQueue - -A state hook implementing FIFO queue. - -#### Example - -## Reference - -```ts -export interface QueueMethods { - first: T; - last: T; - add: (item: T) => void; - remove: () => T; - size: number; - items: T[]; -} -export function useQueue(initialValue: T[] = []): QueueMethods; -``` - -#### Importing - -#### Arguments - -- **initialValue** _`T[]`_ - The initial value. Defaults to an empty array. - -#### Return - -- **first** _`T`_ - The first item in the queue. -- **last** _`T`_ - The last item in the queue. -- **add** _`(item: T) => void`_ - Adds an item to the end of the queue. -- **remove** _`() => T`_ - Removes and returns the head of the queue. -- **size** _`number`_ - The current size of the queue. -- **items** _`T[]`_ - The entire queue. diff --git a/src/useQueue/__tests__/dom.ts b/src/useQueue/index.dom.test.ts similarity index 66% rename from src/useQueue/__tests__/dom.ts rename to src/useQueue/index.dom.test.ts index d49a7518..f3af9f2f 100644 --- a/src/useQueue/__tests__/dom.ts +++ b/src/useQueue/index.dom.test.ts @@ -1,5 +1,6 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useQueue } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useQueue} from '../index.js'; describe('useQueue', () => { it('should be defined', () => { @@ -7,17 +8,17 @@ describe('useQueue', () => { }); it('should render', () => { - const { result } = renderHook(() => useQueue()); + const {result} = renderHook(() => useQueue()); expect(result.error).toBeUndefined(); }); it('should accept an initial value', () => { - const { result } = renderHook(() => useQueue([0, 1, 2, 3])); + const {result} = renderHook(() => useQueue([0, 1, 2, 3])); expect(result.current.items).toStrictEqual([0, 1, 2, 3]); }); it('should remove the first value', () => { - const { result } = renderHook(() => useQueue([0, 1, 2, 3])); + const {result} = renderHook(() => useQueue([0, 1, 2, 3])); act(() => { const removed = result.current.remove(); @@ -28,12 +29,12 @@ describe('useQueue', () => { }); it('should return the length', () => { - const { result } = renderHook(() => useQueue([0, 1, 2, 3])); + const {result} = renderHook(() => useQueue([0, 1, 2, 3])); expect(result.current.size).toBe(4); }); it('should add a value to the end', () => { - const { result } = renderHook(() => useQueue([0, 1, 2, 3])); + const {result} = renderHook(() => useQueue([0, 1, 2, 3])); act(() => { result.current.add(4); @@ -43,7 +44,7 @@ describe('useQueue', () => { }); it('should return referentially stable functions', () => { - const { result } = renderHook(() => useQueue([0, 1, 2, 3])); + const {result} = renderHook(() => useQueue([0, 1, 2, 3])); const remove1 = result.current.remove; const add1 = result.current.add; diff --git a/src/useQueue/__tests__/ssr.ts b/src/useQueue/index.ssr.test.ts similarity index 52% rename from src/useQueue/__tests__/ssr.ts rename to src/useQueue/index.ssr.test.ts index 3b9a5294..462ead17 100644 --- a/src/useQueue/__tests__/ssr.ts +++ b/src/useQueue/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useQueue } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useQueue} from '../index.js'; describe('useQueue', () => { it('should be defined', () => { @@ -7,12 +8,12 @@ describe('useQueue', () => { }); it('should render', () => { - const { result } = renderHook(() => useQueue()); + const {result} = renderHook(() => useQueue()); expect(result.error).toBeUndefined(); }); it('should return an object', () => { - const { result } = renderHook(() => useQueue()); + const {result} = renderHook(() => useQueue()); expect(result.current).toBeInstanceOf(Object); }); }); diff --git a/src/useQueue/index.ts b/src/useQueue/index.ts index 3efc597e..52dfec7a 100644 --- a/src/useQueue/index.ts +++ b/src/useQueue/index.ts @@ -1,6 +1,6 @@ -import { useMemo } from 'react'; -import { useList } from '../useList/index.js'; -import { useSyncedRef } from '../useSyncedRef/index.js'; +import {useMemo} from 'react'; +import {useList} from '../useList/index.js'; +import {useSyncedRef} from '../useSyncedRef/index.js'; export type QueueMethods = { /** @@ -36,7 +36,7 @@ export type QueueMethods = { * @param initialValue The initial value. Defaults to an empty array. */ export function useQueue(initialValue: T[] = []): QueueMethods { - const [list, { removeAt, push }] = useList(initialValue); + const [list, {removeAt, push}] = useList(initialValue); const listRef = useSyncedRef(list); return useMemo( @@ -65,6 +65,6 @@ export function useQueue(initialValue: T[] = []): QueueMethods { }, }), // eslint-disable-next-line react-hooks/exhaustive-deps - [] + [], ); } diff --git a/src/useRafCallback/__docs__/example.stories.tsx b/src/useRafCallback/__docs__/example.stories.tsx deleted file mode 100644 index 29212cbb..00000000 --- a/src/useRafCallback/__docs__/example.stories.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { useCallback, useState } from 'react'; -import { useRafCallback } from '../../index.js'; - -export function Example() { - const [eventDate, setEventDate] = useState(); - const [frameDate, setFrameDate] = useState(); - - const [storeFrameDate] = useRafCallback(() => { - setFrameDate(new Date()); - }); - - const handleClick = useCallback(() => { - setEventDate(new Date()); - storeFrameDate(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return ( -
-
- Below states displays dates when occurred event and animation frame that following it -
-
-
Event occurred: {eventDate?.toISOString() ?? 'NOT TRIGGERED'}
-
Animation frame occurred: {frameDate?.toISOString()}
-
- -
- ); -} diff --git a/src/useRafCallback/__docs__/story.mdx b/src/useRafCallback/__docs__/story.mdx deleted file mode 100644 index 1cc8c9d6..00000000 --- a/src/useRafCallback/__docs__/story.mdx +++ /dev/null @@ -1,33 +0,0 @@ -# useRafCallback - -Makes passed function to be called within next animation frame. - -Consequential calls, before the animation frame occurred, cancel previously scheduled call. - -> Returned function is always a void function, since original callback invoked later. - -> **_This hook provides stable API, meaning returned functions do not change between renders_** - -#### Example - -## Reference - -```ts -export function useRafCallback any>( - cb: T -): [(...args: Parameters) => void, () => void]; -``` - -#### Importing - -#### Arguments - -- **cb** _`(...args: T) => any`_ - function that will be invoked within animation frame. - -#### Return - -Returns array containing two functions. - -- _**[0]**_ _`(...args: Parameters) => void`_ - wrapped void function that takes same parameters - as original. -- _**[1]**_ _`() => void`_ - function that cancels scheduled invocation. diff --git a/src/useRafCallback/__tests__/dom.ts b/src/useRafCallback/index.dom.test.ts similarity index 53% rename from src/useRafCallback/__tests__/dom.ts rename to src/useRafCallback/index.dom.test.ts index 84176ce6..513eedf2 100644 --- a/src/useRafCallback/__tests__/dom.ts +++ b/src/useRafCallback/index.dom.test.ts @@ -1,30 +1,31 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useRafCallback } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useRafCallback} from '../index.js'; function testFn(_a: any, _b: any, _c: any) {} describe('useRafCallback', () => { - const raf = global.requestAnimationFrame; - const caf = global.cancelAnimationFrame; + const raf = globalThis.requestAnimationFrame; + const caf = globalThis.cancelAnimationFrame; beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); - global.requestAnimationFrame = (cb) => setTimeout(cb); - global.cancelAnimationFrame = (cb) => { + globalThis.requestAnimationFrame = cb => setTimeout(cb); + globalThis.cancelAnimationFrame = (cb) => { clearTimeout(cb); }; }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); - global.requestAnimationFrame = raf; - global.cancelAnimationFrame = caf; + globalThis.requestAnimationFrame = raf; + globalThis.cancelAnimationFrame = caf; }); it('should be defined', () => { @@ -32,24 +33,24 @@ describe('useRafCallback', () => { }); it('should render', () => { - const { result } = renderHook(() => useRafCallback(() => {})); + const {result} = renderHook(() => useRafCallback(() => {})); expect(result.error).toBeUndefined(); }); it('should return function same length and wrapped name', () => { - let { result } = renderHook(() => useRafCallback((_a: any, _b: any, _c: any) => {})); + let {result} = renderHook(() => useRafCallback((_a: any, _b: any, _c: any) => {})); expect(result.current[0].length).toBe(3); - expect(result.current[0].name).toBe(`anonymous__raf`); + expect(result.current[0].name).toBe('anonymous__raf'); result = renderHook(() => useRafCallback(testFn)).result; expect(result.current[0].length).toBe(3); - expect(result.current[0].name).toBe(`testFn__raf`); + expect(result.current[0].name).toBe('testFn__raf'); }); it('should return array of functions', () => { - const { result } = renderHook(() => useRafCallback(() => {})); + const {result} = renderHook(() => useRafCallback(() => {})); expect(result.current).toBeInstanceOf(Array); expect(result.current[0]).toBeInstanceOf(Function); @@ -57,21 +58,21 @@ describe('useRafCallback', () => { }); it('should invoke passed function only on next raf', () => { - const spy = jest.fn(); - const { result } = renderHook(() => useRafCallback(spy)); + const spy = vi.fn(); + const {result} = renderHook(() => useRafCallback(spy)); result.current[0](); expect(spy).not.toHaveBeenCalled(); - jest.advanceTimersToNextTimer(); + vi.advanceTimersToNextTimer(); expect(spy).toHaveBeenCalled(); }); it('should auto-cancel scheduled invocation on consequential calls', () => { - const spy = jest.fn(); - const { result } = renderHook(() => useRafCallback(spy)); + const spy = vi.fn(); + const {result} = renderHook(() => useRafCallback(spy)); result.current[0](); result.current[0](); @@ -80,33 +81,33 @@ describe('useRafCallback', () => { expect(spy).not.toHaveBeenCalled(); - jest.advanceTimersToNextTimer(5); + vi.advanceTimersToNextTimer(5); expect(spy).toHaveBeenCalledTimes(1); }); it('should cancel scheduled invocation on second function call', () => { - const spy = jest.fn(); - const { result } = renderHook(() => useRafCallback(spy)); + const spy = vi.fn(); + const {result} = renderHook(() => useRafCallback(spy)); result.current[0](); result.current[1](); - jest.advanceTimersToNextTimer(5); + vi.advanceTimersToNextTimer(5); expect(spy).not.toHaveBeenCalled(); }); it('should auto-cancel scheduled invocation on component unmount', () => { - const spy = jest.fn(); - const { result, unmount } = renderHook(() => useRafCallback(spy)); + const spy = vi.fn(); + const {result, unmount} = renderHook(() => useRafCallback(spy)); result.current[0](); unmount(); - jest.advanceTimersToNextTimer(5); + vi.advanceTimersToNextTimer(5); expect(spy).not.toHaveBeenCalled(); }); diff --git a/src/useRafCallback/__tests__/ssr.ts b/src/useRafCallback/index.ssr.test.ts similarity index 60% rename from src/useRafCallback/__tests__/ssr.ts rename to src/useRafCallback/index.ssr.test.ts index 73c56bc6..02231864 100644 --- a/src/useRafCallback/__tests__/ssr.ts +++ b/src/useRafCallback/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useRafCallback } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it, vi} from 'vitest'; +import {useRafCallback} from '../index.js'; describe('useRafCallback', () => { it('should be defined', () => { @@ -7,12 +8,12 @@ describe('useRafCallback', () => { }); it('should render', () => { - const { result } = renderHook(() => useRafCallback(() => {})); + const {result} = renderHook(() => useRafCallback(() => {})); expect(result.error).toBeUndefined(); }); it('should return array of functions', () => { - const { result } = renderHook(() => useRafCallback(() => {})); + const {result} = renderHook(() => useRafCallback(() => {})); expect(result.current).toBeInstanceOf(Array); expect(result.current[0]).toBeInstanceOf(Function); @@ -20,8 +21,8 @@ describe('useRafCallback', () => { }); it('should not do anything on returned functions invocation', () => { - const spy = jest.fn(); - const { result } = renderHook(() => useRafCallback(spy)); + const spy = vi.fn(); + const {result} = renderHook(() => useRafCallback(spy)); result.current[0](); result.current[1](); diff --git a/src/useRafCallback/index.ts b/src/useRafCallback/index.ts index f88c7f1c..dfbacbcb 100644 --- a/src/useRafCallback/index.ts +++ b/src/useRafCallback/index.ts @@ -1,7 +1,7 @@ -import { useCallback, useMemo, useRef } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { useUnmountEffect } from '../useUnmountEffect/index.js'; -import { isBrowser } from '../util/const.js'; +import {useCallback, useMemo, useRef} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {useUnmountEffect} from '../useUnmountEffect/index.js'; +import {isBrowser} from '../util/const.js'; /** * Makes passed function to be called within next animation frame. @@ -12,13 +12,15 @@ import { isBrowser } from '../util/const.js'; */ export function useRafCallback any>( - cb: T + cb: T, ): [(...args: Parameters) => void, () => void] { const cbRef = useSyncedRef(cb); const frame = useRef(0); const cancel = useCallback(() => { - if (!isBrowser) return; + if (!isBrowser) { + return; + } if (frame.current) { cancelAnimationFrame(frame.current); @@ -31,7 +33,9 @@ export function useRafCallback any>( return [ useMemo(() => { const wrapped = (...args: Parameters) => { - if (!isBrowser) return; + if (!isBrowser) { + return; + } cancel(); @@ -42,8 +46,8 @@ export function useRafCallback any>( }; Object.defineProperties(wrapped, { - length: { value: cb.length }, - name: { value: `${cb.name || 'anonymous'}__raf` }, + length: {value: cb.length}, + name: {value: `${cb.name || 'anonymous'}__raf`}, }); return wrapped; diff --git a/src/useRafEffect/__docs__/example.stories.tsx b/src/useRafEffect/__docs__/example.stories.tsx deleted file mode 100644 index 6df8c06a..00000000 --- a/src/useRafEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import { useRef } from 'react'; -import { useRafEffect } from '../../index.js'; - -export function Example() { - const inputRef = useRef(null); - - useRafEffect(() => { - if (inputRef.current) { - inputRef.current.focus(); - } - }, [inputRef.current]); - - return ( -
- ); -} diff --git a/src/useRafEffect/__docs__/story.mdx b/src/useRafEffect/__docs__/story.mdx deleted file mode 100644 index 5cf91cbc..00000000 --- a/src/useRafEffect/__docs__/story.mdx +++ /dev/null @@ -1,22 +0,0 @@ -# useRafEffect - -Like `React.useEffect`, but effect is only run within animation frame. - -- Auto-cancel animation frame on component unmount. -- SSR-friendly. - -#### Example - -## Reference - -```ts -export function useRafEffect(callback: (...args: any[]) => void, deps: DependencyList): void; -``` - -#### Importing - -#### Arguments - -- **callback** _`(...args: any[]) => void`_ - Callback like for `useEffect`, but without ability to - return a cleanup function. -- **deps** _`DependencyList`_ - Dependencies list that will be passed to underlying `useEffect`. diff --git a/src/useRafEffect/__tests__/dom.ts b/src/useRafEffect/index.dom.test.ts similarity index 54% rename from src/useRafEffect/__tests__/dom.ts rename to src/useRafEffect/index.dom.test.ts index 57275cd6..d4a65174 100644 --- a/src/useRafEffect/__tests__/dom.ts +++ b/src/useRafEffect/index.dom.test.ts @@ -1,28 +1,29 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useRafEffect } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useRafEffect} from '../index.js'; describe('useRafEffect', () => { - const raf = global.requestAnimationFrame; - const caf = global.cancelAnimationFrame; + const raf = globalThis.requestAnimationFrame; + const caf = globalThis.cancelAnimationFrame; beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); - global.requestAnimationFrame = (cb) => setTimeout(cb); - global.cancelAnimationFrame = (cb) => { + globalThis.requestAnimationFrame = cb => setTimeout(cb); + globalThis.cancelAnimationFrame = (cb) => { clearTimeout(cb); }; }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); - global.requestAnimationFrame = raf; - global.cancelAnimationFrame = caf; + globalThis.requestAnimationFrame = raf; + globalThis.cancelAnimationFrame = caf; }); it('should be defined', () => { @@ -30,21 +31,21 @@ describe('useRafEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useRafEffect(() => {}, []); }); expect(result.error).toBeUndefined(); }); it('should not run unless animation frame', () => { - const spy = jest.fn(); - const { rerender } = renderHook( + const spy = vi.fn(); + const {rerender} = renderHook( (dep) => { useRafEffect(spy, [dep]); }, { initialProps: 1, - } + }, ); expect(spy).toHaveBeenCalledTimes(0); @@ -54,21 +55,21 @@ describe('useRafEffect', () => { expect(spy).toHaveBeenCalledTimes(0); act(() => { - jest.advanceTimersToNextTimer(); + vi.advanceTimersToNextTimer(); }); expect(spy).toHaveBeenCalledTimes(1); }); it('should cancel animation frame on unmount', () => { - const spy = jest.fn(); - const { rerender, unmount } = renderHook( + const spy = vi.fn(); + const {rerender, unmount} = renderHook( (dep) => { useRafEffect(spy, [dep]); }, { initialProps: 1, - } + }, ); expect(spy).toHaveBeenCalledTimes(0); @@ -80,7 +81,7 @@ describe('useRafEffect', () => { unmount(); act(() => { - jest.advanceTimersToNextTimer(); + vi.advanceTimersToNextTimer(); }); expect(spy).toHaveBeenCalledTimes(0); diff --git a/src/useRafEffect/__tests__/ssr.ts b/src/useRafEffect/index.ssr.test.ts similarity index 54% rename from src/useRafEffect/__tests__/ssr.ts rename to src/useRafEffect/index.ssr.test.ts index a9df39e8..09e7c901 100644 --- a/src/useRafEffect/__tests__/ssr.ts +++ b/src/useRafEffect/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useRafEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useRafEffect} from '../index.js'; describe('useRafEffect', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useRafEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useRafEffect(() => {}, []); }); expect(result.error).toBeUndefined(); diff --git a/src/useRafEffect/index.ts b/src/useRafEffect/index.ts index e394a2d3..251587a4 100644 --- a/src/useRafEffect/index.ts +++ b/src/useRafEffect/index.ts @@ -1,5 +1,5 @@ -import { type DependencyList, useEffect } from 'react'; -import { useRafCallback } from '../useRafCallback/index.js'; +import {type DependencyList, useEffect} from 'react'; +import {useRafCallback} from '../useRafCallback/index.js'; /** * Like `React.useEffect`, but state is only updated within animation frame. @@ -18,6 +18,6 @@ export function useRafEffect(callback: (...args: any[]) => void, deps: Dependenc return cancelRaf; }, // eslint-disable-next-line react-hooks/exhaustive-deps - deps + deps, ); } diff --git a/src/useRafState/__docs__/example.stories.tsx b/src/useRafState/__docs__/example.stories.tsx deleted file mode 100644 index 6bf8e39f..00000000 --- a/src/useRafState/__docs__/example.stories.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import * as React from 'react'; -import { useMountEffect, useRafState } from '../../index.js'; - -export function Example() { - const [state, setState] = useRafState({ x: 0, y: 0 }); - - useMountEffect(() => { - // eslint-disable-next-line unicorn/consistent-function-scoping - const onMouseMove = (event: MouseEvent) => { - setState({ x: event.clientX, y: event.clientY }); - }; - - // eslint-disable-next-line unicorn/consistent-function-scoping - const onTouchMove = (event: TouchEvent) => { - setState({ x: event.changedTouches[0].clientX, y: event.changedTouches[0].clientY }); - }; - - document.addEventListener('mousemove', onMouseMove); - document.addEventListener('touchmove', onTouchMove); - - return () => { - document.removeEventListener('mousemove', onMouseMove); - document.removeEventListener('touchmove', onTouchMove); - }; - }); - - return ( -
- Below state will be updated on mouse/cursor move within animation frame -
{JSON.stringify(state, null, 2)}
-
- ); -} diff --git a/src/useRafState/__docs__/story.mdx b/src/useRafState/__docs__/story.mdx deleted file mode 100644 index 55a91010..00000000 --- a/src/useRafState/__docs__/story.mdx +++ /dev/null @@ -1,20 +0,0 @@ -# useRafState - -Like `React.useState`, but state is only updated within animation frame. - -- Auto-cancel animation frame on component unmount. -- SSR-friendly. - -#### Example - -## Reference - -```ts -export function useRafState(initialState: S | (() => S)): [S, Dispatch>]; -export function useRafState(): [ - S | undefined, - Dispatch>, -]; -``` - -#### Importing diff --git a/src/useRafState/__tests__/ssr.ts b/src/useRafState/__tests__/ssr.ts deleted file mode 100644 index d34d53be..00000000 --- a/src/useRafState/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useRafState } from '../../index.js'; - -describe('useRafState', () => { - it('should be defined', () => { - expect(useRafState).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useRafState()); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useRafState/__tests__/dom.ts b/src/useRafState/index.dom.test.ts similarity index 52% rename from src/useRafState/__tests__/dom.ts rename to src/useRafState/index.dom.test.ts index 43580e99..d0169706 100644 --- a/src/useRafState/__tests__/dom.ts +++ b/src/useRafState/index.dom.test.ts @@ -1,28 +1,29 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useRafState } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useRafState} from '../index.js'; describe('useRafState', () => { - const raf = global.requestAnimationFrame; - const caf = global.cancelAnimationFrame; + const raf = globalThis.requestAnimationFrame; + const caf = globalThis.cancelAnimationFrame; beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); - global.requestAnimationFrame = (cb) => setTimeout(cb); - global.cancelAnimationFrame = (cb) => { + globalThis.requestAnimationFrame = cb => setTimeout(cb); + globalThis.cancelAnimationFrame = (cb) => { clearTimeout(cb); }; }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); - global.requestAnimationFrame = raf; - global.cancelAnimationFrame = caf; + globalThis.requestAnimationFrame = raf; + globalThis.cancelAnimationFrame = caf; }); it('should be defined', () => { @@ -30,12 +31,12 @@ describe('useRafState', () => { }); it('should render', () => { - const { result } = renderHook(() => useRafState()); + const {result} = renderHook(() => useRafState()); expect(result.error).toBeUndefined(); }); it('should not update state unless animation frame', () => { - const { result } = renderHook(() => useRafState()); + const {result} = renderHook(() => useRafState()); act(() => { result.current[1](1); @@ -46,7 +47,7 @@ describe('useRafState', () => { expect(result.current[0]).toBeUndefined(); act(() => { - jest.advanceTimersToNextTimer(); + vi.advanceTimersToNextTimer(); }); expect(result.current[0]).toBe(3); @@ -54,7 +55,7 @@ describe('useRafState', () => { }); it('should cancel animation frame on unmount', () => { - const { result, unmount } = renderHook(() => useRafState()); + const {result, unmount} = renderHook(() => useRafState()); act(() => { result.current[1](1); diff --git a/src/useRafState/index.ssr.test.ts b/src/useRafState/index.ssr.test.ts new file mode 100644 index 00000000..b8aac6cd --- /dev/null +++ b/src/useRafState/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useRafState} from '../index.js'; + +describe('useRafState', () => { + it('should be defined', () => { + expect(useRafState).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useRafState()); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useRafState/index.ts b/src/useRafState/index.ts index 8a4201ab..9f499616 100644 --- a/src/useRafState/index.ts +++ b/src/useRafState/index.ts @@ -1,18 +1,18 @@ -import { type Dispatch, type SetStateAction, useState } from 'react'; -import { useRafCallback } from '../useRafCallback/index.js'; -import { useUnmountEffect } from '../useUnmountEffect/index.js'; +import {type Dispatch, type SetStateAction, useState} from 'react'; +import {useRafCallback} from '../useRafCallback/index.js'; +import {useUnmountEffect} from '../useUnmountEffect/index.js'; export function useRafState(initialState: S | (() => S)): [S, Dispatch>]; export function useRafState(): [ - S | undefined, - Dispatch>, + S | undefined, + Dispatch>, ]; /** * Like `React.useState`, but state is only updated within animation frame. */ export function useRafState( - initialState?: S | (() => S) + initialState?: S | (() => S), ): [S | undefined, Dispatch>] { // eslint-disable-next-line react/hook-use-state const [state, innerSetState] = useState(initialState); diff --git a/src/useRenderCount/__docs__/example.stories.tsx b/src/useRenderCount/__docs__/example.stories.tsx deleted file mode 100644 index bf5f7b12..00000000 --- a/src/useRenderCount/__docs__/example.stories.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { useRerender, useRenderCount } from '../../index.js'; - -export function Example() { - const renders = useRenderCount(); - const rerender = useRerender(); - - return ( -
-
This component has rendered {renders} time(s)
-
- -
- ); -} diff --git a/src/useRenderCount/__docs__/story.mdx b/src/useRenderCount/__docs__/story.mdx deleted file mode 100644 index 47fc6b47..00000000 --- a/src/useRenderCount/__docs__/story.mdx +++ /dev/null @@ -1,17 +0,0 @@ -# useRenderCount - -Tracks component's render count including the first render. - -#### Example - -## Reference - -```ts -export function useRenderCount(): number; -``` - -#### Importing - -#### Return - -- `number` of renders performed. diff --git a/src/useRenderCount/__tests__/dom.ts b/src/useRenderCount/index.dom.test.ts similarity index 56% rename from src/useRenderCount/__tests__/dom.ts rename to src/useRenderCount/index.dom.test.ts index e7049082..4ee70694 100644 --- a/src/useRenderCount/__tests__/dom.ts +++ b/src/useRenderCount/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks'; -import { useRenderCount } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks'; +import {describe, expect, it} from 'vitest'; +import {useRenderCount} from '../index.js'; describe('useRendersCount', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useRendersCount', () => { }); it('should return amount of renders performed', () => { - const { result, rerender } = renderHook(useRenderCount); + const {result, rerender} = renderHook(useRenderCount); expect(result.current).toBe(1); rerender(); diff --git a/src/useRenderCount/__tests__/ssr.ts b/src/useRenderCount/index.ssr.test.ts similarity index 52% rename from src/useRenderCount/__tests__/ssr.ts rename to src/useRenderCount/index.ssr.test.ts index db6fdb3c..7d52a74b 100644 --- a/src/useRenderCount/__tests__/ssr.ts +++ b/src/useRenderCount/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useRenderCount } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useRenderCount} from '../index.js'; describe('useRendersCount', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useRendersCount', () => { }); it('should return proper amount of renders performed', () => { - const { result } = renderHook(useRenderCount); + const {result} = renderHook(useRenderCount); expect(result.current).toBe(1); }); diff --git a/src/useRenderCount/index.ts b/src/useRenderCount/index.ts index bb4f7b20..67988ce6 100644 --- a/src/useRenderCount/index.ts +++ b/src/useRenderCount/index.ts @@ -1,4 +1,4 @@ -import { useRef } from 'react'; +import {useRef} from 'react'; /** * Tracks component's render count including first render. diff --git a/src/useRerender/__docs__/example.stories.tsx b/src/useRerender/__docs__/example.stories.tsx deleted file mode 100644 index 7a8da994..00000000 --- a/src/useRerender/__docs__/example.stories.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import * as React from 'react'; -import { useRenderCount, useRerender } from '../../index.js'; - -export function Example() { - const renders = useRenderCount(); - const rerender = useRerender(); - - return ( -
-
This component has rendered {renders} time(s)
-
- -
- ); -} diff --git a/src/useRerender/__docs__/story.mdx b/src/useRerender/__docs__/story.mdx deleted file mode 100644 index c99ec9b1..00000000 --- a/src/useRerender/__docs__/story.mdx +++ /dev/null @@ -1,19 +0,0 @@ -# useRerender - -Return callback function that re-renders component. - -> **_This hook provides stable API, meaning returned methods does not change between renders_** - -#### Example - -## Reference - -```ts -function useRerender(): () => void; -``` - -#### Importing - -#### Return - -Function that re-renders component when called. diff --git a/src/useRerender/__tests__/dom.ts b/src/useRerender/index.dom.test.ts similarity index 76% rename from src/useRerender/__tests__/dom.ts rename to src/useRerender/index.dom.test.ts index dd3f3cbd..0767a4bb 100644 --- a/src/useRerender/__tests__/dom.ts +++ b/src/useRerender/index.dom.test.ts @@ -1,6 +1,7 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useRef } from 'react'; -import { useRerender } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {useRef} from 'react'; +import {describe, expect, it} from 'vitest'; +import {useRerender} from '../index.js'; describe('useRerender', () => { it('should be defined', () => { @@ -8,7 +9,7 @@ describe('useRerender', () => { }); it('should return same function on each re-render', () => { - const { result, rerender } = renderHook(() => useRerender()); + const {result, rerender} = renderHook(() => useRerender()); const fn1 = result.current; rerender(); const fn2 = result.current; @@ -21,7 +22,7 @@ describe('useRerender', () => { }); it('should rerender component on returned function invocation', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { const cnt = useRef(0); const rerender = useRerender(); diff --git a/src/useRerender/__tests__/ssr.ts b/src/useRerender/index.ssr.test.ts similarity index 69% rename from src/useRerender/__tests__/ssr.ts rename to src/useRerender/index.ssr.test.ts index ac93df85..ba3fd385 100644 --- a/src/useRerender/__tests__/ssr.ts +++ b/src/useRerender/index.ssr.test.ts @@ -1,6 +1,7 @@ -import { act, renderHook } from '@testing-library/react-hooks/server'; -import { useRef } from 'react'; -import { useRerender } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/server'; +import {useRef} from 'react'; +import {describe, expect, it} from 'vitest'; +import {useRerender} from '../index.js'; describe('useRerender', () => { it('should be defined', () => { @@ -8,7 +9,7 @@ describe('useRerender', () => { }); it('should do nothing on returned function invocation', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { const cnt = useRef(0); const rerender = useRerender(); diff --git a/src/useRerender/index.ts b/src/useRerender/index.ts index bb04120b..b0727c0a 100644 --- a/src/useRerender/index.ts +++ b/src/useRerender/index.ts @@ -1,4 +1,4 @@ -import { useCallback, useState } from 'react'; +import {useCallback, useState} from 'react'; const stateChanger = (state: number) => (state + 1) % Number.MAX_SAFE_INTEGER; diff --git a/src/useResizeObserver/__docs__/example.stories.tsx b/src/useResizeObserver/__docs__/example.stories.tsx deleted file mode 100644 index 9859e9aa..00000000 --- a/src/useResizeObserver/__docs__/example.stories.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import * as React from 'react'; -import { useRef, useState } from 'react'; -import { - type UseResizeObserverCallback, - useDebouncedCallback, - useResizeObserver, -} from '../../index.js'; - -export function Example() { - const ref = useRef(null); - const [rect, setRect] = useState(); - useResizeObserver(ref, (e) => { - setRect(e.contentRect); - }); - - return ( -
-
{JSON.stringify(rect)}
-
- resize me UwU -
-
- ); -} - -export function ExampleDebounced() { - const ref = useRef(null); - const [rect, setRect] = useState(); - const cb = useDebouncedCallback( - ((e) => { - setRect(e.contentRect); - }) as UseResizeObserverCallback, - [setRect], - 500 - ); - useResizeObserver(ref, cb); - - return ( -
-
{JSON.stringify(rect)}
-
- resize me UwU -
-
- ); -} diff --git a/src/useResizeObserver/__docs__/story.mdx b/src/useResizeObserver/__docs__/story.mdx deleted file mode 100644 index c30298f7..00000000 --- a/src/useResizeObserver/__docs__/story.mdx +++ /dev/null @@ -1,32 +0,0 @@ -# useResizeObserver - -Invokes a callback whenever ResizeObserver detects a change to target's size. - -- Uses a singe ResizeObserver for all hook instances, as it is more effective than using per-hook - observers. -- No need to wrap callback with `useCallback`, because hook manages callback mutation internally. -- Does not apply any throttle or debounce mechanism - it is on end-developer side. -- Does not produce references for you. -- SSR friendly. -- Provides access to `ResizeObserverEntry`. -- Allows to dynamically enable and disable observation. - -#### Example - -## Reference - -```ts -export function useResizeObserver( - target: React.RefObject | T | null, - callback: (entry: ResizeObserverEntry) => void, - enabled = true -): void; -``` - -#### Importing - -#### Arguments - -- **target** _`RefObject | Element | null`_ - element to track. -- **callback** _`(entry: ResizeObserverEntry) => void`_ - Callback that will be invoked on resize. -- **enabled** _`boolean`_ _(default: `true`)_ - Whether resize observer is enabled or not. diff --git a/src/useResizeObserver/__tests__/dom.ts b/src/useResizeObserver/index.dom.test.ts similarity index 71% rename from src/useResizeObserver/__tests__/dom.ts rename to src/useResizeObserver/index.dom.test.ts index e27291e2..3da713bc 100644 --- a/src/useResizeObserver/__tests__/dom.ts +++ b/src/useResizeObserver/index.dom.test.ts @@ -1,24 +1,22 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useResizeObserver } from '../../index.js'; -import Mock = jest.Mock; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useResizeObserver} from '../index.js'; describe('useResizeObserver', () => { - const observeSpy = jest.fn(); - const unobserveSpy = jest.fn(); - const disconnectSpy = jest.fn(); + const observeSpy = vi.fn(); + const unobserveSpy = vi.fn(); + const disconnectSpy = vi.fn(); - let ResizeObserverSpy: Mock; - const initialRO = global.ResizeObserver; + const ResizeObserverSpy = vi.fn((_cb: (entries: ResizeObserverEntry[]) => void) => ({ + observe: observeSpy, + unobserve: unobserveSpy, + disconnect: disconnectSpy, + })); + const initialRO = globalThis.ResizeObserver; beforeAll(() => { - ResizeObserverSpy = jest.fn(() => ({ - observe: observeSpy, - unobserve: unobserveSpy, - disconnect: disconnectSpy, - })); - - global.ResizeObserver = ResizeObserverSpy; - jest.useFakeTimers(); + vi.stubGlobal('ResizeObserver', ResizeObserverSpy); + vi.useFakeTimers(); }); beforeEach(() => { @@ -28,8 +26,8 @@ describe('useResizeObserver', () => { }); afterAll(() => { - global.ResizeObserver = initialRO; - jest.useRealTimers(); + globalThis.ResizeObserver = initialRO; + vi.useRealTimers(); }); it('should be defined', () => { @@ -37,7 +35,7 @@ describe('useResizeObserver', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useResizeObserver(null, () => {}); }); @@ -59,22 +57,22 @@ describe('useResizeObserver', () => { it('should subscribe in case ref first was empty but then gained element', () => { const div = document.createElement('div'); - const ref: React.MutableRefObject = { current: null }; - const spy = jest.fn(); + const ref: React.MutableRefObject = {current: null}; + const spy = vi.fn(); - const { rerender } = renderHook( - ({ ref }) => { + const {rerender} = renderHook( + ({ref}) => { useResizeObserver(ref, spy); }, { - initialProps: { ref }, - } + initialProps: {ref}, + }, ); expect(observeSpy).toHaveBeenCalledTimes(0); ref.current = div; - rerender({ ref }); + rerender({ref}); expect(observeSpy).toHaveBeenCalledTimes(1); @@ -85,20 +83,19 @@ describe('useResizeObserver', () => { contentBoxSize: {}, } as unknown as ResizeObserverEntry; - // eslint-disable-next-line @typescript-eslint/no-unsafe-call ResizeObserverSpy.mock.calls[0][0]([entry]); expect(spy).not.toHaveBeenCalledWith(entry); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(spy).toHaveBeenCalledWith(entry); }); it('should invoke each callback listening same element asynchronously using setTimeout0', () => { const div = document.createElement('div'); - const spy1 = jest.fn(); - const spy2 = jest.fn(); + const spy1 = vi.fn(); + const spy2 = vi.fn(); renderHook(() => { useResizeObserver(div, spy1); @@ -116,13 +113,12 @@ describe('useResizeObserver', () => { contentBoxSize: {}, } as unknown as ResizeObserverEntry; - // eslint-disable-next-line @typescript-eslint/no-unsafe-call ResizeObserverSpy.mock.calls[0][0]([entry]); expect(spy1).not.toHaveBeenCalledWith(entry); expect(spy2).not.toHaveBeenCalledWith(entry); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(spy1).toHaveBeenCalledWith(entry); expect(spy2).toHaveBeenCalledWith(entry); @@ -131,14 +127,14 @@ describe('useResizeObserver', () => { it('should invoke each callback listening different element', () => { const div = document.createElement('div'); const div2 = document.createElement('div'); - const spy1 = jest.fn(); - const spy2 = jest.fn(); + const spy1 = vi.fn(); + const spy2 = vi.fn(); renderHook(() => { useResizeObserver(div, spy1); }); renderHook(() => { - useResizeObserver({ current: div2 }, spy2); + useResizeObserver({current: div2}, spy2); }); expect(observeSpy).toHaveBeenCalledTimes(2); @@ -156,13 +152,12 @@ describe('useResizeObserver', () => { contentBoxSize: {}, } as unknown as ResizeObserverEntry; - // eslint-disable-next-line @typescript-eslint/no-unsafe-call ResizeObserverSpy.mock.calls[0][0]([entry1, entry2]); expect(spy1).not.toHaveBeenCalledWith(entry1); expect(spy2).not.toHaveBeenCalledWith(entry2); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(spy1).toHaveBeenCalledWith(entry1); expect(spy2).toHaveBeenCalledWith(entry2); @@ -170,8 +165,8 @@ describe('useResizeObserver', () => { it('should unsubscribe on component unmount', () => { const div = document.createElement('div'); - const spy = jest.fn(); - const { unmount } = renderHook(() => { + const spy = vi.fn(); + const {unmount} = renderHook(() => { useResizeObserver(div, spy); }); @@ -190,14 +185,14 @@ describe('useResizeObserver', () => { it('should not subscribe in case observer is disabled', () => { const div = document.createElement('div'); const div2 = document.createElement('div'); - const spy1 = jest.fn(); - const spy2 = jest.fn(); + const spy1 = vi.fn(); + const spy2 = vi.fn(); renderHook(() => { useResizeObserver(div, spy1); }); renderHook(() => { - useResizeObserver({ current: div2 }, spy2, false); + useResizeObserver({current: div2}, spy2, false); }); expect(observeSpy).toHaveBeenCalledTimes(1); @@ -205,26 +200,26 @@ describe('useResizeObserver', () => { it('should unsubscribe and resubscribe in case of observer toggling', () => { const div = document.createElement('div'); - const spy1 = jest.fn(); + const spy1 = vi.fn(); - const { rerender } = renderHook( - ({ enabled }) => { + const {rerender} = renderHook( + ({enabled}) => { useResizeObserver(div, spy1, enabled); }, { - initialProps: { enabled: false }, - } + initialProps: {enabled: false}, + }, ); expect(observeSpy).toHaveBeenCalledTimes(0); expect(unobserveSpy).toHaveBeenCalledTimes(0); - rerender({ enabled: true }); + rerender({enabled: true}); expect(observeSpy).toHaveBeenCalledTimes(1); expect(unobserveSpy).toHaveBeenCalledTimes(0); - rerender({ enabled: false }); + rerender({enabled: false}); expect(observeSpy).toHaveBeenCalledTimes(1); expect(unobserveSpy).toHaveBeenCalledTimes(1); diff --git a/src/useResizeObserver/__tests__/ssr.ts b/src/useResizeObserver/index.ssr.test.ts similarity index 55% rename from src/useResizeObserver/__tests__/ssr.ts rename to src/useResizeObserver/index.ssr.test.ts index e971cd97..439e6fbb 100644 --- a/src/useResizeObserver/__tests__/ssr.ts +++ b/src/useResizeObserver/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useResizeObserver } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useResizeObserver} from '../index.js'; describe('useResizeObserver', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useResizeObserver', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useResizeObserver(null, () => {}); }); diff --git a/src/useResizeObserver/index.ts b/src/useResizeObserver/index.ts index 4611a72e..a4ce1e04 100644 --- a/src/useResizeObserver/index.ts +++ b/src/useResizeObserver/index.ts @@ -1,6 +1,6 @@ -import { type RefObject, useEffect } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { isBrowser } from '../util/const.js'; +import {type RefObject, useEffect} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {isBrowser} from '../util/const.js'; export type UseResizeObserverCallback = (entry: ResizeObserverEntry) => void; @@ -13,19 +13,29 @@ type ResizeObserverSingleton = { let observerSingleton: ResizeObserverSingleton; function getResizeObserver(): ResizeObserverSingleton | undefined { - if (!isBrowser) return undefined; + if (!isBrowser) { + return undefined; + } - if (observerSingleton) return observerSingleton; + if (observerSingleton) { + return observerSingleton; + } const callbacks = new Map>(); const observer = new ResizeObserver((entries) => { - for (const entry of entries) - callbacks.get(entry.target)?.forEach((cb) => + for (const entry of entries) { + const cbs = callbacks.get(entry.target); + if (cbs === undefined || cbs.size === 0) { + continue; + } + + for (const cb of cbs) { setTimeout(() => { cb(entry); - }, 0) - ); + }, 0); + } + } }); observerSingleton = { @@ -49,7 +59,6 @@ function getResizeObserver(): ResizeObserverSingleton | undefined { // Else branch should never occur in case of normal execution // because callbacks map is hidden in closure - it is impossible to // simulate situation with non-existent `cbs` Set - /* istanbul ignore else */ if (cbs) { // Remove current observer cbs.delete(callback); @@ -76,7 +85,7 @@ function getResizeObserver(): ResizeObserverSingleton | undefined { export function useResizeObserver( target: RefObject | T | null, callback: UseResizeObserverCallback, - enabled = true + enabled = true, ): void { const ro = enabled && getResizeObserver(); const cb = useSyncedRef(callback); @@ -90,7 +99,9 @@ export function useResizeObserver( const tgt = target && 'current' in target ? target.current : target; - if (!ro || !tgt) return; + if (!ro || !tgt) { + return; + } // As unsubscription in internals of our ResizeObserver abstraction can // happen a bit later than effect cleanup invocation - we need a marker, @@ -100,7 +111,6 @@ export function useResizeObserver( const handler: UseResizeObserverCallback = (...args) => { // It is reinsurance for the highly asynchronous invocations, almost // impossible to achieve in tests, thus excluding from LOC - /* istanbul ignore else */ if (subscribed) { cb.current(...args); } diff --git a/src/useScreenOrientation/__docs__/example.stories.tsx b/src/useScreenOrientation/__docs__/example.stories.tsx deleted file mode 100644 index c61ceeae..00000000 --- a/src/useScreenOrientation/__docs__/example.stories.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import * as React from 'react'; -import { useScreenOrientation } from '../../index.js'; - -export function Example() { - const orientation = useScreenOrientation(); - - return ( -
-
- Orientation: {orientation} -
-
- Render time: {new Date().toLocaleString()} -
-
- ); -} diff --git a/src/useScreenOrientation/__docs__/story.mdx b/src/useScreenOrientation/__docs__/story.mdx deleted file mode 100644 index 63673ed7..00000000 --- a/src/useScreenOrientation/__docs__/story.mdx +++ /dev/null @@ -1,36 +0,0 @@ -# useScreenOrientation - -Checks if screen is in `portrait` or `landscape` orientation and automatically re-renders on -orientation change. - -As [Screen Orientation API](https://developer.mozilla.org/en-US/docs/Web/API/Screen_Orientation_API#browser_compatibility) -is still experimental and not supported by Safari, this hook uses CSS3 `orientation` media-query to -check screen orientation. - -- Automatically re-renders on screen orientation change. -- Works in sync with CSS, as it uses media-query. -- All hook instances use a single media query - therefore it is extremely performant. -- SSR-friendly. - -#### Example - -## Reference - -```ts -type ScreenOrientation = 'portrait' | 'landscape'; - -function useScreenOrientation(): ScreenOrientation; -``` - -#### Importing - -#### Arguments - -- **options** _`object`_ - Hook options: -- **initializeWithValue** _`boolean`_ _(default: true)_ - Determine the screen orientation on first - render. Setting this to `false` will make the hook yield `undefined` on first render. We suggest - setting this to `false` during SSR. - -#### Return - -A string representing the screen orientation. diff --git a/src/useScreenOrientation/__tests__/dom.ts b/src/useScreenOrientation/__tests__/dom.ts deleted file mode 100644 index 94d3bc46..00000000 --- a/src/useScreenOrientation/__tests__/dom.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useScreenOrientation } from '../../index.js'; - -describe('useScreenOrientation', () => { - // Have to copy implementation as jsdom lacks of it - type MutableMediaQueryList = { - matches: boolean; - media: string; - onchange: null; - addListener: jest.Mock; // Deprecated - removeListener: jest.Mock; // Deprecated - addEventListener: jest.Mock; - removeEventListener: jest.Mock; - dispatchEvent: jest.Mock; - }; - - const matchMediaMock = jest.fn(); - let initialMatchMedia: typeof window.matchMedia; - - beforeAll(() => { - initialMatchMedia = window.matchMedia; - Object.defineProperty(window, 'matchMedia', { - writable: true, - value: matchMediaMock, - }); - }); - - afterAll(() => { - window.matchMedia = initialMatchMedia; - }); - - beforeEach(() => { - matchMediaMock.mockImplementation((query: string) => ({ - matches: false, - media: query, - onchange: null, - addListener: jest.fn(), // Deprecated - removeListener: jest.fn(), // Deprecated - addEventListener: jest.fn(), - removeEventListener: jest.fn(), - dispatchEvent: jest.fn(), - })); - }); - - afterEach(() => { - matchMediaMock.mockClear(); - }); - - it('should be defined', () => { - expect(useScreenOrientation).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useScreenOrientation()); - expect(result.error).toBeUndefined(); - }); - - it('should initialize without value if initializeWithValue option is set to false', () => { - const { result } = renderHook(() => useScreenOrientation({ initializeWithValue: false })); - expect(result.all[0]).toBeUndefined(); - expect(result.all[1]).toBe('landscape'); - }); - - it('should return `portrait` in case media query matches and `landscape` otherwise', () => { - const { result } = renderHook(() => useScreenOrientation()); - expect(result.current).toBe('landscape'); - - const mql = matchMediaMock.mock.results[0].value as MutableMediaQueryList; - mql.matches = true; - - act(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-call - mql.addEventListener.mock.calls[0][1](); - }); - - expect(result.current).toBe('portrait'); - }); -}); diff --git a/src/useScreenOrientation/index.dom.test.ts b/src/useScreenOrientation/index.dom.test.ts new file mode 100644 index 00000000..340e30d3 --- /dev/null +++ b/src/useScreenOrientation/index.dom.test.ts @@ -0,0 +1,58 @@ +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {afterEach, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useScreenOrientation} from '../index.js'; + +describe('useScreenOrientation', () => { + const matchMediaMock = vi.fn((query: string) => ({ + matches: false, + media: query, + onchange: null, + addEventListener: vi.fn(), + removeEventListener: vi.fn(), + dispatchEvent: vi.fn(), + })); + + vi.stubGlobal('matchMedia', matchMediaMock); + + beforeEach(() => { + matchMediaMock.mockClear(); + }); + afterEach(() => { + matchMediaMock.mockClear(); + }); + + it('should be defined', () => { + expect(useScreenOrientation).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useScreenOrientation()); + expect(result.error).toBeUndefined(); + }); + + it('should initialize without value if initializeWithValue option is set to false', () => { + const {result} = renderHook(() => useScreenOrientation({initializeWithValue: false})); + expect(result.all[0]).toBeUndefined(); + expect(result.all[1]).toBe('landscape'); + }); + + it('should return `portrait` in case media query matches and `landscape` otherwise', () => { + const {result} = renderHook(() => useScreenOrientation()); + expect(result.current).toBe('landscape'); + + expect(matchMediaMock.mock.results[0].type).toEqual('return'); + if (matchMediaMock.mock.results[0].type !== 'return') { + return; + } + + const mql = matchMediaMock.mock.results[0].value; + mql.matches = true; + + act(() => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + mql.addEventListener.mock.calls[0][1](); + }); + + expect(result.current).toBe('portrait'); + }); +}); diff --git a/src/useScreenOrientation/__tests__/ssr.ts b/src/useScreenOrientation/index.ssr.test.ts similarity index 50% rename from src/useScreenOrientation/__tests__/ssr.ts rename to src/useScreenOrientation/index.ssr.test.ts index 5f1030a4..b87eb382 100644 --- a/src/useScreenOrientation/__tests__/ssr.ts +++ b/src/useScreenOrientation/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useScreenOrientation } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useScreenOrientation} from '../index.js'; describe('useScreenOrientation', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useScreenOrientation', () => { }); it('should render if initializeWithValue option is set to false', () => { - const { result } = renderHook(() => useScreenOrientation({ initializeWithValue: false })); + const {result} = renderHook(() => useScreenOrientation({initializeWithValue: false})); expect(result.error).toBeUndefined(); }); }); diff --git a/src/useScreenOrientation/index.ts b/src/useScreenOrientation/index.ts index 020ab4da..342b14bc 100644 --- a/src/useScreenOrientation/index.ts +++ b/src/useScreenOrientation/index.ts @@ -1,4 +1,4 @@ -import { useMediaQuery } from '../useMediaQuery/index.js'; +import {useMediaQuery} from '../useMediaQuery/index.js'; export type ScreenOrientation = 'portrait' | 'landscape'; @@ -13,11 +13,11 @@ type UseScreenOrientationOptions = { * hook uses CSS3 `orientation` media-query to check screen orientation. */ export function useScreenOrientation( - options?: UseScreenOrientationOptions + options?: UseScreenOrientationOptions, ): ScreenOrientation | undefined { const matches = useMediaQuery('(orientation: portrait)', { initializeWithValue: options?.initializeWithValue ?? true, }); - return matches === undefined ? undefined : matches ? 'portrait' : 'landscape'; + return matches === undefined ? undefined : (matches ? 'portrait' : 'landscape'); } diff --git a/src/useSessionStorageValue/__docs__/example.stories.tsx b/src/useSessionStorageValue/__docs__/example.stories.tsx deleted file mode 100644 index 7bc61f07..00000000 --- a/src/useSessionStorageValue/__docs__/example.stories.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { useSessionStorageValue } from '../../index.js'; - -type ExampleProps = { - /** - * Default value to return in case key not presented in SessionStorage. - */ - readonly defaultValue: string; - /** - * SessionStorage key to manage. - */ - readonly key: string; -}; - -export function Example({ - key = 'react-hookz-ss-test', - defaultValue = '@react-hookz is awesome', -}: ExampleProps) { - const ssValue = useSessionStorageValue(key, { defaultValue }); - - return ( -
-
- Below input value will persist between page reloads and even browser restart as its value is - stored in SessionStorage. -
-
- { - ssValue.set(ev.currentTarget.value); - }} - /> - -
- ); -} diff --git a/src/useSessionStorageValue/__docs__/story.mdx b/src/useSessionStorageValue/__docs__/story.mdx deleted file mode 100644 index 230cea98..00000000 --- a/src/useSessionStorageValue/__docs__/story.mdx +++ /dev/null @@ -1,59 +0,0 @@ -# useSessionStorageValue - -Manages a single SessionStorage key. - -- Uses JSON serialisation to handle non-string values. -- Tracks window's `storage` event. -- Synchronized between all hooks on the page with the same key. -- SSR compatible. - -> **_This hook provides a stable API, meaning the returned methods do not change between renders._** - -> Does not allow usage of `null` as a value, since JSON allows serializing `null` - it would be -> impossible to separate `null` value from 'no such value' API result which is also `null`. - -> If you are doing SSR, set `initializeWithValue` to `false` in order for this hook to return -> `undefined` on first render. The SessionStorage value will be fetched client-side when effects -> are executed. - -> If you are using useSessionStorageValue in multiple places with the same key, all instances must -> use compatible serializers if you are overriding the serializers with the `parse` and `stringify` options. - -#### Example - -## Reference - -```ts -function useSessionStorageValue< - Type, - Default extends Type = Type, - Initialize extends boolean | undefined = boolean | undefined, ->( - key: string, - options?: UseStorageValueOptions -): UseStorageValueResult; -``` - -#### Importing - -#### Arguments - -- **key** _`string`_ - SessionStorage key to manage. -- **options** _`object`_ - Hook options: -- **defaultValue** _`T | null`_ - Value to return if `key` is not present in SessionStorage. -- **initializeWithValue** _`boolean`_ _(default: true)_ - Fetch storage value on first render. If - set to `false` will make the hook yield `undefined` on first render and defer fetching of the - value until effects are executed. -- **parse** _`(str: string | null, fallback: T | null) => T | null`_ - Custom parse function to use instead of JSON.parse -- **stringify** _`(data: unknown) => string | null`_ - Custom stringify function to use instead of JSON.stringify - -#### Return - -Object with following properties. Note that this object changes with `value`, but its methods are -stable between renders. Thus, it is safe to pass them as props. - -- **value** - SessionStorage value of the given `key` argument or `defaultValue`, if the key was not - present. -- **set** - Set a new value for the managed `key`. -- **remove** - Remove the current value of `key`. -- **fetch** - Manually retrieve the value of `key`. diff --git a/src/useSessionStorageValue/__tests__/dom.ts b/src/useSessionStorageValue/index.dom.test.ts similarity index 55% rename from src/useSessionStorageValue/__tests__/dom.ts rename to src/useSessionStorageValue/index.dom.test.ts index 240c2d40..d6bc4201 100644 --- a/src/useSessionStorageValue/__tests__/dom.ts +++ b/src/useSessionStorageValue/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useSessionStorageValue } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useSessionStorageValue} from '../index.js'; describe('useSessionStorageValue', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useSessionStorageValue', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useSessionStorageValue('foo'); }); expect(result.error).toBeUndefined(); diff --git a/src/useSessionStorageValue/__tests__/ssr.ts b/src/useSessionStorageValue/index.ssr.test.ts similarity index 55% rename from src/useSessionStorageValue/__tests__/ssr.ts rename to src/useSessionStorageValue/index.ssr.test.ts index 6765a375..727752a8 100644 --- a/src/useSessionStorageValue/__tests__/ssr.ts +++ b/src/useSessionStorageValue/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useSessionStorageValue } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useSessionStorageValue} from '../index.js'; describe('useSessionStorageValue', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useSessionStorageValue', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useSessionStorageValue('foo'); }); expect(result.error).toBeUndefined(); diff --git a/src/useSessionStorageValue/index.ts b/src/useSessionStorageValue/index.ts index 3df9f31c..920bcfd2 100644 --- a/src/useSessionStorageValue/index.ts +++ b/src/useSessionStorageValue/index.ts @@ -3,15 +3,13 @@ import { type UseStorageValueOptions, type UseStorageValueResult, } from '../useStorageValue/index.js'; -import { isBrowser, noop } from '../util/const.js'; +import {isBrowser, noop} from '../util/const.js'; let IS_SESSION_STORAGE_AVAILABLE: boolean; try { - IS_SESSION_STORAGE_AVAILABLE = isBrowser && Boolean(window.sessionStorage); + IS_SESSION_STORAGE_AVAILABLE = isBrowser && Boolean(globalThis.sessionStorage); } catch { - // No need to test as this flag leads to noop behaviour - /* istanbul ignore next */ IS_SESSION_STORAGE_AVAILABLE = false; } @@ -27,21 +25,19 @@ type UseSessionStorageValue = < /** * Manages a single sessionStorage key. */ -export const useSessionStorageValue: UseSessionStorageValue = IS_SESSION_STORAGE_AVAILABLE - ? (key, options) => { - return useStorageValue(sessionStorage, key, options); - } - : < +export const useSessionStorageValue: UseSessionStorageValue = IS_SESSION_STORAGE_AVAILABLE ? + (key, options) => useStorageValue(sessionStorage, key, options) : + < Type, Default extends Type = Type, Initialize extends boolean | undefined = boolean | undefined, >( _key: string, - _options?: UseStorageValueOptions + _options?: UseStorageValueOptions, ): UseStorageValueResult => { if (isBrowser && process.env.NODE_ENV === 'development') { console.warn('SessionStorage is not available in this environment'); } - return { value: undefined as Type, set: noop, remove: noop, fetch: noop }; + return {value: undefined as Type, set: noop, remove: noop, fetch: noop}; }; diff --git a/src/useSet/__docs__/example.stories.tsx b/src/useSet/__docs__/example.stories.tsx deleted file mode 100644 index 2ab92920..00000000 --- a/src/useSet/__docs__/example.stories.tsx +++ /dev/null @@ -1,35 +0,0 @@ -/* eslint-disable react/no-unescaped-entities */ -import * as React from 'react'; -import { useSet } from '../../index.js'; - -export function Example() { - const set = useSet(['@react-hooks', 'is awesome']); - - return ( -
- - - - -
-
{JSON.stringify([...set], null, 2)}
-
- ); -} diff --git a/src/useSet/__docs__/story.mdx b/src/useSet/__docs__/story.mdx deleted file mode 100644 index 4709ad1b..00000000 --- a/src/useSet/__docs__/story.mdx +++ /dev/null @@ -1,27 +0,0 @@ -# useSet - -Tracks the state of a `Set`. - -- Returned set does not change between renders. -- 1-to-1 signature with the native `Set` object, but its methods are wrapped to cause components to - rerender with changes. - Otherwise, it is the Javascript native `Set` object. -- SSR-friendly. - -#### Example - -## Reference - -```ts -export function useSet(values?: readonly T[] | null): Set; -``` - -#### Importing - -#### Arguments - -- **values** _`Iterable`_ - Initial values iterator for underlying `Set` constructor. - -#### Return - -- `Set` instance. diff --git a/src/useSet/__tests__/dom.ts b/src/useSet/index.dom.test.ts similarity index 69% rename from src/useSet/__tests__/dom.ts rename to src/useSet/index.dom.test.ts index 6cffa389..f9049f7b 100644 --- a/src/useSet/__tests__/dom.ts +++ b/src/useSet/index.dom.test.ts @@ -1,5 +1,6 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useSet } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useSet} from '../index.js'; describe('useSet', () => { it('should be defined', () => { @@ -7,12 +8,12 @@ describe('useSet', () => { }); it('should render', () => { - const { result } = renderHook(() => useSet()); + const {result} = renderHook(() => useSet()); expect(result.error).toBeUndefined(); }); it('should return a Set instance with altered add, clear and delete methods', () => { - const { result } = renderHook(() => useSet()); + const {result} = renderHook(() => useSet()); expect(result.current).toBeInstanceOf(Set); expect(result.current.add).not.toBe(Set.prototype.add); expect(result.current.clear).not.toBe(Set.prototype.clear); @@ -20,7 +21,7 @@ describe('useSet', () => { }); it('should accept initial values', () => { - const { result } = renderHook(() => useSet([1, 2, 3])); + const {result} = renderHook(() => useSet([1, 2, 3])); expect(result.current.has(1)).toBe(true); expect(result.current.has(2)).toBe(true); expect(result.current.has(3)).toBe(true); @@ -28,9 +29,9 @@ describe('useSet', () => { }); it('`add` should invoke original method and rerender component', async () => { - const spy = jest.spyOn(Set.prototype, 'add'); + const spy = vi.spyOn(Set.prototype, 'add'); let i = 0; - const { result, waitForNextUpdate } = renderHook(() => [++i, useSet()] as const); + const {result, waitForNextUpdate} = renderHook(() => [++i, useSet()] as const); await act(async () => { expect(result.current[1].add(1)).toBe(result.current[1]); @@ -44,9 +45,9 @@ describe('useSet', () => { }); it('`clear` should invoke original method and rerender component', async () => { - const spy = jest.spyOn(Set.prototype, 'clear'); + const spy = vi.spyOn(Set.prototype, 'clear'); let i = 0; - const { result, waitForNextUpdate } = renderHook(() => [++i, useSet()] as const); + const {result, waitForNextUpdate} = renderHook(() => [++i, useSet()] as const); await act(async () => { result.current[1].clear(); @@ -59,9 +60,9 @@ describe('useSet', () => { }); it('`delete` should invoke original method and rerender component', async () => { - const spy = jest.spyOn(Set.prototype, 'delete'); + const spy = vi.spyOn(Set.prototype, 'delete'); let i = 0; - const { result, waitForNextUpdate } = renderHook(() => [++i, useSet([1])] as const); + const {result, waitForNextUpdate} = renderHook(() => [++i, useSet([1])] as const); await act(async () => { expect(result.current[1].delete(1)).toBe(true); diff --git a/src/useSet/__tests__/ssr.ts b/src/useSet/index.ssr.test.ts similarity index 68% rename from src/useSet/__tests__/ssr.ts rename to src/useSet/index.ssr.test.ts index efbc2b45..2e0ceeb2 100644 --- a/src/useSet/__tests__/ssr.ts +++ b/src/useSet/index.ssr.test.ts @@ -1,6 +1,7 @@ -import { act } from '@testing-library/react-hooks/dom'; -import { renderHook } from '@testing-library/react-hooks/server'; -import { useSet } from '../../index.js'; +import {act} from '@testing-library/react-hooks/dom'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it, vi} from 'vitest'; +import {useSet} from '../index.js'; describe('useSet', () => { it('should be defined', () => { @@ -8,12 +9,12 @@ describe('useSet', () => { }); it('should render', () => { - const { result } = renderHook(() => useSet()); + const {result} = renderHook(() => useSet()); expect(result.error).toBeUndefined(); }); it('should return a Set instance with altered add, clear and delete methods', () => { - const { result } = renderHook(() => useSet()); + const {result} = renderHook(() => useSet()); expect(result.current).toBeInstanceOf(Set); expect(result.current.add).not.toBe(Set.prototype.add); expect(result.current.clear).not.toBe(Set.prototype.clear); @@ -21,7 +22,7 @@ describe('useSet', () => { }); it('should accept initial values', () => { - const { result } = renderHook(() => useSet([1, 2, 3])); + const {result} = renderHook(() => useSet([1, 2, 3])); expect(result.current.has(1)).toBe(true); expect(result.current.has(2)).toBe(true); expect(result.current.has(3)).toBe(true); @@ -29,9 +30,9 @@ describe('useSet', () => { }); it('`add` should invoke original method and rerender component', () => { - const spy = jest.spyOn(Set.prototype, 'add'); + const spy = vi.spyOn(Set.prototype, 'add'); let i = 0; - const { result } = renderHook(() => [++i, useSet()] as const); + const {result} = renderHook(() => [++i, useSet()] as const); act(() => { expect(result.current[1].add(1)).toBe(result.current[1]); @@ -44,9 +45,9 @@ describe('useSet', () => { }); it('`clear` should invoke original method and rerender component', () => { - const spy = jest.spyOn(Set.prototype, 'clear'); + const spy = vi.spyOn(Set.prototype, 'clear'); let i = 0; - const { result } = renderHook(() => [++i, useSet()] as const); + const {result} = renderHook(() => [++i, useSet()] as const); act(() => { result.current[1].clear(); @@ -58,9 +59,9 @@ describe('useSet', () => { }); it('`delete` should invoke original method and rerender component', () => { - const spy = jest.spyOn(Set.prototype, 'delete'); + const spy = vi.spyOn(Set.prototype, 'delete'); let i = 0; - const { result } = renderHook(() => [++i, useSet([1])] as const); + const {result} = renderHook(() => [++i, useSet([1])] as const); act(() => { expect(result.current[1].delete(1)).toBe(true); diff --git a/src/useSet/index.ts b/src/useSet/index.ts index 4976a3e1..a55ca582 100644 --- a/src/useSet/index.ts +++ b/src/useSet/index.ts @@ -1,5 +1,5 @@ -import { useRef } from 'react'; -import { useRerender } from '../useRerender/index.js'; +import {useRef} from 'react'; +import {useRerender} from '../useRerender/index.js'; const proto = Set.prototype; @@ -30,10 +30,10 @@ export function useSet(values?: readonly T[] | null): Set { }; set.delete = (...args) => { - const res = proto.delete.apply(set, args); + const result = proto.delete.apply(set, args); rerender(); - return res; + return result; }; } diff --git a/src/useStorageValue/__tests__/misc.ts b/src/useStorageValue/__tests__/misc.ts deleted file mode 100644 index 836106a2..00000000 --- a/src/useStorageValue/__tests__/misc.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Mocked = jest.Mocked; - -export const newStorage = ( - get: Storage['getItem'] = () => null, - set: Storage['setItem'] = () => {}, - remove: Storage['removeItem'] = () => {} -) => { - return { - getItem: jest.fn(get), - setItem: jest.fn(set), - removeItem: jest.fn(remove), - } as unknown as Mocked; -}; diff --git a/src/useStorageValue/__tests__/dom.ts b/src/useStorageValue/index.dom.test.ts similarity index 62% rename from src/useStorageValue/__tests__/dom.ts rename to src/useStorageValue/index.dom.test.ts index b942109b..1e953363 100644 --- a/src/useStorageValue/__tests__/dom.ts +++ b/src/useStorageValue/index.dom.test.ts @@ -1,6 +1,7 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useStorageValue } from '../index.js'; -import { newStorage } from './misc.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {newStorage} from './misc.test.js'; +import {useStorageValue} from './index.js'; describe('useStorageValue', () => { it('should be defined', () => { @@ -8,13 +9,13 @@ describe('useStorageValue', () => { }); it('should render', () => { - const { result } = renderHook(() => useStorageValue(newStorage(), 'foo')); + const {result} = renderHook(() => useStorageValue(newStorage(), 'foo')); expect(result.error).toBeUndefined(); }); it('should action methods should be stable between renders', () => { - const { result, rerender } = renderHook(() => useStorageValue(newStorage(), 'foo')); + const {result, rerender} = renderHook(() => useStorageValue(newStorage(), 'foo')); rerender(); act(() => { @@ -30,8 +31,8 @@ describe('useStorageValue', () => { }); it('should fetch value from storage only on init', () => { - const storage = newStorage((key) => `"${key}"`); - const { result, rerender } = renderHook(() => useStorageValue(storage, 'foo')); + const storage = newStorage(key => `"${key}"`); + const {result, rerender} = renderHook(() => useStorageValue(storage, 'foo')); expect(result.current.value).toBe('foo'); expect(storage.getItem).toHaveBeenCalledWith('foo'); @@ -44,9 +45,9 @@ describe('useStorageValue', () => { }); it('should pass value through JSON.parse during fetch', () => { - const JSONParseSpy = jest.spyOn(JSON, 'parse'); - const storage = newStorage((key) => `"${key}"`); - const { result } = renderHook(() => useStorageValue(storage, 'foo')); + const JSONParseSpy = vi.spyOn(JSON, 'parse'); + const storage = newStorage(key => `"${key}"`); + const {result} = renderHook(() => useStorageValue(storage, 'foo')); expect(result.current.value).toBe('foo'); expect(JSONParseSpy).toHaveBeenCalledWith('"foo"'); @@ -55,22 +56,20 @@ describe('useStorageValue', () => { }); it('should yield default value in case storage returned null during fetch', () => { - const { result } = renderHook(() => - useStorageValue(newStorage(), 'foo', { defaultValue: 'defaultValue' }) - ); + const {result} = renderHook(() => + useStorageValue(newStorage(), 'foo', {defaultValue: 'defaultValue'})); expect(result.current.value).toBe('defaultValue'); }); it('should yield default value and console.warn in case storage returned corrupted JSON', () => { - const warnSpy = jest.spyOn(console, 'warn').mockImplementationOnce(() => {}); - const { result } = renderHook(() => + const warnSpy = vi.spyOn(console, 'warn').mockImplementationOnce(() => {}); + const {result} = renderHook(() => useStorageValue( newStorage(() => 'corrupted JSON'), 'foo', - { defaultValue: 'defaultValue' } - ) - ); + {defaultValue: 'defaultValue'}, + )); expect(result.current.value).toBe('defaultValue'); expect(warnSpy.mock.calls[0][0]).toBeInstanceOf(SyntaxError); @@ -79,13 +78,12 @@ describe('useStorageValue', () => { }); it('should not fetch value on first render in case `initializeWithValue` options is set to false', () => { - const { result } = renderHook(() => + const {result} = renderHook(() => useStorageValue( newStorage(() => '"bar"'), 'foo', - { initializeWithValue: false } - ) - ); + {initializeWithValue: false}, + )); // @ts-expect-error invalid typings of testing library expect(result.all[0].value).toBe(undefined); @@ -94,19 +92,18 @@ describe('useStorageValue', () => { }); it('should fetch value on first render in case `initializeWithValue` options is set to true', () => { - const { result } = renderHook(() => + const {result} = renderHook(() => useStorageValue( newStorage(() => '"bar"'), 'foo', - { initializeWithValue: true } - ) - ); + {initializeWithValue: true}, + )); // @ts-expect-error invalid typings of testing library expect(result.all[0].value).toBe('bar'); }); it('should set storage value on .set() call', () => { - const { result } = renderHook(() => useStorageValue(newStorage(), 'foo')); + const {result} = renderHook(() => useStorageValue(newStorage(), 'foo')); expect(result.current.value).toBe(null); act(() => { @@ -114,7 +111,7 @@ describe('useStorageValue', () => { }); expect(result.current.value).toBe('bar'); - const spySetter = jest.fn(() => 'baz'); + const spySetter = vi.fn(() => 'baz'); act(() => { result.current.set(spySetter); }); @@ -123,8 +120,8 @@ describe('useStorageValue', () => { }); it('should call JSON.stringify on setState call', () => { - const JSONStringifySpy = jest.spyOn(JSON, 'stringify'); - const { result } = renderHook(() => useStorageValue(newStorage(), 'foo')); + const JSONStringifySpy = vi.spyOn(JSON, 'stringify'); + const {result} = renderHook(() => useStorageValue(newStorage(), 'foo')); expect(result.current.value).toBe(null); act(() => { @@ -136,16 +133,15 @@ describe('useStorageValue', () => { }); it('should not store null or data that cannot be processed by JSON serializer', () => { - const { result } = renderHook(() => + const {result} = renderHook(() => useStorageValue( newStorage(() => '"bar"'), 'foo', - { defaultValue: 'default value' } - ) - ); + {defaultValue: 'default value'}, + )); - const invalidData: { a?: unknown } = {}; - invalidData.a = { b: invalidData }; + const invalidData: {a?: unknown} = {}; + invalidData.a = {b: invalidData}; expect(result.current.value).toBe('bar'); act(() => { @@ -157,7 +153,7 @@ describe('useStorageValue', () => { it('should call storage`s removeItem on .remove() call', () => { const storage = newStorage(); - const { result } = renderHook(() => useStorageValue(storage, 'foo')); + const {result} = renderHook(() => useStorageValue(storage, 'foo')); act(() => { result.current.remove(); @@ -166,13 +162,12 @@ describe('useStorageValue', () => { }); it('should set state to default value on item remove', () => { - const { result } = renderHook(() => + const {result} = renderHook(() => useStorageValue( newStorage(() => '"bar"'), 'foo', - { defaultValue: 'default value' } - ) - ); + {defaultValue: 'default value'}, + )); expect(result.current.value).toBe('bar'); act(() => { @@ -183,9 +178,8 @@ describe('useStorageValue', () => { it('should refetch value from store on .fetch() call', () => { const storage = newStorage(() => '"bar"'); - const { result } = renderHook(() => - useStorageValue(storage, 'foo', { defaultValue: 'default value' }) - ); + const {result} = renderHook(() => + useStorageValue(storage, 'foo', {defaultValue: 'default value'})); expect(storage.getItem).toHaveBeenCalledTimes(1); expect(result.current.value).toBe('bar'); @@ -200,33 +194,36 @@ describe('useStorageValue', () => { }); it('should refetch value on key change', () => { - const storage = newStorage((k) => `"${k}"`); - const { result, rerender } = renderHook( - ({ key }) => useStorageValue(storage, key, { defaultValue: 'default value' }), - { initialProps: { key: 'foo' } } + const storage = newStorage(k => `"${k}"`); + const {result, rerender} = renderHook( + ({key}) => useStorageValue(storage, key, {defaultValue: 'default value'}), + {initialProps: {key: 'foo'}}, ); expect(result.current.value).toBe('foo'); - rerender({ key: 'bar' }); + rerender({key: 'bar'}); expect(result.current.value).toBe('bar'); }); it('should use custom stringify option', () => { const storage = newStorage(); - const { result } = renderHook(() => + const {result} = renderHook(() => useStorageValue(storage, 'foo', { stringify(data) { - return data.map((number_) => number_.toString(16)).join(':'); + return data.map(number_ => number_.toString(16)).join(':'); }, parse(str, fallback) { - if (str === null) return fallback; + if (str === null) { + return fallback; + } - if (str === '') return []; + if (str === '') { + return []; + } - return str.split(':').map((number_) => Number.parseInt(number_, 16)); + return str.split(':').map(number_ => Number.parseInt(number_, 16)); }, - }) - ); + })); expect(result.current.value).toBe(null); act(() => { @@ -238,32 +235,35 @@ describe('useStorageValue', () => { it('should use custom parse option', () => { const storage = newStorage(); storage.getItem.mockImplementationOnce(() => '1:2:3'); - const { result } = renderHook(() => + const {result} = renderHook(() => useStorageValue(storage, 'foo', { stringify(data) { - return data.map((number_) => number_.toString(16)).join(':'); + return data.map(number_ => number_.toString(16)).join(':'); }, parse(str, fallback) { - if (str === null) return fallback; + if (str === null) { + return fallback; + } - if (str === '') return []; + if (str === '') { + return []; + } - return str.split(':').map((number_) => Number.parseInt(number_, 16)); + return str.split(':').map(number_ => Number.parseInt(number_, 16)); }, - }) - ); + })); expect(result.current.value).toEqual([1, 2, 3]); }); describe('should handle window`s `storage` event', () => { it('should update state if tracked key is updated', () => { - const { result } = renderHook(() => useStorageValue(localStorage, 'foo')); + const {result} = renderHook(() => useStorageValue(localStorage, 'foo')); expect(result.current.value).toBe(null); localStorage.setItem('foo', 'bar'); act(() => { - window.dispatchEvent( - new StorageEvent('storage', { key: 'foo', storageArea: localStorage, newValue: '"foo"' }) + globalThis.dispatchEvent( + new StorageEvent('storage', {key: 'foo', storageArea: localStorage, newValue: '"foo"'}), ); }); @@ -272,27 +272,27 @@ describe('useStorageValue', () => { }); it('should not update data on event storage or key mismatch', () => { - const { result } = renderHook(() => useStorageValue(localStorage, 'foo')); + const {result} = renderHook(() => useStorageValue(localStorage, 'foo')); expect(result.current.value).toBe(null); act(() => { - window.dispatchEvent( + globalThis.dispatchEvent( new StorageEvent('storage', { key: 'foo', storageArea: sessionStorage, newValue: '"foo"', - }) + }), ); }); expect(result.current.value).toBe(null); act(() => { - window.dispatchEvent( + globalThis.dispatchEvent( new StorageEvent('storage', { key: 'bar', storageArea: localStorage, newValue: 'foo', - }) + }), ); }); expect(result.current.value).toBe(null); @@ -303,30 +303,30 @@ describe('useStorageValue', () => { describe('synchronisation', () => { it('should update state of all hooks with the same key in same storage', () => { - const { result: res } = renderHook(() => useStorageValue(localStorage, 'foo')); - const { result: res1 } = renderHook(() => useStorageValue(localStorage, 'foo')); + const hook1 = renderHook(() => useStorageValue(localStorage, 'foo')); + const hook2 = renderHook(() => useStorageValue(localStorage, 'foo')); - expect(res.current.value).toBe(null); - expect(res1.current.value).toBe(null); + expect(hook1.result.current.value).toBe(null); + expect(hook2.result.current.value).toBe(null); act(() => { - res.current.set('bar'); + hook1.result.current.set('bar'); }); - expect(res.current.value).toBe('bar'); - expect(res1.current.value).toBe('bar'); + expect(hook1.result.current.value).toBe('bar'); + expect(hook2.result.current.value).toBe('bar'); act(() => { - res.current.remove(); + hook1.result.current.remove(); }); - expect(res.current.value).toBe(null); - expect(res1.current.value).toBe(null); + expect(hook1.result.current.value).toBe(null); + expect(hook2.result.current.value).toBe(null); localStorage.setItem('foo', '"123"'); act(() => { - res.current.fetch(); + hook1.result.current.fetch(); }); - expect(res.current.value).toBe('123'); - expect(res1.current.value).toBe('123'); + expect(hook1.result.current.value).toBe('123'); + expect(hook2.result.current.value).toBe('123'); localStorage.removeItem('foo'); }); }); diff --git a/src/useStorageValue/__tests__/ssr.ts b/src/useStorageValue/index.ssr.test.ts similarity index 68% rename from src/useStorageValue/__tests__/ssr.ts rename to src/useStorageValue/index.ssr.test.ts index 7ce9609f..907b4cc5 100644 --- a/src/useStorageValue/__tests__/ssr.ts +++ b/src/useStorageValue/index.ssr.test.ts @@ -1,6 +1,7 @@ -import { act, renderHook } from '@testing-library/react-hooks/server'; -import { useStorageValue } from '../index.js'; -import { newStorage } from './misc.js'; +import {act, renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {newStorage} from './misc.test.js'; +import {useStorageValue} from './index.js'; describe('useStorageValue', () => { it('should be defined', () => { @@ -8,16 +9,15 @@ describe('useStorageValue', () => { }); it('should render', () => { - const { result } = renderHook(() => useStorageValue(newStorage(), 'foo')); + const {result} = renderHook(() => useStorageValue(newStorage(), 'foo')); expect(result.error).toBeUndefined(); }); describe('if initializeWithValue set to false', () => { it('should not fetch value from storage on init', () => { const storage = newStorage(); - const { result } = renderHook(() => - useStorageValue(storage, 'foo', { initializeWithValue: false }) - ); + const {result} = renderHook(() => + useStorageValue(storage, 'foo', {initializeWithValue: false})); expect(result.current.value).toBe(undefined); expect(storage.getItem).not.toHaveBeenCalled(); @@ -25,9 +25,8 @@ describe('useStorageValue', () => { it('should not fetch value from storage on .fetch() call', () => { const storage = newStorage(); - const { result } = renderHook(() => - useStorageValue(storage, 'foo', { initializeWithValue: false }) - ); + const {result} = renderHook(() => + useStorageValue(storage, 'foo', {initializeWithValue: false})); expect(result.current.value).toBe(undefined); act(() => { @@ -39,9 +38,8 @@ describe('useStorageValue', () => { it('should not set storage value on .set() call', () => { const storage = newStorage(); - const { result } = renderHook(() => - useStorageValue(storage, 'foo', { initializeWithValue: false }) - ); + const {result} = renderHook(() => + useStorageValue(storage, 'foo', {initializeWithValue: false})); expect(result.current.value).toBe(undefined); act(() => { @@ -53,9 +51,8 @@ describe('useStorageValue', () => { it('should not call storage`s removeItem on .remove() call', () => { const storage = newStorage(); - const { result } = renderHook(() => - useStorageValue(storage, 'foo', { initializeWithValue: false }) - ); + const {result} = renderHook(() => + useStorageValue(storage, 'foo', {initializeWithValue: false})); act(() => { result.current.remove(); @@ -65,12 +62,11 @@ describe('useStorageValue', () => { it('should not set state to default value on item remove', () => { const storage = newStorage(() => '"bar"'); - const { result } = renderHook(() => + const {result} = renderHook(() => useStorageValue(storage, 'foo', { defaultValue: 'default value', initializeWithValue: false, - }) - ); + })); expect(result.current.value).toBe(undefined); act(() => { diff --git a/src/useStorageValue/index.ts b/src/useStorageValue/index.ts index fb5e71db..bc58ec8f 100644 --- a/src/useStorageValue/index.ts +++ b/src/useStorageValue/index.ts @@ -1,11 +1,11 @@ -import { useEffect, useMemo, useState } from 'react'; -import { useFirstMountState } from '../useFirstMountState/index.js'; -import { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/index.js'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { useUpdateEffect } from '../useUpdateEffect/index.js'; -import { isBrowser } from '../util/const.js'; -import { off, on } from '../util/misc.js'; -import { type NextState, resolveHookState } from '../util/resolveHookState.js'; +import {useEffect, useMemo, useState} from 'react'; +import {useFirstMountState} from '../useFirstMountState/index.js'; +import {useIsomorphicLayoutEffect} from '../useIsomorphicLayoutEffect/index.js'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {useUpdateEffect} from '../useUpdateEffect/index.js'; +import {isBrowser} from '../util/const.js'; +import {off, on} from '../util/misc.js'; +import {type NextState, resolveHookState} from '../util/resolve-hook-state.js'; const storageListeners = new Map>>(); @@ -13,16 +13,19 @@ const invokeStorageKeyListeners = ( s: Storage, key: string, value: string | null, - skipListener?: CallableFunction + skipListener?: CallableFunction, ) => { - storageListeners - .get(s) - ?.get(key) - ?.forEach((listener) => { - if (listener !== skipListener) { - listener(value); - } - }); + const listeners = storageListeners.get(s)?.get(key); + if (listeners === undefined || listeners.size === 0) { + return; + } + + for (const listener of listeners) { + if (listener !== skipListener) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call + listener(value); + } + } }; const storageEventHandler = (evt: StorageEvent) => { @@ -35,7 +38,7 @@ const addStorageListener = (s: Storage, key: string, listener: CallableFunction) // In case of first listener added within browser environment we // want to bind single storage event handler if (isBrowser && storageListeners.size === 0) { - on(window, 'storage', storageEventHandler, { passive: true }); + on(globalThis, 'storage', storageEventHandler, {passive: true}); } let keys = storageListeners.get(s); @@ -55,13 +58,13 @@ const addStorageListener = (s: Storage, key: string, listener: CallableFunction) const removeStorageListener = (s: Storage, key: string, listener: CallableFunction) => { const keys = storageListeners.get(s); - /* istanbul ignore next */ + if (!keys) { return; } const listeners = keys.get(key); - /* istanbul ignore next */ + if (!listeners) { return; } @@ -79,7 +82,7 @@ const removeStorageListener = (s: Storage, key: string, listener: CallableFuncti // Unbind storage event handler in browser environment in case there is no // storage keys listeners left if (isBrowser && storageListeners.size === 0) { - off(window, 'storage', storageEventHandler); + off(globalThis, 'storage', storageEventHandler); } }; @@ -142,9 +145,9 @@ export function useStorageValue< >( storage: Storage, key: string, - options?: UseStorageValueOptions + options?: UseStorageValueOptions, ): UseStorageValueResult { - const optionsRef = useSyncedRef({ ...DEFAULT_OPTIONS, ...options }); + const optionsRef = useSyncedRef({...DEFAULT_OPTIONS, ...options}); const parse = (str: string | null, fallback: Type | null): Type | null => { const parseFunction = optionsRef.current.parse ?? defaultParse; return parseFunction(str, fallback); @@ -160,7 +163,7 @@ export function useStorageValue< fetch: () => parse( storageActions.current.fetchRaw(), - optionsRef.current.defaultValue as Required | null + optionsRef.current.defaultValue as Required | null, ), remove() { storage.removeItem(key); @@ -178,9 +181,9 @@ export function useStorageValue< const isFirstMount = useFirstMountState(); const [state, setState] = useState( - optionsRef.current?.initializeWithValue && isFirstMount - ? storageActions.current.fetch() - : undefined + optionsRef.current?.initializeWithValue && isFirstMount ? + storageActions.current.fetch() : + undefined, ); const stateRef = useSyncedRef(state); @@ -216,11 +219,13 @@ export function useStorageValue< const actions = useSyncedRef({ set(value: NextState>) { - if (!isBrowser) return; + if (!isBrowser) { + return; + } const s = resolveHookState( value, - stateRef.current as UseStorageValueValue + stateRef.current as UseStorageValueValue, ); const storeValue = storageActions.current.store(s); @@ -229,13 +234,17 @@ export function useStorageValue< } }, delete() { - if (!isBrowser) return; + if (!isBrowser) { + return; + } storageActions.current.remove(); invokeStorageKeyListeners(storage, key, null); }, fetch() { - if (!isBrowser) return; + if (!isBrowser) { + return; + } invokeStorageKeyListeners(storage, key, storageActions.current.fetchRaw()); }, @@ -255,7 +264,7 @@ export function useStorageValue< }, }), // eslint-disable-next-line react-hooks/exhaustive-deps - [] + [], ); return useMemo( @@ -264,16 +273,15 @@ export function useStorageValue< ...staticActions, }), // eslint-disable-next-line react-hooks/exhaustive-deps - [state] + [state], ); } const defaultStringify = (data: unknown): string | null => { if (data === null) { - /* istanbul ignore next */ if (process.env.NODE_ENV === 'development') { console.warn( - `'null' is not a valid data for useStorageValue hook, this operation will take no effect` + '\'null\' is not a valid data for useStorageValue hook, this operation will take no effect', ); } @@ -282,7 +290,7 @@ const defaultStringify = (data: unknown): string | null => { try { return JSON.stringify(data); - } catch (error) /* istanbul ignore next */ { + } catch (error) /* v8 ignore next */ { // I have absolutely no idea how to cover this, since modern JSON.stringify does not throw on // cyclic references anymore @@ -292,7 +300,9 @@ const defaultStringify = (data: unknown): string | null => { }; const defaultParse = (str: string | null, fallback: T | null): T | null => { - if (str === null) return fallback; + if (str === null) { + return fallback; + } try { // eslint-disable-next-line @typescript-eslint/no-unsafe-return diff --git a/src/useStorageValue/misc.test.ts b/src/useStorageValue/misc.test.ts new file mode 100644 index 00000000..eec071b9 --- /dev/null +++ b/src/useStorageValue/misc.test.ts @@ -0,0 +1,11 @@ +import {type Mocked, vi} from 'vitest'; + +export const newStorage = ( + get: Storage['getItem'] = () => null, + set: Storage['setItem'] = () => {}, + remove: Storage['removeItem'] = () => {}, +) => ({ + getItem: vi.fn(get), + setItem: vi.fn(set), + removeItem: vi.fn(remove), +} as unknown as Mocked); diff --git a/src/useSyncedRef/__docs__/example.stories.tsx b/src/useSyncedRef/__docs__/example.stories.tsx deleted file mode 100644 index 07af9e37..00000000 --- a/src/useSyncedRef/__docs__/example.stories.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { useRef } from 'react'; -import { useRerender, useSyncedRef } from '../../index.js'; - -export function Example() { - const ref = useRef(0); - const syncedRef = useSyncedRef(++ref.current); - const rerender = useRerender(); - - return ( -
-
As you may see in source code, ref value updated automatically
- {' '} - renders: {syncedRef.current} -
- ); -} diff --git a/src/useSyncedRef/__docs__/story.mdx b/src/useSyncedRef/__docs__/story.mdx deleted file mode 100644 index f735dc2d..00000000 --- a/src/useSyncedRef/__docs__/story.mdx +++ /dev/null @@ -1,31 +0,0 @@ -# useSyncedRef - -Like `useRef`, but it returns immutable ref that contains actual value. - -> `useSyncedRef` returns frozen object, therefore any attempt to modify returned ref will end up -> exception throw. - -> This hook initially designed to simplify creation of stable APIs, which, alternatively, would -> require to write a lot of code like below: -> -> ```ts -> // before -> const someRef1 = React.useRef<() => void>(); -> someRef1.current = () => {}; -> // after -> const someRef = useSyncedRef(() => {}); -> ``` - -#### Example - -## Reference - -```ts -function useSyncedRef(value: T): { readonly current: T }; -``` - -#### Importing - -#### Arguments - -- **value** _`any`_ - actual ref value. diff --git a/src/useSyncedRef/__tests__/ssr.ts b/src/useSyncedRef/__tests__/ssr.ts deleted file mode 100644 index 4b0b9582..00000000 --- a/src/useSyncedRef/__tests__/ssr.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useSyncedRef } from '../../index.js'; - -describe('useSyncedRef', () => { - it('should be defined', () => { - expect(useSyncedRef).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useSyncedRef(1)); - expect(result.error).toBeUndefined(); - }); - - it('should return ref object', () => { - const { result } = renderHook(() => useSyncedRef(1)); - - expect(result.current).toEqual({ current: 1 }); - }); -}); diff --git a/src/useSyncedRef/__tests__/dom.ts b/src/useSyncedRef/index.dom.test.ts similarity index 66% rename from src/useSyncedRef/__tests__/dom.ts rename to src/useSyncedRef/index.dom.test.ts index 4b37930d..8eaa2b3d 100644 --- a/src/useSyncedRef/__tests__/dom.ts +++ b/src/useSyncedRef/index.dom.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useSyncedRef } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it} from 'vitest'; +import {useSyncedRef} from '../index.js'; describe('useSyncedRef', () => { it('should be defined', () => { @@ -7,18 +8,18 @@ describe('useSyncedRef', () => { }); it('should render', () => { - const { result } = renderHook(() => useSyncedRef(1)); + const {result} = renderHook(() => useSyncedRef(1)); expect(result.error).toBeUndefined(); }); it('should return ref object', () => { - const { result } = renderHook(() => useSyncedRef(1)); + const {result} = renderHook(() => useSyncedRef(1)); - expect(result.current).toEqual({ current: 1 }); + expect(result.current).toEqual({current: 1}); }); it('should return same ref between renders', () => { - const { result, rerender } = renderHook(() => useSyncedRef(1)); + const {result, rerender} = renderHook(() => useSyncedRef(1)); const ref = result.current; rerender(); @@ -30,22 +31,22 @@ describe('useSyncedRef', () => { }); it('should contain actual value on each render', () => { - const { result, rerender } = renderHook(({ val }) => useSyncedRef(val), { + const {result, rerender} = renderHook(({val}) => useSyncedRef(val), { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment - initialProps: { val: 1 as any }, + initialProps: {val: 1 as any}, }); expect(result.current.current).toBe(1); - const value1 = { foo: 'bar' }; - rerender({ val: value1 }); + const value1 = {foo: 'bar'}; + rerender({val: value1}); expect(result.current.current).toBe(value1); const value2 = ['a', 'b', 'c']; - rerender({ val: value2 }); + rerender({val: value2}); expect(result.current.current).toBe(value2); }); it('should throw on attempt to change ref', () => { - const { result } = renderHook(() => useSyncedRef(1)); + const {result} = renderHook(() => useSyncedRef(1)); expect(() => { // @ts-expect-error testing irrelevant usage diff --git a/src/useSyncedRef/index.ssr.test.ts b/src/useSyncedRef/index.ssr.test.ts new file mode 100644 index 00000000..a4f0974f --- /dev/null +++ b/src/useSyncedRef/index.ssr.test.ts @@ -0,0 +1,20 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useSyncedRef} from '../index.js'; + +describe('useSyncedRef', () => { + it('should be defined', () => { + expect(useSyncedRef).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useSyncedRef(1)); + expect(result.error).toBeUndefined(); + }); + + it('should return ref object', () => { + const {result} = renderHook(() => useSyncedRef(1)); + + expect(result.current).toEqual({current: 1}); + }); +}); diff --git a/src/useSyncedRef/index.ts b/src/useSyncedRef/index.ts index 8581564a..8beafdd3 100644 --- a/src/useSyncedRef/index.ts +++ b/src/useSyncedRef/index.ts @@ -1,11 +1,11 @@ -import { useMemo, useRef } from 'react'; +import {useMemo, useRef} from 'react'; /** * Like `useRef`, but it returns immutable ref that contains actual value. * * @param value */ -export function useSyncedRef(value: T): { readonly current: T } { +export function useSyncedRef(value: T): {readonly current: T} { const ref = useRef(value); ref.current = value; @@ -17,6 +17,6 @@ export function useSyncedRef(value: T): { readonly current: T } { return ref.current; }, }), - [] + [], ); } diff --git a/src/useThrottledCallback/__docs__/example.stories.tsx b/src/useThrottledCallback/__docs__/example.stories.tsx deleted file mode 100644 index 1459d707..00000000 --- a/src/useThrottledCallback/__docs__/example.stories.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { type ComponentProps, useState } from 'react'; -import { useThrottledCallback } from '../../index.js'; - -export function Example() { - const [state, setState] = useState(''); - - const handleChange: React.ChangeEventHandler = useThrottledCallback< - NonNullable['onChange']> - >( - (ev) => { - setState(ev.target.value); - }, - [], - 500 - ); - - return ( -
-
Below state will update no more than once every 500ms
-
-
The input`s value is: {state}
- -
- ); -} diff --git a/src/useThrottledCallback/__docs__/story.mdx b/src/useThrottledCallback/__docs__/story.mdx deleted file mode 100644 index d9dc2376..00000000 --- a/src/useThrottledCallback/__docs__/story.mdx +++ /dev/null @@ -1,34 +0,0 @@ -# useThrottledCallback - -Makes passed function throttled, otherwise acts like `useCallback`. -[What is throttling?](https://css-tricks.com/debouncing-throttling-explained-examples/#throttle) - -The third argument is dependencies list in `useCallback` manner, passed function will be re-wrapped -when delay or dependencies has changed. Changed throttle callbacks still have same timeout, meaning -that calling new throttled function will abort previously scheduled invocation. - -Throttled function is always a void function since original callback invoked later. - -#### Example - -## Reference - -```ts -export function useThrottledCallback( - callback: (this: This, ...args: Args) => any, - deps: DependencyList, - delay: number, - noTrailing = false -): ThrottledFunction; -``` - -#### Importing - -#### Arguments - -- **callback** _`(...args: T) => unknown`_ - function that will be throttled. -- **deps** _`React.DependencyList`_ - dependencies list when to update callback. -- **delay** _`number`_ - throttle delay. -- **noTrailing** _`boolean`_ _(default: false)_ - if `noTrailing` is true, callback will only - execute every `delay` milliseconds, otherwise, callback will be executed once, after the last - call. diff --git a/src/useThrottledCallback/__tests__/dom.ts b/src/useThrottledCallback/index.dom.test.ts similarity index 61% rename from src/useThrottledCallback/__tests__/dom.ts rename to src/useThrottledCallback/index.dom.test.ts index eeb9e3bd..a108b718 100644 --- a/src/useThrottledCallback/__tests__/dom.ts +++ b/src/useThrottledCallback/index.dom.test.ts @@ -1,19 +1,20 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useThrottledCallback } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useThrottledCallback} from '../index.js'; function testFn(_a: any, _b: any, _c: any) {} describe('useThrottledCallback', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -21,95 +22,94 @@ describe('useThrottledCallback', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useThrottledCallback(() => {}, [], 200); }); expect(result.error).toBeUndefined(); }); it('should return function same length and wrapped name', () => { - let { result } = renderHook(() => - useThrottledCallback((_a: any, _b: any, _c: any) => {}, [], 200) - ); + let {result} = renderHook(() => + useThrottledCallback((_a: any, _b: any, _c: any) => {}, [], 200)); expect(result.current.length).toBe(3); - expect(result.current.name).toBe(`anonymous__throttled__200`); + expect(result.current.name).toBe('anonymous__throttled__200'); result = renderHook(() => useThrottledCallback(testFn, [], 100)).result; expect(result.current.length).toBe(3); - expect(result.current.name).toBe(`testFn__throttled__100`); + expect(result.current.name).toBe('testFn__throttled__100'); }); it('should return new callback if delay is changed', () => { - const { result, rerender } = renderHook( - ({ delay }) => useThrottledCallback(() => {}, [], delay), + const {result, rerender} = renderHook( + ({delay}) => useThrottledCallback(() => {}, [], delay), { - initialProps: { delay: 200 }, - } + initialProps: {delay: 200}, + }, ); const cb1 = result.current; - rerender({ delay: 123 }); + rerender({delay: 123}); expect(cb1).not.toBe(result.current); }); it('should invoke given callback immediately', () => { - const cb = jest.fn(); - const { result } = renderHook(() => useThrottledCallback(cb, [], 200)); + const cb = vi.fn(); + const {result} = renderHook(() => useThrottledCallback(cb, [], 200)); result.current(); expect(cb).toHaveBeenCalledTimes(1); }); it('should pass parameters to callback', () => { - const cb = jest.fn((_a: number, _c: string) => {}); - const { result } = renderHook(() => useThrottledCallback(cb, [], 200)); + const cb = vi.fn((_a: number, _c: string) => {}); + const {result} = renderHook(() => useThrottledCallback(cb, [], 200)); result.current(1, 'abc'); expect(cb).toHaveBeenCalledWith(1, 'abc'); }); it('should ignore consequential calls occurred within delay, but execute last call after delay is passed', () => { - const cb = jest.fn(); - const { result } = renderHook(() => useThrottledCallback(cb, [], 200)); + const cb = vi.fn(); + const {result} = renderHook(() => useThrottledCallback(cb, [], 200)); result.current(); result.current(); result.current(); result.current(); expect(cb).toHaveBeenCalledTimes(1); - jest.advanceTimersByTime(199); + vi.advanceTimersByTime(199); result.current(); expect(cb).toHaveBeenCalledTimes(1); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(cb).toHaveBeenCalledTimes(2); result.current(); expect(cb).toHaveBeenCalledTimes(2); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(cb).toHaveBeenCalledTimes(3); }); it('should drop trailing execution if `noTrailing is set to true`', () => { - const cb = jest.fn(); - const { result } = renderHook(() => useThrottledCallback(cb, [], 200, true)); + const cb = vi.fn(); + const {result} = renderHook(() => useThrottledCallback(cb, [], 200, true)); result.current(); result.current(); result.current(); result.current(); expect(cb).toHaveBeenCalledTimes(1); - jest.advanceTimersByTime(199); + vi.advanceTimersByTime(199); result.current(); expect(cb).toHaveBeenCalledTimes(1); - jest.advanceTimersByTime(1); + vi.advanceTimersByTime(1); expect(cb).toHaveBeenCalledTimes(1); result.current(); result.current(); result.current(); expect(cb).toHaveBeenCalledTimes(2); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(cb).toHaveBeenCalledTimes(2); }); }); diff --git a/src/useThrottledCallback/__tests__/ssr.ts b/src/useThrottledCallback/index.ssr.test.ts similarity index 51% rename from src/useThrottledCallback/__tests__/ssr.ts rename to src/useThrottledCallback/index.ssr.test.ts index 06f6a844..999183ab 100644 --- a/src/useThrottledCallback/__tests__/ssr.ts +++ b/src/useThrottledCallback/index.ssr.test.ts @@ -1,17 +1,18 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useThrottledCallback } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useThrottledCallback} from '../index.js'; describe('useThrottledCallback', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -19,26 +20,26 @@ describe('useThrottledCallback', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useThrottledCallback(() => {}, [], 200); }); expect(result.error).toBeUndefined(); }); it('should invoke given callback immediately', () => { - const cb = jest.fn(); - const { result } = renderHook(() => useThrottledCallback(cb, [], 200)); + const cb = vi.fn(); + const {result} = renderHook(() => useThrottledCallback(cb, [], 200)); result.current(); expect(cb).toHaveBeenCalledTimes(1); }); it('should pass parameters to callback', () => { - const cb = jest.fn((_a: number, _c: string) => {}); - const { result } = renderHook(() => useThrottledCallback(cb, [], 200)); + const cb = vi.fn((_a: number, _c: string) => {}); + const {result} = renderHook(() => useThrottledCallback(cb, [], 200)); result.current(1, 'abc'); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(cb).toHaveBeenCalledWith(1, 'abc'); }); }); diff --git a/src/useThrottledCallback/index.ts b/src/useThrottledCallback/index.ts index c8965bc1..0ac7a1de 100644 --- a/src/useThrottledCallback/index.ts +++ b/src/useThrottledCallback/index.ts @@ -1,5 +1,5 @@ -import { type DependencyList, useMemo, useRef } from 'react'; -import { useUnmountEffect } from '../useUnmountEffect/index.js'; +import {type DependencyList, useMemo, useRef} from 'react'; +import {useUnmountEffect} from '../useUnmountEffect/index.js'; export type ThrottledFunction any> = ( this: ThisParameterType, @@ -20,10 +20,10 @@ export function useThrottledCallback any>( callback: Fn, deps: DependencyList, delay: number, - noTrailing = false + noTrailing = false, ): ThrottledFunction { const timeout = useRef>(); - const lastCall = useRef<{ args: Parameters; this: ThisParameterType }>(); + const lastCall = useRef<{args: Parameters; this: ThisParameterType}>(); useUnmountEffect(() => { if (timeout.current) { @@ -54,7 +54,7 @@ export function useThrottledCallback any>( if (timeout.current) { // If we cant execute callback immediately - save its arguments and // context to execute it when delay is passed - lastCall.current = { args, this: this }; + lastCall.current = {args, this: this}; return; } @@ -63,11 +63,11 @@ export function useThrottledCallback any>( } as ThrottledFunction; Object.defineProperties(wrapped, { - length: { value: callback.length }, - name: { value: `${callback.name || 'anonymous'}__throttled__${delay}` }, + length: {value: callback.length}, + name: {value: `${callback.name || 'anonymous'}__throttled__${delay}`}, }); return wrapped; - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps,@typescript-eslint/no-unsafe-assignment }, [delay, noTrailing, ...deps]); } diff --git a/src/useThrottledEffect/__docs__/example.stories.tsx b/src/useThrottledEffect/__docs__/example.stories.tsx deleted file mode 100644 index 5545ffce..00000000 --- a/src/useThrottledEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useThrottledEffect } from '../../index.js'; - -const HAS_DIGIT_REGEX = /\d/g; - -export function Example() { - const [state, setState] = useState(''); - const [hasNumbers, setHasNumbers] = useState(false); - - useThrottledEffect( - () => { - setHasNumbers(HAS_DIGIT_REGEX.test(state)); - }, - [state], - 200 - ); - - return ( -
-
Digit check will be performed no more than once every 200ms
-
-
{hasNumbers ? 'Input has digits' : 'No digits found in input'}
- { - setState(ev.target.value); - }} - /> -
- ); -} diff --git a/src/useThrottledEffect/__docs__/story.mdx b/src/useThrottledEffect/__docs__/story.mdx deleted file mode 100644 index 25ed1988..00000000 --- a/src/useThrottledEffect/__docs__/story.mdx +++ /dev/null @@ -1,29 +0,0 @@ -# useThrottledEffect - -Like `useEffect`, but passed function is throttled. - -#### Example - -## Reference - -```ts -export function useThrottledEffect( - callback: (...args: any[]) => void, - deps: DependencyList, - delay: number, - noTrailing = false -): void; -``` - -#### Importing - -#### Arguments - -- **callback** _`(...args: any[]) => void`_ - Callback like for `useEffect`, but without ability to - return a cleanup function. -- **deps** _`DependencyList`_ - Dependencies list that will be passed to underlying `useEffect` and - `useThrottledCallback`. -- **delay** _`number`_ - Throttle delay. -- **noTrailing** _`boolean`_ _(default: false)_ - If `noTrailing` is true, callback will only - execute every `delay` milliseconds, otherwise, callback will be executed once, after the last - call. diff --git a/src/useThrottledEffect/__tests__/dom.ts b/src/useThrottledEffect/index.dom.test.ts similarity index 64% rename from src/useThrottledEffect/__tests__/dom.ts rename to src/useThrottledEffect/index.dom.test.ts index ca6633fc..5041e096 100644 --- a/src/useThrottledEffect/__tests__/dom.ts +++ b/src/useThrottledEffect/index.dom.test.ts @@ -1,17 +1,18 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useThrottledEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useThrottledEffect} from '../index.js'; describe('useThrottledEffect', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -19,21 +20,21 @@ describe('useThrottledEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useThrottledEffect(() => {}, [], 200); }); expect(result.error).toBeUndefined(); }); it('should throttle passed callback', () => { - const spy = jest.fn(); - const { rerender } = renderHook( + const spy = vi.fn(); + const {rerender} = renderHook( (dep) => { useThrottledEffect(spy, [dep], 200, true); }, { initialProps: 1, - } + }, ); expect(spy).toHaveBeenCalledTimes(1); @@ -42,7 +43,7 @@ describe('useThrottledEffect', () => { rerender(4); expect(spy).toHaveBeenCalledTimes(1); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); expect(spy).toHaveBeenCalledTimes(1); rerender(5); expect(spy).toHaveBeenCalledTimes(2); diff --git a/src/useThrottledEffect/__tests__/ssr.ts b/src/useThrottledEffect/index.ssr.test.ts similarity index 52% rename from src/useThrottledEffect/__tests__/ssr.ts rename to src/useThrottledEffect/index.ssr.test.ts index 0359b800..eca691ea 100644 --- a/src/useThrottledEffect/__tests__/ssr.ts +++ b/src/useThrottledEffect/index.ssr.test.ts @@ -1,17 +1,18 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useThrottledEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useThrottledEffect} from '../index.js'; describe('useThrottledEffect', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -19,7 +20,7 @@ describe('useThrottledEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useThrottledEffect(() => {}, [], 200); }); expect(result.error).toBeUndefined(); diff --git a/src/useThrottledEffect/index.ts b/src/useThrottledEffect/index.ts index 39606f3a..415d98cd 100644 --- a/src/useThrottledEffect/index.ts +++ b/src/useThrottledEffect/index.ts @@ -1,5 +1,5 @@ -import { type DependencyList, useEffect } from 'react'; -import { useThrottledCallback } from '../useThrottledCallback/index.js'; +import {type DependencyList, useEffect} from 'react'; +import {useThrottledCallback} from '../useThrottledCallback/index.js'; /** * Like `useEffect`, but passed function is throttled. @@ -17,7 +17,7 @@ export function useThrottledEffect( callback: (...args: any[]) => void, deps: DependencyList, delay: number, - noTrailing = false + noTrailing = false, ): void { // eslint-disable-next-line react-hooks/exhaustive-deps useEffect(useThrottledCallback(callback, deps, delay, noTrailing), deps); diff --git a/src/useThrottledState/__docs__/example.stories.tsx b/src/useThrottledState/__docs__/example.stories.tsx deleted file mode 100644 index 8d96dcc7..00000000 --- a/src/useThrottledState/__docs__/example.stories.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { useThrottledState } from '../../index.js'; - -export function Example() { - const [state, setState] = useThrottledState('', 500); - - return ( -
-
Below state will update no more than once every 500ms
-
-
The input`s value is: {state}
- { - setState(ev.target.value); - }} - /> -
- ); -} diff --git a/src/useThrottledState/__docs__/story.mdx b/src/useThrottledState/__docs__/story.mdx deleted file mode 100644 index 94fccc53..00000000 --- a/src/useThrottledState/__docs__/story.mdx +++ /dev/null @@ -1,30 +0,0 @@ -# useThrottledState - -Like `useState` but its state setter is throttled. - -#### Example - -## Reference - -```ts -export function useThrottledState( - initialState: S | (() => S), - delay: number, - noTrailing = false -): [S, Dispatch>]; -``` - -#### Importing - -#### Arguments - -- **initialState** _`S | (() => S)`_ - Initial state to pass to underlying `useState`. -- **delay** _`number`_ - Throttle delay. -- **noTrailing** _`boolean`_ _(default: false)_ - If `noTrailing` is true, callback will only - execute every `delay` milliseconds, otherwise, callback will be executed once, after the last - call. - -#### Return - -0. **state** - current state. -1. **setState** - throttled state setter. diff --git a/src/useThrottledState/__tests__/ssr.ts b/src/useThrottledState/__tests__/ssr.ts deleted file mode 100644 index d9410c78..00000000 --- a/src/useThrottledState/__tests__/ssr.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useThrottledState } from '../../index.js'; - -describe('useThrottledState', () => { - beforeAll(() => { - jest.useFakeTimers(); - }); - - afterEach(() => { - jest.clearAllTimers(); - }); - - afterAll(() => { - jest.useRealTimers(); - }); - - it('should be defined', () => { - expect(useThrottledState).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useThrottledState('', 200)); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useThrottledState/__tests__/dom.ts b/src/useThrottledState/index.dom.test.ts similarity index 60% rename from src/useThrottledState/__tests__/dom.ts rename to src/useThrottledState/index.dom.test.ts index fd69b396..b47e0f81 100644 --- a/src/useThrottledState/__tests__/dom.ts +++ b/src/useThrottledState/index.dom.test.ts @@ -1,17 +1,18 @@ -import { renderHook, act } from '@testing-library/react-hooks/dom'; -import { useThrottledState } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useThrottledState} from '../index.js'; describe('useThrottledState', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); afterEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -19,12 +20,12 @@ describe('useThrottledState', () => { }); it('should render', () => { - const { result } = renderHook(() => useThrottledState('', 200)); + const {result} = renderHook(() => useThrottledState('', 200)); expect(result.error).toBeUndefined(); }); it('should throttle set state', () => { - const { result } = renderHook(() => useThrottledState('', 200, true)); + const {result} = renderHook(() => useThrottledState('', 200, true)); expect(result.current[0]).toBe(''); act(() => { @@ -35,7 +36,7 @@ describe('useThrottledState', () => { result.current[1]('foo'); result.current[1]('bar'); expect(result.current[0]).toBe('hello world!'); - jest.advanceTimersByTime(200); + vi.advanceTimersByTime(200); act(() => { result.current[1]('baz'); }); diff --git a/src/useThrottledState/index.ssr.test.ts b/src/useThrottledState/index.ssr.test.ts new file mode 100644 index 00000000..e81d8547 --- /dev/null +++ b/src/useThrottledState/index.ssr.test.ts @@ -0,0 +1,26 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {afterAll, afterEach, beforeAll, describe, expect, it, vi} from 'vitest'; +import {useThrottledState} from '../index.js'; + +describe('useThrottledState', () => { + beforeAll(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.clearAllTimers(); + }); + + afterAll(() => { + vi.useRealTimers(); + }); + + it('should be defined', () => { + expect(useThrottledState).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useThrottledState('', 200)); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useThrottledState/index.ts b/src/useThrottledState/index.ts index cef465c1..1a5ff667 100644 --- a/src/useThrottledState/index.ts +++ b/src/useThrottledState/index.ts @@ -1,5 +1,5 @@ -import { type Dispatch, type SetStateAction, useState } from 'react'; -import { useThrottledCallback } from '../useThrottledCallback/index.js'; +import {type Dispatch, type SetStateAction, useState} from 'react'; +import {useThrottledCallback} from '../useThrottledCallback/index.js'; /** * Like `useState` but its state setter is throttled. @@ -13,7 +13,7 @@ import { useThrottledCallback } from '../useThrottledCallback/index.js'; export function useThrottledState( initialState: S | (() => S), delay: number, - noTrailing = false + noTrailing = false, ): [S, Dispatch>] { const [state, setState] = useState(initialState); diff --git a/src/useTimeoutEffect/__docs__/example.stories.tsx b/src/useTimeoutEffect/__docs__/example.stories.tsx deleted file mode 100644 index fd608338..00000000 --- a/src/useTimeoutEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useTimeoutEffect, useToggle } from '../../index.js'; - -export function Example() { - const [numberCalls, setNumberCalls] = useState(0); - const [enabled, toggleEnabled] = useToggle(); - const [timeoutValue, setTimeoutValue] = useState(1000); - const [cancelled, toggleCancelled] = useToggle(); - - let status; - if (cancelled) { - status = 'Cancelled'; - } else { - status = enabled ? 'Enabled' : 'Disabled'; - } - - const [cancel, reset] = useTimeoutEffect( - () => { - setNumberCalls((n) => n + 1); - }, - enabled ? timeoutValue : undefined - ); - - React.useEffect(() => { - setNumberCalls(0); - }, [timeoutValue, enabled]); - - return ( -
- Has fired: {numberCalls.toString()} -
- Status: {status} -
- { - setTimeoutValue(Number(e.target.value)); - }} - /> - - - -
- ); -} diff --git a/src/useTimeoutEffect/__docs__/story.mdx b/src/useTimeoutEffect/__docs__/story.mdx deleted file mode 100644 index 33bbfa42..00000000 --- a/src/useTimeoutEffect/__docs__/story.mdx +++ /dev/null @@ -1,29 +0,0 @@ -# useTimeoutEffect - -Like `setTimeout` but in the form of a react hook. - -- Auto-cancels the timeout on component unmount. -- Resets the timeout on delay change. -- Changing the callback won't cause the timeout to reset. -- Ability to cancel the timeout. -- Ability to reset the timeout. - -#### Example - -## Reference - -```ts -export function useTimeoutEffect(callback: () => void, ms?: number): void; -``` - -#### Importing - -#### Arguments - -- **callback** _`() => void`_ - Function to be called after timeout. -- **ms** _`number | undefined`_ - Delay passed to underlying `setTimeout`. If `undefined` the interval will be cancelled. - -#### Return - -1. **cancel** _`() => void`_ - Function to cancel the timeout. -2. **reset** _`() => void`_ - Function to reset the timeout. diff --git a/src/useTimeoutEffect/__tests__/dom.ts b/src/useTimeoutEffect/__tests__/dom.ts deleted file mode 100644 index 025ad519..00000000 --- a/src/useTimeoutEffect/__tests__/dom.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useTimeoutEffect } from '../../index.js'; - -describe('useTimeoutEffect', () => { - beforeAll(() => { - jest.useFakeTimers(); - }); - - beforeEach(() => { - jest.clearAllTimers(); - }); - - afterAll(() => { - jest.useRealTimers(); - }); - - it('should be defined', () => { - expect(useTimeoutEffect).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useTimeoutEffect(() => {}, 123)); - expect(result.error).toBeUndefined(); - }); - - it('should set and call function after timeout', () => { - const spy = jest.fn(); - renderHook(() => useTimeoutEffect(spy, 100)); - - jest.advanceTimersByTime(99); - expect(spy).not.toHaveBeenCalled(); - - jest.advanceTimersByTime(1); - expect(spy).toHaveBeenCalledTimes(1); - }); - - it('should set timeout and cancel on unmount', () => { - const spy = jest.fn(); - const { unmount } = renderHook(() => useTimeoutEffect(spy, 100)); - - jest.advanceTimersByTime(99); - expect(spy).not.toHaveBeenCalled(); - unmount(); - jest.advanceTimersByTime(1); - expect(spy).not.toHaveBeenCalled(); - }); - - it('should reset timeout in delay change', () => { - const spy = jest.fn(); - const { rerender } = renderHook(({ delay }) => useTimeoutEffect(spy, delay), { - initialProps: { delay: 100 }, - }); - - jest.advanceTimersByTime(99); - expect(spy).not.toHaveBeenCalled(); - - rerender({ delay: 50 }); - jest.advanceTimersByTime(49); - expect(spy).not.toHaveBeenCalled(); - - jest.advanceTimersByTime(1); - expect(spy).toHaveBeenCalledTimes(1); - }); - - it('should not reset timeout in callback change', () => { - const spy = jest.fn(); - const { rerender } = renderHook<{ callback: () => void }, void>( - ({ callback }) => useTimeoutEffect(callback, 100), - { - initialProps: { callback() {} }, - } - ); - - jest.advanceTimersByTime(99); - expect(spy).not.toHaveBeenCalled(); - - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - rerender({ callback: () => spy() }); - jest.advanceTimersByTime(1); - expect(spy).toHaveBeenCalledTimes(1); - }); - - it('should cancel timeout if delay is undefined', () => { - const spy = jest.fn(); - const { rerender } = renderHook<{ delay: number | undefined }, void>( - ({ delay }) => useTimeoutEffect(spy, delay), - { - initialProps: { delay: 100 }, - } - ); - - jest.advanceTimersByTime(99); - expect(spy).not.toHaveBeenCalled(); - - rerender({ delay: undefined }); - jest.advanceTimersByTime(2000); - expect(spy).not.toHaveBeenCalled(); - }); - - it('should not cancel timeout if delay is 0', () => { - const spy = jest.fn(); - renderHook(() => useTimeoutEffect(spy, 0)); - - jest.advanceTimersByTime(1); - expect(spy).toHaveBeenCalledTimes(1); - }); - - it('should cancel timeout if cancel method is called', () => { - const spy = jest.fn(); - const { result } = renderHook(() => useTimeoutEffect(spy, 100)); - - jest.advanceTimersByTime(99); - expect(spy).not.toHaveBeenCalled(); - - result.current[0](); - jest.advanceTimersByTime(1); - expect(spy).not.toHaveBeenCalled(); - }); - - it('should reset timeout if reset method is called', () => { - const spy = jest.fn(); - const { result } = renderHook(() => useTimeoutEffect(spy, 100)); - - jest.advanceTimersByTime(99); - expect(spy).not.toHaveBeenCalled(); - - result.current[1](); - jest.advanceTimersByTime(1); - expect(spy).not.toHaveBeenCalled(); - - jest.advanceTimersByTime(100); - expect(spy).toHaveBeenCalledTimes(1); - }); -}); diff --git a/src/useTimeoutEffect/index.dom.test.ts b/src/useTimeoutEffect/index.dom.test.ts new file mode 100644 index 00000000..67a82309 --- /dev/null +++ b/src/useTimeoutEffect/index.dom.test.ts @@ -0,0 +1,137 @@ +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useTimeoutEffect} from '../index.js'; + +describe('useTimeoutEffect', () => { + beforeAll(() => { + vi.useFakeTimers(); + }); + + beforeEach(() => { + vi.clearAllTimers(); + }); + + afterAll(() => { + vi.useRealTimers(); + }); + + it('should be defined', () => { + expect(useTimeoutEffect).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useTimeoutEffect(() => {}, 123)); + expect(result.error).toBeUndefined(); + }); + + it('should set and call function after timeout', () => { + const spy = vi.fn(); + renderHook(() => useTimeoutEffect(spy, 100)); + + vi.advanceTimersByTime(99); + expect(spy).not.toHaveBeenCalled(); + + vi.advanceTimersByTime(1); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('should set timeout and cancel on unmount', () => { + const spy = vi.fn(); + const {unmount} = renderHook(() => useTimeoutEffect(spy, 100)); + + vi.advanceTimersByTime(99); + expect(spy).not.toHaveBeenCalled(); + unmount(); + vi.advanceTimersByTime(1); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should reset timeout in delay change', () => { + const spy = vi.fn(); + const {rerender} = renderHook(({delay}) => useTimeoutEffect(spy, delay), { + initialProps: {delay: 100}, + }); + + vi.advanceTimersByTime(99); + expect(spy).not.toHaveBeenCalled(); + + rerender({delay: 50}); + vi.advanceTimersByTime(49); + expect(spy).not.toHaveBeenCalled(); + + vi.advanceTimersByTime(1); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('should not reset timeout in callback change', () => { + const spy = vi.fn(); + const {rerender} = renderHook<{callback: () => void}, void>( + ({callback}) => useTimeoutEffect(callback, 100), + { + initialProps: { + callback() {}, + }, + }, + ); + + vi.advanceTimersByTime(99); + expect(spy).not.toHaveBeenCalled(); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + rerender({callback: () => spy()}); + vi.advanceTimersByTime(1); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('should cancel timeout if delay is undefined', () => { + const spy = vi.fn(); + const {rerender} = renderHook<{delay: number | undefined}, void>( + ({delay}) => useTimeoutEffect(spy, delay), + { + initialProps: {delay: 100}, + }, + ); + + vi.advanceTimersByTime(99); + expect(spy).not.toHaveBeenCalled(); + + rerender({delay: undefined}); + vi.advanceTimersByTime(2000); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should not cancel timeout if delay is 0', () => { + const spy = vi.fn(); + renderHook(() => useTimeoutEffect(spy, 0)); + + vi.advanceTimersByTime(1); + expect(spy).toHaveBeenCalledTimes(1); + }); + + it('should cancel timeout if cancel method is called', () => { + const spy = vi.fn(); + const {result} = renderHook(() => useTimeoutEffect(spy, 100)); + + vi.advanceTimersByTime(99); + expect(spy).not.toHaveBeenCalled(); + + result.current[0](); + vi.advanceTimersByTime(1); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should reset timeout if reset method is called', () => { + const spy = vi.fn(); + const {result} = renderHook(() => useTimeoutEffect(spy, 100)); + + vi.advanceTimersByTime(99); + expect(spy).not.toHaveBeenCalled(); + + result.current[1](); + vi.advanceTimersByTime(1); + expect(spy).not.toHaveBeenCalled(); + + vi.advanceTimersByTime(100); + expect(spy).toHaveBeenCalledTimes(1); + }); +}); diff --git a/src/useTimeoutEffect/__tests__/ssr.ts b/src/useTimeoutEffect/index.ssr.test.ts similarity index 52% rename from src/useTimeoutEffect/__tests__/ssr.ts rename to src/useTimeoutEffect/index.ssr.test.ts index 7d7728d8..550930ac 100644 --- a/src/useTimeoutEffect/__tests__/ssr.ts +++ b/src/useTimeoutEffect/index.ssr.test.ts @@ -1,17 +1,18 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useTimeoutEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {afterAll, beforeAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useTimeoutEffect} from '../index.js'; describe('useTimeoutEffect', () => { beforeAll(() => { - jest.useFakeTimers(); + vi.useFakeTimers(); }); beforeEach(() => { - jest.clearAllTimers(); + vi.clearAllTimers(); }); afterAll(() => { - jest.useRealTimers(); + vi.useRealTimers(); }); it('should be defined', () => { @@ -19,15 +20,15 @@ describe('useTimeoutEffect', () => { }); it('should render', () => { - const { result } = renderHook(() => useTimeoutEffect(() => {}, 123)); + const {result} = renderHook(() => useTimeoutEffect(() => {}, 123)); expect(result.error).toBeUndefined(); }); it('should not invoke callback after timeout', () => { - const spy = jest.fn(); + const spy = vi.fn(); renderHook(() => useTimeoutEffect(spy, 100)); - jest.advanceTimersByTime(100); + vi.advanceTimersByTime(100); expect(spy).not.toHaveBeenCalled(); }); }); diff --git a/src/useTimeoutEffect/index.ts b/src/useTimeoutEffect/index.ts index 98e4966e..e20696aa 100644 --- a/src/useTimeoutEffect/index.ts +++ b/src/useTimeoutEffect/index.ts @@ -1,5 +1,5 @@ -import { useCallback, useEffect, useRef } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; +import {useCallback, useEffect, useRef} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; type TimeoutID = ReturnType | null; @@ -20,7 +20,7 @@ const cancelTimeout = (id: TimeoutID) => { */ export function useTimeoutEffect( callback: () => void, - ms?: number + ms?: number, ): [cancel: () => void, reset: () => void] { const cbRef = useSyncedRef(callback); const msRef = useSyncedRef(ms); @@ -31,7 +31,9 @@ export function useTimeoutEffect( }, []); const reset = useCallback(() => { - if (msRef.current === undefined) return; + if (msRef.current === undefined) { + return; + } cancel(); timeoutIdRef.current = setTimeout(() => { diff --git a/src/useToggle/__docs__/example.stories.tsx b/src/useToggle/__docs__/example.stories.tsx deleted file mode 100644 index eef36033..00000000 --- a/src/useToggle/__docs__/example.stories.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from 'react'; -import { useToggle } from '../../index.js'; - -export function Example() { - const [isToggled, toggle] = useToggle(true); - - return ( -
-
{isToggled ? 'The toggle is on' : 'The toggle is off'}
- -
- ); -} diff --git a/src/useToggle/__docs__/story.mdx b/src/useToggle/__docs__/story.mdx deleted file mode 100644 index 01130468..00000000 --- a/src/useToggle/__docs__/story.mdx +++ /dev/null @@ -1,41 +0,0 @@ -# useToggle - -Like `useState`, but can only become `true` or `false`. - -State setter, in case called without arguments, will change the state to opposite. React synthetic -events are ignored by default so state setter can be used as event handler directly, such behaviour -can be changed by setting 2nd parameter to `false`. - -> **_This hook provides stable API, meaning returned functions do not change between renders_** - -#### Example - -## Reference - -```ts -export function useToggle( - initialState: InitialState, - ignoreReactEvents?: true -): [boolean, (nextState?: NextState | BaseSyntheticEvent) => void]; - -export function useToggle( - initialState: InitialState, - ignoreReactEvents: false -): [boolean, (nextState?: NextState) => void]; -``` - -#### Importing - -#### Arguments - -- _**initialState**_ _`InitialState`_ - initial state or initial state setter as for - `useState` -- _**ignoreReactEvents**_ _`boolean`_ _(default: true)_ - ignore received react synthetic events, so state setter can be used as event handler. - -#### Return - -Returns array alike `useState` does. - -- _**[0]**_ _`boolean`_ - current state -- _**[1]**_ _`(nextState?: NewState) => void`_ - state setter as for `useState`. In case - called without arguments will change state to opposite. diff --git a/src/useToggle/__tests__/dom.ts b/src/useToggle/index.dom.test.ts similarity index 74% rename from src/useToggle/__tests__/dom.ts rename to src/useToggle/index.dom.test.ts index 5b10a6cf..17b8487f 100644 --- a/src/useToggle/__tests__/dom.ts +++ b/src/useToggle/index.dom.test.ts @@ -1,6 +1,7 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { type BaseSyntheticEvent, useRef } from 'react'; -import { useToggle } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {type BaseSyntheticEvent, useRef} from 'react'; +import {describe, expect, it} from 'vitest'; +import {useToggle} from '../index.js'; describe('useToggle', () => { it('should be defined', () => { @@ -8,13 +9,13 @@ describe('useToggle', () => { }); it('should default to false', () => { - const { result } = renderHook(() => useToggle()); + const {result} = renderHook(() => useToggle()); expect(result.current[0]).toBe(false); }); it('should be instantiatable with value', () => { - let { result } = renderHook(() => useToggle(true)); + let {result} = renderHook(() => useToggle(true)); expect(result.current[0]).toBe(true); result = renderHook(() => useToggle(() => true)).result; @@ -25,7 +26,7 @@ describe('useToggle', () => { }); it('should change state to the opposite when toggler called without args or undefined', () => { - const { result } = renderHook(() => useToggle()); + const {result} = renderHook(() => useToggle()); act(() => { result.current[1](); }); @@ -38,7 +39,7 @@ describe('useToggle', () => { }); it('should not rerender when toggler called with same value', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { const cnt = useRef(0); return [...useToggle(), ++cnt.current] as const; @@ -58,7 +59,7 @@ describe('useToggle', () => { }); it('should change state to one that passed to toggler', () => { - const { result } = renderHook(() => useToggle(false, false)); + const {result} = renderHook(() => useToggle(false, false)); act(() => { result.current[1](false); }); @@ -81,12 +82,12 @@ describe('useToggle', () => { }); it('should not account react events', () => { - const { result } = renderHook(() => useToggle()); + const {result} = renderHook(() => useToggle()); act(() => { - result.current[1]({ _reactName: 'abcdef' } as unknown as BaseSyntheticEvent); + result.current[1]({_reactName: 'abcdef'} as unknown as BaseSyntheticEvent); - result.current[1]({ _reactName: 'abcdef' } as unknown as BaseSyntheticEvent); + result.current[1]({_reactName: 'abcdef'} as unknown as BaseSyntheticEvent); }); expect(result.current[0]).toBe(false); diff --git a/src/useToggle/__tests__/ssr.ts b/src/useToggle/index.ssr.test.ts similarity index 70% rename from src/useToggle/__tests__/ssr.ts rename to src/useToggle/index.ssr.test.ts index 7f1a3f2d..be600452 100644 --- a/src/useToggle/__tests__/ssr.ts +++ b/src/useToggle/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { act, renderHook } from '@testing-library/react-hooks/server'; -import { useToggle } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useToggle} from '../index.js'; describe('useToggle', () => { it('should be defined', () => { @@ -7,13 +8,13 @@ describe('useToggle', () => { }); it('should default to false', () => { - const { result } = renderHook(() => useToggle()); + const {result} = renderHook(() => useToggle()); expect(result.current[0]).toBe(false); }); it('should be instantiatable with value', () => { - let { result } = renderHook(() => useToggle(true)); + let {result} = renderHook(() => useToggle(true)); expect(result.current[0]).toBe(true); result = renderHook(() => useToggle(() => true)).result; @@ -24,7 +25,7 @@ describe('useToggle', () => { }); it('should not change if toggler called', () => { - const { result } = renderHook(() => useToggle()); + const {result} = renderHook(() => useToggle()); act(() => { result.current[1](); }); diff --git a/src/useToggle/index.ts b/src/useToggle/index.ts index 7e035c1d..6edc1969 100644 --- a/src/useToggle/index.ts +++ b/src/useToggle/index.ts @@ -1,6 +1,6 @@ -import { type BaseSyntheticEvent, useCallback, useState } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { type InitialState, type NextState, resolveHookState } from '../util/resolveHookState.js'; +import {type BaseSyntheticEvent, useCallback, useState} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {type InitialState, type NextState, resolveHookState} from '../util/resolve-hook-state.js'; export function useToggle( initialState: InitialState, @@ -20,7 +20,7 @@ export function useToggle( */ export function useToggle( initialState: InitialState = false, - ignoreReactEvents = true + ignoreReactEvents = true, ): [boolean, (nextState?: NextState | BaseSyntheticEvent) => void] { // We don't use useReducer (which would end up with less code), because exposed // action does not provide functional updates feature. diff --git a/src/useUnmountEffect/__docs__/example.stories.tsx b/src/useUnmountEffect/__docs__/example.stories.tsx deleted file mode 100644 index fc2560f1..00000000 --- a/src/useUnmountEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import { useToggle, useUnmountEffect } from '../../index.js'; - -export function Example() { - const [isToggled, toggle] = useToggle(false); - - function ToggledComponent() { - useUnmountEffect(() => { - // eslint-disable-next-line no-alert - alert('UNMOUNTED'); - }); - - return

Unmount me

; - } - - return ( -
- {' '} - {isToggled && } -
- ); -} diff --git a/src/useUnmountEffect/__docs__/story.mdx b/src/useUnmountEffect/__docs__/story.mdx deleted file mode 100644 index 136d4b7f..00000000 --- a/src/useUnmountEffect/__docs__/story.mdx +++ /dev/null @@ -1,17 +0,0 @@ -# useUnmountEffect - -Run effect only when component is unmounted. - -#### Example - -## Reference - -```ts -function useUnmountEffect(effect: CallableFunction): void; -``` - -#### Importing - -#### Arguments - -- _**effect**_ _`CallableFunction`_ - Effector to run on unmount. diff --git a/src/useUnmountEffect/__tests__/dom.ts b/src/useUnmountEffect/index.dom.test.ts similarity index 52% rename from src/useUnmountEffect/__tests__/dom.ts rename to src/useUnmountEffect/index.dom.test.ts index 2f743895..d505d3f4 100644 --- a/src/useUnmountEffect/__tests__/dom.ts +++ b/src/useUnmountEffect/index.dom.test.ts @@ -1,11 +1,12 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useUnmountEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useUnmountEffect} from '../index.js'; describe('useUnmountEffect', () => { it('should call effector only when component unmounted', () => { - const spy = jest.fn(); + const spy = vi.fn(); - const { result, rerender, unmount } = renderHook(() => { + const {result, rerender, unmount} = renderHook(() => { useUnmountEffect(spy); }); @@ -19,20 +20,20 @@ describe('useUnmountEffect', () => { }); it('should call effect even if it has been updated', () => { - const spy = jest.fn(); + const spy = vi.fn(); - const { rerender, unmount } = renderHook<{ fn: () => void }, void>( - ({ fn }) => { + const {rerender, unmount} = renderHook<{fn: () => void}, void>( + ({fn}) => { useUnmountEffect(fn); }, - { - initialProps: { - fn() {}, - }, - } + { + initialProps: { + fn() {}, + }, + }, ); - rerender({ fn: spy }); + rerender({fn: spy}); unmount(); expect(spy).toHaveBeenCalled(); diff --git a/src/useUnmountEffect/__tests__/ssr.ts b/src/useUnmountEffect/index.ssr.test.ts similarity index 53% rename from src/useUnmountEffect/__tests__/ssr.ts rename to src/useUnmountEffect/index.ssr.test.ts index 8959a65d..704a4e46 100644 --- a/src/useUnmountEffect/__tests__/ssr.ts +++ b/src/useUnmountEffect/index.ssr.test.ts @@ -1,9 +1,10 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useUnmountEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it, vi} from 'vitest'; +import {useUnmountEffect} from '../index.js'; describe('useUnmountEffect', () => { it('should call effector only when component unmounted', () => { - const spy = jest.fn(); + const spy = vi.fn(); renderHook(() => { useUnmountEffect(spy); diff --git a/src/useUnmountEffect/index.ts b/src/useUnmountEffect/index.ts index 3a0dcb52..76868bca 100644 --- a/src/useUnmountEffect/index.ts +++ b/src/useUnmountEffect/index.ts @@ -1,5 +1,5 @@ -import { useEffect } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; +import {useEffect} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; /** * Run effect only when component is unmounted. @@ -11,9 +11,10 @@ export function useUnmountEffect(effect: CallableFunction): void { useEffect( () => () => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call effectRef.current(); }, // eslint-disable-next-line react-hooks/exhaustive-deps - [] + [], ); } diff --git a/src/useUpdateEffect/__docs__/example.stories.tsx b/src/useUpdateEffect/__docs__/example.stories.tsx deleted file mode 100644 index 45de07dc..00000000 --- a/src/useUpdateEffect/__docs__/example.stories.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { useRerender, useUpdateEffect } from '../../index.js'; - -export function Example() { - const [count, setCount] = useState(1); - const [isUpdated, setIsUpdated] = useState(false); - const rerender = useRerender(); - - useUpdateEffect(() => { - setIsUpdated(true); - }, [count]); - - return ( -
-
- Is counter updated: - {isUpdated ? 'yes' : 'no'} -
- {' '} - -
- ); -} diff --git a/src/useUpdateEffect/__docs__/story.mdx b/src/useUpdateEffect/__docs__/story.mdx deleted file mode 100644 index 0ea65fad..00000000 --- a/src/useUpdateEffect/__docs__/story.mdx +++ /dev/null @@ -1,19 +0,0 @@ -# useUpdateEffect - -Effect hook that ignores the first render (not invoked on mount) - -#### Example - -## Reference - -```ts -function useUpdateEffect(effect: React.EffectCallback, deps?: React.DependencyList): void; -``` - -#### Importing - -#### Arguments - -- _**effect**_ _`React.EffectCallback`_ - Effect callback like for `React.useEffect` hook -- _**deps**_ _`React.DependencyList`_ _(default: `undefined`)_ - Dependencies list as for - `React.useEffect` hook diff --git a/src/useUpdateEffect/__tests__/dom.ts b/src/useUpdateEffect/index.dom.test.ts similarity index 62% rename from src/useUpdateEffect/__tests__/dom.ts rename to src/useUpdateEffect/index.dom.test.ts index 15ad9c55..2f7dc75b 100644 --- a/src/useUpdateEffect/__tests__/dom.ts +++ b/src/useUpdateEffect/index.dom.test.ts @@ -1,11 +1,12 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useUpdateEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useUpdateEffect} from '../index.js'; describe('useUpdateEffect', () => { it('should call effector only on updates (after first render)', () => { - const spy = jest.fn(); + const spy = vi.fn(); - const { rerender, unmount } = renderHook(() => { + const {rerender, unmount} = renderHook(() => { useUpdateEffect(spy); }); @@ -22,15 +23,15 @@ describe('useUpdateEffect', () => { }); it('should accept dependencies as useEffect', () => { - const spy = jest.fn(); + const spy = vi.fn(); - const { rerender, unmount } = renderHook( - ({ deps }) => { + const {rerender, unmount} = renderHook( + ({deps}) => { useUpdateEffect(spy, deps); }, { - initialProps: { deps: [1, 2, 3] }, - } + initialProps: {deps: [1, 2, 3]}, + }, ); expect(spy).toHaveBeenCalledTimes(0); @@ -38,10 +39,10 @@ describe('useUpdateEffect', () => { rerender(); expect(spy).toHaveBeenCalledTimes(0); - rerender({ deps: [1, 2, 4] }); + rerender({deps: [1, 2, 4]}); expect(spy).toHaveBeenCalledTimes(1); - rerender({ deps: [1, 2, 4] }); + rerender({deps: [1, 2, 4]}); expect(spy).toHaveBeenCalledTimes(1); unmount(); diff --git a/src/useUpdateEffect/__tests__/ssr.ts b/src/useUpdateEffect/index.ssr.test.ts similarity index 51% rename from src/useUpdateEffect/__tests__/ssr.ts rename to src/useUpdateEffect/index.ssr.test.ts index ee5f014f..f2d1d572 100644 --- a/src/useUpdateEffect/__tests__/ssr.ts +++ b/src/useUpdateEffect/index.ssr.test.ts @@ -1,9 +1,10 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useUpdateEffect } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it, vi} from 'vitest'; +import {useUpdateEffect} from '../index.js'; describe('useUpdateEffect', () => { it('should not call effector on mount', () => { - const spy = jest.fn(); + const spy = vi.fn(); renderHook(() => { useUpdateEffect(spy); diff --git a/src/useUpdateEffect/index.ts b/src/useUpdateEffect/index.ts index 090c4cfb..ca599d34 100644 --- a/src/useUpdateEffect/index.ts +++ b/src/useUpdateEffect/index.ts @@ -1,6 +1,6 @@ -import { type DependencyList, type EffectCallback, useEffect } from 'react'; -import { useFirstMountState } from '../useFirstMountState/index.js'; -import { noop } from '../util/const.js'; +import {type DependencyList, type EffectCallback, useEffect} from 'react'; +import {useFirstMountState} from '../useFirstMountState/index.js'; +import {noop} from '../util/const.js'; /** * Effect hook that ignores the first render (not invoked on mount). diff --git a/src/useValidator/__docs__/example.tsx b/src/useValidator/__docs__/example.tsx deleted file mode 100644 index a2a11de7..00000000 --- a/src/useValidator/__docs__/example.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import * as React from 'react'; -import { useState } from 'react'; -import { type ValidatorDeferred, useDebouncedCallback, useValidator } from '../../index.js'; - -export function Example() { - const [text, setText] = useState(''); - - // As deferred validator is unable to infer the type of validity - // state - we should define it ourself - type TextValidityState = { isValid: boolean | undefined; error: Error | undefined }; - - // Debounced callback is deferred callback so we should use deferred type - // of validator (the one that receives dispatcher as an argument) - const validator = useDebouncedCallback>( - (d) => { - const isValid = text.length === 0 || text.length % 2 === 1; - - d({ - isValid, - error: isValid ? undefined : new Error('text length should be an odd length'), - }); - }, - [text], - 150 - ); - - // Validity state type if inferred from validator - const [validity] = useValidator(validator, [validator]); - - return ( -
-
The input below is only valid if it has an odd number of characters
-
- - {validity.isValid === false &&
{validity.error?.message}
} - { - setText(ev.target.value); - }} - /> -
- ); -} diff --git a/src/useValidator/__docs__/story.mdx b/src/useValidator/__docs__/story.mdx deleted file mode 100644 index e5b6c1c4..00000000 --- a/src/useValidator/__docs__/story.mdx +++ /dev/null @@ -1,48 +0,0 @@ -# useValidator - -Performs validation when any of provided dependencies has changed. - -- Does _not_ perform re-validation on validator change. -- SSR-friendly. -- Supports deferred validators. - -> **_This hook provides stable API, meaning returned methods does not change between renders_** - -#### Example - -## Reference - -```ts -interface ValidityState extends Record { isValid: boolean | undefined; } -type ValidatorImmediate = () => V; -type ValidatorDeferred = (done: Dispatch>) => any; -type Validator = ValidatorImmediate | ValidatorDeferred; -type UseValidatorReturn = [V, () => void]; - -function useValidator( - validator: Validator, - deps: DependencyList, - initialValidity: InitialState = { isValid: undefined } as V -) => UseValidatorReturn; -``` - -#### Importing - -#### Arguments - -- **validator** _`Validator`_ - the function that performs validation, it can be of two types: -- _immediate validator_ - performs validation on the go and returns validity state as a function - result, expects 0 arguments. -- _deferred validator_ - performs any kind of asynchronous validation, expects 1 argument which is - the validity state setter. - > TypeScript warning: deferred validators are unable to infer the validity type, therefore it - > requires explicit validity state type definition, as it is shown in example. -- **deps** _`DependencyList`_ - dependencies list that will trigger automatic revalidation, as for - `useEffect` hook. -- **initialValidity** _`InitialState`_ _(default: `{ isValid: undefined }`)_ - initial validity - state, that is set before mount validation. - -#### Return - -0. **validity state** - current validity state returned by validator or initial validity. -1. **revalidate** - Method to perform revalidation by hand. diff --git a/src/useValidator/__tests__/dom.ts b/src/useValidator/__tests__/dom.ts deleted file mode 100644 index 95891f48..00000000 --- a/src/useValidator/__tests__/dom.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useValidator, type UseValidatorReturn } from '../../index.js'; - -describe('useValidator', () => { - it('should be defined', () => { - expect(useValidator).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useValidator(() => ({ isValid: false }), [])); - expect(result.error).toBeUndefined(); - }); - - it('should return undefined validity on first render', () => { - const { result } = renderHook(() => useValidator(() => ({ isValid: true }), [])); - expect((result.all[0] as UseValidatorReturn<{ isValid: boolean }>)[0].isValid).toBeUndefined(); - }); - - it('should apply initial state parameter', () => { - const { result } = renderHook(() => - useValidator(() => ({ isValid: true }), [], { isValid: true }) - ); - expect((result.all[0] as UseValidatorReturn<{ isValid: boolean }>)[0].isValid).toBe(true); - }); - - it('should call validator on first render', () => { - const spy = jest.fn(() => ({ isValid: true })); - const { result } = renderHook(() => useValidator(spy, [])); - expect(spy).toHaveBeenCalledTimes(1); - expect(result.current[0].isValid).toBe(true); - }); - - it('should call validator on if deps changed', () => { - const spy = jest.fn(() => ({ isValid: true })); - const { rerender } = renderHook(({ dep }) => useValidator(spy, [dep]), { - initialProps: { dep: 1 }, - }); - expect(spy).toHaveBeenCalledTimes(1); - - rerender({ dep: 2 }); - expect(spy).toHaveBeenCalledTimes(2); - }); - - it('should call validator on revalidator invocation', () => { - const spy = jest.fn(() => ({ isValid: true })); - const { result } = renderHook(({ dep }) => useValidator(spy, [dep]), { - initialProps: { dep: 1 }, - }); - expect(spy).toHaveBeenCalledTimes(1); - - act(() => { - result.current[1](); - }); - expect(spy).toHaveBeenCalledTimes(2); - }); - - it('should pass the validity setter if validator expects it', () => { - const { result } = renderHook(() => - useValidator<{ isValid: false; customError: Error }>((d) => { - d({ isValid: false, customError: new Error('this is custom error') }); - }, []) - ); - - expect(result.current[0]).toStrictEqual({ - isValid: false, - customError: new Error('this is custom error'), - }); - }); -}); diff --git a/src/useValidator/index.dom.test.ts b/src/useValidator/index.dom.test.ts new file mode 100644 index 00000000..55b621c0 --- /dev/null +++ b/src/useValidator/index.dom.test.ts @@ -0,0 +1,68 @@ +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {describe, expect, it, vi} from 'vitest'; +import {useValidator, type UseValidatorReturn} from '../index.js'; + +describe('useValidator', () => { + it('should be defined', () => { + expect(useValidator).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useValidator(() => ({isValid: false}), [])); + expect(result.error).toBeUndefined(); + }); + + it('should return undefined validity on first render', () => { + const {result} = renderHook(() => useValidator(() => ({isValid: true}), [])); + expect((result.all[0] as UseValidatorReturn<{isValid: boolean}>)[0].isValid).toBeUndefined(); + }); + + it('should apply initial state parameter', () => { + const {result} = renderHook(() => + useValidator(() => ({isValid: true}), [], {isValid: true})); + expect((result.all[0] as UseValidatorReturn<{isValid: boolean}>)[0].isValid).toBe(true); + }); + + it('should call validator on first render', () => { + const spy = vi.fn(() => ({isValid: true})); + const {result} = renderHook(() => useValidator(spy, [])); + expect(spy).toHaveBeenCalledTimes(1); + expect(result.current[0].isValid).toBe(true); + }); + + it('should call validator on if deps changed', () => { + const spy = vi.fn(() => ({isValid: true})); + const {rerender} = renderHook(({dep}) => useValidator(spy, [dep]), { + initialProps: {dep: 1}, + }); + expect(spy).toHaveBeenCalledTimes(1); + + rerender({dep: 2}); + expect(spy).toHaveBeenCalledTimes(2); + }); + + it('should call validator on revalidator invocation', () => { + const spy = vi.fn(() => ({isValid: true})); + const {result} = renderHook(({dep}) => useValidator(spy, [dep]), { + initialProps: {dep: 1}, + }); + expect(spy).toHaveBeenCalledTimes(1); + + act(() => { + result.current[1](); + }); + expect(spy).toHaveBeenCalledTimes(2); + }); + + it('should pass the validity setter if validator expects it', () => { + const {result} = renderHook(() => + useValidator<{isValid: false; customError: Error}>((d) => { + d({isValid: false, customError: new Error('this is custom error')}); + }, [])); + + expect(result.current[0]).toStrictEqual({ + isValid: false, + customError: new Error('this is custom error'), + }); + }); +}); diff --git a/src/useValidator/__tests__/ssr.ts b/src/useValidator/index.ssr.test.ts similarity index 55% rename from src/useValidator/__tests__/ssr.ts rename to src/useValidator/index.ssr.test.ts index 5c449550..7545c6f2 100644 --- a/src/useValidator/__tests__/ssr.ts +++ b/src/useValidator/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useValidator } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it, vi} from 'vitest'; +import {useValidator} from '../index.js'; describe('useValidator', () => { it('should be defined', () => { @@ -7,17 +8,17 @@ describe('useValidator', () => { }); it('should render', () => { - const { result } = renderHook(() => useValidator(() => ({ isValid: false }), [])); + const {result} = renderHook(() => useValidator(() => ({isValid: false}), [])); expect(result.error).toBeUndefined(); }); it('should return undefined validity on first render', () => { - const { result } = renderHook(() => useValidator(() => ({ isValid: true }), [])); + const {result} = renderHook(() => useValidator(() => ({isValid: true}), [])); expect(result.current[0].isValid).toBeUndefined(); }); it('should not call validator on first render', () => { - const spy = jest.fn(() => ({ isValid: true })); + const spy = vi.fn(() => ({isValid: true})); renderHook(() => useValidator(spy, [])); expect(spy).not.toHaveBeenCalled(); }); diff --git a/src/useValidator/index.ts b/src/useValidator/index.ts index 21721cde..20826f8a 100644 --- a/src/useValidator/index.ts +++ b/src/useValidator/index.ts @@ -1,6 +1,6 @@ -import { type DependencyList, type Dispatch, useCallback, useEffect, useState } from 'react'; -import { useSyncedRef } from '../useSyncedRef/index.js'; -import { type InitialState, type NextState } from '../util/resolveHookState.js'; +import {type DependencyList, type Dispatch, useCallback, useEffect, useState} from 'react'; +import {useSyncedRef} from '../useSyncedRef/index.js'; +import {type InitialState, type NextState} from '../util/resolve-hook-state.js'; export type ValidityState = { isValid: boolean | undefined; @@ -27,7 +27,7 @@ export type UseValidatorReturn = [V, () => void]; export function useValidator( validator: Validator, deps: DependencyList, - initialValidity: InitialState = { isValid: undefined } as V + initialValidity: InitialState = {isValid: undefined} as V, ): UseValidatorReturn { const [validity, setValidity] = useState(initialValidity); const validatorRef = useSyncedRef(() => { diff --git a/src/useVibrate/__docs__/example.stories.tsx b/src/useVibrate/__docs__/example.stories.tsx deleted file mode 100644 index 375307d9..00000000 --- a/src/useVibrate/__docs__/example.stories.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import * as React from 'react'; -import { useToggle, useVibrate } from '../../index.js'; - -export function Example() { - const [doVibrate, setDoVibrate] = useToggle(false); - - useVibrate( - doVibrate, - [100, 30, 100, 30, 100, 30, 200, 30, 200, 30, 200, 30, 100, 30, 100, 30, 100], - true - ); - - return ( -
- -
- ); -} diff --git a/src/useVibrate/__docs__/story.mdx b/src/useVibrate/__docs__/story.mdx deleted file mode 100644 index f3a9eee0..00000000 --- a/src/useVibrate/__docs__/story.mdx +++ /dev/null @@ -1,26 +0,0 @@ -# useVibrate - -Provides vibration feedback using the [Vibration API](https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API). - -> Note: client may disable vibration for websites in browser settings. - -- SSR-friendly (do nothing during SSR). -- Supports vibration loops. -- Auto-cancel vibration on component unmount. - -#### Example - -## Reference - -```ts -function useVibrate(enabled: boolean, pattern: VibratePattern, loop?: boolean): void; -``` - -#### Importing - -#### Arguments - -- **enabled** _`boolean`_ - Whether to perform vibration or not. -- **pattern** _`number | number[]`_ - VibrationPattern passed down to `navigator.vibrate`. -- **loop** _`boolean | undefined`_ _(default: `undefined`)_ - If true - vibration will be looped - using `setInterval`. diff --git a/src/useVibrate/__tests__/dom.ts b/src/useVibrate/__tests__/dom.ts deleted file mode 100644 index c7c57a15..00000000 --- a/src/useVibrate/__tests__/dom.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/dom'; -import { useVibrate } from '../../index.js'; - -describe('useVibrate', () => { - const vibrateSpy = jest.spyOn(navigator, 'vibrate'); - - beforeEach(() => { - vibrateSpy.mockReset(); - }); - - afterAll(() => { - vibrateSpy.mockRestore(); - }); - - it('should be defined', () => { - expect(useVibrate).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => { - useVibrate(true, 100); - }); - expect(result.error).toBeUndefined(); - }); - - it('should call navigator.vibrate', () => { - renderHook(() => { - useVibrate(true, [100, 200]); - }); - expect(vibrateSpy).toHaveBeenCalledTimes(1); - expect(vibrateSpy.mock.calls[0][0]).toEqual([100, 200]); - }); - - it('should call navigator.vibrate(0) on unmount', () => { - const { unmount } = renderHook(() => { - useVibrate(true, [100, 200], true); - }); - unmount(); - - expect(vibrateSpy.mock.calls[1][0]).toEqual(0); - }); - - it('should vibrate constantly using interval', () => { - jest.useFakeTimers(); - renderHook(() => { - useVibrate(true, 300, true); - }); - - expect(vibrateSpy).toHaveBeenCalledTimes(1); - expect(vibrateSpy.mock.calls[0][0]).toEqual(300); - - jest.advanceTimersByTime(299); - expect(vibrateSpy).toHaveBeenCalledTimes(1); - - jest.advanceTimersByTime(1); - expect(vibrateSpy).toHaveBeenCalledTimes(2); - expect(vibrateSpy.mock.calls[1][0]).toEqual(300); - - jest.advanceTimersByTime(300); - expect(vibrateSpy).toHaveBeenCalledTimes(3); - expect(vibrateSpy.mock.calls[2][0]).toEqual(300); - - jest.useRealTimers(); - }); -}); diff --git a/src/useVibrate/index.dom.test.ts b/src/useVibrate/index.dom.test.ts new file mode 100644 index 00000000..0b83c0ce --- /dev/null +++ b/src/useVibrate/index.dom.test.ts @@ -0,0 +1,68 @@ +import {renderHook} from '@testing-library/react-hooks/dom'; +import {afterAll, beforeEach, describe, expect, it, vi} from 'vitest'; +import {useVibrate} from '../index.js'; + +describe('useVibrate', () => { + const vibrateMock = vi.fn(() => true); + + globalThis.navigator.vibrate = (vibrateMock) as typeof navigator.vibrate; + + beforeEach(() => { + vibrateMock.mockReset(); + }); + + afterAll(() => { + vibrateMock.mockRestore(); + }); + + it('should be defined', () => { + expect(useVibrate).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => { + useVibrate(true, 100); + }); + expect(result.error).toBeUndefined(); + }); + + it('should call navigator.vibrate', () => { + renderHook(() => { + useVibrate(true, [100, 200]); + }); + expect(vibrateMock).toHaveBeenCalledTimes(1); + expect(vibrateMock.mock.calls[0][0]).toEqual([100, 200]); + }); + + it('should call navigator.vibrate(0) on unmount', () => { + const {unmount} = renderHook(() => { + useVibrate(true, [100, 200], true); + }); + unmount(); + + expect(vibrateMock.mock.calls[1][0]).toEqual(0); + }); + + it('should vibrate constantly using interval', () => { + vi.useFakeTimers(); + renderHook(() => { + useVibrate(true, 300, true); + }); + + expect(vibrateMock).toHaveBeenCalledTimes(1); + expect(vibrateMock.mock.calls[0][0]).toEqual(300); + + vi.advanceTimersByTime(299); + expect(vibrateMock).toHaveBeenCalledTimes(1); + + vi.advanceTimersByTime(1); + expect(vibrateMock).toHaveBeenCalledTimes(2); + expect(vibrateMock.mock.calls[1][0]).toEqual(300); + + vi.advanceTimersByTime(300); + expect(vibrateMock).toHaveBeenCalledTimes(3); + expect(vibrateMock.mock.calls[2][0]).toEqual(300); + + vi.useRealTimers(); + }); +}); diff --git a/src/useVibrate/__tests__/ssr.ts b/src/useVibrate/index.ssr.test.ts similarity index 53% rename from src/useVibrate/__tests__/ssr.ts rename to src/useVibrate/index.ssr.test.ts index 934ea2c0..c53f679a 100644 --- a/src/useVibrate/__tests__/ssr.ts +++ b/src/useVibrate/index.ssr.test.ts @@ -1,5 +1,6 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useVibrate } from '../../index.js'; +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useVibrate} from '../index.js'; describe('useVibrate', () => { it('should be defined', () => { @@ -7,7 +8,7 @@ describe('useVibrate', () => { }); it('should render', () => { - const { result } = renderHook(() => { + const {result} = renderHook(() => { useVibrate(true, 100); }); expect(result.error).toBeUndefined(); diff --git a/src/useVibrate/index.ts b/src/useVibrate/index.ts index 91f2d971..6c8563bc 100644 --- a/src/useVibrate/index.ts +++ b/src/useVibrate/index.ts @@ -1,5 +1,5 @@ -import { useEffect } from 'react'; -import { isBrowser, noop } from '../util/const.js'; +import {useEffect} from 'react'; +import {isBrowser, noop} from '../util/const.js'; /** * Provides vibration feedback using the Vibration API. @@ -9,9 +9,9 @@ import { isBrowser, noop } from '../util/const.js'; * @param loop If true - vibration will be looped using `setInterval`. */ export const useVibrate = - !isBrowser || navigator.vibrate === undefined - ? noop - : (enabled: boolean, pattern: VibratePattern, loop?: boolean): void => { + (!isBrowser || navigator.vibrate === undefined) ? + noop : + (enabled: boolean, pattern: VibratePattern, loop?: boolean): void => { useEffect(() => { let interval: undefined | ReturnType; @@ -23,7 +23,7 @@ export const useVibrate = () => { navigator.vibrate(pattern); }, - Array.isArray(pattern) ? pattern.reduce((a, n) => a + n, 0) : pattern + Array.isArray(pattern) ? pattern.reduce((a, n) => a + n, 0) : pattern, ); } diff --git a/src/useWindowSize/__docs__/example.stories.tsx b/src/useWindowSize/__docs__/example.stories.tsx deleted file mode 100644 index 0f908e7b..00000000 --- a/src/useWindowSize/__docs__/example.stories.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import * as React from 'react'; -import { useWindowSize } from '../../index.js'; - -export function Example() { - const size = useWindowSize(); - - return ( -
- Window dimensions: -
{JSON.stringify(size, null, 2)}
-
- Note: this example is rendered within an iframe which is smaller than your browser window. -
-
- ); -} diff --git a/src/useWindowSize/__docs__/story.mdx b/src/useWindowSize/__docs__/story.mdx deleted file mode 100644 index b79b6939..00000000 --- a/src/useWindowSize/__docs__/story.mdx +++ /dev/null @@ -1,36 +0,0 @@ -# useWindowSize - -Tracks inner dimensions of the browser window. - -- Does not force `reflow` on every render - only on first mount and resizes. -- SSR-friendly - defaults to 0 during SSR and deferred measuring. -- Performant - uses a single passive event listener for all instances. - -#### Example - -## Reference - -```ts -export interface WindowSize { - width: number; - height: number; -} - -export function useWindowSize(stateHook = useRafState, measureOnMount?: boolean): WindowSize; -``` - -#### Importing - -#### Arguments - -- **stateHook** `(initialState?: S | (() => S)): [S | undefined, Dispatch>]` - - State hook that will be used to hold the dimensions of the window. -- **measureOnMount** `boolean` - If `true`, the size of the window will be measured during the effects - stage, after the component has mounted. If `false`, the window size is measured synchronously during - the component render. Set this to `true` during SSR. - -#### Return - -- `object` -- **width** `number` - Window's `innerWidth` -- **height** `number` - Window's `innerHeight` diff --git a/src/useWindowSize/__tests__/ssr.ts b/src/useWindowSize/__tests__/ssr.ts deleted file mode 100644 index abe911e4..00000000 --- a/src/useWindowSize/__tests__/ssr.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { renderHook } from '@testing-library/react-hooks/server'; -import { useWindowSize } from '../../index.js'; - -describe('useWindowSize', () => { - it('should be defined', () => { - expect(useWindowSize).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => useWindowSize()); - expect(result.error).toBeUndefined(); - }); -}); diff --git a/src/useWindowSize/__tests__/dom.ts b/src/useWindowSize/index.dom.test.ts similarity index 73% rename from src/useWindowSize/__tests__/dom.ts rename to src/useWindowSize/index.dom.test.ts index 9117c383..768e22cc 100644 --- a/src/useWindowSize/__tests__/dom.ts +++ b/src/useWindowSize/index.dom.test.ts @@ -1,6 +1,7 @@ -import { act, renderHook } from '@testing-library/react-hooks/dom'; -import { useState } from 'react'; -import { useWindowSize, type WindowSize } from '../../index.js'; +import {act, renderHook} from '@testing-library/react-hooks/dom'; +import {useState} from 'react'; +import {beforeEach, describe, expect, it} from 'vitest'; +import {useWindowSize, type WindowSize} from '../index.js'; const triggerResize = (dimension: 'width' | 'height', value: number) => { if (dimension === 'width') { @@ -10,7 +11,7 @@ const triggerResize = (dimension: 'width' | 'height', value: number) => { } act(() => { - window.dispatchEvent(new Event('resize')); + globalThis.dispatchEvent(new Event('resize')); }); }; @@ -25,12 +26,12 @@ describe('useWindowSize', () => { }); it('should render', () => { - const { result } = renderHook(() => useWindowSize()); + const {result} = renderHook(() => useWindowSize()); expect(result.error).toBeUndefined(); }); it('should use provided state hook', () => { - const { result } = renderHook(() => useWindowSize(useState)); + const {result} = renderHook(() => useWindowSize(useState)); expect(result.current.width).toBe(100); expect(result.current.height).toBe(100); @@ -48,7 +49,7 @@ describe('useWindowSize', () => { }); it('should delay measurement to effects stage if 2nd argument is `true`', () => { - const { result } = renderHook(() => useWindowSize(useState, true)); + const {result} = renderHook(() => useWindowSize(useState, true)); expect((result.all[0] as WindowSize).width).toBe(0); expect((result.all[0] as WindowSize).height).toBe(0); diff --git a/src/useWindowSize/index.ssr.test.ts b/src/useWindowSize/index.ssr.test.ts new file mode 100644 index 00000000..61d4b026 --- /dev/null +++ b/src/useWindowSize/index.ssr.test.ts @@ -0,0 +1,14 @@ +import {renderHook} from '@testing-library/react-hooks/server'; +import {describe, expect, it} from 'vitest'; +import {useWindowSize} from '../index.js'; + +describe('useWindowSize', () => { + it('should be defined', () => { + expect(useWindowSize).toBeDefined(); + }); + + it('should render', () => { + const {result} = renderHook(() => useWindowSize()); + expect(result.error).toBeUndefined(); + }); +}); diff --git a/src/useWindowSize/index.ts b/src/useWindowSize/index.ts index f6d2cd19..f31fd4de 100644 --- a/src/useWindowSize/index.ts +++ b/src/useWindowSize/index.ts @@ -1,8 +1,8 @@ -import { useEffect } from 'react'; -import { useFirstMountState } from '../useFirstMountState/index.js'; -import { useMountEffect } from '../useMountEffect/index.js'; -import { useRafState } from '../useRafState/index.js'; -import { isBrowser } from '../util/const.js'; +import {useEffect} from 'react'; +import {useFirstMountState} from '../useFirstMountState/index.js'; +import {useMountEffect} from '../useMountEffect/index.js'; +import {useRafState} from '../useRafState/index.js'; +import {isBrowser} from '../util/const.js'; export type WindowSize = { width: number; @@ -46,7 +46,7 @@ export function useWindowSize(stateHook = useRafState, measureOnMount?: boolean) useEffect(() => { if (listeners.size === 0) { - window.addEventListener('resize', callAllListeners, { passive: true }); + window.addEventListener('resize', callAllListeners, {passive: true}); } listeners.add(setSize); diff --git a/src/util/const.ts b/src/util/const.ts index f0b7a65f..a6e51a89 100644 --- a/src/util/const.ts +++ b/src/util/const.ts @@ -1,9 +1,9 @@ -import { type Predicate, type ConditionsPredicate } from '../types.js'; +import {type ConditionsPredicate, type Predicate} from '../types.js'; export const noop = (): void => {}; export const isBrowser = - typeof window !== 'undefined' && + typeof globalThis !== 'undefined' && typeof navigator !== 'undefined' && typeof document !== 'undefined'; diff --git a/src/util/__tests__/dom.ts b/src/util/index.dom.test.ts similarity index 62% rename from src/util/__tests__/dom.ts rename to src/util/index.dom.test.ts index c2ddf6c8..64ee5f83 100644 --- a/src/util/__tests__/dom.ts +++ b/src/util/index.dom.test.ts @@ -1,33 +1,5 @@ -/* eslint-disable max-nested-callbacks */ -import { resolveHookState } from '../../index.js'; -import { basicDepsComparator, off, on } from '../misc.js'; - -describe('resolveHookState', () => { - it('should be defined', () => { - expect(resolveHookState).toBeDefined(); - }); - - it('should return value itself if it is not function', () => { - expect(resolveHookState(123)).toBe(123); - - const object = { foo: 'bar' }; - expect(resolveHookState(object)).toBe(object); - }); - - it('should return call result in case function received', () => { - expect(resolveHookState(() => 123)).toBe(123); - - const object = { foo: 'bar' }; - expect(resolveHookState(() => object)).toBe(object); - }); - - it('should pass second parameter to received function', () => { - expect(resolveHookState((state) => state, 123)).toBe(123); - - const object = { foo: 'bar' }; - expect(resolveHookState((state) => state, object)).toBe(object); - }); -}); +import {describe, expect, it, vi} from 'vitest'; +import {basicDepsComparator, off, on} from './misc.js'; const cb = () => {}; @@ -35,7 +7,7 @@ describe('misc', () => { describe('on', () => { it("should call object's `addEventListener` with passed parameters", () => { const object = { - addEventListener: jest.fn(), + addEventListener: vi.fn(), }; on(object as unknown as EventTarget, 'evtName', cb); expect(object.addEventListener).toHaveBeenCalledWith('evtName', cb); @@ -43,6 +15,7 @@ describe('misc', () => { it("should not throw in case 'undefined' element passed", () => { expect(() => { // @ts-expect-error testing inappropriate usage + // eslint-disable-next-line max-nested-callbacks on(undefined, 'evtName', () => {}); }).not.toThrow(); }); @@ -51,7 +24,7 @@ describe('misc', () => { describe('off', () => { it("should call object's `removeEventListener` with passed parameters", () => { const object = { - removeEventListener: jest.fn(), + removeEventListener: vi.fn(), }; off(object as unknown as EventTarget, 'evtName', cb); @@ -61,6 +34,7 @@ describe('misc', () => { it("should not throw in case 'undefined' element passed", () => { expect(() => { // @ts-expect-error testing inappropriate usage + // eslint-disable-next-line max-nested-callbacks off(undefined, 'evtName', () => {}); }).not.toThrow(); }); diff --git a/src/util/misc.ts b/src/util/misc.ts index b882b06e..efdeb21d 100644 --- a/src/util/misc.ts +++ b/src/util/misc.ts @@ -1,5 +1,5 @@ -import { type DependencyList } from 'react'; -import { type DependenciesComparator } from '../types.js'; +import {type DependencyList} from 'react'; +import {type DependenciesComparator} from '../types.js'; export function on( object: T | null, @@ -24,16 +24,20 @@ export const hasOwnProperty = < K extends string | number | symbol, >( object: T, - property: K -): object is T & Record => Object.prototype.hasOwnProperty.call(object, property); + property: K, +): object is T & Record => Object.hasOwn(object, property); export const yieldTrue = () => true as const; export const yieldFalse = () => false as const; export const basicDepsComparator: DependenciesComparator = (d1, d2) => { - if (d1 === d2) return true; + if (d1 === d2) { + return true; + } - if (d1.length !== d2.length) return false; + if (d1.length !== d2.length) { + return false; + } for (const [i, element] of d1.entries()) { if (element !== d2[i]) { diff --git a/src/util/resolve-hook-state.test.ts b/src/util/resolve-hook-state.test.ts new file mode 100644 index 00000000..382354be --- /dev/null +++ b/src/util/resolve-hook-state.test.ts @@ -0,0 +1,34 @@ +import {describe, expect, it, vi} from 'vitest'; +import {resolveHookState} from '../index.js'; + +describe('resolveHookState', () => { + it('should be defined', () => { + expect(resolveHookState).toBeDefined(); + }); + + it('should return value itself if it is not function', () => { + expect(resolveHookState(123)).toBe(123); + + const object = {foo: 'bar'}; + expect(resolveHookState(object)).toBe(object); + }); + + it('should only call passed function with provided arguments', () => { + // state initializer + const initializer = vi.fn(() => 123); + expect(resolveHookState(initializer)).toBe(123); + expect(initializer).toHaveBeenCalledTimes(1); + expect(initializer.mock.calls[0]).toHaveLength(0); + + // state updater + const updater = vi.fn((previousState?: number) => (previousState ?? 0) + 1); + expect(resolveHookState(updater, 1)).toBe(2); + expect(updater).toHaveBeenCalledTimes(1); + expect(updater.mock.calls[0]).toHaveLength(1); + + // function suitable for both initializer and updater + expect(resolveHookState(updater)).toBe(1); + expect(updater).toHaveBeenCalledTimes(2); + expect(updater.mock.calls[1]).toHaveLength(0); + }); +}); diff --git a/src/util/resolve-hook-state.ts b/src/util/resolve-hook-state.ts new file mode 100644 index 00000000..46ccc9d4 --- /dev/null +++ b/src/util/resolve-hook-state.ts @@ -0,0 +1,36 @@ +type StateInitializerFN = () => State; +type StateUpdaterFN = (previousState: PreviousState) => State; + +export type InitialState = State | StateInitializerFN; +export type NextState = State | StateUpdaterFN; + +function initState(initialState: InitialState): State { + if (typeof initialState === 'function') { + initialState = (initialState as StateInitializerFN)(); + } + + return initialState; +} + +function updateState( + nextState: NextState, + previousState: PreviousState, +): State { + if (typeof nextState === 'function') { + return (nextState as StateUpdaterFN)(previousState); + } + + return nextState; +} + +export function resolveHookState( + ...args: + | Parameters> + | Parameters> +) { + if (args.length === 1) { + return initState(args[0]); + } + + return updateState(args[0], args[1]); +} diff --git a/src/util/resolveHookState.ts b/src/util/resolveHookState.ts deleted file mode 100644 index 90cf9bb4..00000000 --- a/src/util/resolveHookState.ts +++ /dev/null @@ -1,19 +0,0 @@ -export type InitialState = State | (() => State); -export type NextState = - | State - | ((previousState: PreviousState) => State); - -export function resolveHookState(nextState: InitialState): State; -export function resolveHookState( - nextState: NextState, - previousState: PreviousState -): State; -export function resolveHookState( - nextState: InitialState | NextState, - previousState?: PreviousState -): State { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - if (typeof nextState === 'function') return (nextState as CallableFunction)(previousState); - - return nextState; -} diff --git a/src/util/testing/setup/react-hooks.test.ts b/src/util/testing/setup/react-hooks.test.ts new file mode 100644 index 00000000..b6550589 --- /dev/null +++ b/src/util/testing/setup/react-hooks.test.ts @@ -0,0 +1,4 @@ +import {cleanup} from '@testing-library/react-hooks'; +import {afterEach} from 'vitest'; + +afterEach(cleanup); diff --git a/src/util/testing/setup/vibrate.test.ts b/src/util/testing/setup/vibrate.test.ts new file mode 100644 index 00000000..3c92efb3 --- /dev/null +++ b/src/util/testing/setup/vibrate.test.ts @@ -0,0 +1,5 @@ +import {vi} from 'vitest'; + +const vibrateMock = vi.fn(() => true); + +globalThis.navigator.vibrate = (vibrateMock) as typeof navigator.vibrate; diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 00000000..973d45a1 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "outDir": "./dist" + }, + "include": [ + "./src" + ], + "exclude": [ + "./src/**/*.test.ts" + ] +} diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json deleted file mode 100644 index b8094012..00000000 --- a/tsconfig.eslint.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": true - }, - "exclude": [ - "./dist", - "./node_modules", - "./coverage" - ], - "include": [ - ".**/*.js", - ".**/*.cjs", - "**/.*.js", - "**/.*.cjs", - "**/*.js", - "**/*.ts", - "**/*.tsx", - "**/*.md", - "**/*.mdx" - ] -} diff --git a/tsconfig.json b/tsconfig.json index 80d17baa..0d904b0c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,30 +1,18 @@ { "compilerOptions": { + "noEmit": true, "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", "jsx": "react-jsx", "lib": [ "ESNext", "DOM" ], - "module": "NodeNext", - "moduleResolution": "NodeNext", "declaration": true, - "removeComments": true, "newLine": "lf", "forceConsistentCasingInFileNames": true, "strict": true, - "skipLibCheck": true, - "rootDir": "./src" - }, - "include": [ - "src/**/*.ts" - ], - "exclude": [ - "src/**/__tests__/**", - "src/**/__docs__/**" - ], - "ts-node": { - "esm": true, - "swc": true + "skipLibCheck": true } } diff --git a/utility/add-new-hook.js b/utility/add-new-hook.js deleted file mode 100644 index 5945db20..00000000 --- a/utility/add-new-hook.js +++ /dev/null @@ -1,112 +0,0 @@ -// eslint-disable-next-line unicorn/prefer-module -const fs = require('node:fs/promises'); -// eslint-disable-next-line unicorn/prefer-module -const path = require('node:path'); - -// eslint-disable-next-line no-void,unicorn/prefer-top-level-await -void (async () => { - const scriptPath = process.argv[1].trim(); - const hookName = process.argv[2]?.trim(); - - if (!hookName || hookName.length === 0) { - throw new TypeError('hook name not defined'); - } - - const srcDir = path.resolve(scriptPath, '../../src'); - const hookDir = path.join(srcDir, hookName); - - if ( - await fs - .lstat(hookDir) - .then(() => true) - .catch(() => false) - ) { - throw new TypeError(`directory for hook ${hookName} already exists`); - } - - await fs.appendFile(path.join(srcDir, 'index.ts'), `\nexport * from './${hookName}';\n`); - - await fs.mkdir(hookDir); - await fs.writeFile( - path.resolve(hookDir, `index.ts`), - `export function ${hookName}(): void {\n}\n` - ); - - await fs.mkdir(path.resolve(hookDir, `__docs__`)); - await fs.writeFile( - path.resolve(hookDir, `__docs__/example.stories.tsx`), - `import * as React from 'react'; -import { ${hookName} } from '../..'; - -export const Example: React.FC = () => { - return null; -}` - ); - await fs.writeFile( - path.resolve(hookDir, `__docs__/story.mdx`), - `import { Canvas, Meta, Story } from '@storybook/addon-docs'; -import { Example } from './example.stories'; -import { ImportPath } from '../../__docs__/ImportPath'; - - - -# ${hookName} - -#### Example - - - - - -## Reference - -\`\`\`ts - -\`\`\` - -#### Importing - - - -#### Arguments - -#### Return -` - ); - - await fs.mkdir(path.resolve(hookDir, `__tests__`)); - await fs.writeFile( - path.resolve(hookDir, `__tests__/dom.ts`), - `import { renderHook } from '@testing-library/react-hooks/dom'; -import { ${hookName} } from '../..'; - -describe('${hookName}', () => { - it('should be defined', () => { - expect(${hookName}).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => ${hookName}()); - expect(result.error).toBeUndefined(); - }); -}); -` - ); - await fs.writeFile( - path.resolve(hookDir, `__tests__/ssr.ts`), - `import { renderHook } from '@testing-library/react-hooks/server'; -import { ${hookName} } from '../..'; - -describe('${hookName}', () => { - it('should be defined', () => { - expect(${hookName}).toBeDefined(); - }); - - it('should render', () => { - const { result } = renderHook(() => ${hookName}()); - expect(result.error).toBeUndefined(); - }); -}); -` - ); -})(); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..04652150 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,16 @@ +import {defineConfig} from 'vitest/config'; + +export default defineConfig({ + test: { + dir: './src', + setupFiles: [ + './src/util/testing/setup/react-hooks.test.ts', + './src/util/testing/setup/vibrate.test.ts', + ], + passWithNoTests: true, + environmentMatchGlobs: [ + ['**/*.dom.test.ts', 'jsdom'], + ['**/*.ssr.test.ts', 'node'], + ], + }, +}); diff --git a/yarn.lock b/yarn.lock index 6f543f97..7251c5c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,11024 +1,10671 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@actions/core@^1.2.6", "@actions/core@^1.9.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.11.1.tgz#ae683aac5112438021588030efb53b1adb86f172" - integrity sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A== - dependencies: - "@actions/exec" "^1.1.1" - "@actions/http-client" "^2.0.1" - -"@actions/exec@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.1.1.tgz#2e43f28c54022537172819a7cf886c844221a611" - integrity sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w== - dependencies: - "@actions/io" "^1.0.1" - -"@actions/http-client@^2.0.1": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.3.tgz#31fc0b25c0e665754ed39a9f19a8611fc6dab674" - integrity sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA== - dependencies: - tunnel "^0.0.6" - undici "^5.25.4" - -"@actions/io@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.1.3.tgz#4cdb6254da7962b07473ff5c335f3da485d94d71" - integrity sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q== - -"@ampproject/remapping@^2.2.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" - integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.24" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/compat-data@^7.25.9": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.2.tgz#278b6b13664557de95b8f35b90d96785850bb56e" - integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== - -"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.7.5": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" - integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.0" - "@babel/generator" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.0" - "@babel/parser" "^7.26.0" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.26.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.25.9", "@babel/generator@^7.26.0", "@babel/generator@^7.7.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.2.tgz#87b75813bec87916210e5e01939a4c823d6bb74f" - integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== - dependencies: - "@babel/parser" "^7.26.2" - "@babel/types" "^7.26.0" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/helper-compilation-targets@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" - integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== - dependencies: - "@babel/compat-data" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" - integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== - -"@babel/helpers@^7.26.0": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" - integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== - dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.2.tgz#fd7b6f487cfea09889557ef5d4eeb9ff9a5abd11" - integrity sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ== - dependencies: - "@babel/types" "^7.26.0" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" - integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" - integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" - integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== - dependencies: - "@babel/helper-plugin-utils" "^7.25.9" - -"@babel/runtime@^7.12.5": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" - integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.25.9", "@babel/template@^7.3.3": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/traverse@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.9.tgz#a50f8fe49e7f69f53de5bea7e413cd35c5e13c84" - integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/generator" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/template" "^7.25.9" - "@babel/types" "^7.25.9" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.3.3": - version "7.26.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.0.tgz#deabd08d6b753bc8e0f198f8709fb575e31774ff" - integrity sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@commitlint/cli@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.5.0.tgz#a6e2f7f8397ddf9abd5ee5870e30a1bf51b7be2b" - integrity sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ== - dependencies: - "@commitlint/format" "^19.5.0" - "@commitlint/lint" "^19.5.0" - "@commitlint/load" "^19.5.0" - "@commitlint/read" "^19.5.0" - "@commitlint/types" "^19.5.0" - tinyexec "^0.3.0" - yargs "^17.0.0" - -"@commitlint/config-conventional@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-19.5.0.tgz#f838cdaed0e0e223cdc2e865f055d474a49fe18c" - integrity sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg== - dependencies: - "@commitlint/types" "^19.5.0" - conventional-changelog-conventionalcommits "^7.0.2" - -"@commitlint/config-validator@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-19.5.0.tgz#f0a4eda2109fc716ef01bb8831af9b02e3a1e568" - integrity sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw== - dependencies: - "@commitlint/types" "^19.5.0" - ajv "^8.11.0" - -"@commitlint/cz-commitlint@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/cz-commitlint/-/cz-commitlint-19.5.0.tgz#3ebf0aca0727d49581c378076606663603e74ce9" - integrity sha512-PNfIC54J3lDVIBJTo7A1RMp1kdOYkGcUz27VG0NP/DzFKLspXcQm13RnKc16BjFNCJGLC7iaXjucrfrKHOqorQ== - dependencies: - "@commitlint/ensure" "^19.5.0" - "@commitlint/load" "^19.5.0" - "@commitlint/types" "^19.5.0" - chalk "^5.3.0" - lodash.isplainobject "^4.0.6" - word-wrap "^1.2.5" - -"@commitlint/ensure@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-19.5.0.tgz#b087374a6a0a0140e5925a82901d234885d9f6dd" - integrity sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg== - dependencies: - "@commitlint/types" "^19.5.0" - lodash.camelcase "^4.3.0" - lodash.kebabcase "^4.1.1" - lodash.snakecase "^4.1.1" - lodash.startcase "^4.4.0" - lodash.upperfirst "^4.3.1" - -"@commitlint/execute-rule@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-19.5.0.tgz#c13da8c03ea0379f30856111e27d57518e25b8a2" - integrity sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg== - -"@commitlint/format@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-19.5.0.tgz#d879db2d97d70ae622397839fb8603d56e85a250" - integrity sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A== - dependencies: - "@commitlint/types" "^19.5.0" - chalk "^5.3.0" - -"@commitlint/is-ignored@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-19.5.0.tgz#f8b7f365887acc1e3bdb31b17117bb435585dddf" - integrity sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w== - dependencies: - "@commitlint/types" "^19.5.0" - semver "^7.6.0" - -"@commitlint/lint@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-19.5.0.tgz#f4e162e7857a1c0694b20b92527704897558ff70" - integrity sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg== - dependencies: - "@commitlint/is-ignored" "^19.5.0" - "@commitlint/parse" "^19.5.0" - "@commitlint/rules" "^19.5.0" - "@commitlint/types" "^19.5.0" - -"@commitlint/load@>6.1.1", "@commitlint/load@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.5.0.tgz#67f90a294894d1f99b930b6152bed2df44a81794" - integrity sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA== - dependencies: - "@commitlint/config-validator" "^19.5.0" - "@commitlint/execute-rule" "^19.5.0" - "@commitlint/resolve-extends" "^19.5.0" - "@commitlint/types" "^19.5.0" - chalk "^5.3.0" - cosmiconfig "^9.0.0" - cosmiconfig-typescript-loader "^5.0.0" - lodash.isplainobject "^4.0.6" - lodash.merge "^4.6.2" - lodash.uniq "^4.5.0" - -"@commitlint/message@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-19.5.0.tgz#c062d9a1d2b3302c3a8cac25d6d1125ea9c019b2" - integrity sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ== - -"@commitlint/parse@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-19.5.0.tgz#b450dad9b5a95ac5ba472d6d0fdab822dce946fc" - integrity sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw== - dependencies: - "@commitlint/types" "^19.5.0" - conventional-changelog-angular "^7.0.0" - conventional-commits-parser "^5.0.0" - -"@commitlint/read@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.5.0.tgz#601f9f1afe69852b0f28aa81cd455b40979fad6b" - integrity sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ== - dependencies: - "@commitlint/top-level" "^19.5.0" - "@commitlint/types" "^19.5.0" - git-raw-commits "^4.0.0" - minimist "^1.2.8" - tinyexec "^0.3.0" - -"@commitlint/resolve-extends@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-19.5.0.tgz#f3ec33e12d10df90cae0bfad8e593431fb61b18e" - integrity sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA== - dependencies: - "@commitlint/config-validator" "^19.5.0" - "@commitlint/types" "^19.5.0" - global-directory "^4.0.1" - import-meta-resolve "^4.0.0" - lodash.mergewith "^4.6.2" - resolve-from "^5.0.0" - -"@commitlint/rules@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-19.5.0.tgz#2a72ab506d49d7f33eda56f0ae072a3479429e74" - integrity sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw== - dependencies: - "@commitlint/ensure" "^19.5.0" - "@commitlint/message" "^19.5.0" - "@commitlint/to-lines" "^19.5.0" - "@commitlint/types" "^19.5.0" - -"@commitlint/to-lines@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-19.5.0.tgz#e4b7f34f09064568c96a74de4f1fc9f466c4d472" - integrity sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ== - -"@commitlint/top-level@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-19.5.0.tgz#0017ffe39b5ba3611a1debd62efe28803601a14f" - integrity sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng== - dependencies: - find-up "^7.0.0" - -"@commitlint/types@^19.5.0": - version "19.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-19.5.0.tgz#c5084d1231d4dd50e40bdb656ee7601f691400b3" - integrity sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg== - dependencies: - "@types/conventional-commits-parser" "^5.0.0" - chalk "^5.3.0" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== - dependencies: - eslint-visitor-keys "^3.4.3" - -"@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.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" - -"@eslint/js@8.57.1": - version "8.57.1" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" - integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@humanwhocodes/config-array@^0.13.0": - version "0.13.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" - integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== - dependencies: - "@humanwhocodes/object-schema" "^2.0.3" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - 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" - -"@isaacs/fs-minipass@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" - integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== - dependencies: - minipass "^7.0.4" - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - 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" - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jamesacarr/jest-reporter-github-actions@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@jamesacarr/jest-reporter-github-actions/-/jest-reporter-github-actions-0.0.4.tgz#471684cdacffaa78766c20653634797d356d3b40" - integrity sha512-2lfpqWt19PAAVgHNUPQEvqDMQfdiDpyFPDol7FgrKoZ9x7/GrUmpXGQZNdhFAssDdG7hJFd4yoLfUrkZEKl29g== - dependencies: - "@actions/core" "^1.2.6" - "@jest/reporters" "^26.6.2" - -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/create-cache-key-function@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz#793be38148fab78e65f40ae30c36785f4ad859f0" - integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== - dependencies: - "@jest/types" "^29.6.3" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nolyfill/is-core-module@1.0.39": - version "1.0.39" - resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" - integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== - -"@npmcli/agent@^2.0.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5" - integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" - socks-proxy-agent "^8.0.3" - -"@npmcli/agent@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-3.0.0.tgz#1685b1fbd4a1b7bb4f930cbb68ce801edfe7aa44" - integrity sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q== - dependencies: - agent-base "^7.1.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.1" - lru-cache "^10.0.1" - socks-proxy-agent "^8.0.3" - -"@npmcli/arborist@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-8.0.0.tgz#681af823ac8ca067404dee57e0f91a3d27d6ef0a" - integrity sha512-APDXxtXGSftyXibl0dZ3CuZYmmVnkiN3+gkqwXshY4GKC2rof2+Lg0sGuj6H1p2YfBAKd7PRwuMVhu6Pf/nQ/A== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^4.0.0" - "@npmcli/installed-package-contents" "^3.0.0" - "@npmcli/map-workspaces" "^4.0.1" - "@npmcli/metavuln-calculator" "^8.0.0" - "@npmcli/name-from-folder" "^3.0.0" - "@npmcli/node-gyp" "^4.0.0" - "@npmcli/package-json" "^6.0.1" - "@npmcli/query" "^4.0.0" - "@npmcli/redact" "^3.0.0" - "@npmcli/run-script" "^9.0.1" - bin-links "^5.0.0" - cacache "^19.0.1" - common-ancestor-path "^1.0.1" - hosted-git-info "^8.0.0" - json-parse-even-better-errors "^4.0.0" - json-stringify-nice "^1.1.4" - lru-cache "^10.2.2" - minimatch "^9.0.4" - nopt "^8.0.0" - npm-install-checks "^7.1.0" - npm-package-arg "^12.0.0" - npm-pick-manifest "^10.0.0" - npm-registry-fetch "^18.0.1" - pacote "^19.0.0" - parse-conflict-json "^4.0.0" - proc-log "^5.0.0" - proggy "^3.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^3.0.1" - read-package-json-fast "^4.0.0" - semver "^7.3.7" - ssri "^12.0.0" - treeverse "^3.0.0" - walk-up-path "^3.0.1" - -"@npmcli/config@^8.0.0": - version "8.3.4" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-8.3.4.tgz#e2712c2215bb2659f39718b23bf7401f9ac1da59" - integrity sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw== - dependencies: - "@npmcli/map-workspaces" "^3.0.2" - "@npmcli/package-json" "^5.1.1" - ci-info "^4.0.0" - ini "^4.1.2" - nopt "^7.2.1" - proc-log "^4.2.0" - semver "^7.3.5" - walk-up-path "^3.0.1" - -"@npmcli/config@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-9.0.0.tgz#bd810a1e9e23fcfad800e40d6c2c8b8f4f4318e1" - integrity sha512-P5Vi16Y+c8E0prGIzX112ug7XxqfaPFUVW/oXAV+2VsxplKZEnJozqZ0xnK8V8w/SEsBf+TXhUihrEIAU4CA5Q== - dependencies: - "@npmcli/map-workspaces" "^4.0.1" - "@npmcli/package-json" "^6.0.1" - ci-info "^4.0.0" - ini "^5.0.0" - nopt "^8.0.0" - proc-log "^5.0.0" - semver "^7.3.5" - walk-up-path "^3.0.1" - -"@npmcli/fs@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726" - integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== - dependencies: - semver "^7.3.5" - -"@npmcli/fs@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-4.0.0.tgz#a1eb1aeddefd2a4a347eca0fab30bc62c0e1c0f2" - integrity sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^5.0.0": - version "5.0.8" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-5.0.8.tgz#8ba3ff8724192d9ccb2735a2aa5380a992c5d3d1" - integrity sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ== - dependencies: - "@npmcli/promise-spawn" "^7.0.0" - ini "^4.1.3" - lru-cache "^10.0.1" - npm-pick-manifest "^9.0.0" - proc-log "^4.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^4.0.0" - -"@npmcli/git@^6.0.0", "@npmcli/git@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-6.0.1.tgz#9ee894a35c2082d0b41883e267ff140aece457d5" - integrity sha512-BBWMMxeQzalmKadyimwb2/VVQyJB01PH0HhVSNLHNBDZN/M/h/02P6f8fxedIiFhpMj11SO9Ep5tKTBE7zL2nw== - dependencies: - "@npmcli/promise-spawn" "^8.0.0" - ini "^5.0.0" - lru-cache "^10.0.1" - npm-pick-manifest "^10.0.0" - proc-log "^5.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^5.0.0" - -"@npmcli/installed-package-contents@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz#2c1170ff4f70f68af125e2842e1853a93223e4d1" - integrity sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q== - dependencies: - npm-bundled "^4.0.0" - npm-normalize-package-bin "^4.0.0" - -"@npmcli/map-workspaces@^3.0.2": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz#27dc06c20c35ef01e45a08909cab9cb3da08cea6" - integrity sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA== - dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^10.2.2" - minimatch "^9.0.0" - read-package-json-fast "^3.0.0" - -"@npmcli/map-workspaces@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-4.0.1.tgz#ff1a7d6f643264617c0769ac0f36e507743d5a81" - integrity sha512-g5H8ljH7Z+4T1ASsfcL09gZl4YGw6M4GbjzPt6HgE+pCRSKC4nlNc4nY75zshi88eEHcdoh3Q8XgWFkGKoVOPw== - dependencies: - "@npmcli/name-from-folder" "^3.0.0" - "@npmcli/package-json" "^6.0.0" - glob "^10.2.2" - minimatch "^9.0.0" - -"@npmcli/metavuln-calculator@^8.0.0": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-8.0.1.tgz#c14307a1f0e43524e7ae833d1787c2e0425a9f44" - integrity sha512-WXlJx9cz3CfHSt9W9Opi1PTFc4WZLFomm5O8wekxQZmkyljrBRwATwDxfC9iOXJwYVmfiW1C1dUe0W2aN0UrSg== - dependencies: - cacache "^19.0.0" - json-parse-even-better-errors "^4.0.0" - pacote "^20.0.0" - proc-log "^5.0.0" - semver "^7.3.5" - -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== - -"@npmcli/name-from-folder@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz#ed49b18d16b954149f31240e16630cfec511cd57" - integrity sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA== - -"@npmcli/node-gyp@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz#01f900bae62f0f27f9a5a127b40d443ddfb9d4c6" - integrity sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA== - -"@npmcli/package-json@^5.1.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-5.2.1.tgz#df69477b1023b81ff8503f2b9db4db4faea567ed" - integrity sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ== - dependencies: - "@npmcli/git" "^5.0.0" - glob "^10.2.2" - hosted-git-info "^7.0.0" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^6.0.0" - proc-log "^4.0.0" - semver "^7.5.3" - -"@npmcli/package-json@^6.0.0", "@npmcli/package-json@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-6.0.1.tgz#550a8eb3e0ae9ad8577cb7a3f2d677a04a3bcee9" - integrity sha512-YW6PZ99sc1Q4DINEY2td5z9Z3rwbbsx7CyCnOc7UXUUdePXh5gPi1UeaoQVmKQMVbIU7aOwX2l1OG5ZfjgGi5g== - dependencies: - "@npmcli/git" "^6.0.0" - glob "^10.2.2" - hosted-git-info "^8.0.0" - json-parse-even-better-errors "^4.0.0" - normalize-package-data "^7.0.0" - proc-log "^5.0.0" - semver "^7.5.3" - -"@npmcli/promise-spawn@^7.0.0": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz#1d53d34ffeb5d151bfa8ec661bcccda8bbdfd532" - integrity sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ== - dependencies: - which "^4.0.0" - -"@npmcli/promise-spawn@^8.0.0", "@npmcli/promise-spawn@^8.0.1": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz#053688f8bc2b4ecc036d2d52c691fd82af58ea5e" - integrity sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ== - dependencies: - which "^5.0.0" - -"@npmcli/query@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-4.0.0.tgz#7a2470254f5a12a1499d2296a7343043c7847568" - integrity sha512-3pPbese0fbCiFJ/7/X1GBgxAKYFE8sxBddA7GtuRmOgNseH4YbGsXJ807Ig3AEwNITjDUISHglvy89cyDJnAwA== - dependencies: - postcss-selector-parser "^6.1.2" - -"@npmcli/redact@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-3.0.0.tgz#ab3b6413355be7f3c02e87c36c2b0c2f9773fce4" - integrity sha512-/1uFzjVcfzqrgCeGW7+SZ4hv0qLWmKXVzFahZGJ6QuJBj6Myt9s17+JL86i76NV9YSnJRcGXJYQbAU0rn1YTCQ== - -"@npmcli/run-script@^9.0.0", "@npmcli/run-script@^9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-9.0.1.tgz#f90a0cf4f4e8f42d66669d3af568c5036859b654" - integrity sha512-q9C0uHrb6B6cm3qXVM32UmpqTKuFGbtP23O2K5sLvPMz2hilKd0ptqGXSpuunOuOmPQb/aT5F/kCXFc1P2gO/A== - dependencies: - "@npmcli/node-gyp" "^4.0.0" - "@npmcli/package-json" "^6.0.0" - "@npmcli/promise-spawn" "^8.0.0" - node-gyp "^10.0.0" - proc-log "^5.0.0" - which "^5.0.0" - -"@octokit/auth-token@^5.0.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.1.tgz#3bbfe905111332a17f72d80bd0b51a3e2fa2cf07" - integrity sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA== - -"@octokit/core@^6.0.0": - version "6.1.2" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.2.tgz#20442d0a97c411612da206411e356014d1d1bd17" - integrity sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg== - dependencies: - "@octokit/auth-token" "^5.0.0" - "@octokit/graphql" "^8.0.0" - "@octokit/request" "^9.0.0" - "@octokit/request-error" "^6.0.1" - "@octokit/types" "^13.0.0" - before-after-hook "^3.0.2" - universal-user-agent "^7.0.0" - -"@octokit/endpoint@^10.0.0": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-10.1.1.tgz#1a9694e7aef6aa9d854dc78dd062945945869bcc" - integrity sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q== - dependencies: - "@octokit/types" "^13.0.0" - universal-user-agent "^7.0.2" - -"@octokit/graphql@^8.0.0": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-8.1.1.tgz#3cacab5f2e55d91c733e3bf481d3a3f8a5f639c4" - integrity sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg== - dependencies: - "@octokit/request" "^9.0.0" - "@octokit/types" "^13.0.0" - universal-user-agent "^7.0.0" - -"@octokit/openapi-types@^22.2.0": - version "22.2.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-22.2.0.tgz#75aa7dcd440821d99def6a60b5f014207ae4968e" - integrity sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg== - -"@octokit/plugin-paginate-rest@^11.0.0": - version "11.3.5" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.5.tgz#a1929b3ba3dc7b63bc73bb6d3c7a3faf2a9c7649" - integrity sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ== - dependencies: - "@octokit/types" "^13.6.0" - -"@octokit/plugin-retry@^7.0.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-7.1.2.tgz#242e2d19a72a50b5113bb25d7d2c622ce0373fa0" - integrity sha512-XOWnPpH2kJ5VTwozsxGurw+svB2e61aWlmk5EVIYZPwFK5F9h4cyPyj9CIKRyMXMHSwpIsI3mPOdpMmrRhe7UQ== - dependencies: - "@octokit/request-error" "^6.0.0" - "@octokit/types" "^13.0.0" - bottleneck "^2.15.3" - -"@octokit/plugin-throttling@^9.0.0": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-9.3.2.tgz#cc05180e45e769d6726c5faed157e9ad3b6ab8c0" - integrity sha512-FqpvcTpIWFpMMwIeSoypoJXysSAQ3R+ALJhXXSG1HTP3YZOIeLmcNcimKaXxTcws+Sh6yoRl13SJ5r8sXc1Fhw== - dependencies: - "@octokit/types" "^13.0.0" - bottleneck "^2.15.3" - -"@octokit/request-error@^6.0.0", "@octokit/request-error@^6.0.1": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-6.1.5.tgz#907099e341c4e6179db623a0328d678024f54653" - integrity sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ== - dependencies: - "@octokit/types" "^13.0.0" - -"@octokit/request@^9.0.0": - version "9.1.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-9.1.3.tgz#42b693bc06238f43af3c037ebfd35621c6457838" - integrity sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA== - dependencies: - "@octokit/endpoint" "^10.0.0" - "@octokit/request-error" "^6.0.1" - "@octokit/types" "^13.1.0" - universal-user-agent "^7.0.2" - -"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.6.0": - version "13.6.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.6.1.tgz#432fc6c0aaae54318e5b2d3e15c22ac97fc9b15f" - integrity sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g== - dependencies: - "@octokit/openapi-types" "^22.2.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@pkgr/core@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" - integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== - -"@pnpm/config.env-replace@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" - integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^2.1.0": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" - integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== - dependencies: - "@pnpm/config.env-replace" "^1.1.0" - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@react-hookz/deep-equal@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@react-hookz/deep-equal/-/deep-equal-1.0.4.tgz#68a71f36cbc88724b3ce6f4036183778b6e7f282" - integrity sha512-N56fTrAPUDz/R423pag+n6TXWbvlBZDtTehaGFjK0InmN+V2OFWLE/WmORhmn6Ce7dlwH5+tQN1LJFw3ngTJVg== - -"@react-hookz/eslint-config@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@react-hookz/eslint-config/-/eslint-config-2.1.5.tgz#6a6c403315b49671099b4449d9ddaab492468a83" - integrity sha512-w32VPgAWNK0LBxGPPuHaJ0CMncfqETOVbSLF6pjoVCrNjlYSPxO5IG6piO9yrkJeCaTX96PVaYg2igOBseVaDg== - dependencies: - "@typescript-eslint/eslint-plugin" "^6.20.0" - "@typescript-eslint/parser" "^6.20.0" - eslint-config-prettier "^9.1.0" - eslint-config-xo "^0.43.1" - eslint-config-xo-react "^0.27.0" - eslint-config-xo-typescript "^1.0.1" - eslint-import-resolver-typescript "^3.6.1" - eslint-plugin-eslint-comments "^3.2.0" - eslint-plugin-import "^2.29.1" - eslint-plugin-jest "^27.6.3" - eslint-plugin-mdx "^3.1.5" - eslint-plugin-n "^16.6.2" - eslint-plugin-no-use-extend-native "^0.5.0" - eslint-plugin-promise "^6.1.1" - eslint-plugin-react "^7.33.2" - eslint-plugin-react-hooks "^4.6.0" - eslint-plugin-unicorn "^50.0.1" - -"@react-hookz/eslint-formatter-gha@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@react-hookz/eslint-formatter-gha/-/eslint-formatter-gha-1.0.1.tgz#1cbd0a398a8b6b738388af430933e699ad29c6fc" - integrity sha512-3fQWSevZuFDExH276MnSW0Q+OZU/tArOlSJhM2nYm81ALn1horXXAsDjVdFX5WQVn5+oF1D95VBUwEW6ABs5DQ== - dependencies: - "@actions/core" "^1.9.1" - -"@rtsao/scc@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" - integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== - -"@sec-ant/readable-stream@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" - integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== - -"@semantic-release/changelog@^6.0.3": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/changelog/-/changelog-6.0.3.tgz#6195630ecbeccad174461de727d5f975abc23eeb" - integrity sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - fs-extra "^11.0.0" - lodash "^4.17.4" - -"@semantic-release/commit-analyzer@^12.0.0": - version "12.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-12.0.0.tgz#7219b05ab79a4303c99fc9cd0413d68881599270" - integrity sha512-qG+md5gdes+xa8zP7lIo1fWE17zRdO8yMCaxh9lyL65TQleoSv8WHHOqRURfghTytUh+NpkSyBprQ5hrkxOKVQ== - dependencies: - conventional-changelog-angular "^7.0.0" - conventional-commits-filter "^4.0.0" - conventional-commits-parser "^5.0.0" - debug "^4.0.0" - import-from-esm "^1.0.3" - lodash-es "^4.17.21" - micromatch "^4.0.2" - -"@semantic-release/error@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" - integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== - -"@semantic-release/error@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-4.0.0.tgz#692810288239637f74396976a9340fbc0aa9f6f9" - integrity sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ== - -"@semantic-release/git@^10.0.1": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/git/-/git-10.0.1.tgz#c646e55d67fae623875bf3a06a634dd434904498" - integrity sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - debug "^4.0.0" - dir-glob "^3.0.0" - execa "^5.0.0" - lodash "^4.17.4" - micromatch "^4.0.0" - p-reduce "^2.0.0" - -"@semantic-release/github@^10.0.0": - version "10.3.5" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-10.3.5.tgz#112b6ee41fe78356359aa7ba9a1e98b68c8640fc" - integrity sha512-svvRglGmvqvxjmDgkXhrjf0lC88oZowFhOfifTldbgX9Dzj0inEtMLaC+3/MkDEmxmaQjWmF5Q/0CMIvPNSVdQ== - dependencies: - "@octokit/core" "^6.0.0" - "@octokit/plugin-paginate-rest" "^11.0.0" - "@octokit/plugin-retry" "^7.0.0" - "@octokit/plugin-throttling" "^9.0.0" - "@semantic-release/error" "^4.0.0" - aggregate-error "^5.0.0" - debug "^4.3.4" - dir-glob "^3.0.1" - globby "^14.0.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.0" - issue-parser "^7.0.0" - lodash-es "^4.17.21" - mime "^4.0.0" - p-filter "^4.0.0" - url-join "^5.0.0" - -"@semantic-release/github@^11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-11.0.0.tgz#1cbfed43b96282994a1c480a204179b89b73a387" - integrity sha512-Uon6G6gJD8U1JNvPm7X0j46yxNRJ8Ui6SgK4Zw5Ktu8RgjEft3BGn+l/RX1TTzhhO3/uUcKuqM+/9/ETFxWS/Q== - dependencies: - "@octokit/core" "^6.0.0" - "@octokit/plugin-paginate-rest" "^11.0.0" - "@octokit/plugin-retry" "^7.0.0" - "@octokit/plugin-throttling" "^9.0.0" - "@semantic-release/error" "^4.0.0" - aggregate-error "^5.0.0" - debug "^4.3.4" - dir-glob "^3.0.1" - globby "^14.0.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.0" - issue-parser "^7.0.0" - lodash-es "^4.17.21" - mime "^4.0.0" - p-filter "^4.0.0" - url-join "^5.0.0" - -"@semantic-release/npm@^12.0.0": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-12.0.1.tgz#ffb47906de95f8dade8fe0480df0a08dbe1b80c9" - integrity sha512-/6nntGSUGK2aTOI0rHPwY3ZjgY9FkXmEHbW9Kr+62NVOsyqpKKeP0lrCH+tphv+EsNdJNmqqwijTEnVWUMQ2Nw== - dependencies: - "@semantic-release/error" "^4.0.0" - aggregate-error "^5.0.0" - execa "^9.0.0" - fs-extra "^11.0.0" - lodash-es "^4.17.21" - nerf-dart "^1.0.0" - normalize-url "^8.0.0" - npm "^10.5.0" - rc "^1.2.8" - read-pkg "^9.0.0" - registry-auth-token "^5.0.0" - semver "^7.1.2" - tempy "^3.0.0" - -"@semantic-release/release-notes-generator@^13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-13.0.0.tgz#9fb312c234742e2716c09d669d5d786a4daad465" - integrity sha512-LEeZWb340keMYuREMyxrODPXJJ0JOL8D/mCl74B4LdzbxhtXV2LrPN2QBEcGJrlQhoqLO0RhxQb6masHytKw+A== - dependencies: - conventional-changelog-angular "^7.0.0" - conventional-changelog-writer "^7.0.0" - conventional-commits-filter "^4.0.0" - conventional-commits-parser "^5.0.0" - debug "^4.0.0" - get-stream "^7.0.0" - import-from-esm "^1.0.3" - into-stream "^7.0.0" - lodash-es "^4.17.21" - read-pkg-up "^11.0.0" - -"@sigstore/bundle@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-2.3.2.tgz#ad4dbb95d665405fd4a7a02c8a073dbd01e4e95e" - integrity sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - -"@sigstore/bundle@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/bundle/-/bundle-3.0.0.tgz#ffffc750436c6eb8330ead1ca65bc892f893a7c5" - integrity sha512-XDUYX56iMPAn/cdgh/DTJxz5RWmqKV4pwvUAEKEWJl+HzKdCd/24wUa9JYNMlDSCb7SUHAdtksxYX779Nne/Zg== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - -"@sigstore/core@^1.0.0", "@sigstore/core@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-1.1.0.tgz#5583d8f7ffe599fa0a89f2bf289301a5af262380" - integrity sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg== - -"@sigstore/core@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/core/-/core-2.0.0.tgz#f888a8e4c8fdaa27848514a281920b6fd8eca955" - integrity sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg== - -"@sigstore/protobuf-specs@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz#5becf88e494a920f548d0163e2978f81b44b7d6f" - integrity sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw== - -"@sigstore/sign@^2.3.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-2.3.2.tgz#d3d01e56d03af96fd5c3a9b9897516b1233fc1c4" - integrity sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - make-fetch-happen "^13.0.1" - proc-log "^4.2.0" - promise-retry "^2.0.1" - -"@sigstore/sign@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/sign/-/sign-3.0.0.tgz#70752aaa54dfeafa0b0fbe1f58ebe9fe3d621f8f" - integrity sha512-UjhDMQOkyDoktpXoc5YPJpJK6IooF2gayAr5LvXI4EL7O0vd58okgfRcxuaH+YTdhvb5aa1Q9f+WJ0c2sVuYIw== - dependencies: - "@sigstore/bundle" "^3.0.0" - "@sigstore/core" "^2.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - make-fetch-happen "^14.0.1" - proc-log "^5.0.0" - promise-retry "^2.0.1" - -"@sigstore/tuf@^2.3.4": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-2.3.4.tgz#da1d2a20144f3b87c0172920cbc8dcc7851ca27c" - integrity sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - tuf-js "^2.2.1" - -"@sigstore/tuf@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-3.0.0.tgz#5f657e3052e93cb09e1735ee7f52b7938351278d" - integrity sha512-9Xxy/8U5OFJu7s+OsHzI96IX/OzjF/zj0BSSaWhgJgTqtlBhQIV2xdrQI5qxLD7+CWWDepadnXAxzaZ3u9cvRw== - dependencies: - "@sigstore/protobuf-specs" "^0.3.2" - tuf-js "^3.0.1" - -"@sigstore/verify@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-1.2.1.tgz#c7e60241b432890dcb8bd8322427f6062ef819e1" - integrity sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.1.0" - "@sigstore/protobuf-specs" "^0.3.2" - -"@sigstore/verify@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sigstore/verify/-/verify-2.0.0.tgz#4ad96e9234b71b57622c3c446b63bad805351030" - integrity sha512-Ggtq2GsJuxFNUvQzLoXqRwS4ceRfLAJnrIHUDrzAD0GgnOhwujJkKkxM/s5Bako07c3WtAs/sZo5PJq7VHjeDg== - dependencies: - "@sigstore/bundle" "^3.0.0" - "@sigstore/core" "^2.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sindresorhus/merge-streams@^2.1.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz#719df7fb41766bc143369eaa0dd56d8dc87c9958" - integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== - -"@sindresorhus/merge-streams@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" - integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== - -"@sinonjs/commons@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" - integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@swc/core-darwin-arm64@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.42.tgz#a3c59cb3e487f660ca87d6b78e81b2d7193bada9" - integrity sha512-fWhaCs2+8GDRIcjExVDEIfbptVrxDqG8oHkESnXgymmvqTWzWei5SOnPNMS8Q+MYsn/b++Y2bDxkcwmq35Bvxg== - -"@swc/core-darwin-x64@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.7.42.tgz#a4ce0e1ff52a238b6b00e2f73428474a65fa2f7c" - integrity sha512-ZaVHD2bijrlkCyD7NDzLmSK849Jgcx+6DdL4x1dScoz1slJ8GTvLtEu0JOUaaScQwA+cVlhmrmlmi9ssjbRLGQ== - -"@swc/core-linux-arm-gnueabihf@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.42.tgz#cb70c3f26e020ebf1efecbde508936a6e90cdcf9" - integrity sha512-iF0BJj7hVTbY/vmbvyzVTh/0W80+Q4fbOYschdUM3Bsud39TA+lSaPOefOHywkNH58EQ1z3EAxYcJOWNES7GFQ== - -"@swc/core-linux-arm64-gnu@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.42.tgz#93a18284c29788ec2ce7fb0ef821b864a6df122e" - integrity sha512-xGu8j+DOLYTLkVmsfZPJbNPW1EkiWgSucT0nOlz77bLxImukt/0+HVm2hOwHSKuArQ8C3cjahAMY3b/s4VH2ww== - -"@swc/core-linux-arm64-musl@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.42.tgz#c1346dbaf75c72704b0ab7d0cb9db2f1fa060f24" - integrity sha512-qtW3JNO7i1yHEko59xxz+jY38+tYmB96JGzj6XzygMbYJYZDYbrOpXQvKbMGNG3YeTDan7Fp2jD0dlKf7NgDPA== - -"@swc/core-linux-x64-gnu@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.42.tgz#a3c09eaf389030f1317c48511914de9aee6b85fb" - integrity sha512-F9WY1TN+hhhtiEzZjRQziNLt36M5YprMeOBHjsLVNqwgflzleSI7ulgnlQECS8c8zESaXj3ksGduAoJYtPC1cA== - -"@swc/core-linux-x64-musl@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.42.tgz#99a5c4f1e2ec41707dd5c263c286704856527ecd" - integrity sha512-7YMdOaYKLMQ8JGfnmRDwidpLFs/6ka+80zekeM0iCVO48yLrJR36G0QGXzMjKsXI0BPhq+mboZRRENK4JfQnEA== - -"@swc/core-win32-arm64-msvc@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.42.tgz#6803ff002a931604b31260052841a1bf94707fda" - integrity sha512-C5CYWaIZEyqPl5W/EwcJ/mLBJFHVoUEa/IwWi0b4q2fCXcSCktQGwKXOQ+d67GneiZoiq0HasgcdMmMpGS9YRQ== - -"@swc/core-win32-ia32-msvc@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.42.tgz#9379dece3fd5089daf8d0defdbce3b981909a563" - integrity sha512-3j47seZ5pO62mbrqvPe1iwhe2BXnM5q7iB+n2xgA38PCGYt0mnaJafqmpCXm/uYZOCMqSNynaoOWCMMZm4sqtA== - -"@swc/core-win32-x64-msvc@1.7.42": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.42.tgz#f779952389ad91145d71455da6165a779adaa9e0" - integrity sha512-FXl9MdeUogZLGDcLr6QIRdDVkpG0dkN4MLM4dwQ5kcAk+XfKPrQibX6M2kcfhsCx+jtBqtK7hRFReRXPWJZGbA== - -"@swc/core@^1.4.2": - version "1.7.42" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.7.42.tgz#8053e2ede08207d67b3ffef38c1c3d2befeb8848" - integrity sha512-iQrRk3SKndQZ4ptJv1rzeQSiCYQIhMjiO97QXOlCcCoaazOLKPnLnXzU4Kv0FuBFyYfG2FE94BoR0XI2BN02qw== - dependencies: - "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.13" - optionalDependencies: - "@swc/core-darwin-arm64" "1.7.42" - "@swc/core-darwin-x64" "1.7.42" - "@swc/core-linux-arm-gnueabihf" "1.7.42" - "@swc/core-linux-arm64-gnu" "1.7.42" - "@swc/core-linux-arm64-musl" "1.7.42" - "@swc/core-linux-x64-gnu" "1.7.42" - "@swc/core-linux-x64-musl" "1.7.42" - "@swc/core-win32-arm64-msvc" "1.7.42" - "@swc/core-win32-ia32-msvc" "1.7.42" - "@swc/core-win32-x64-msvc" "1.7.42" - -"@swc/counter@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" - integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== - -"@swc/jest@^0.2.36": - version "0.2.37" - resolved "https://registry.yarnpkg.com/@swc/jest/-/jest-0.2.37.tgz#9c2aaf22c87682aa968016e3e4843d1a25cae6bd" - integrity sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ== - dependencies: - "@jest/create-cache-key-function" "^29.7.0" - "@swc/counter" "^0.1.3" - jsonc-parser "^3.2.0" - -"@swc/types@^0.1.13": - version "0.1.13" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.13.tgz#441734f8bfa6e9e738f1c68e98be6da282ecc7db" - integrity sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q== - dependencies: - "@swc/counter" "^0.1.3" - -"@testing-library/react-hooks@^8.0.1": - version "8.0.1" - resolved "https://registry.yarnpkg.com/@testing-library/react-hooks/-/react-hooks-8.0.1.tgz#0924bbd5b55e0c0c0502d1754657ada66947ca12" - integrity sha512-Aqhl2IVmLt8IovEVarNDFuJDVWVvhnr9/GCU6UUnrYXwgDFF9h2L2o2P9KBni1AST5sT6riAyoukFLyjQUgD/g== - dependencies: - "@babel/runtime" "^7.12.5" - react-error-boundary "^3.1.0" - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@tsconfig/node10@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" - integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@tufjs/canonical-json@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a" - integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== - -"@tufjs/models@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-2.0.1.tgz#e429714e753b6c2469af3212e7f320a6973c2812" - integrity sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg== - dependencies: - "@tufjs/canonical-json" "2.0.0" - minimatch "^9.0.4" - -"@tufjs/models@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-3.0.1.tgz#5aebb782ebb9e06f071ae7831c1f35b462b0319c" - integrity sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA== - dependencies: - "@tufjs/canonical-json" "2.0.0" - minimatch "^9.0.5" - -"@types/acorn@^4.0.0": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.6.tgz#d61ca5480300ac41a7d973dd5b84d0a591154a22" - integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== - dependencies: - "@types/estree" "*" - -"@types/babel__core@^7.1.14": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== - dependencies: - "@babel/types" "^7.20.7" - -"@types/concat-stream@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-2.0.3.tgz#1f5c2ad26525716c181191f7ed53408f78eb758e" - integrity sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ== - dependencies: - "@types/node" "*" - -"@types/conventional-commits-parser@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#8c9d23e0b415b24b91626d07017303755d542dc8" - integrity sha512-loB369iXNmAZglwWATL+WRe+CRMmmBPtpolYzIebFaX4YA3x+BEfLqhUAV9WanycKI3TG1IMr5bMJDajDKLlUQ== - dependencies: - "@types/node" "*" - -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/estree-jsx@^1.0.0": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree-jsx/-/estree-jsx-1.0.5.tgz#858a88ea20f34fe65111f005a689fa1ebf70dc18" - integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== - dependencies: - "@types/estree" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/hast@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - dependencies: - "@types/unist" "*" - -"@types/is-empty@^1.0.0": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@types/is-empty/-/is-empty-1.2.3.tgz#a2d55ea8a5ec57bf61e411ba2a9e5132fe4f0899" - integrity sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^29.5.12": - version "29.5.14" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" - integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/js-cookie@^3.0.6": - version "3.0.6" - resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-3.0.6.tgz#a04ca19e877687bd449f5ad37d33b104b71fdf95" - integrity sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ== - -"@types/jsdom@^20.0.0": - version "20.0.1" - resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" - integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== - dependencies: - "@types/node" "*" - "@types/tough-cookie" "*" - parse5 "^7.0.0" - -"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/mdast@^3.0.0": - version "3.0.15" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.15.tgz#49c524a263f30ffa28b71ae282f813ed000ab9f5" - integrity sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ== - dependencies: - "@types/unist" "^2" - -"@types/mdast@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" - integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== - dependencies: - "@types/unist" "*" - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node@*", "@types/node@^22.0.0": - version "22.8.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.8.7.tgz#04ab7a073d95b4a6ee899f235d43f3c320a976f4" - integrity sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q== - dependencies: - undici-types "~6.19.8" - -"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.3": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" - integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== - -"@types/prop-types@*": - version "15.7.13" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451" - integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA== - -"@types/react-dom@^18.2.6": - version "18.3.1" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.1.tgz#1e4654c08a9cdcfb6594c780ac59b55aad42fe07" - integrity sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^18.2.52": - version "18.3.12" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60" - integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/semver@^7.3.12", "@types/semver@^7.5.0": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/supports-color@^8.0.0": - version "8.1.3" - resolved "https://registry.yarnpkg.com/@types/supports-color/-/supports-color-8.1.3.tgz#b769cdce1d1bb1a3fa794e35b62c62acdf93c139" - integrity sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg== - -"@types/tough-cookie@*": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" - integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== - -"@types/unist@*", "@types/unist@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" - integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== - -"@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" - integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^15.0.0": - version "15.0.19" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" - integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== - dependencies: - "@types/yargs-parser" "*" - -"@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^6.20.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" - natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.20.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== - dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== - dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" - -"@typescript-eslint/utils@^5.10.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== - dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -abbrev@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-3.0.0.tgz#c29a6337e167ac61a84b41b80461b29c5c271a27" - integrity sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA== - -acorn-globals@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" - integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== - dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" - -acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.0.2, acorn-walk@^8.1.1: - version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== - dependencies: - acorn "^8.11.0" - -acorn@^8.0.0, acorn@^8.1.0, acorn@^8.11.0, acorn@^8.11.3, acorn@^8.4.1, acorn@^8.8.1, acorn@^8.9.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -aggregate-error@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-5.0.0.tgz#ffe15045d7521c51c9d618e3d7f37c13f29b3fd3" - integrity sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw== - dependencies: - clean-stack "^5.2.0" - indent-string "^5.0.0" - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ajv@^8.0.0, ajv@^8.11.0, ajv@^8.9.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-escapes@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.0.0.tgz#00fc19f491bbb18e1d481b97868204f92109bfe7" - integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== - dependencies: - environment "^1.0.0" - -ansi-regex@^5.0.0, ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1, ansi-regex@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" - integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -argv-formatter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" - integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-includes@^3.1.6, array-includes@^3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" - integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -array.prototype.findlast@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" - integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.findlastindex@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" - integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.3" - es-errors "^1.3.0" - es-shim-unscopables "^1.0.2" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - 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" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -async@^3.2.3: - version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -available-typed-arrays@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-loader@^9.1.3: - version "9.2.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" - integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== - dependencies: - find-cache-dir "^4.0.0" - schema-utils "^4.0.0" - -babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" - integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== - 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" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - 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" - -before-after-hook@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-3.0.2.tgz#d5665a5fa8b62294a5aa0a499f933f4a1016195d" - integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A== - -bin-links@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-5.0.0.tgz#2b0605b62dd5e1ddab3b92a3c4e24221cae06cca" - integrity sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA== - dependencies: - cmd-shim "^7.0.0" - npm-normalize-package-bin "^4.0.0" - proc-log "^5.0.0" - read-cmd-shim "^5.0.0" - write-file-atomic "^6.0.0" - -binary-extensions@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bottleneck@^2.15.3: - version "2.19.5" - resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" - integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - 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" - -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browserslist@^4.24.0, browserslist@^4.24.2: - version "4.24.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580" - integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== - dependencies: - caniuse-lite "^1.0.30001669" - electron-to-chromium "^1.5.41" - node-releases "^2.0.18" - update-browserslist-db "^1.1.1" - -bs-logger@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -builtins@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.1.0.tgz#6d85eeb360c4ebc166c3fdef922a15aa7316a5e8" - integrity sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg== - dependencies: - semver "^7.0.0" - -cacache@^18.0.0: - version "18.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" - integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" - minipass "^7.0.3" - minipass-collect "^2.0.1" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -cacache@^19.0.0, cacache@^19.0.1: - version "19.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-19.0.1.tgz#3370cc28a758434c85c2585008bd5bdcff17d6cd" - integrity sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ== - dependencies: - "@npmcli/fs" "^4.0.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^10.0.1" - minipass "^7.0.3" - minipass-collect "^2.0.1" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^7.0.2" - ssri "^12.0.0" - tar "^7.4.3" - unique-filename "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - 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" - -cachedir@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== - -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - 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" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001669: - version "1.0.30001677" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz#27c2e2c637e007cfa864a16f7dfe7cde66b38b5f" - integrity sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -chalk@^2.3.2, chalk@^2.4.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.3.0, chalk@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -character-reference-invalid@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chownr@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" - integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -ci-info@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" - integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== - -cidr-regex@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-4.1.1.tgz#acbe7ba9f10d658710bddd25baa900509e90125a" - integrity sha512-ekKcVp+iRB9zlKFXyx7io7nINgb0oRjgRdXNEodp1OuxRui8FXr/CA40Tz1voWUp9DPPrMyQKy01vJhDo4N1lw== - dependencies: - ip-regex "^5.0.0" - -cjs-module-lexer@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" - integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" - integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== - dependencies: - escape-string-regexp "^1.0.5" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-stack@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-5.2.0.tgz#c7a0c91939c7caace30a3bf254e8a8ac276d1189" - integrity sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ== - dependencies: - escape-string-regexp "5.0.0" - -cli-columns@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== - dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-cursor@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" - integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== - dependencies: - restore-cursor "^5.0.0" - -cli-highlight@^2.1.11: - version "2.1.11" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - -cli-table3@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" - integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-truncate@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" - integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== - dependencies: - slice-ansi "^5.0.0" - string-width "^7.0.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -cmd-shim@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-7.0.0.tgz#23bcbf69fff52172f7e7c02374e18fb215826d95" - integrity sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.20: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@~12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3" - integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA== - -commitizen@^4.0.3, commitizen@^4.3.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.3.1.tgz#f0e0e4b7ae3fafc92e444bbb78f2ded5a1d4311a" - integrity sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw== - dependencies: - cachedir "2.3.0" - cz-conventional-changelog "3.3.0" - dedent "0.7.0" - detect-indent "6.1.0" - find-node-modules "^2.1.2" - find-root "1.1.0" - fs-extra "9.1.0" - glob "7.2.3" - inquirer "8.2.5" - is-utf8 "^0.2.1" - lodash "4.17.21" - minimist "1.2.7" - strip-bom "4.0.0" - strip-json-comments "3.1.1" - -commitlint@^19.5.0: - version "19.5.0" - resolved "https://registry.yarnpkg.com/commitlint/-/commitlint-19.5.0.tgz#64afe152e3d3537f4765ead1a587ea726264cc81" - integrity sha512-lCtwxgFulvMnCgBc8MVPlVMf+PNOqQSBhHpEnjV2JjEQEAhxjVDtC7IeuEtR+hHpGvHt6CwlLtm3uZNyEby5dQ== - dependencies: - "@commitlint/cli" "^19.5.0" - "@commitlint/types" "^19.5.0" - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -component-emitter@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" - integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -concurrently@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.0.1.tgz#01e171bf6c7af0c022eb85daef95bff04d8185aa" - integrity sha512-wYKvCd/f54sTXJMSfV6Ln/B8UrfLBKOYa+lzc6CHay3Qek+LorVSBdMVfyewFhRbH0Rbabsk4D+3PL/VjQ5gzg== - dependencies: - chalk "^4.1.2" - lodash "^4.17.21" - rxjs "^7.8.1" - shell-quote "^1.8.1" - supports-color "^8.1.1" - tree-kill "^1.2.2" - yargs "^17.7.2" - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -confusing-browser-globals@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -conventional-changelog-angular@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz#5eec8edbff15aa9b1680a8dcfbd53e2d7eb2ba7a" - integrity sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ== - dependencies: - compare-func "^2.0.0" - -conventional-changelog-conventionalcommits@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz#aa5da0f1b2543094889e8cf7616ebe1a8f5c70d5" - integrity sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w== - dependencies: - compare-func "^2.0.0" - -conventional-changelog-writer@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-7.0.1.tgz#e64ef74fa8e773cab4124af217f3f02b29eb0a9c" - integrity sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA== - dependencies: - conventional-commits-filter "^4.0.0" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - meow "^12.0.1" - semver "^7.5.2" - split2 "^4.0.0" - -conventional-commit-types@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" - integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== - -conventional-commits-filter@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-4.0.0.tgz#845d713e48dc7d1520b84ec182e2773c10c7bf7f" - integrity sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A== - -conventional-commits-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz#57f3594b81ad54d40c1b4280f04554df28627d9a" - integrity sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA== - dependencies: - JSONStream "^1.3.5" - is-text-path "^2.0.0" - meow "^12.0.1" - split2 "^4.0.0" - -convert-hrtime@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/convert-hrtime/-/convert-hrtime-5.0.0.tgz#f2131236d4598b95de856926a67100a0a97e9fa3" - integrity sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg== - -convert-source-map@^1.4.0, convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -core-js-compat@^3.34.0: - version "3.39.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" - integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== - dependencies: - browserslist "^4.24.2" - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig-typescript-loader@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-5.1.0.tgz#d8d02bff04e63faa2dc794d618168bd764c704be" - integrity sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA== - dependencies: - jiti "^1.21.6" - -cosmiconfig@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" - integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== - dependencies: - env-paths "^2.2.1" - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssom@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" - integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -cz-conventional-changelog@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" - integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== - dependencies: - chalk "^2.4.1" - commitizen "^4.0.3" - conventional-commit-types "^3.0.0" - lodash.map "^4.5.1" - longest "^2.0.1" - word-wrap "^1.0.3" - optionalDependencies: - "@commitlint/load" ">6.1.1" - -dargs@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" - integrity sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== - -data-urls@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" - integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== - dependencies: - abab "^2.0.6" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-data-view "^1.0.1" - -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.6, debug@~4.3.6: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decimal.js@^10.4.2: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== - dependencies: - character-entities "^2.0.0" - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -dedent@0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -dedent@^1.0.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" - integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== - -detect-indent@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -devlop@^1.0.0, devlop@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" - integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== - dependencies: - dequal "^2.0.0" - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diff@^5.0.0, diff@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" - integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== - -dir-glob@^3.0.0, dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -domexception@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" - integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== - dependencies: - webidl-conversions "^7.0.0" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexer2@~0.1.0: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ejs@^3.1.10: - version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - -electron-to-chromium@^1.5.41: - version "1.5.50" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.50.tgz#d9ba818da7b2b5ef1f3dd32bce7046feb7e93234" - integrity sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw== - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^10.2.1, emoji-regex@^10.3.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" - integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojilib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" - integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.15.0: - version "5.17.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" - integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-ci@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-11.1.0.tgz#b26eeb692f76c1f69ddc1fb2d4a3d371088a54f9" - integrity sha512-Z8dnwSDbV1XYM9SBF2J0GcNVvmfmfh3a49qddGIROhBoVro6MZVTji15z/sJbQ2ko2ei8n988EU1wzoLU/tF+g== - dependencies: - execa "^8.0.0" - java-properties "^1.0.2" - -env-paths@^2.2.0, env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -environment@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" - integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1, error-ex@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== - 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" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-iterator-helpers@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz#f6d745d342aea214fe09497e7152170dc333a7a6" - integrity sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.3" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.3" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - globalthis "^1.0.4" - has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - iterator.prototype "^1.1.3" - safe-array-concat "^1.1.2" - -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== - dependencies: - get-intrinsic "^1.2.4" - has-tostringtag "^1.0.2" - hasown "^2.0.1" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escalade@^3.1.1, escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-string-regexp@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-compat-utils@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz#7fc92b776d185a70c4070d03fd26fde3d59652e4" - integrity sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q== - dependencies: - semver "^7.5.4" - -eslint-config-prettier@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" - integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== - -eslint-config-xo-react@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/eslint-config-xo-react/-/eslint-config-xo-react-0.27.0.tgz#aeb7593bf3d8fb9fc7fecfcbd7240f0daddb5cb0" - integrity sha512-wiV215xQIn71XZyyVfaOXHaFpR1B14IJttwOjMi/eqUK1s+ojJdHr7eHqTLaGUfh6FKgWha1QNwePlIXx7mBUg== - -eslint-config-xo-typescript@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-xo-typescript/-/eslint-config-xo-typescript-1.0.1.tgz#90a91a4dc2135ea93ef3081ecf1945303ab2bc60" - integrity sha512-vPQssnRSUgBFOEfB/KY12CXwltwFSn4RSCfa+w7gjBC2PFQ7Yfgmyei+1XUZ3K+8LRGef2NMJUcxts7PldhDjg== - -eslint-config-xo@^0.43.1: - version "0.43.1" - resolved "https://registry.yarnpkg.com/eslint-config-xo/-/eslint-config-xo-0.43.1.tgz#c2ac8993f6e429048c813f599265d1636a0bc060" - integrity sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ== - dependencies: - confusing-browser-globals "1.0.11" - -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-import-resolver-typescript@^3.6.1: - version "3.6.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz#bb8e388f6afc0f940ce5d2c5fd4a3d147f038d9e" - integrity sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA== - dependencies: - "@nolyfill/is-core-module" "1.0.39" - debug "^4.3.5" - enhanced-resolve "^5.15.0" - eslint-module-utils "^2.8.1" - fast-glob "^3.3.2" - get-tsconfig "^4.7.5" - is-bun-module "^1.0.2" - is-glob "^4.0.3" - -eslint-mdx@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/eslint-mdx/-/eslint-mdx-3.1.5.tgz#e0276cad5649a4a174ffb27a7fbca83be7f580cb" - integrity sha512-ynztX0k7CQ3iDL7fDEIeg3g0O/d6QPv7IBI9fdYLhXp5fAp0fi8X22xF/D3+Pk0f90R27uwqa1clHpay6t0l8Q== - dependencies: - acorn "^8.11.3" - acorn-jsx "^5.3.2" - espree "^9.6.1" - estree-util-visit "^2.0.0" - remark-mdx "^3.0.0" - remark-parse "^11.0.0" - remark-stringify "^11.0.0" - synckit "^0.9.0" - tslib "^2.6.2" - unified "^11.0.4" - unified-engine "^11.2.0" - unist-util-visit "^5.0.0" - uvu "^0.5.6" - vfile "^6.0.1" - -eslint-module-utils@^2.12.0, eslint-module-utils@^2.8.1: - version "2.12.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" - integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== - dependencies: - debug "^3.2.7" - -eslint-plugin-es-x@^7.5.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz#a207aa08da37a7923f2a9599e6d3eb73f3f92b74" - integrity sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ== - dependencies: - "@eslint-community/eslint-utils" "^4.1.2" - "@eslint-community/regexpp" "^4.11.0" - eslint-compat-utils "^0.5.1" - -eslint-plugin-eslint-comments@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" - integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== - dependencies: - escape-string-regexp "^1.0.5" - ignore "^5.0.5" - -eslint-plugin-import@^2.29.1: - version "2.31.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" - integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== - dependencies: - "@rtsao/scc" "^1.1.0" - array-includes "^3.1.8" - array.prototype.findlastindex "^1.2.5" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.12.0" - hasown "^2.0.2" - is-core-module "^2.15.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.8" - object.groupby "^1.0.3" - object.values "^1.2.0" - semver "^6.3.1" - string.prototype.trimend "^1.0.8" - tsconfig-paths "^3.15.0" - -eslint-plugin-jest@^27.6.3: - version "27.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" - integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-plugin-markdown@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.1.tgz#fc6765bdb5f82a75e2438d7fac619602f2abc38c" - integrity sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A== - dependencies: - mdast-util-from-markdown "^0.8.5" - -eslint-plugin-mdx@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-mdx/-/eslint-plugin-mdx-3.1.5.tgz#8f20d899c24272c0d471715c1f80d1332ec933c4" - integrity sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg== - dependencies: - eslint-mdx "^3.1.5" - eslint-plugin-markdown "^3.0.1" - remark-mdx "^3.0.0" - remark-parse "^11.0.0" - remark-stringify "^11.0.0" - tslib "^2.6.2" - unified "^11.0.4" - vfile "^6.0.1" - -eslint-plugin-n@^16.6.2: - version "16.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz#6a60a1a376870064c906742272074d5d0b412b0b" - integrity sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - builtins "^5.0.1" - eslint-plugin-es-x "^7.5.0" - get-tsconfig "^4.7.0" - globals "^13.24.0" - ignore "^5.2.4" - is-builtin-module "^3.2.1" - is-core-module "^2.12.1" - minimatch "^3.1.2" - resolve "^1.22.2" - semver "^7.5.3" - -eslint-plugin-no-use-extend-native@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.5.0.tgz#d6855e3a823a819b467cf7df56adca57de741bf9" - integrity sha512-dBNjs8hor8rJgeXLH4HTut5eD3RGWf9JUsadIfuL7UosVQ/dnvOKwxEcRrXrFxrMZ8llUVWT+hOimxJABsAUzQ== - dependencies: - is-get-set-prop "^1.0.0" - is-js-type "^2.0.0" - is-obj-prop "^1.0.0" - is-proto-prop "^2.0.0" - -eslint-plugin-prettier@^5.1.3: - version "5.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95" - integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.9.1" - -eslint-plugin-promise@^6.1.1: - version "6.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz#acd3fd7d55cead7a10f92cf698f36c0aafcd717a" - integrity sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ== - -eslint-plugin-react-hooks@^4.6.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" - integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== - -eslint-plugin-react@^7.33.2: - version "7.37.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz#cd0935987876ba2900df2f58339f6d92305acc7a" - integrity sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w== - dependencies: - array-includes "^3.1.8" - array.prototype.findlast "^1.2.5" - array.prototype.flatmap "^1.3.2" - array.prototype.tosorted "^1.1.4" - doctrine "^2.1.0" - es-iterator-helpers "^1.1.0" - estraverse "^5.3.0" - hasown "^2.0.2" - jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.1.2" - object.entries "^1.1.8" - object.fromentries "^2.0.8" - object.values "^1.2.0" - prop-types "^15.8.1" - resolve "^2.0.0-next.5" - semver "^6.3.1" - string.prototype.matchall "^4.0.11" - string.prototype.repeat "^1.0.0" - -eslint-plugin-unicorn@^50.0.1: - version "50.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-unicorn/-/eslint-plugin-unicorn-50.0.1.tgz#e539cdb02dfd893c603536264c4ed9505b70e3bf" - integrity sha512-KxenCZxqSYW0GWHH18okDlOQcpezcitm5aOSz6EnobyJ6BIByiPDviQRjJIUAjG/tMN11958MxaQ+qCoU6lfDA== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - "@eslint-community/eslint-utils" "^4.4.0" - "@eslint/eslintrc" "^2.1.4" - ci-info "^4.0.0" - clean-regexp "^1.0.0" - core-js-compat "^3.34.0" - esquery "^1.5.0" - indent-string "^4.0.0" - is-builtin-module "^3.2.1" - jsesc "^3.0.2" - pluralize "^8.0.0" - read-pkg-up "^7.0.1" - regexp-tree "^0.1.27" - regjsparser "^0.10.0" - semver "^7.5.4" - strip-indent "^3.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.57.0: - version "8.57.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" - integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.1" - "@humanwhocodes/config-array" "^0.13.0" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2, esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-util-is-identifier-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" - integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== - -estree-util-visit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb" - integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/unist" "^3.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.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" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - 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" - -execa@^8.0.0, execa@~8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" - integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^8.0.1" - human-signals "^5.0.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^4.1.0" - strip-final-newline "^3.0.0" - -execa@^9.0.0: - version "9.5.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-9.5.1.tgz#ab9b68073245e1111bba359962a34fcdb28deef2" - integrity sha512-QY5PPtSonnGwhhHDNI7+3RvY285c7iuJFFB+lU+oEzMY/gEGJ808owqJsrr8Otd1E/x07po1LkUBmdAc5duPAg== - dependencies: - "@sindresorhus/merge-streams" "^4.0.0" - cross-spawn "^7.0.3" - figures "^6.1.0" - get-stream "^9.0.0" - human-signals "^8.0.0" - is-plain-obj "^4.1.0" - is-stream "^4.0.1" - npm-run-path "^6.0.0" - pretty-ms "^9.0.0" - signal-exit "^4.1.0" - strip-final-newline "^4.0.0" - yoctocolors "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - 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" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== - dependencies: - homedir-polyfill "^1.0.1" - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - 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" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.2.9, fast-glob@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - 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" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-uri@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" - integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== - -fastest-levenshtein@^1.0.16: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^6.0.0, figures@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" - integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== - dependencies: - is-unicode-supported "^2.0.0" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== - dependencies: - minimatch "^5.0.1" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" - integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== - dependencies: - common-path-prefix "^3.0.0" - pkg-dir "^7.0.0" - -find-node-modules@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" - integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== - dependencies: - findup-sync "^4.0.0" - merge "^2.1.1" - -find-root@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up-simple@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-up-simple/-/find-up-simple-1.0.0.tgz#21d035fde9fdbd56c8f4d2f63f32fd93a1cfc368" - integrity sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw== - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -find-up@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-7.0.0.tgz#e8dec1455f74f78d888ad65bf7ca13dd2b4e66fb" - integrity sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g== - dependencies: - locate-path "^7.2.0" - path-exists "^5.0.0" - unicorn-magic "^0.1.0" - -find-versions@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-6.0.0.tgz#fda285d3bb7c0c098f09e0727c54d31735f0c7d1" - integrity sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA== - dependencies: - semver-regex "^4.0.5" - super-regex "^1.0.0" - -findup-sync@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" - integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^4.0.2" - resolve-dir "^1.0.1" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -from2@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.0.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-minipass@^3.0.0, fs-minipass@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.1.2, fsevents@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function-timeout@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/function-timeout/-/function-timeout-1.0.2.tgz#e5a7b6ffa523756ff20e1231bbe37b5f373aadd5" - integrity sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-east-asian-width@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" - integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-set-props@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-set-props/-/get-set-props-0.1.0.tgz#998475c178445686d0b32246da5df8dbcfbe8ea3" - integrity sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-stream@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-7.0.1.tgz#1664dfe7d1678540ea6a4da3ae7cd59bf4e4a91e" - integrity sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ== - -get-stream@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" - integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== - -get-stream@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" - integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== - dependencies: - "@sec-ant/readable-stream" "^0.4.1" - is-stream "^4.0.1" - -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -get-tsconfig@^4.7.0, get-tsconfig@^4.7.5: - version "4.8.1" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" - integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== - dependencies: - resolve-pkg-maps "^1.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -git-log-parser@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.1.tgz#44355787b37af7560dcc4ddc01cb53b5d139cc28" - integrity sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ== - dependencies: - argv-formatter "~1.0.0" - spawn-error-forwarder "~1.0.0" - split2 "~1.0.0" - stream-combiner2 "~1.1.1" - through2 "~2.0.0" - traverse "0.6.8" - -git-raw-commits@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-4.0.0.tgz#b212fd2bff9726d27c1283a1157e829490593285" - integrity sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ== - dependencies: - dargs "^8.0.0" - meow "^12.0.1" - split2 "^4.0.0" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@7.2.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -glob@^10.0.0, glob@^10.2.2, glob@^10.3.10, glob@^10.3.7, glob@^10.4.5: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - 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" - -global-directory@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/global-directory/-/global-directory-4.0.1.tgz#4d7ac7cfd2cb73f304c53b8810891748df5e361e" - integrity sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== - dependencies: - ini "4.1.1" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0, globals@^13.24.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3, globalthis@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" - integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - dependencies: - define-properties "^1.2.1" - gopd "^1.0.1" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^14.0.0: - version "14.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-14.0.2.tgz#06554a54ccfe9264e5a9ff8eded46aa1e306482f" - integrity sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw== - 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" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== - -handlebars@^4.7.7: - version "4.7.8" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" - integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.2" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hook-std@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-3.0.0.tgz#47038a01981e07ce9d83a6a3b2eb98cad0f7bd58" - integrity sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" - integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== - dependencies: - lru-cache "^10.0.1" - -hosted-git-info@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-8.0.0.tgz#b20f1d55d492eb18d70a252d456a2158aab9f244" - integrity sha512-4nw3vOVR+vHUOT8+U4giwe2tcGv+R3pwwRidUe67DoMBTjhrfr6rZYJVVwdkBE+Um050SG+X9tf0Jo4fOpn01w== - dependencies: - lru-cache "^10.0.1" - -html-encoding-sniffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" - integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== - dependencies: - whatwg-encoding "^2.0.0" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http-proxy-agent@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -https-proxy-agent@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== - dependencies: - agent-base "^7.0.2" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -human-signals@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" - integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== - -human-signals@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.0.tgz#2d3d63481c7c2319f0373428b01ffe30da6df852" - integrity sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA== - -husky@^9.0.11: - version "9.1.6" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.6.tgz#e23aa996b6203ab33534bdc82306b0cf2cb07d6c" - integrity sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A== - -iconv-lite@0.6.3, iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-7.0.0.tgz#8350e475cf4375969c12eb49618b3fd9cca6704f" - integrity sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ== - dependencies: - minimatch "^9.0.0" - -ignore@^5.0.5, ignore@^5.2.0, ignore@^5.2.4: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -ignore@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-6.0.2.tgz#77cccb72a55796af1b6d2f9eb14fa326d24f4283" - integrity sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A== - -import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from-esm@^1.0.3, import-from-esm@^1.3.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/import-from-esm/-/import-from-esm-1.3.4.tgz#39e97c84085e308fe66cf872a667046b45449df0" - integrity sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg== - dependencies: - debug "^4.3.4" - import-meta-resolve "^4.0.0" - -import-local@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" - integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -import-meta-resolve@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" - integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indent-string@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" - integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== - -index-to-position@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-0.1.2.tgz#e11bfe995ca4d8eddb1ec43274488f3c201a7f09" - integrity sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" - integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== - -ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ini@^4.1.2, ini@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" - integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== - -ini@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-5.0.0.tgz#a7a4615339843d9a8ccc2d85c9d81cf93ffbc638" - integrity sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw== - -init-package-json@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-7.0.1.tgz#8f4580bbf427f015348727f215a39f42547ee208" - integrity sha512-8KZtk/53ReI2T2f6z2hl5ql6xKLjDexNw7DUqTdR8f+Mo8WZmBjjkH6DrTfBjmW0j3Tqx+j3t8creN0O890+0A== - dependencies: - "@npmcli/package-json" "^6.0.0" - npm-package-arg "^12.0.0" - promzard "^2.0.0" - read "^4.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^6.0.0" - -inquirer@8.2.5: - version "8.2.5" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" - integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -into-stream@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-7.0.0.tgz#d1a211e146be8acfdb84dabcbf00fe8205e72936" - integrity sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw== - dependencies: - from2 "^2.3.0" - p-is-promise "^3.0.0" - -ip-address@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a" - integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== - dependencies: - jsbn "1.1.0" - sprintf-js "^1.1.3" - -ip-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" - integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== - -is-accessor-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" - integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== - dependencies: - hasown "^2.0.0" - -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.0.0" - -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-async-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" - integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== - dependencies: - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-builtin-module@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" - integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== - dependencies: - builtin-modules "^3.3.0" - -is-bun-module@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.2.1.tgz#495e706f42e29f086fd5fe1ac3c51f106062b9fc" - integrity sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q== - dependencies: - semver "^7.6.3" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-cidr@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-5.1.0.tgz#36f2d059f43f9b14f132745a2eec18c996df2f35" - integrity sha512-OkVS+Ht2ssF27d48gZdB+ho1yND1VbkJRKKS6Pc1/Cw7uqkd9IOJg8/bTwBDQL6tfBhSdguPRnlGiE8pU/X5NQ== - dependencies: - cidr-regex "^4.1.1" - -is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.15.1: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== - dependencies: - hasown "^2.0.2" - -is-data-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" - integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== - dependencies: - hasown "^2.0.0" - -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== - dependencies: - is-typed-array "^1.1.13" - -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -is-descriptor@^0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" - integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" - integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-empty@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b" - integrity sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-finalizationregistry@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" - integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== - dependencies: - call-bind "^1.0.2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-fullwidth-code-point@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704" - integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== - dependencies: - get-east-asian-width "^1.0.0" - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-generator-function@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-get-set-prop@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz#2731877e4d78a6a69edcce6bb9d68b0779e76312" - integrity sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ== - dependencies: - get-set-props "^0.1.0" - lowercase-keys "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - -is-hexadecimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-js-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-js-type/-/is-js-type-2.0.0.tgz#73617006d659b4eb4729bba747d28782df0f7e22" - integrity sha512-Aj13l47+uyTjlQNHtXBV8Cji3jb037vxwMWCgopRR8h6xocgBGW3qG8qGlIOEmbXQtkKShKuBM9e8AA1OeQ+xw== - dependencies: - js-types "^1.0.0" - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" - integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - -is-negative-zero@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj-prop@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-obj-prop/-/is-obj-prop-1.0.0.tgz#b34de79c450b8d7c73ab2cdf67dc875adb85f80e" - integrity sha512-5Idb61slRlJlsAzi0Wsfwbp+zZY+9LXKUAZpvT/1ySw+NxKLRWfa0Bzj+wXI3fX5O9hiddm5c3DAaRSNP/yl2w== - dependencies: - lowercase-keys "^1.0.0" - obj-props "^1.0.0" - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^4.0.0, is-plain-obj@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-proto-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-proto-prop/-/is-proto-prop-2.0.0.tgz#99ab2863462e44090fd083efd1929058f9d935e1" - integrity sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg== - dependencies: - lowercase-keys "^1.0.0" - proto-props "^2.0.0" - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" - integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== - dependencies: - call-bind "^1.0.7" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-stream@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" - integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-text-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" - integrity sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw== - dependencies: - text-extensions "^2.0.0" - -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-unicode-supported@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" - integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== - -is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - -is-weakmap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" - integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-weakset@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" - integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -issue-parser@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-7.0.1.tgz#8a053e5a4952c75bb216204e454b4fc7d4cc9637" - integrity sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg== - dependencies: - lodash.capitalize "^4.2.1" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.uniqby "^4.7.0" - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" - integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== - 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" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2, istanbul-reports@^3.1.3: - version "3.1.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" - integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -iterator.prototype@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.3.tgz#016c2abe0be3bbdb8319852884f60908ac62bf9c" - integrity sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ== - dependencies: - define-properties "^1.2.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - reflect.getprototypeof "^1.0.4" - set-function-name "^2.0.1" - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jake@^10.8.5: - version "10.9.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" - integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== - dependencies: - async "^3.2.3" - chalk "^4.0.2" - filelist "^1.0.4" - minimatch "^3.1.2" - -java-properties@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" - integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-jsdom@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" - integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/jsdom" "^20.0.0" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - jsdom "^20.0.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-util@^29.0.0, jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -jiti@^1.21.6: - version "1.21.6" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" - integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== - -js-cookie@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" - integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-types@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/js-types/-/js-types-1.0.0.tgz#d242e6494ed572ad3c92809fc8bed7f7687cbf03" - integrity sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" - integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== - -jsdom@^20.0.0: - version "20.0.3" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" - integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== - dependencies: - abab "^2.0.6" - acorn "^8.8.1" - acorn-globals "^7.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.4.2" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^4.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.11.0" - xml-name-validator "^4.0.0" - -jsesc@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-parse-even-better-errors@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" - integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== - -json-parse-even-better-errors@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz#d3f67bd5925e81d3e31aa466acc821c8375cec43" - integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4" - integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0, jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.3.5" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" - integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== - dependencies: - array-includes "^3.1.6" - array.prototype.flat "^1.3.1" - object.assign "^4.1.4" - object.values "^1.1.6" - -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" - integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -kleur@^4.0.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libnpmaccess@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-9.0.0.tgz#47ac12dcd358c2c2f2c9ecb0f081a65ef2cc68bc" - integrity sha512-mTCFoxyevNgXRrvgdOhghKJnCWByBc9yp7zX4u9RBsmZjwOYdUDEBfL5DdgD1/8gahsYnauqIWFbq0iK6tO6CQ== - dependencies: - npm-package-arg "^12.0.0" - npm-registry-fetch "^18.0.1" - -libnpmdiff@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-7.0.0.tgz#808893a36d673e46c927e4a0a836b3742191d307" - integrity sha512-MjvsBJL1AT4ofsSsBRse5clxv7gfPbdgzT0VE+xmVTxE8M92T22laeX9vqFhaQKInSeKiZ2L9w/FVhoCCGPdUg== - dependencies: - "@npmcli/arborist" "^8.0.0" - "@npmcli/installed-package-contents" "^3.0.0" - binary-extensions "^2.3.0" - diff "^5.1.0" - minimatch "^9.0.4" - npm-package-arg "^12.0.0" - pacote "^19.0.0" - tar "^6.2.1" - -libnpmexec@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-9.0.0.tgz#4bb43ec4ba88bd33750480fcf73935837af061bf" - integrity sha512-5dOwgvt0srgrOkwsjNWokx23BvQXEaUo87HWIY+9lymvAto2VSunNS+Ih7WXVwvkJk7cZ0jhS2H3rNK8G9Anxw== - dependencies: - "@npmcli/arborist" "^8.0.0" - "@npmcli/run-script" "^9.0.1" - ci-info "^4.0.0" - npm-package-arg "^12.0.0" - pacote "^19.0.0" - proc-log "^5.0.0" - read "^4.0.0" - read-package-json-fast "^4.0.0" - semver "^7.3.7" - walk-up-path "^3.0.1" - -libnpmfund@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-6.0.0.tgz#5f324e9b9fb440af9c197f3f147943362758b49b" - integrity sha512-+7ZTxPyJ0O/Y0xKoEd1CxPCUQ4ldn6EZ2qUMI/E1gJkfzcwb3AdFlSWk1WEXaGBu2+EqMrPf4Xu5lXFWw2Jd3w== - dependencies: - "@npmcli/arborist" "^8.0.0" - -libnpmhook@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-11.0.0.tgz#b8caf6fe31666d7b18cbf61ce8b722dca1600943" - integrity sha512-Xc18rD9NFbRwZbYCQ+UCF5imPsiHSyuQA8RaCA2KmOUo8q4kmBX4JjGWzmZnxZCT8s6vwzmY1BvHNqBGdg9oBQ== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^18.0.1" - -libnpmorg@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-7.0.0.tgz#055dfdba32ac5e8757dd4b264f805b64cbd6980b" - integrity sha512-DcTodX31gDEiFrlIHurBQiBlBO6Var2KCqMVCk+HqZhfQXqUfhKGmFOp0UHr6HR1lkTVM0MzXOOYtUObk0r6Dg== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^18.0.1" - -libnpmpack@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-8.0.0.tgz#83cb6333861f8a0fe991420feaf0aa48a67d94bf" - integrity sha512-Z5zqR+j8PNOki97D4XnKlekLQjqJYkqCFZeac07XCJYA3aq6O7wYIpn7RqLcNfFm+u3ZsdblY2VQENMoiHA+FQ== - dependencies: - "@npmcli/arborist" "^8.0.0" - "@npmcli/run-script" "^9.0.1" - npm-package-arg "^12.0.0" - pacote "^19.0.0" - -libnpmpublish@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-10.0.0.tgz#328fafc94fc0a735c9581207db57dbec590d594c" - integrity sha512-keixAKMGMegm9HHY0stnNtjPHI7J79sMLlRQf0V1n1iFrWspLTGmoA5VMyzX27L3gC8prl+wLizwNWOZlGpcWw== - dependencies: - ci-info "^4.0.0" - normalize-package-data "^7.0.0" - npm-package-arg "^12.0.0" - npm-registry-fetch "^18.0.1" - proc-log "^5.0.0" - semver "^7.3.7" - sigstore "^2.2.0" - ssri "^12.0.0" - -libnpmsearch@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-8.0.0.tgz#ce2e28ad05a152c736d5ae86356aedd5a52406a5" - integrity sha512-W8FWB78RS3Nkl1gPSHOlF024qQvcoU/e3m9BGDuBfVZGfL4MJ91GXXb04w3zJCGOW9dRQUyWVEqupFjCrgltDg== - dependencies: - npm-registry-fetch "^18.0.1" - -libnpmteam@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-7.0.0.tgz#e8f40c4bc543b720da2cdd4385e2fafcd06c92c0" - integrity sha512-PKLOoVukN34qyJjgEm5DEOnDwZkeVMUHRx8NhcKDiCNJGPl7G/pF1cfBw8yicMwRlHaHkld1FdujOzKzy4AlwA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^18.0.1" - -libnpmversion@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-7.0.0.tgz#b264a07662b31b78822ba870171088eca6466f38" - integrity sha512-0xle91R6F8r/Q/4tHOnyKko+ZSquEXNdxwRdKCPv4kC1cOVBMFXRsKKrVtRKtXcFn362U8ZlJefk4Apu00424g== - dependencies: - "@npmcli/git" "^6.0.1" - "@npmcli/run-script" "^9.0.1" - json-parse-even-better-errors "^4.0.0" - proc-log "^5.0.0" - semver "^7.3.7" - -lilconfig@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" - integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lines-and-columns@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" - integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== - -lint-staged@^15.2.2: - version "15.2.10" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.10.tgz#92ac222f802ba911897dcf23671da5bb80643cd2" - integrity sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg== - dependencies: - chalk "~5.3.0" - commander "~12.1.0" - debug "~4.3.6" - execa "~8.0.1" - lilconfig "~3.1.2" - listr2 "~8.2.4" - micromatch "~4.0.8" - pidtree "~0.6.0" - string-argv "~0.3.2" - yaml "~2.5.0" - -listr2@~8.2.4: - version "8.2.5" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.2.5.tgz#5c9db996e1afeb05db0448196d3d5f64fec2593d" - integrity sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ== - dependencies: - cli-truncate "^4.0.0" - colorette "^2.0.20" - eventemitter3 "^5.0.1" - log-update "^6.1.0" - rfdc "^1.4.1" - wrap-ansi "^9.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-plugin@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-6.0.3.tgz#b0eb8ea2361744f0e54850ccbc4c8a2d94ffabe3" - integrity sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w== - dependencies: - "@npmcli/config" "^8.0.0" - import-meta-resolve "^4.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -locate-path@^7.1.0, locate-path@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.capitalize@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" - integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== - -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" - integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== - -lodash.map@^4.5.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.mergewith@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" - integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== - -lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - -lodash.startcase@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" - integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== - -lodash.upperfirst@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" - integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== - -lodash@4.17.21, lodash@^4.17.21, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" - integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== - 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" - -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - -longest@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" - integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== - -loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-error@^1.1.1, make-error@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^13.0.0, make-fetch-happen@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36" - integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== - dependencies: - "@npmcli/agent" "^2.0.0" - cacache "^18.0.0" - http-cache-semantics "^4.1.1" - is-lambda "^1.0.1" - minipass "^7.0.2" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - proc-log "^4.2.0" - promise-retry "^2.0.1" - ssri "^10.0.0" - -make-fetch-happen@^14.0.0, make-fetch-happen@^14.0.1: - version "14.0.3" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz#d74c3ecb0028f08ab604011e0bc6baed483fcdcd" - integrity sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ== - dependencies: - "@npmcli/agent" "^3.0.0" - cacache "^19.0.1" - http-cache-semantics "^4.1.1" - minipass "^7.0.2" - minipass-fetch "^4.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^1.0.0" - proc-log "^5.0.0" - promise-retry "^2.0.1" - ssri "^12.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -marked-terminal@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-7.2.1.tgz#9c1ae073a245a03c6a13e3eeac6f586f29856068" - integrity sha512-rQ1MoMFXZICWNsKMiiHwP/Z+92PLKskTPXj+e7uwXmuMPkNn7iTqC+IvDekVm1MPeC9wYQeLxeFaOvudRR/XbQ== - dependencies: - ansi-escapes "^7.0.0" - ansi-regex "^6.1.0" - chalk "^5.3.0" - cli-highlight "^2.1.11" - cli-table3 "^0.6.5" - node-emoji "^2.1.3" - supports-hyperlinks "^3.1.0" - -marked@^12.0.0: - version "12.0.2" - resolved "https://registry.yarnpkg.com/marked/-/marked-12.0.2.tgz#b31578fe608b599944c69807b00f18edab84647e" - integrity sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q== - -mdast-util-from-markdown@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" - integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-string "^2.0.0" - micromark "~2.11.0" - parse-entities "^2.0.0" - unist-util-stringify-position "^2.0.0" - -mdast-util-from-markdown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" - integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - mdast-util-to-string "^4.0.0" - micromark "^4.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-decode-string "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-stringify-position "^4.0.0" - -mdast-util-mdx-expression@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" - integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdx-jsx@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz#76b957b3da18ebcfd0de3a9b4451dcd6fdec2320" - integrity sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-stringify-position "^4.0.0" - vfile-message "^4.0.0" - -mdast-util-mdx@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41" - integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdxjs-esm@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" - integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-phrasing@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" - integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== - dependencies: - "@types/mdast" "^4.0.0" - unist-util-is "^6.0.0" - -mdast-util-to-markdown@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.1.tgz#6fdb72cd54ee4e6745e138db003609978a322e94" - integrity sha512-OrkcCoqAkEg9b1ykXBrA0ehRc8H4fGU/03cACmW2xXzau1+dIdS+qJugh1Cqex3hMumSBgSE/5pc7uqP12nLAw== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^4.0.0" - mdast-util-to-string "^4.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-decode-string "^2.0.0" - unist-util-visit "^5.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" - integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== - -mdast-util-to-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" - integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== - dependencies: - "@types/mdast" "^4.0.0" - -meow@^12.0.1: - version "12.1.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" - integrity sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merge@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" - integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== - -micromark-core-commonmark@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz#9a45510557d068605c6e9a80f282b2bb8581e43d" - integrity sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA== - dependencies: - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-factory-destination "^2.0.0" - micromark-factory-label "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-title "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-html-tag-name "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-expression@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz#1407b9ce69916cf5e03a196ad9586889df25302a" - integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz#5abb83da5ddc8e473a374453e6ea56fbd66b59ad" - integrity sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdx-md@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d" - integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-mdxjs-esm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a" - integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdxjs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18" - integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== - dependencies: - acorn "^8.0.0" - acorn-jsx "^5.0.0" - micromark-extension-mdx-expression "^3.0.0" - micromark-extension-mdx-jsx "^3.0.0" - micromark-extension-mdx-md "^2.0.0" - micromark-extension-mdxjs-esm "^3.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-destination@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz#857c94debd2c873cba34e0445ab26b74f6a6ec07" - integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-label@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz#17c5c2e66ce39ad6f4fc4cbf40d972f9096f726a" - integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== - dependencies: - devlop "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-mdx-expression@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz#2afaa8ba6d5f63e0cead3e4dee643cad184ca260" - integrity sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-factory-space@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz#5e7afd5929c23b96566d0e1ae018ae4fcf81d030" - integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-title@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz#726140fc77892af524705d689e1cf06c8a83ea95" - integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-whitespace@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz#9e92eb0f5468083381f923d9653632b3cfb5f763" - integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-character@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.0.tgz#31320ace16b4644316f6bf057531689c71e2aee1" - integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== - dependencies: - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-chunked@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz#e51f4db85fb203a79dbfef23fd41b2f03dc2ef89" - integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-classify-character@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz#8c7537c20d0750b12df31f86e976d1d951165f34" - integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-combine-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz#75d6ab65c58b7403616db8d6b31315013bfb7ee5" - integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== - dependencies: - micromark-util-chunked "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz#2698bbb38f2a9ba6310e359f99fcb2b35a0d2bd5" - integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-decode-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz#7dfa3a63c45aecaa17824e656bcdb01f9737154a" - integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz#0921ac7953dc3f1fd281e3d1932decfdb9382ab1" - integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== - -micromark-util-events-to-acorn@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz#4275834f5453c088bd29cd72dfbf80e3327cec07" - integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-util-html-tag-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz#ae34b01cbe063363847670284c6255bb12138ec4" - integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== - -micromark-util-normalize-identifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz#91f9a4e65fe66cc80c53b35b0254ad67aa431d8b" - integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-resolve-all@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz#189656e7e1a53d0c86a38a652b284a252389f364" - integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== - dependencies: - micromark-util-types "^2.0.0" - -micromark-util-sanitize-uri@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz#ec8fbf0258e9e6d8f13d9e4770f9be64342673de" - integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-subtokenize@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz#76129c49ac65da6e479c09d0ec4b5f29ec6eace5" - integrity sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-symbol@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz#12225c8f95edf8b17254e47080ce0862d5db8044" - integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== - -micromark-util-types@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.0.tgz#63b4b7ffeb35d3ecf50d1ca20e68fc7caa36d95e" - integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== - -micromark@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.0.tgz#84746a249ebd904d9658cfabc1e8e5f32cbc6249" - integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark@~2.11.0: - version "2.11.4" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" - integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== - dependencies: - debug "^4.0.0" - parse-entities "^2.0.0" - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - 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" - -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@~4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-4.0.4.tgz#9f851b0fc3c289d063b20a7a8055b3014b25664b" - integrity sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-function@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" - integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@9.0.3: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0, minimatch@^9.0.4, minimatch@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist@1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" - integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== - dependencies: - minipass "^7.0.3" - -minipass-fetch@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c" - integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-fetch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-4.0.0.tgz#b8ea716464747aeafb7edf2e110114c38089a09c" - integrity sha512-2v6aXUXwLP1Epd/gc32HAMIWoczx+fZwEPRHm/VwtrJzRGwR1qGZXEYV3Zp8ZjjbwaZhMrM6uHV4KVkk+XCc2w== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^3.0.1" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.1, minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -minizlib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.0.1.tgz#46d5329d1eb3c83924eff1d3b858ca0a31581012" - integrity sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg== - dependencies: - minipass "^7.0.4" - rimraf "^5.0.5" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - -mri@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" - integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@^2.1.1, ms@^2.1.2, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mute-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" - integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - 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" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@^0.6.3: - version "0.6.4" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - -negotiator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" - integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nerf-dart@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" - integrity sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-emoji@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.1.3.tgz#93cfabb5cc7c3653aa52f29d6ffb7927d8047c06" - integrity sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA== - dependencies: - "@sindresorhus/is" "^4.6.0" - char-regex "^1.0.2" - emojilib "^2.4.0" - skin-tone "^2.0.0" - -node-gyp@^10.0.0, node-gyp@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.2.0.tgz#80101c4aa4f7ab225f13fcc8daaaac4eb1a8dd86" - integrity sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^10.3.10" - graceful-fs "^4.2.6" - make-fetch-happen "^13.0.0" - nopt "^7.0.0" - proc-log "^4.1.0" - semver "^7.3.5" - tar "^6.2.1" - which "^4.0.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== - -nopt@^7.0.0, nopt@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" - integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== - dependencies: - abbrev "^2.0.0" - -nopt@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-8.0.0.tgz#644f1e78da564b70e3606ab8db4836b0e32e198a" - integrity sha512-1L/fTJ4UmV/lUxT2Uf006pfZKTvAgCF+chz+0OgBHO8u2Z67pE7AaAUUj7CJy0lXqHmymUvGFt6NE9R3HER0yw== - dependencies: - abbrev "^2.0.0" - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" - integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== - dependencies: - hosted-git-info "^7.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-package-data@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-7.0.0.tgz#ab4f49d02f2e25108d3f4326f3c13f0de6fa6a0a" - integrity sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA== - dependencies: - hosted-git-info "^8.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" - integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== - -npm-audit-report@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-6.0.0.tgz#0262e5e2b674fabf0ea47e900fc7384b83de0fbb" - integrity sha512-Ag6Y1irw/+CdSLqEEAn69T8JBgBThj5mw0vuFIKeP7hATYuQuS5jkMjK6xmVB8pr7U4g5Audbun0lHhBDMIBRA== - -npm-bundled@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-4.0.0.tgz#f5b983f053fe7c61566cf07241fab2d4e9d513d3" - integrity sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA== - dependencies: - npm-normalize-package-bin "^4.0.0" - -npm-install-checks@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" - integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== - dependencies: - semver "^7.1.1" - -npm-install-checks@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-7.1.0.tgz#e365040c95d59571aaed3d6ebb83f7d9ddd347b8" - integrity sha512-bkTildVlofeMX7wiOaWk3PlW7YcBXAuEc7TWpOxwUgalG5ZvgT/ms+6OX9zt7iGLv4+VhKbRZhpOfgQJzk1YAw== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-normalize-package-bin@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1" - integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== - -npm-package-arg@^11.0.0: - version "11.0.3" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" - integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== - dependencies: - hosted-git-info "^7.0.0" - proc-log "^4.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-package-arg@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-12.0.0.tgz#c2a6631c09d244c6bc35a46c38cbd94d53e9829a" - integrity sha512-ZTE0hbwSdTNL+Stx2zxSqdu2KZfNDcrtrLdIk7XGnQFYBWYDho/ORvXtn5XEePcL3tFpGjHCV3X3xrtDh7eZ+A== - dependencies: - hosted-git-info "^8.0.0" - proc-log "^5.0.0" - semver "^7.3.5" - validate-npm-package-name "^6.0.0" - -npm-packlist@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-9.0.0.tgz#8e9b061bab940de639dd93d65adc95c34412c7d0" - integrity sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ== - dependencies: - ignore-walk "^7.0.0" - -npm-pick-manifest@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz#6cc120c6473ceea56dfead500f00735b2b892851" - integrity sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ== - dependencies: - npm-install-checks "^7.1.0" - npm-normalize-package-bin "^4.0.0" - npm-package-arg "^12.0.0" - semver "^7.3.5" - -npm-pick-manifest@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" - integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^11.0.0" - semver "^7.3.5" - -npm-profile@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-11.0.1.tgz#6ffac43f3d186316d37e80986d84aef2470269a2" - integrity sha512-HP5Cw9WHwFS9vb4fxVlkNAQBUhVL5BmW6rAR+/JWkpwqcFJid7TihKUdYDWqHl0NDfLd0mpucheGySqo8ysyfw== - dependencies: - npm-registry-fetch "^18.0.0" - proc-log "^5.0.0" - -npm-registry-fetch@^18.0.0, npm-registry-fetch@^18.0.1: - version "18.0.2" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz#340432f56b5a8b1af068df91aae0435d2de646b5" - integrity sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ== - dependencies: - "@npmcli/redact" "^3.0.0" - jsonparse "^1.3.1" - make-fetch-happen "^14.0.0" - minipass "^7.0.2" - minipass-fetch "^4.0.0" - minizlib "^3.0.1" - npm-package-arg "^12.0.0" - proc-log "^5.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" - integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== - dependencies: - path-key "^4.0.0" - -npm-run-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" - integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== - dependencies: - path-key "^4.0.0" - unicorn-magic "^0.3.0" - -npm-user-validate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-3.0.0.tgz#9b1410796bf1f1d78297a8096328c55d3083f233" - integrity sha512-9xi0RdSmJ4mPYTC393VJPz1Sp8LyCx9cUnm/L9Qcb3cFO8gjT4mN20P9FAsea8qDHdQ7LtcN8VLh2UT47SdKCw== - -npm@^10.5.0: - version "10.9.0" - resolved "https://registry.yarnpkg.com/npm/-/npm-10.9.0.tgz#46903bc06cb8a5fd51372647920fe4b830efb8d8" - integrity sha512-ZanDioFylI9helNhl2LNd+ErmVD+H5I53ry41ixlLyCBgkuYb+58CvbAp99hW+zr5L9W4X7CchSoeqKdngOLSw== - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^8.0.0" - "@npmcli/config" "^9.0.0" - "@npmcli/fs" "^4.0.0" - "@npmcli/map-workspaces" "^4.0.1" - "@npmcli/package-json" "^6.0.1" - "@npmcli/promise-spawn" "^8.0.1" - "@npmcli/redact" "^3.0.0" - "@npmcli/run-script" "^9.0.1" - "@sigstore/tuf" "^2.3.4" - abbrev "^3.0.0" - archy "~1.0.0" - cacache "^19.0.1" - chalk "^5.3.0" - ci-info "^4.0.0" - cli-columns "^4.0.0" - fastest-levenshtein "^1.0.16" - fs-minipass "^3.0.3" - glob "^10.4.5" - graceful-fs "^4.2.11" - hosted-git-info "^8.0.0" - ini "^5.0.0" - init-package-json "^7.0.1" - is-cidr "^5.1.0" - json-parse-even-better-errors "^4.0.0" - libnpmaccess "^9.0.0" - libnpmdiff "^7.0.0" - libnpmexec "^9.0.0" - libnpmfund "^6.0.0" - libnpmhook "^11.0.0" - libnpmorg "^7.0.0" - libnpmpack "^8.0.0" - libnpmpublish "^10.0.0" - libnpmsearch "^8.0.0" - libnpmteam "^7.0.0" - libnpmversion "^7.0.0" - make-fetch-happen "^14.0.1" - minimatch "^9.0.5" - minipass "^7.1.1" - minipass-pipeline "^1.2.4" - ms "^2.1.2" - node-gyp "^10.2.0" - nopt "^8.0.0" - normalize-package-data "^7.0.0" - npm-audit-report "^6.0.0" - npm-install-checks "^7.1.0" - npm-package-arg "^12.0.0" - npm-pick-manifest "^10.0.0" - npm-profile "^11.0.1" - npm-registry-fetch "^18.0.1" - npm-user-validate "^3.0.0" - p-map "^4.0.0" - pacote "^19.0.0" - parse-conflict-json "^4.0.0" - proc-log "^5.0.0" - qrcode-terminal "^0.12.0" - read "^4.0.0" - semver "^7.6.3" - spdx-expression-parse "^4.0.0" - ssri "^12.0.0" - supports-color "^9.4.0" - tar "^6.2.1" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^3.0.0" - validate-npm-package-name "^6.0.0" - which "^5.0.0" - write-file-atomic "^6.0.0" - -nwsapi@^2.2.2: - version "2.2.13" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.13.tgz#e56b4e98960e7a040e5474536587e599c4ff4655" - integrity sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ== - -obj-props@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/obj-props/-/obj-props-1.4.0.tgz#9a9beebb6faf8b287ff7dc1cd133a4247dc85641" - integrity sha512-p7p/7ltzPDiBs6DqxOrIbtRdwxxVRBj5ROukeNb9RgA+fawhrz5n2hpNz8DDmYR//tviJSj7nUnlppGmONkjiQ== - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.4, object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.entries@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" - integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -object.fromentries@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" - integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.groupby@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -object.values@^1.1.6, object.values@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -onetime@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" - integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== - dependencies: - mimic-function "^5.0.0" - -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - 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" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-each-series@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-3.0.0.tgz#d1aed5e96ef29864c897367a7d2a628fdc960806" - integrity sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw== - -p-filter@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-4.1.0.tgz#fe0aa794e2dfad8ecf595a39a245484fcd09c6e4" - integrity sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw== - dependencies: - p-map "^7.0.1" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-is-promise@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" - integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^7.0.1, p-map@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.2.tgz#7c5119fada4755660f70199a66aa3fe2f85a1fe8" - integrity sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q== - -p-reduce@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-reduce@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-3.0.0.tgz#f11773794792974bd1f7a14c72934248abff4160" - integrity sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q== - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json-from-dist@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" - integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== - -pacote@^19.0.0: - version "19.0.1" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-19.0.1.tgz#66d22dbd274ed8a7c30029d70eb8030f5151e6fc" - integrity sha512-zIpxWAsr/BvhrkSruspG8aqCQUUrWtpwx0GjiRZQhEM/pZXrigA32ElN3vTcCPUDOFmHr6SFxwYrvVUs5NTEUg== - dependencies: - "@npmcli/git" "^6.0.0" - "@npmcli/installed-package-contents" "^3.0.0" - "@npmcli/package-json" "^6.0.0" - "@npmcli/promise-spawn" "^8.0.0" - "@npmcli/run-script" "^9.0.0" - cacache "^19.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^12.0.0" - npm-packlist "^9.0.0" - npm-pick-manifest "^10.0.0" - npm-registry-fetch "^18.0.0" - proc-log "^5.0.0" - promise-retry "^2.0.1" - sigstore "^3.0.0" - ssri "^12.0.0" - tar "^6.1.11" - -pacote@^20.0.0: - version "20.0.0" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-20.0.0.tgz#c974373d8e0859d00e8f9158574350f8c1b168e5" - integrity sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A== - dependencies: - "@npmcli/git" "^6.0.0" - "@npmcli/installed-package-contents" "^3.0.0" - "@npmcli/package-json" "^6.0.0" - "@npmcli/promise-spawn" "^8.0.0" - "@npmcli/run-script" "^9.0.0" - cacache "^19.0.0" - fs-minipass "^3.0.0" - minipass "^7.0.2" - npm-package-arg "^12.0.0" - npm-packlist "^9.0.0" - npm-pick-manifest "^10.0.0" - npm-registry-fetch "^18.0.0" - proc-log "^5.0.0" - promise-retry "^2.0.1" - sigstore "^3.0.0" - ssri "^12.0.0" - tar "^6.1.11" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-conflict-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-4.0.0.tgz#996b1edfc0c727583b56c7644dbb3258fc9e9e4b" - integrity sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ== - dependencies: - json-parse-even-better-errors "^4.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-entities@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.1.tgz#4e2a01111fb1c986549b944af39eeda258fc9e4e" - integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== - dependencies: - "@types/unist" "^2.0.0" - character-entities "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - 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" - -parse-json@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.1.1.tgz#68f7e6f0edf88c54ab14c00eb700b753b14e2120" - integrity sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw== - dependencies: - "@babel/code-frame" "^7.21.4" - error-ex "^1.3.2" - json-parse-even-better-errors "^3.0.0" - lines-and-columns "^2.0.3" - type-fest "^3.8.0" - -parse-json@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.1.0.tgz#91cdc7728004e955af9cb734de5684733b24a717" - integrity sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA== - dependencies: - "@babel/code-frame" "^7.22.13" - index-to-position "^0.1.2" - type-fest "^4.7.1" - -parse-ms@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" - integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== - -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parse5@^7.0.0, parse5@^7.1.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" - integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== - dependencies: - entities "^4.5.0" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -path-type@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-5.0.0.tgz#14b01ed7aea7ddf9c7c3f46181d4d04f9c785bb8" - integrity sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg== - -picocolors@^1.0.0, picocolors@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pidtree@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pirates@^4.0.1, pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-conf@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" - integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== - dependencies: - find-up "^2.0.0" - load-json-file "^4.0.0" - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-dir@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" - integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== - dependencies: - find-up "^6.3.0" - -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss-selector-parser@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^3.2.5: - version "3.3.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" - integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== - -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-ms@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.1.0.tgz#0ad44de6086454f48a168e5abb3c26f8db1b3253" - integrity sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw== - dependencies: - parse-ms "^4.0.0" - -proc-log@^4.0.0, proc-log@^4.1.0, proc-log@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" - integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== - -proc-log@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8" - integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -proggy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/proggy/-/proggy-3.0.0.tgz#874e91fed27fe00a511758e83216a6b65148bd6c" - integrity sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-3.0.2.tgz#524b7f4b97729ff70417d93d24f46f0265efa4f9" - integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -promzard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-2.0.0.tgz#03ad0e4db706544dfdd4f459281f13484fc10c49" - integrity sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg== - dependencies: - read "^4.0.0" - -prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -proto-props@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/proto-props/-/proto-props-2.0.0.tgz#8ac6e6dec658545815c623a3bc81580deda9a181" - integrity sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" - integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pure-rand@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" - integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== - -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -react-error-boundary@^3.1.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/react-error-boundary/-/react-error-boundary-3.1.4.tgz#255db92b23197108757a888b01e5b729919abde0" - integrity sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA== - dependencies: - "@babel/runtime" "^7.12.5" - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-is@^18.0.0: - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" - integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== - -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -read-cmd-shim@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz#6e5450492187a0749f6c80dcbef0debc1117acca" - integrity sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw== - -read-package-json-fast@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-package-json-fast@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz#8ccbc05740bb9f58264f400acc0b4b4eee8d1b39" - integrity sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg== - dependencies: - json-parse-even-better-errors "^4.0.0" - npm-normalize-package-bin "^4.0.0" - -read-package-up@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/read-package-up/-/read-package-up-11.0.0.tgz#71fb879fdaac0e16891e6e666df22de24a48d5ba" - integrity sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ== - dependencies: - find-up-simple "^1.0.0" - read-pkg "^9.0.0" - type-fest "^4.6.0" - -read-pkg-up@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-11.0.0.tgz#8916ffc6af2a7538b43bcc2c6445d4450ffe5a74" - integrity sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q== - dependencies: - find-up-simple "^1.0.0" - read-pkg "^9.0.0" - type-fest "^4.6.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read-pkg@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" - integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== - dependencies: - "@types/normalize-package-data" "^2.4.3" - normalize-package-data "^6.0.0" - parse-json "^8.0.0" - type-fest "^4.6.0" - unicorn-magic "^0.1.0" - -read@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read/-/read-4.0.0.tgz#46a989a22dfefe4eab2327e40e40b05eca727370" - integrity sha512-nbYGT3cec3J5NPUeJia7l72I3oIzMIB6yeNyDqi8CVHr3WftwjrCUqR0j13daoHEMVaZ/rxCpmHKrbods3hI2g== - dependencies: - mute-stream "^2.0.0" - -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - 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" - -readable-stream@^3.0.2, readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -reflect.getprototypeof@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" - integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.1" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - globalthis "^1.0.3" - which-builtin-type "^1.1.3" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp-tree@^0.1.27: - version "0.1.27" - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" - integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== - -regexp.prototype.flags@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" - integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.2" - -registry-auth-token@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" - integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== - dependencies: - "@pnpm/npm-conf" "^2.1.0" - -regjsparser@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.10.0.tgz#b1ed26051736b436f22fdec1c8f72635f9f44892" - integrity sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA== - dependencies: - jsesc "~0.5.0" - -remark-mdx@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.1.0.tgz#f979be729ecb35318fa48e2135c1169607a78343" - integrity sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA== - dependencies: - mdast-util-mdx "^3.0.0" - micromark-extension-mdxjs "^3.0.0" - -remark-parse@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" - integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - micromark-util-types "^2.0.0" - unified "^11.0.0" - -remark-stringify@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" - integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-to-markdown "^2.0.0" - unified "^11.0.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.10.0, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^2.0.0-next.5: - version "2.0.0-next.5" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" - integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -restore-cursor@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" - integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== - dependencies: - onetime "^7.0.0" - signal-exit "^4.1.0" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@^5.0.5: - version "5.0.10" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.10.tgz#23b9843d3dc92db71f96e1a2ce92e39fd2a8221c" - integrity sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ== - dependencies: - glob "^10.3.7" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5, rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -sade@^1.7.3: - version "1.8.1" - resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" - integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== - dependencies: - mri "^1.1.0" - -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== - dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -saxes@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" - integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== - dependencies: - xmlchars "^2.2.0" - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -semantic-release@^23.0.2: - version "23.1.1" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-23.1.1.tgz#5c1a058748f4001f1c730716134a70b9e8e5b311" - integrity sha512-qqJDBhbtHsjUEMsojWKGuL5lQFCJuPtiXKEIlFKyTzDDGTAE/oyvznaP8GeOr5PvcqBJ6LQz4JCENWPLeehSpA== - dependencies: - "@semantic-release/commit-analyzer" "^12.0.0" - "@semantic-release/error" "^4.0.0" - "@semantic-release/github" "^10.0.0" - "@semantic-release/npm" "^12.0.0" - "@semantic-release/release-notes-generator" "^13.0.0" - aggregate-error "^5.0.0" - cosmiconfig "^9.0.0" - debug "^4.0.0" - env-ci "^11.0.0" - execa "^9.0.0" - figures "^6.0.0" - find-versions "^6.0.0" - get-stream "^6.0.0" - git-log-parser "^1.2.0" - hook-std "^3.0.0" - hosted-git-info "^7.0.0" - import-from-esm "^1.3.1" - lodash-es "^4.17.21" - marked "^12.0.0" - marked-terminal "^7.0.0" - micromatch "^4.0.2" - p-each-series "^3.0.0" - p-reduce "^3.0.0" - read-package-up "^11.0.0" - resolve-from "^5.0.0" - semver "^7.3.2" - semver-diff "^4.0.0" - signale "^1.2.1" - yargs "^17.5.1" - -semver-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" - integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== - dependencies: - semver "^7.3.5" - -semver-regex@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-4.0.5.tgz#fbfa36c7ba70461311f5debcb3928821eb4f9180" - integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - 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" - -set-function-name@^2.0.1, set-function-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" - integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.2" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -side-channel@^1.0.4, side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1, signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -signale@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" - integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== - dependencies: - chalk "^2.3.2" - figures "^2.0.0" - pkg-conf "^2.1.0" - -sigstore@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-2.3.1.tgz#0755dd2cc4820f2e922506da54d3d628e13bfa39" - integrity sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ== - dependencies: - "@sigstore/bundle" "^2.3.2" - "@sigstore/core" "^1.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - "@sigstore/sign" "^2.3.2" - "@sigstore/tuf" "^2.3.4" - "@sigstore/verify" "^1.2.1" - -sigstore@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-3.0.0.tgz#d6eadcc6590185a7f1c16184078ce8a9ef6db937" - integrity sha512-PHMifhh3EN4loMcHCz6l3v/luzgT3za+9f8subGgeMNjbJjzH4Ij/YoX3Gvu+kaouJRIlVdTHHCREADYf+ZteA== - dependencies: - "@sigstore/bundle" "^3.0.0" - "@sigstore/core" "^2.0.0" - "@sigstore/protobuf-specs" "^0.3.2" - "@sigstore/sign" "^3.0.0" - "@sigstore/tuf" "^3.0.0" - "@sigstore/verify" "^2.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -skin-tone@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" - integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== - dependencies: - unicode-emoji-modifier-base "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce" - integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -slice-ansi@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9" - integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== - dependencies: - ansi-styles "^6.2.1" - is-fullwidth-code-point "^5.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - 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" - -socks-proxy-agent@^8.0.3: - version "8.0.4" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c" - integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw== - dependencies: - agent-base "^7.1.1" - debug "^4.3.4" - socks "^2.8.3" - -socks@^2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5" - integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== - dependencies: - ip-address "^9.0.5" - smart-buffer "^4.2.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -spawn-error-forwarder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" - integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-expression-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz#a23af9f3132115465dac215c099303e4ceac5794" - integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.20" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" - integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -split2@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" - integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== - dependencies: - through2 "~2.0.0" - -sprintf-js@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" - integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -ssri@^10.0.0: - version "10.0.6" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5" - integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== - dependencies: - minipass "^7.0.3" - -ssri@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-12.0.0.tgz#bcb4258417c702472f8191981d3c8a771fee6832" - integrity sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ== - dependencies: - minipass "^7.0.3" - -stack-utils@^2.0.2, stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stream-combiner2@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -string-argv@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" - integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string-width@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518" - integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^10.2.1" - strip-ansi "^7.0.1" - -string-width@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" - integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== - dependencies: - emoji-regex "^10.3.0" - get-east-asian-width "^1.0.0" - strip-ansi "^7.1.0" - -string.prototype.matchall@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" - integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.7" - regexp.prototype.flags "^1.5.2" - set-function-name "^2.0.2" - side-channel "^1.0.6" - -string.prototype.repeat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" - integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.0" - es-object-atoms "^1.0.0" - -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string.prototype.trimstart@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" - integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-object-atoms "^1.0.0" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1, strip-ansi@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@4.0.0, strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-final-newline@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" - integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@3.1.1, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -super-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/super-regex/-/super-regex-1.0.0.tgz#dd90d944a925a1083e7d8570919b21cb76e3d925" - integrity sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg== - dependencies: - function-timeout "^1.0.1" - time-span "^5.1.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0, supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^9.0.0, supports-color@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" - integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== - -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-hyperlinks@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz#b56150ff0173baacc15f21956450b61f2b18d3ac" - integrity sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -synckit@^0.9.0, synckit@^0.9.1: - version "0.9.2" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62" - integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== - dependencies: - "@pkgr/core" "^0.1.0" - tslib "^2.6.2" - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar@^6.1.11, tar@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tar@^7.4.3: - version "7.4.3" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571" - integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== - dependencies: - "@isaacs/fs-minipass" "^4.0.0" - chownr "^3.0.0" - minipass "^7.1.2" - minizlib "^3.0.1" - mkdirp "^3.0.1" - yallist "^5.0.0" - -temp-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-3.0.0.tgz#7f147b42ee41234cc6ba3138cd8e8aa2302acffa" - integrity sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw== - -tempy@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-3.1.0.tgz#00958b6df85db8589cb595465e691852aac038e9" - integrity sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g== - dependencies: - is-stream "^3.0.0" - temp-dir "^3.0.0" - type-fest "^2.12.2" - unique-string "^3.0.0" - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-extensions@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.4.0.tgz#a1cfcc50cf34da41bfd047cc744f804d1680ea34" - integrity sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== - -text-table@^0.2.0, text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -"through@>=2.2.7 <3", through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -time-span@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/time-span/-/time-span-5.1.0.tgz#80c76cf5a0ca28e0842d3f10a4e99034ce94b90d" - integrity sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA== - dependencies: - convert-hrtime "^5.0.0" - -tiny-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" - integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== - -tinyexec@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.1.tgz#0ab0daf93b43e2c211212396bdb836b468c97c98" - integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@^4.1.2: - version "4.1.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" - integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== - dependencies: - punycode "^2.1.1" - -traverse@0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.8.tgz#5e5e0c41878b57e4b73ad2f3d1e36a715ea4ab15" - integrity sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA== - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== - -ts-api-utils@^1.0.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.0.tgz#709c6f2076e511a81557f3d07a0cbd566ae8195c" - integrity sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ== - -ts-jest@^29.1.2: - version "29.2.5" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63" - integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA== - dependencies: - bs-logger "^0.2.6" - ejs "^3.1.10" - fast-json-stable-stringify "^2.1.0" - jest-util "^29.0.0" - json5 "^2.2.3" - lodash.memoize "^4.1.2" - make-error "^1.3.6" - semver "^7.6.3" - yargs-parser "^21.1.1" - -ts-node@^10.9.2: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.6.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tuf-js@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-2.2.1.tgz#fdd8794b644af1a75c7aaa2b197ddffeb2911b56" - integrity sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA== - dependencies: - "@tufjs/models" "2.0.1" - debug "^4.3.4" - make-fetch-happen "^13.0.1" - -tuf-js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-3.0.1.tgz#e3f07ed3d8e87afaa70607bd1ef801d5c1f57177" - integrity sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA== - dependencies: - "@tufjs/models" "3.0.1" - debug "^4.3.6" - make-fetch-happen "^14.0.1" - -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-fest@^1.0.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -type-fest@^2.12.2: - version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-fest@^3.8.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" - integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== - -type-fest@^4.6.0, type-fest@^4.7.1: - version "4.26.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.1.tgz#a4a17fa314f976dd3e6d6675ef6c775c16d7955e" - integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== - -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== - 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" - -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== - 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" - -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== - 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" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^5.3.3: - version "5.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== - -uglify-js@^3.1.4: - version "3.19.3" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" - integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici-types@~6.19.8: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -undici@^5.25.4: - version "5.28.4" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" - integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== - dependencies: - "@fastify/busboy" "^2.0.0" - -unicode-emoji-modifier-base@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" - integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== - -unicorn-magic@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" - integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== - -unicorn-magic@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" - integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== - -unified-engine@^11.2.0: - version "11.2.2" - resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-11.2.2.tgz#9e2f7e477cc1f431ae5489d67c7363b00b835d7f" - integrity sha512-15g/gWE7qQl9tQ3nAEbMd5h9HV1EACtFs6N9xaRBZICoCwnNGbal1kOs++ICf4aiTdItZxU2s/kYWhW7htlqJg== - dependencies: - "@types/concat-stream" "^2.0.0" - "@types/debug" "^4.0.0" - "@types/is-empty" "^1.0.0" - "@types/node" "^22.0.0" - "@types/unist" "^3.0.0" - concat-stream "^2.0.0" - debug "^4.0.0" - extend "^3.0.0" - glob "^10.0.0" - ignore "^6.0.0" - is-empty "^1.0.0" - is-plain-obj "^4.0.0" - load-plugin "^6.0.0" - parse-json "^7.0.0" - trough "^2.0.0" - unist-util-inspect "^8.0.0" - vfile "^6.0.0" - vfile-message "^4.0.0" - vfile-reporter "^8.0.0" - vfile-statistics "^3.0.0" - yaml "^2.0.0" - -unified@^11.0.0, unified@^11.0.4: - version "11.0.5" - resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" - integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== - dependencies: - "@types/unist" "^3.0.0" - bail "^2.0.0" - devlop "^1.0.0" - extend "^3.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^6.0.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-filename@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-4.0.0.tgz#a06534d370e7c977a939cd1d11f7f0ab8f1fed13" - integrity sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ== - dependencies: - unique-slug "^5.0.0" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-5.0.0.tgz#ca72af03ad0dbab4dad8aa683f633878b1accda8" - integrity sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - -unist-util-inspect@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/unist-util-inspect/-/unist-util-inspect-8.1.0.tgz#ff2729b543c483041b3c29cbe04c5460a406ee25" - integrity sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200" - integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== - dependencies: - "@types/unist" "^2.0.2" - -unist-util-stringify-position@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" - integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-visit-parents@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" - integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -universal-user-agent@^7.0.0, universal-user-agent@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.2.tgz#52e7d0e9b3dc4df06cc33cb2b9fd79041a54827e" - integrity sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q== - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -update-browserslist-db@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" - integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-join@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" - integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uvu@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" - integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== - dependencies: - dequal "^2.0.0" - diff "^5.0.0" - kleur "^4.0.3" - sade "^1.7.3" - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -v8-to-istanbul@^9.0.1: - version "9.3.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" - integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" - integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== - -validate-npm-package-name@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz#3add966c853cfe36e0e8e6a762edd72ae6f1d6ac" - integrity sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg== - -vfile-message@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" - integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - -vfile-reporter@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-8.1.1.tgz#ac06a5a68f1b480609c443062dffea1cfa2d11b1" - integrity sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g== - dependencies: - "@types/supports-color" "^8.0.0" - string-width "^6.0.0" - supports-color "^9.0.0" - unist-util-stringify-position "^4.0.0" - vfile "^6.0.0" - vfile-message "^4.0.0" - vfile-sort "^4.0.0" - vfile-statistics "^3.0.0" - -vfile-sort@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-4.0.0.tgz#fa1929065b62fe5311e5391c9434f745e8641703" - integrity sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ== - dependencies: - vfile "^6.0.0" - vfile-message "^4.0.0" - -vfile-statistics@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-3.0.0.tgz#0f5cd00c611c1862b13a9b5bc5599efaf465f2cf" - integrity sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w== - dependencies: - vfile "^6.0.0" - vfile-message "^4.0.0" - -vfile@^6.0.0, vfile@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" - integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== - dependencies: - "@types/unist" "^3.0.0" - vfile-message "^4.0.0" - -w3c-xmlserializer@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" - integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== - dependencies: - xml-name-validator "^4.0.0" - -walk-up-path@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" - integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== - -walker@^1.0.7, walker@^1.0.8, walker@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -whatwg-encoding@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" - integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== - dependencies: - iconv-lite "0.6.3" - -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== - -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - 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" - -which-builtin-type@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" - integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== - dependencies: - function.prototype.name "^1.1.6" - has-tostringtag "^1.0.2" - is-async-function "^2.0.0" - is-date-object "^1.0.5" - is-finalizationregistry "^1.0.2" - is-generator-function "^1.0.10" - is-regex "^1.1.4" - is-weakref "^1.0.2" - isarray "^2.0.5" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.2" - which-typed-array "^1.1.15" - -which-collection@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" - integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - dependencies: - is-map "^2.0.3" - is-set "^2.0.3" - is-weakmap "^2.0.2" - is-weakset "^2.0.3" - -which-typed-array@^1.1.14, which-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== - 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" - -which@^1.2.14, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - -which@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-5.0.0.tgz#d93f2d93f79834d4363c7d0c23e00d07c466c8d6" - integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ== - dependencies: - isexe "^3.1.1" - -word-wrap@^1.0.3, word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrap-ansi@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e" - integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== - dependencies: - ansi-styles "^6.2.1" - string-width "^7.0.0" - strip-ansi "^7.1.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-file-atomic@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-6.0.0.tgz#e9c89c8191b3ef0606bc79fb92681aa1aa16fa93" - integrity sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -ws@^8.11.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - -xml-name-validator@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" - integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yallist@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" - integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== - -yaml@^2.0.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.0.tgz#14059ad9d0b1680d0f04d3a60fe00f3a857303c3" - integrity sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ== - -yaml@~2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.1.tgz#c9772aacf62cb7494a95b0c4f1fb065b563db130" - integrity sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^16.0.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - 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" - -yargs@^17.0.0, yargs@^17.3.1, yargs@^17.5.1, yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - 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" - -yarn@^1.22.21: - version "1.22.22" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.22.tgz#ac34549e6aa8e7ead463a7407e1c7390f61a6610" - integrity sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg== - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" - integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== - -yoctocolors@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.1.tgz#e0167474e9fbb9e8b3ecca738deaa61dd12e56fc" - integrity sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ== - -zwitch@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@actions/core@npm:^1.11.1": + version: 1.11.1 + resolution: "@actions/core@npm:1.11.1" + dependencies: + "@actions/exec": "npm:^1.1.1" + "@actions/http-client": "npm:^2.0.1" + checksum: 10c0/9aa30b397d8d0dbc74e69fe46b23fb105cab989beb420c57eacbfc51c6804abe8da0f46973ca9f639d532ea4c096d0f4d37da0223fbe94f304fa3c5f53537c30 + languageName: node + linkType: hard + +"@actions/exec@npm:^1.1.1": + version: 1.1.1 + resolution: "@actions/exec@npm:1.1.1" + dependencies: + "@actions/io": "npm:^1.0.1" + checksum: 10c0/4a09f6bdbe50ce68b5cf8a7254d176230d6a74bccf6ecc3857feee209a8c950ba9adec87cc5ecceb04110182d1c17117234e45557d72fde6229b7fd3a395322a + languageName: node + linkType: hard + +"@actions/http-client@npm:^2.0.1": + version: 2.2.3 + resolution: "@actions/http-client@npm:2.2.3" + dependencies: + tunnel: "npm:^0.0.6" + undici: "npm:^5.25.4" + checksum: 10c0/13141b66a42aa4afd8c50f7479e13a5cdb5084ccb3c73ec48894b8029743389a3d2bf8cdc18e23fb70cd33995740526dd308815613907571e897c3aa1e5eada6 + languageName: node + linkType: hard + +"@actions/io@npm:^1.0.1": + version: 1.1.3 + resolution: "@actions/io@npm:1.1.3" + checksum: 10c0/5b8751918e5bf0bebd923ba917fb1c0e294401e7ff0037f32c92a4efa4215550df1f6633c63fd4efb2bdaae8711e69b9e36925857db1f38935ff62a5c92ec29e + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.3.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.22.13": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.24.7, @babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/parser@npm:^7.25.4": + version: 7.26.3 + resolution: "@babel/parser@npm:7.26.3" + dependencies: + "@babel/types": "npm:^7.26.3" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/48f736374e61cfd10ddbf7b80678514ae1f16d0e88bc793d2b505d73d9b987ea786fc8c2f7ee8f8b8c467df062030eb07fd0eb2168f0f541ca1f542775852cad + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.12.5": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" + dependencies: + regenerator-runtime: "npm:^0.14.0" + checksum: 10c0/12c01357e0345f89f4f7e8c0e81921f2a3e3e101f06e8eaa18a382b517376520cd2fa8c237726eb094dab25532855df28a7baaf1c26342b52782f6936b07c287 + languageName: node + linkType: hard + +"@babel/types@npm:^7.25.4, @babel/types@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/types@npm:7.26.3" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/966c5242c5e55c8704bf7a7418e7be2703a0afa4d19a8480999d5a4ef13d095dd60686615fe5983cb7593b4b06ba3a7de8d6ca501c1d78bdd233a10d90be787b + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 + languageName: node + linkType: hard + +"@colors/colors@npm:1.5.0": + version: 1.5.0 + resolution: "@colors/colors@npm:1.5.0" + checksum: 10c0/eb42729851adca56d19a08e48d5a1e95efd2a32c55ae0323de8119052be0510d4b7a1611f2abcbf28c044a6c11e6b7d38f99fccdad7429300c37a8ea5fb95b44 + languageName: node + linkType: hard + +"@commitlint/cli@npm:^19.5.0, @commitlint/cli@npm:^19.6.1": + version: 19.6.1 + resolution: "@commitlint/cli@npm:19.6.1" + dependencies: + "@commitlint/format": "npm:^19.5.0" + "@commitlint/lint": "npm:^19.6.0" + "@commitlint/load": "npm:^19.6.1" + "@commitlint/read": "npm:^19.5.0" + "@commitlint/types": "npm:^19.5.0" + tinyexec: "npm:^0.3.0" + yargs: "npm:^17.0.0" + bin: + commitlint: cli.js + checksum: 10c0/fa7a344292f1d25533b195b061bcae0a80434490fae843ad28593c09668f48e9a74906b69f95d26df4152c56c71ab31a0bc169d333e22c6ca53dc54646a2ff19 + languageName: node + linkType: hard + +"@commitlint/config-conventional@npm:^19.5.0": + version: 19.6.0 + resolution: "@commitlint/config-conventional@npm:19.6.0" + dependencies: + "@commitlint/types": "npm:^19.5.0" + conventional-changelog-conventionalcommits: "npm:^7.0.2" + checksum: 10c0/984870138f5d4b947bc2ea8d12fcb8103ef9e6141d0fb50a6e387665495b80b35890d9dc025443a243a53d2a69d7c0bab1d77c5658a6e5a15a3dd7773557fad2 + languageName: node + linkType: hard + +"@commitlint/config-validator@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/config-validator@npm:19.5.0" + dependencies: + "@commitlint/types": "npm:^19.5.0" + ajv: "npm:^8.11.0" + checksum: 10c0/f04b8c66448c9a4f335d1ac9625393d471d2bcc864adc834eeec52ce19939c25475bf90677504df03ab88869e883b4ebfddff68f99f7652900d6b297ef586643 + languageName: node + linkType: hard + +"@commitlint/ensure@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/ensure@npm:19.5.0" + dependencies: + "@commitlint/types": "npm:^19.5.0" + lodash.camelcase: "npm:^4.3.0" + lodash.kebabcase: "npm:^4.1.1" + lodash.snakecase: "npm:^4.1.1" + lodash.startcase: "npm:^4.4.0" + lodash.upperfirst: "npm:^4.3.1" + checksum: 10c0/94955d424da36a4e9390dfb6e128160d1dcd3ffa20b835a9b6fdd92af46bf8897851f19cbeb9d12a70e9b9c36a993d3a48a60893e74f32fe1b601e1e68484d71 + languageName: node + linkType: hard + +"@commitlint/execute-rule@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/execute-rule@npm:19.5.0" + checksum: 10c0/966dfc09ae3fe609527fb49c7773ae210ade9d14a802a92a57ab251900a77d2968aed08df6b34f175bf4ae9bf5d675b52b346e7b10b717e8a635499e4cf42267 + languageName: node + linkType: hard + +"@commitlint/format@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/format@npm:19.5.0" + dependencies: + "@commitlint/types": "npm:^19.5.0" + chalk: "npm:^5.3.0" + checksum: 10c0/209a3d530d028d483886ea2337d6ec8a95b61119f53f7f1db167b13fd8a204bdcbcd704e649406a0b2285e8424b3bac9e1e6856d2a78f45e176976b9efb76e45 + languageName: node + linkType: hard + +"@commitlint/is-ignored@npm:^19.6.0": + version: 19.6.0 + resolution: "@commitlint/is-ignored@npm:19.6.0" + dependencies: + "@commitlint/types": "npm:^19.5.0" + semver: "npm:^7.6.0" + checksum: 10c0/64e3522598f131aefab72e78f2b0d5d78228041fbe14fd9785611bd5a4ff7dfae38288ff87b171ab2ff722342983387b6e568ab4d758f3c97866eb924252e6c5 + languageName: node + linkType: hard + +"@commitlint/lint@npm:^19.6.0": + version: 19.6.0 + resolution: "@commitlint/lint@npm:19.6.0" + dependencies: + "@commitlint/is-ignored": "npm:^19.6.0" + "@commitlint/parse": "npm:^19.5.0" + "@commitlint/rules": "npm:^19.6.0" + "@commitlint/types": "npm:^19.5.0" + checksum: 10c0/d7e3c6a43d89b2196362dce5abef6665869844455176103f311cab7a92f6b7be60edec4f03d27b946a65ee2ceb8ff16f5955cba1da6ecdeb9efe9f215b16f47f + languageName: node + linkType: hard + +"@commitlint/load@npm:^19.6.1": + version: 19.6.1 + resolution: "@commitlint/load@npm:19.6.1" + dependencies: + "@commitlint/config-validator": "npm:^19.5.0" + "@commitlint/execute-rule": "npm:^19.5.0" + "@commitlint/resolve-extends": "npm:^19.5.0" + "@commitlint/types": "npm:^19.5.0" + chalk: "npm:^5.3.0" + cosmiconfig: "npm:^9.0.0" + cosmiconfig-typescript-loader: "npm:^6.1.0" + lodash.isplainobject: "npm:^4.0.6" + lodash.merge: "npm:^4.6.2" + lodash.uniq: "npm:^4.5.0" + checksum: 10c0/3f92ef6a592491dbb48ae985ef8e3897adccbbb735c09425304cbe574a0ec392b2d724ca14ebb99107e32f60bbec3b873ab64e87fea6d5af7aa579a9052a626e + languageName: node + linkType: hard + +"@commitlint/message@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/message@npm:19.5.0" + checksum: 10c0/72b990ba8c3c41441bff2126f4ea536a635c9768dee7000b4951770ac82c5e0bb4c2d408cf28cadbf51a0abbdb7a09ddd36e0968af0997fcc166596d4c3866a7 + languageName: node + linkType: hard + +"@commitlint/parse@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/parse@npm:19.5.0" + dependencies: + "@commitlint/types": "npm:^19.5.0" + conventional-changelog-angular: "npm:^7.0.0" + conventional-commits-parser: "npm:^5.0.0" + checksum: 10c0/63655cedcf48b29613ef959155ee83f49942406abe40ee6b64ad989a169a0582451dcf15a9c9b69a66011ae451ab2e086fb80c1823cc7ddf275705ff627660b1 + languageName: node + linkType: hard + +"@commitlint/read@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/read@npm:19.5.0" + dependencies: + "@commitlint/top-level": "npm:^19.5.0" + "@commitlint/types": "npm:^19.5.0" + git-raw-commits: "npm:^4.0.0" + minimist: "npm:^1.2.8" + tinyexec: "npm:^0.3.0" + checksum: 10c0/c2d6f958930e815337a4994779ca1dfcbbb6b81b8f3098cc7380e2cc5ddeae69ebd839b48fecd08950e565d43bc42c479915c578eaf57b3877706bca1fad6b8a + languageName: node + linkType: hard + +"@commitlint/resolve-extends@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/resolve-extends@npm:19.5.0" + dependencies: + "@commitlint/config-validator": "npm:^19.5.0" + "@commitlint/types": "npm:^19.5.0" + global-directory: "npm:^4.0.1" + import-meta-resolve: "npm:^4.0.0" + lodash.mergewith: "npm:^4.6.2" + resolve-from: "npm:^5.0.0" + checksum: 10c0/10569a46036b7aa93c77dc5001a67bc9f36b340b97b2fd39b5ee95b0efc5e35335c61f86d4ba0bb5a8e6dd49ccf956990cce9ee29cfea9ba567e02668be01841 + languageName: node + linkType: hard + +"@commitlint/rules@npm:^19.6.0": + version: 19.6.0 + resolution: "@commitlint/rules@npm:19.6.0" + dependencies: + "@commitlint/ensure": "npm:^19.5.0" + "@commitlint/message": "npm:^19.5.0" + "@commitlint/to-lines": "npm:^19.5.0" + "@commitlint/types": "npm:^19.5.0" + checksum: 10c0/1d93b741cfb46e6c5314ddb03282844b65db832aa4767561bb37e9d0595d02330e6a0a557fb66f86d78b2ffd91cd2ed794899df59ee23b27abc44e1e57b42d0e + languageName: node + linkType: hard + +"@commitlint/to-lines@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/to-lines@npm:19.5.0" + checksum: 10c0/7674b4b6887c09e84728b9fa9c986ab77db400bf53ec83aaae84e03e0f3ed33088d450d1f67135f0f7a4cbc1121181775199779e1ca162fe604c902987e3008f + languageName: node + linkType: hard + +"@commitlint/top-level@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/top-level@npm:19.5.0" + dependencies: + find-up: "npm:^7.0.0" + checksum: 10c0/8c1edc513c8d6655606e52d160d31ccd4b13234400ca67d21782798ab66701780b1ec21a7bb411fe8270db7735f10d39d3b0a3e52f3ddd1109b80741eb512bb4 + languageName: node + linkType: hard + +"@commitlint/types@npm:^19.5.0": + version: 19.5.0 + resolution: "@commitlint/types@npm:19.5.0" + dependencies: + "@types/conventional-commits-parser": "npm:^5.0.0" + chalk: "npm:^5.3.0" + checksum: 10c0/f4a93992f43b23cd5af200c69bb73227fdc0f78a6f7ebcda73dad10d558c1ac66ff164aa6dc3c2ddb322c9ed8b1a89b05f458e40d7c440a0358f435d2d71c2df + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/aix-ppc64@npm:0.21.5" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm64@npm:0.21.5" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-arm@npm:0.21.5" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/android-x64@npm:0.21.5" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-arm64@npm:0.21.5" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/darwin-x64@npm:0.21.5" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-arm64@npm:0.21.5" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/freebsd-x64@npm:0.21.5" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm64@npm:0.21.5" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-arm@npm:0.21.5" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ia32@npm:0.21.5" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-loong64@npm:0.21.5" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-mips64el@npm:0.21.5" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-ppc64@npm:0.21.5" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-riscv64@npm:0.21.5" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-s390x@npm:0.21.5" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/linux-x64@npm:0.21.5" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/netbsd-x64@npm:0.21.5" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/openbsd-x64@npm:0.21.5" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/sunos-x64@npm:0.21.5" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-arm64@npm:0.21.5" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-ia32@npm:0.21.5" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.21.5": + version: 0.21.5 + resolution: "@esbuild/win32-x64@npm:0.21.5" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.4.1": + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.12.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.19.0": + version: 0.19.1 + resolution: "@eslint/config-array@npm:0.19.1" + dependencies: + "@eslint/object-schema": "npm:^2.1.5" + debug: "npm:^4.3.1" + minimatch: "npm:^3.1.2" + checksum: 10c0/43b01f596ddad404473beae5cf95c013d29301c72778d0f5bf8a6699939c8a9a5663dbd723b53c5f476b88b0c694f76ea145d1aa9652230d140fe1161e4a4b49 + languageName: node + linkType: hard + +"@eslint/core@npm:^0.9.0": + version: 0.9.1 + resolution: "@eslint/core@npm:0.9.1" + dependencies: + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/638104b1b5833a9bbf2329f0c0ddf322e4d6c0410b149477e02cd2b78c04722be90c14b91b8ccdef0d63a2404dff72a17b6b412ce489ea429ae6a8fcb8abff28 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^3.2.0": + version: 3.2.0 + resolution: "@eslint/eslintrc@npm:3.2.0" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^10.0.1" + globals: "npm:^14.0.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/43867a07ff9884d895d9855edba41acf325ef7664a8df41d957135a81a477ff4df4196f5f74dc3382627e5cc8b7ad6b815c2cea1b58f04a75aced7c43414ab8b + languageName: node + linkType: hard + +"@eslint/js@npm:9.17.0, @eslint/js@npm:^9.15.0": + version: 9.17.0 + resolution: "@eslint/js@npm:9.17.0" + checksum: 10c0/a0fda8657a01c60aa540f95397754267ba640ffb126e011b97fd65c322a94969d161beeaef57c1441c495da2f31167c34bd38209f7c146c7225072378c3a933d + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.5": + version: 2.1.5 + resolution: "@eslint/object-schema@npm:2.1.5" + checksum: 10c0/5320691ed41ecd09a55aff40ce8e56596b4eb81f3d4d6fe530c50fdd6552d88102d1c1a29d970ae798ce30849752a708772de38ded07a6f25b3da32ebea081d8 + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.2.3": + version: 0.2.4 + resolution: "@eslint/plugin-kit@npm:0.2.4" + dependencies: + levn: "npm:^0.4.1" + checksum: 10c0/1bcfc0a30b1df891047c1d8b3707833bded12a057ba01757a2a8591fdc8d8fe0dbb8d51d4b0b61b2af4ca1d363057abd7d2fb4799f1706b105734f4d3fa0dbf1 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 10c0/6f8027a8cba7f8f7b736718b013f5a38c0476eea67034c94a0d3c375e2b114366ad4419e6a6fa7ffc2ef9c6d3e0435d76dd584a7a1cbac23962fda7650b579e3 + languageName: node + linkType: hard + +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 10c0/aa4e0152171c07879b458d0e8a704b8c3a89a8c0541726c6b65b81e84fd8b7564b5d6c633feadc6598307d34564bd53294b533491424e8e313d7ab6c7bc5dc67 + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.6 + resolution: "@humanfs/node@npm:0.16.6" + dependencies: + "@humanfs/core": "npm:^0.19.1" + "@humanwhocodes/retry": "npm:^0.3.0" + checksum: 10c0/8356359c9f60108ec204cbd249ecd0356667359b2524886b357617c4a7c3b6aace0fd5a369f63747b926a762a88f8a25bc066fa1778508d110195ce7686243e1 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.1 + resolution: "@humanwhocodes/retry@npm:0.3.1" + checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b + languageName: node + linkType: hard + +"@humanwhocodes/retry@npm:^0.4.1": + version: 0.4.1 + resolution: "@humanwhocodes/retry@npm:0.4.1" + checksum: 10c0/be7bb6841c4c01d0b767d9bb1ec1c9359ee61421ce8ba66c249d035c5acdfd080f32d55a5c9e859cdd7868788b8935774f65b2caf24ec0b7bd7bf333791f063b + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@isaacs/string-locale-compare@npm:^1.1.0": + version: 1.1.0 + resolution: "@isaacs/string-locale-compare@npm:1.1.0" + checksum: 10c0/d67226ff7ac544a495c77df38187e69e0e3a0783724777f86caadafb306e2155dc3b5787d5927916ddd7fb4a53561ac8f705448ac3235d18ea60da5854829fdf + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/arborist@npm:^8.0.0": + version: 8.0.0 + resolution: "@npmcli/arborist@npm:8.0.0" + dependencies: + "@isaacs/string-locale-compare": "npm:^1.1.0" + "@npmcli/fs": "npm:^4.0.0" + "@npmcli/installed-package-contents": "npm:^3.0.0" + "@npmcli/map-workspaces": "npm:^4.0.1" + "@npmcli/metavuln-calculator": "npm:^8.0.0" + "@npmcli/name-from-folder": "npm:^3.0.0" + "@npmcli/node-gyp": "npm:^4.0.0" + "@npmcli/package-json": "npm:^6.0.1" + "@npmcli/query": "npm:^4.0.0" + "@npmcli/redact": "npm:^3.0.0" + "@npmcli/run-script": "npm:^9.0.1" + bin-links: "npm:^5.0.0" + cacache: "npm:^19.0.1" + common-ancestor-path: "npm:^1.0.1" + hosted-git-info: "npm:^8.0.0" + json-parse-even-better-errors: "npm:^4.0.0" + json-stringify-nice: "npm:^1.1.4" + lru-cache: "npm:^10.2.2" + minimatch: "npm:^9.0.4" + nopt: "npm:^8.0.0" + npm-install-checks: "npm:^7.1.0" + npm-package-arg: "npm:^12.0.0" + npm-pick-manifest: "npm:^10.0.0" + npm-registry-fetch: "npm:^18.0.1" + pacote: "npm:^19.0.0" + parse-conflict-json: "npm:^4.0.0" + proc-log: "npm:^5.0.0" + proggy: "npm:^3.0.0" + promise-all-reject-late: "npm:^1.0.0" + promise-call-limit: "npm:^3.0.1" + read-package-json-fast: "npm:^4.0.0" + semver: "npm:^7.3.7" + ssri: "npm:^12.0.0" + treeverse: "npm:^3.0.0" + walk-up-path: "npm:^3.0.1" + bin: + arborist: bin/index.js + checksum: 10c0/7ac8bdc87ee054f0343bb8b0455e5fc1c1aa4ee9ba31b990ac490fa67051acbc6546bab6869196799c2487a1da7710be55d657fbbba531a51449e182a611f197 + languageName: node + linkType: hard + +"@npmcli/config@npm:^8.0.0": + version: 8.3.4 + resolution: "@npmcli/config@npm:8.3.4" + dependencies: + "@npmcli/map-workspaces": "npm:^3.0.2" + "@npmcli/package-json": "npm:^5.1.1" + ci-info: "npm:^4.0.0" + ini: "npm:^4.1.2" + nopt: "npm:^7.2.1" + proc-log: "npm:^4.2.0" + semver: "npm:^7.3.5" + walk-up-path: "npm:^3.0.1" + checksum: 10c0/f44af54bd2cdb32b132a861863bfe7936599a4706490136082585ab71e37ef47f201f8d2013b9902b3ff30cc8264f5da70f834c80f0a29953b52a28da20f5ea7 + languageName: node + linkType: hard + +"@npmcli/config@npm:^9.0.0": + version: 9.0.0 + resolution: "@npmcli/config@npm:9.0.0" + dependencies: + "@npmcli/map-workspaces": "npm:^4.0.1" + "@npmcli/package-json": "npm:^6.0.1" + ci-info: "npm:^4.0.0" + ini: "npm:^5.0.0" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + walk-up-path: "npm:^3.0.1" + checksum: 10c0/e059fa1dcf0d931bd9d8ae11cf1823b09945fa451a45d4bd55fd2382022f4f9210ce775fe445d52380324dd4985662f2e2d69c5d572b90eed48a8b904d76eba5 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@npmcli/git@npm:^5.0.0": + version: 5.0.8 + resolution: "@npmcli/git@npm:5.0.8" + dependencies: + "@npmcli/promise-spawn": "npm:^7.0.0" + ini: "npm:^4.1.3" + lru-cache: "npm:^10.0.1" + npm-pick-manifest: "npm:^9.0.0" + proc-log: "npm:^4.0.0" + promise-inflight: "npm:^1.0.1" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^4.0.0" + checksum: 10c0/892441c968404950809c7b515a93b78167ea1db2252f259f390feae22a2c5477f3e1629e105e19a084c05afc56e585bf3f13c2f13b54a06bfd6786f0c8429532 + languageName: node + linkType: hard + +"@npmcli/git@npm:^6.0.0, @npmcli/git@npm:^6.0.1": + version: 6.0.1 + resolution: "@npmcli/git@npm:6.0.1" + dependencies: + "@npmcli/promise-spawn": "npm:^8.0.0" + ini: "npm:^5.0.0" + lru-cache: "npm:^10.0.1" + npm-pick-manifest: "npm:^10.0.0" + proc-log: "npm:^5.0.0" + promise-inflight: "npm:^1.0.1" + promise-retry: "npm:^2.0.1" + semver: "npm:^7.3.5" + which: "npm:^5.0.0" + checksum: 10c0/00ab508fd860b4b9001d9a16a847c2544f0450efc1225cd85c18ddba3de9f6d328719ab28088e21ec445f585b8b79d0da1fb28afd3f64f3e7c86e1b5dad3a5a8 + languageName: node + linkType: hard + +"@npmcli/installed-package-contents@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/installed-package-contents@npm:3.0.0" + dependencies: + npm-bundled: "npm:^4.0.0" + npm-normalize-package-bin: "npm:^4.0.0" + bin: + installed-package-contents: bin/index.js + checksum: 10c0/8bb361251cd13b91ae2d04bfcc59b52ffb8cd475d074259c143b3c29a0c4c0ae90d76cfb2cab00ff61cc76bd0c38591b530ce1bdbbc8a61d60ddc6c9ecbf169b + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^3.0.2": + version: 3.0.6 + resolution: "@npmcli/map-workspaces@npm:3.0.6" + dependencies: + "@npmcli/name-from-folder": "npm:^2.0.0" + glob: "npm:^10.2.2" + minimatch: "npm:^9.0.0" + read-package-json-fast: "npm:^3.0.0" + checksum: 10c0/6bfcf8ca05ab9ddc2bd19c0fd91e9982f03cc6e67b0c03f04ba4d2f29b7d83f96e759c0f8f1f4b6dbe3182272483643a0d1269788352edd0c883d6fbfa2f3f14 + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^4.0.1, @npmcli/map-workspaces@npm:^4.0.2": + version: 4.0.2 + resolution: "@npmcli/map-workspaces@npm:4.0.2" + dependencies: + "@npmcli/name-from-folder": "npm:^3.0.0" + "@npmcli/package-json": "npm:^6.0.0" + glob: "npm:^10.2.2" + minimatch: "npm:^9.0.0" + checksum: 10c0/26af5e5271c52d0986228583218fa04fcea2e0e1052f0c50f5c7941bbfb7be487cc98c2e6732f0a3f515f6d9228d7dc04414f0471f40a33b748e2b4cbb350b86 + languageName: node + linkType: hard + +"@npmcli/metavuln-calculator@npm:^8.0.0": + version: 8.0.1 + resolution: "@npmcli/metavuln-calculator@npm:8.0.1" + dependencies: + cacache: "npm:^19.0.0" + json-parse-even-better-errors: "npm:^4.0.0" + pacote: "npm:^20.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + checksum: 10c0/df9407debeda3f260da0630bd2fce29200ee0e83442dcda8c2f548828782893fb92eebe1bf9bfe58bc205f5cd7a1b42c0835354e97be9c41bd04573c1c83e7c3 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: 10c0/1aa551771d98ab366d4cb06b33efd3bb62b609942f6d9c3bb667c10e5bb39a223d3e330022bc980a44402133e702ae67603862099ac8254dad11f90e77409827 + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/name-from-folder@npm:3.0.0" + checksum: 10c0/d6a508c5b4920fb28c752718b906b36fc2374873eba804668afdac8b3c322e8b97a5f1a74f3448d847c615a10828446821d90caf7cdf603d424a9f40f3a733df + languageName: node + linkType: hard + +"@npmcli/node-gyp@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/node-gyp@npm:4.0.0" + checksum: 10c0/58422c2ce0693f519135dd32b5c5bcbb441823f08f9294d5ec19d9a22925ba1a5ec04a1b96f606f2ab09a5f5db56e704f6e201a485198ce9d11fb6b2705e6e79 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^5.1.1": + version: 5.2.1 + resolution: "@npmcli/package-json@npm:5.2.1" + dependencies: + "@npmcli/git": "npm:^5.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^7.0.0" + json-parse-even-better-errors: "npm:^3.0.0" + normalize-package-data: "npm:^6.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.5.3" + checksum: 10c0/b852e31e3121a0afe5fa20bbf4faa701a59dbc9d9dd7141f7fd57b8e919ce22c1285dcdfea490851fe410fa0f7bc9c397cafba0d268aaa53420a12d7c561dde1 + languageName: node + linkType: hard + +"@npmcli/package-json@npm:^6.0.0, @npmcli/package-json@npm:^6.0.1, @npmcli/package-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@npmcli/package-json@npm:6.1.0" + dependencies: + "@npmcli/git": "npm:^6.0.0" + glob: "npm:^10.2.2" + hosted-git-info: "npm:^8.0.0" + json-parse-even-better-errors: "npm:^4.0.0" + normalize-package-data: "npm:^7.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.5.3" + checksum: 10c0/95cc97f2382084e71a33d2739f0b1e659e32a8449d134d4264ecc2b5ada548069122d95887fe692373e2703b7a296a17e7296a4ce955dfa80c6ce3e00b5fab53 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^7.0.0": + version: 7.0.2 + resolution: "@npmcli/promise-spawn@npm:7.0.2" + dependencies: + which: "npm:^4.0.0" + checksum: 10c0/8f2af5bc2c1b1ccfb9bcd91da8873ab4723616d8bd5af877c0daa40b1e2cbfa4afb79e052611284179cae918c945a1b99ae1c565d78a355bec1a461011e89f71 + languageName: node + linkType: hard + +"@npmcli/promise-spawn@npm:^8.0.0, @npmcli/promise-spawn@npm:^8.0.2": + version: 8.0.2 + resolution: "@npmcli/promise-spawn@npm:8.0.2" + dependencies: + which: "npm:^5.0.0" + checksum: 10c0/fe987dece7b843d9353d4d38982336ab3beabc2dd3c135862a4ba2921aae55b0d334891fe44c6cbbee20626259e54478bf498ad8d380c14c53732b489ae14f40 + languageName: node + linkType: hard + +"@npmcli/query@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/query@npm:4.0.0" + dependencies: + postcss-selector-parser: "npm:^6.1.2" + checksum: 10c0/e4022e7b13e1bbe0b76e0402630244543faf97aa35a10498bba09ca5dbc765786d7666f0b94ecce1588a4c420aca9933cfce0e90f2b3142c1dbec8cc50bca1bc + languageName: node + linkType: hard + +"@npmcli/redact@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/redact@npm:3.0.0" + checksum: 10c0/34823f0d6a3301b310921b9f849f3c9814339bb9cde9555ddd1d51167c51e8b08ca40160eeb86b54041779805502e51251e0fbe0702fb7ab10173901e5d1d28c + languageName: node + linkType: hard + +"@npmcli/run-script@npm:^9.0.0, @npmcli/run-script@npm:^9.0.1": + version: 9.0.2 + resolution: "@npmcli/run-script@npm:9.0.2" + dependencies: + "@npmcli/node-gyp": "npm:^4.0.0" + "@npmcli/package-json": "npm:^6.0.0" + "@npmcli/promise-spawn": "npm:^8.0.0" + node-gyp: "npm:^11.0.0" + proc-log: "npm:^5.0.0" + which: "npm:^5.0.0" + checksum: 10c0/d2e7763c45a07bad064ecb1ab53fb797a6cb1d125bf3e95bfd164e4886e8539e4714afd04bcf4f13570e8a4b1297a040fa7ecc44732276e11d42ca8244c70662 + languageName: node + linkType: hard + +"@octokit/auth-token@npm:^5.0.0": + version: 5.1.1 + resolution: "@octokit/auth-token@npm:5.1.1" + checksum: 10c0/1e6117c5170de9a5532ffb85e0bda153f4dffdd66871c42de952828eddd9029fe5161a2a8bf20b57f0d45c80f8fb9ddc69aa639e0fa6b776829efb1b0881b154 + languageName: node + linkType: hard + +"@octokit/core@npm:^6.0.0": + version: 6.1.2 + resolution: "@octokit/core@npm:6.1.2" + dependencies: + "@octokit/auth-token": "npm:^5.0.0" + "@octokit/graphql": "npm:^8.0.0" + "@octokit/request": "npm:^9.0.0" + "@octokit/request-error": "npm:^6.0.1" + "@octokit/types": "npm:^13.0.0" + before-after-hook: "npm:^3.0.2" + universal-user-agent: "npm:^7.0.0" + checksum: 10c0/f73be16a8013f69197b7744de75537d869f3a2061dda25dcde746d23b87f305bbdc7adbfe044ab0755eec32e6d54d61c73f4ca788d214eba8e88648a3133733e + languageName: node + linkType: hard + +"@octokit/endpoint@npm:^10.0.0": + version: 10.1.1 + resolution: "@octokit/endpoint@npm:10.1.1" + dependencies: + "@octokit/types": "npm:^13.0.0" + universal-user-agent: "npm:^7.0.2" + checksum: 10c0/946517241b33db075e7b3fd8abc6952b9e32be312197d07d415dbefb35b93d26afd508f64315111de7cabc2638d4790a9b0b366cf6cc201de5ec6997c7944c8b + languageName: node + linkType: hard + +"@octokit/graphql@npm:^8.0.0": + version: 8.1.1 + resolution: "@octokit/graphql@npm:8.1.1" + dependencies: + "@octokit/request": "npm:^9.0.0" + "@octokit/types": "npm:^13.0.0" + universal-user-agent: "npm:^7.0.0" + checksum: 10c0/fe68b89b21416f56bc9c0d19bba96a9a8ee567312b6fb764b05ea0649a5e44bec71665a0013e7c34304eb77c20ad7e7a7cf43b87ea27c280350229d71034c131 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^22.2.0": + version: 22.2.0 + resolution: "@octokit/openapi-types@npm:22.2.0" + checksum: 10c0/a45bfc735611e836df0729f5922bbd5811d401052b972d1e3bc1278a2d2403e00f4552ce9d1f2793f77f167d212da559c5cb9f1b02c935114ad6d898779546ee + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^11.0.0": + version: 11.3.6 + resolution: "@octokit/plugin-paginate-rest@npm:11.3.6" + dependencies: + "@octokit/types": "npm:^13.6.2" + peerDependencies: + "@octokit/core": ">=6" + checksum: 10c0/b269193d1fd2c7a551e529359f5bcc9d0a29fddccc31008d18281db2874fb83a99e999f2c7486c41adf5cf97f54fd3b115ab0e46d2b785073b53353a213ed928 + languageName: node + linkType: hard + +"@octokit/plugin-retry@npm:^7.0.0": + version: 7.1.2 + resolution: "@octokit/plugin-retry@npm:7.1.2" + dependencies: + "@octokit/request-error": "npm:^6.0.0" + "@octokit/types": "npm:^13.0.0" + bottleneck: "npm:^2.15.3" + peerDependencies: + "@octokit/core": ">=6" + checksum: 10c0/bf2175faaee74b1aadba972417140ab6d983c1aadd1bffed48b7abc6eac9b6c9c230f4f7bf5f8f7e14016998890472188587a1c044e96a664b1cc0fb4c21a8c5 + languageName: node + linkType: hard + +"@octokit/plugin-throttling@npm:^9.0.0": + version: 9.3.2 + resolution: "@octokit/plugin-throttling@npm:9.3.2" + dependencies: + "@octokit/types": "npm:^13.0.0" + bottleneck: "npm:^2.15.3" + peerDependencies: + "@octokit/core": ^6.0.0 + checksum: 10c0/31bff9600d39d93ab1e43ad05ea9651348fb42c04707eb150e5450a035e9a8289316e9884d460d02761b13fd183941130b9c997f7c244e9d693ef2b42ad2ee31 + languageName: node + linkType: hard + +"@octokit/request-error@npm:^6.0.0, @octokit/request-error@npm:^6.0.1": + version: 6.1.5 + resolution: "@octokit/request-error@npm:6.1.5" + dependencies: + "@octokit/types": "npm:^13.0.0" + checksum: 10c0/37afef6c072d987ddf50b3438bcc974741a22ee7f788172876f92b5228ed43f5c4c1556a1d73153508d6c8d3a3d2344c7fefb6cde8678c7f63c2115b8629c49b + languageName: node + linkType: hard + +"@octokit/request@npm:^9.0.0": + version: 9.1.3 + resolution: "@octokit/request@npm:9.1.3" + dependencies: + "@octokit/endpoint": "npm:^10.0.0" + "@octokit/request-error": "npm:^6.0.1" + "@octokit/types": "npm:^13.1.0" + universal-user-agent: "npm:^7.0.2" + checksum: 10c0/41c26387ca9b5b3081a17eebea0c7d6b0122f6b2cb21c2fd7ef63ca587a828448e40b33973416f615fed139c659598f2ae7a1370cc103738f0f6f3297b5fc4ab + languageName: node + linkType: hard + +"@octokit/types@npm:^13.0.0, @octokit/types@npm:^13.1.0, @octokit/types@npm:^13.6.2": + version: 13.6.2 + resolution: "@octokit/types@npm:13.6.2" + dependencies: + "@octokit/openapi-types": "npm:^22.2.0" + checksum: 10c0/ea51afb21b667b25dad9e5daae1701da1b362a4d6ed9609f6d3f9f219e5389bf50f7e53ae029ca190750e278be3ab963cac648a95ad248f245a5fda16a4f1ed1 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.1.0": + version: 0.1.1 + resolution: "@pkgr/core@npm:0.1.1" + checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8 + languageName: node + linkType: hard + +"@pnpm/config.env-replace@npm:^1.1.0": + version: 1.1.0 + resolution: "@pnpm/config.env-replace@npm:1.1.0" + checksum: 10c0/4cfc4a5c49ab3d0c6a1f196cfd4146374768b0243d441c7de8fa7bd28eaab6290f514b98490472cc65dbd080d34369447b3e9302585e1d5c099befd7c8b5e55f + languageName: node + linkType: hard + +"@pnpm/network.ca-file@npm:^1.0.1": + version: 1.0.2 + resolution: "@pnpm/network.ca-file@npm:1.0.2" + dependencies: + graceful-fs: "npm:4.2.10" + checksum: 10c0/95f6e0e38d047aca3283550719155ce7304ac00d98911e4ab026daedaf640a63bd83e3d13e17c623fa41ac72f3801382ba21260bcce431c14fbbc06430ecb776 + languageName: node + linkType: hard + +"@pnpm/npm-conf@npm:^2.1.0": + version: 2.3.1 + resolution: "@pnpm/npm-conf@npm:2.3.1" + dependencies: + "@pnpm/config.env-replace": "npm:^1.1.0" + "@pnpm/network.ca-file": "npm:^1.0.1" + config-chain: "npm:^1.1.11" + checksum: 10c0/778a3a34ff7d6000a2594d2a9821f873f737bc56367865718b2cf0ba5d366e49689efe7975148316d7afd8e6f1dcef7d736fbb6ea7ef55caadd1dc93a36bb302 + languageName: node + linkType: hard + +"@react-hookz/deep-equal@npm:^3.0.1": + version: 3.0.3 + resolution: "@react-hookz/deep-equal@npm:3.0.3" + checksum: 10c0/4ef12e7caaa3a17564bcc9f107ce167ae72e95d057614ff4a675e2ac2f64489c69a7d06f0f146de74c657dbc4d06234177fbc4d8b5af183b274ba888d5b44319 + languageName: node + linkType: hard + +"@react-hookz/eslint-config@npm:^4.1.6": + version: 4.1.6 + resolution: "@react-hookz/eslint-config@npm:4.1.6" + dependencies: + "@eslint/js": "npm:^9.15.0" + "@typescript-eslint/eslint-plugin": "npm:^8.17.0" + "@typescript-eslint/parser": "npm:^8.17.0" + "@vitest/eslint-plugin": "npm:^1.1.14" + eslint-config-prettier: "npm:^9.1.0" + eslint-config-xo: "npm:^0.46.0" + eslint-config-xo-typescript: "npm:^7.0.0" + eslint-plugin-import: "npm:^2.31.0" + eslint-plugin-jest: "npm:^28.9.0" + eslint-plugin-mdx: "npm:^3.1.5" + eslint-plugin-n: "npm:^17.14.0" + eslint-plugin-no-use-extend-native: "npm:^0.7.2" + eslint-plugin-promise: "npm:^7.1.0" + eslint-plugin-react: "npm:^7.37.2" + eslint-plugin-react-hooks: "npm:^5.1.0" + eslint-plugin-unicorn: "npm:^56.0.1" + peerDependencies: + eslint: ^9.15.0 + jest: "*" + typescript: ^5.0.0 + vitest: "*" + peerDependenciesMeta: + jest: + optional: true + typescript: + optional: true + vitest: + optional: true + checksum: 10c0/1fb9d1d47dc2994133ce625e58863715517fadec51f128924d0f807faeda225d5b8c711f2f978f290d9ddb190ddd216da8eb4e1d2062542bdeff5a50c440a7a2 + languageName: node + linkType: hard + +"@react-hookz/eslint-formatter-gha@npm:^3.0.2": + version: 3.0.3 + resolution: "@react-hookz/eslint-formatter-gha@npm:3.0.3" + dependencies: + "@actions/core": "npm:^1.11.1" + checksum: 10c0/6765a9fdc6e779b1809d97385bccaef8e0395e2ccf39479e39685e667db0e72ad11e4951bf4ff1f649fc8503404c80dbdf555c5475e59fd3a231ebbd9cbb0150 + languageName: node + linkType: hard + +"@react-hookz/web@workspace:.": + version: 0.0.0-use.local + resolution: "@react-hookz/web@workspace:." + dependencies: + "@commitlint/cli": "npm:^19.5.0" + "@commitlint/config-conventional": "npm:^19.5.0" + "@react-hookz/deep-equal": "npm:^3.0.1" + "@react-hookz/eslint-config": "npm:^4.1.6" + "@react-hookz/eslint-formatter-gha": "npm:^3.0.2" + "@testing-library/react-hooks": "npm:^8.0.1" + "@types/js-cookie": "npm:^3.0.6" + "@types/react": "npm:^17.0.83" + "@types/react-dom": "npm:^17.0.26" + "@vitest/coverage-v8": "npm:^2.1.8" + commitlint: "npm:^19.5.0" + eslint: "npm:^9.17.0" + husky: "npm:^9.1.7" + js-cookie: "npm:^3.0.5" + jsdom: "npm:^25.0.1" + lint-staged: "npm:^15.2.2" + pinst: "npm:^3.0.0" + react: "npm:^17.0.2" + react-dom: "npm:^17.0.2" + rimraf: "npm:^6.0.1" + semantic-release: "npm:^24.2.0" + typescript: "npm:^5.3.3" + vitest: "npm:^2.1.8" + peerDependencies: + js-cookie: ^3.0.5 + react: ^16.8 || ^17 || ^18 + react-dom: ^16.8 || ^17 || ^18 + peerDependenciesMeta: + js-cookie: + optional: true + languageName: unknown + linkType: soft + +"@rollup/rollup-android-arm-eabi@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.29.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-android-arm64@npm:4.29.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.29.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.29.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.29.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.29.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.29.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.29.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.29.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.29.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loongarch64-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.29.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.29.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.29.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.29.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.29.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.29.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.29.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.29.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.29.1": + version: 4.29.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.29.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rtsao/scc@npm:^1.1.0": + version: 1.1.0 + resolution: "@rtsao/scc@npm:1.1.0" + checksum: 10c0/b5bcfb0d87f7d1c1c7c0f7693f53b07866ed9fec4c34a97a8c948fb9a7c0082e416ce4d3b60beb4f5e167cbe04cdeefbf6771320f3ede059b9ce91188c409a5b + languageName: node + linkType: hard + +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10c0/64e9e9cf161e848067a5bf60cdc04d18495dc28bb63a8d9f8993e4dd99b91ad34e4b563c85de17d91ffb177ec17a0664991d2e115f6543e73236a906068987af + languageName: node + linkType: hard + +"@semantic-release/commit-analyzer@npm:^13.0.0-beta.1": + version: 13.0.0 + resolution: "@semantic-release/commit-analyzer@npm:13.0.0" + dependencies: + conventional-changelog-angular: "npm:^8.0.0" + conventional-changelog-writer: "npm:^8.0.0" + conventional-commits-filter: "npm:^5.0.0" + conventional-commits-parser: "npm:^6.0.0" + debug: "npm:^4.0.0" + import-from-esm: "npm:^1.0.3" + lodash-es: "npm:^4.17.21" + micromatch: "npm:^4.0.2" + peerDependencies: + semantic-release: ">=20.1.0" + checksum: 10c0/4283eb3d636a4614a0f35d0be91a11d572bd6897233c7f95a04606a90ca07f470de627c3d8f63f2a0b467148f638996e70a984fa6fe978a26567c8364129956f + languageName: node + linkType: hard + +"@semantic-release/error@npm:^4.0.0": + version: 4.0.0 + resolution: "@semantic-release/error@npm:4.0.0" + checksum: 10c0/c97fcfbd341765f7c7430bdb32d5f04c61ee15c3eeec374823fbb157640ad03453f24e3a85241bddb29e193b69c6aab480e4d16e76adabb052c01bfbd1698c18 + languageName: node + linkType: hard + +"@semantic-release/github@npm:^11.0.0": + version: 11.0.1 + resolution: "@semantic-release/github@npm:11.0.1" + dependencies: + "@octokit/core": "npm:^6.0.0" + "@octokit/plugin-paginate-rest": "npm:^11.0.0" + "@octokit/plugin-retry": "npm:^7.0.0" + "@octokit/plugin-throttling": "npm:^9.0.0" + "@semantic-release/error": "npm:^4.0.0" + aggregate-error: "npm:^5.0.0" + debug: "npm:^4.3.4" + dir-glob: "npm:^3.0.1" + globby: "npm:^14.0.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.0" + issue-parser: "npm:^7.0.0" + lodash-es: "npm:^4.17.21" + mime: "npm:^4.0.0" + p-filter: "npm:^4.0.0" + url-join: "npm:^5.0.0" + peerDependencies: + semantic-release: ">=24.1.0" + checksum: 10c0/6bcac6f20e6326ddae5085bee1963b5d3fc6571b163e8d31d0485260e51472d2d1a695b6bc4042dcaa1de45c81d0d0c2f82d6cb614abe78af0a6374ef891f76b + languageName: node + linkType: hard + +"@semantic-release/npm@npm:^12.0.0": + version: 12.0.1 + resolution: "@semantic-release/npm@npm:12.0.1" + dependencies: + "@semantic-release/error": "npm:^4.0.0" + aggregate-error: "npm:^5.0.0" + execa: "npm:^9.0.0" + fs-extra: "npm:^11.0.0" + lodash-es: "npm:^4.17.21" + nerf-dart: "npm:^1.0.0" + normalize-url: "npm:^8.0.0" + npm: "npm:^10.5.0" + rc: "npm:^1.2.8" + read-pkg: "npm:^9.0.0" + registry-auth-token: "npm:^5.0.0" + semver: "npm:^7.1.2" + tempy: "npm:^3.0.0" + peerDependencies: + semantic-release: ">=20.1.0" + checksum: 10c0/816d2ed41bd7ef1191c7094ac95c3a9b5b0fc7d58808d0f55d6d8c109e548480032938bd3508295cb7c869ba66f29c3a5976b4ebfd3408f71f999d1b2c66e1a0 + languageName: node + linkType: hard + +"@semantic-release/release-notes-generator@npm:^14.0.0-beta.1": + version: 14.0.2 + resolution: "@semantic-release/release-notes-generator@npm:14.0.2" + dependencies: + conventional-changelog-angular: "npm:^8.0.0" + conventional-changelog-writer: "npm:^8.0.0" + conventional-commits-filter: "npm:^5.0.0" + conventional-commits-parser: "npm:^6.0.0" + debug: "npm:^4.0.0" + get-stream: "npm:^7.0.0" + import-from-esm: "npm:^1.0.3" + into-stream: "npm:^7.0.0" + lodash-es: "npm:^4.17.21" + read-package-up: "npm:^11.0.0" + peerDependencies: + semantic-release: ">=20.1.0" + checksum: 10c0/37f07d557cea21a7dee699d989d4ed5caf74ac96a7fc1c6ca6136b06d48f7eaf00d6ec5bce57afbc385baf9091a25875a657aab62a243bef19dfa61d15907676 + languageName: node + linkType: hard + +"@sigstore/bundle@npm:^3.0.0": + version: 3.0.0 + resolution: "@sigstore/bundle@npm:3.0.0" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10c0/9a077d390970b1de5f60f7d870f856b26073d8775d4ffe827db4c0195d25e0eadcc0854f6ee76a92be070b289a3386bf0cf02ab30df100c7cf029d01312d7417 + languageName: node + linkType: hard + +"@sigstore/core@npm:^2.0.0": + version: 2.0.0 + resolution: "@sigstore/core@npm:2.0.0" + checksum: 10c0/bb7e668aedcda68312d2ff7c986fd0ba29057ca4dfbaef516c997b0799cd8858b2fc8017a7946fd2e43f237920adbcaa7455097a0a02909ed86cad9f98d592d4 + languageName: node + linkType: hard + +"@sigstore/protobuf-specs@npm:^0.3.2": + version: 0.3.2 + resolution: "@sigstore/protobuf-specs@npm:0.3.2" + checksum: 10c0/108eed419181ff599763f2d28ff5087e7bce9d045919de548677520179fe77fb2e2b7290216c93c7a01bdb2972b604bf44599273c991bbdf628fbe1b9b70aacb + languageName: node + linkType: hard + +"@sigstore/sign@npm:^3.0.0": + version: 3.0.0 + resolution: "@sigstore/sign@npm:3.0.0" + dependencies: + "@sigstore/bundle": "npm:^3.0.0" + "@sigstore/core": "npm:^2.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + make-fetch-happen: "npm:^14.0.1" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + checksum: 10c0/0d82d84de9dc522389c0eece113f9ead7ea49155daf231ee7477b9c6affc095254e9351fbbfc6dd97d01bae6e42edb6078f2f4d6b194cd08ce5775ce70cfbe44 + languageName: node + linkType: hard + +"@sigstore/tuf@npm:^3.0.0": + version: 3.0.0 + resolution: "@sigstore/tuf@npm:3.0.0" + dependencies: + "@sigstore/protobuf-specs": "npm:^0.3.2" + tuf-js: "npm:^3.0.1" + checksum: 10c0/1e0a1e69f1e2763bb3dd007211412bdab0e66926d4fb16a0b9c38a7b30edc3e8b7a541f82c9c77d24862398b5fe6312d478982237cac81b59dc8e0cea665813c + languageName: node + linkType: hard + +"@sigstore/verify@npm:^2.0.0": + version: 2.0.0 + resolution: "@sigstore/verify@npm:2.0.0" + dependencies: + "@sigstore/bundle": "npm:^3.0.0" + "@sigstore/core": "npm:^2.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + checksum: 10c0/9964d8577dcd7d0bbfb62de0a93f1d7e24a011640940d868fc0112ba776e238ccef7b8d4e1870257fb1bcf28d7bf4cc437ee5919353620da21a95355daceb00b + languageName: node + linkType: hard + +"@sindresorhus/is@npm:^4.6.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 10c0/33b6fb1d0834ec8dd7689ddc0e2781c2bfd8b9c4e4bacbcb14111e0ae00621f2c264b8a7d36541799d74888b5dccdf422a891a5cb5a709ace26325eedc81e22e + languageName: node + linkType: hard + +"@sindresorhus/merge-streams@npm:^2.1.0": + version: 2.3.0 + resolution: "@sindresorhus/merge-streams@npm:2.3.0" + checksum: 10c0/69ee906f3125fb2c6bb6ec5cdd84e8827d93b49b3892bce8b62267116cc7e197b5cccf20c160a1d32c26014ecd14470a72a5e3ee37a58f1d6dadc0db1ccf3894 + languageName: node + linkType: hard + +"@sindresorhus/merge-streams@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/merge-streams@npm:4.0.0" + checksum: 10c0/482ee543629aa1933b332f811a1ae805a213681ecdd98c042b1c1b89387df63e7812248bb4df3910b02b3cc5589d3d73e4393f30e197c9dde18046ccd471fc6b + languageName: node + linkType: hard + +"@stylistic/eslint-plugin@npm:^2.6.1": + version: 2.12.1 + resolution: "@stylistic/eslint-plugin@npm:2.12.1" + dependencies: + "@typescript-eslint/utils": "npm:^8.13.0" + eslint-visitor-keys: "npm:^4.2.0" + espree: "npm:^10.3.0" + estraverse: "npm:^5.3.0" + picomatch: "npm:^4.0.2" + peerDependencies: + eslint: ">=8.40.0" + checksum: 10c0/52859e4148a268c8a16cad53dd2d89a641a26e1e61bb4f7368cf5ee1b7fc9904519ade65719096607dc03f22cf2a06d6d363f5b0e8510609e0a2ebd89acc344d + languageName: node + linkType: hard + +"@testing-library/react-hooks@npm:^8.0.1": + version: 8.0.1 + resolution: "@testing-library/react-hooks@npm:8.0.1" + dependencies: + "@babel/runtime": "npm:^7.12.5" + react-error-boundary: "npm:^3.1.0" + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 + react: ^16.9.0 || ^17.0.0 + react-dom: ^16.9.0 || ^17.0.0 + react-test-renderer: ^16.9.0 || ^17.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + react-dom: + optional: true + react-test-renderer: + optional: true + checksum: 10c0/83bef2d4c437b84143213b5275ef00ef14e5bcd344f9ded12b162d253dc3c799138ead4428026b9c725e5a38dbebf611f2898aa43f3e43432bcaccbd7bf413e5 + languageName: node + linkType: hard + +"@tufjs/canonical-json@npm:2.0.0": + version: 2.0.0 + resolution: "@tufjs/canonical-json@npm:2.0.0" + checksum: 10c0/52c5ffaef1483ed5c3feedfeba26ca9142fa386eea54464e70ff515bd01c5e04eab05d01eff8c2593291dcaf2397ca7d9c512720e11f52072b04c47a5c279415 + languageName: node + linkType: hard + +"@tufjs/models@npm:3.0.1": + version: 3.0.1 + resolution: "@tufjs/models@npm:3.0.1" + dependencies: + "@tufjs/canonical-json": "npm:2.0.0" + minimatch: "npm:^9.0.5" + checksum: 10c0/0b2022589139102edf28f7fdcd094407fc98ac25bf530ebcf538dd63152baea9b6144b713c8dfc4f6b7580adeff706ab6ecc5f9716c4b816e58a04419abb1926 + languageName: node + linkType: hard + +"@types/acorn@npm:^4.0.0": + version: 4.0.6 + resolution: "@types/acorn@npm:4.0.6" + dependencies: + "@types/estree": "npm:*" + checksum: 10c0/5a65a1d7e91fc95703f0a717897be60fa7ccd34b17f5462056274a246e6690259fe0a1baabc86fd3260354f87245cb3dc483346d7faad2b78fc199763978ede9 + languageName: node + linkType: hard + +"@types/concat-stream@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/concat-stream@npm:2.0.3" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/dd8bdf8061d275f30dc602e04c63ebc001d3a260e722c867916667a45f90fd22da62a2de0919a35f35969b84a14cb94c69d15bdb2c8a518ce8abf3a0e1a16e5d + languageName: node + linkType: hard + +"@types/conventional-commits-parser@npm:^5.0.0": + version: 5.0.1 + resolution: "@types/conventional-commits-parser@npm:5.0.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/4b7b561f195f779d07f973801a9f15d77cd58ceb67e817459688b11cc735288d30de050f445c91f4cd2c007fa86824e59a6e3cde602d150b828c4474f6e67be5 + languageName: node + linkType: hard + +"@types/debug@npm:^4.0.0": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" + dependencies: + "@types/ms": "npm:*" + checksum: 10c0/5dcd465edbb5a7f226e9a5efd1f399c6172407ef5840686b73e3608ce135eeca54ae8037dcd9f16bdb2768ac74925b820a8b9ecc588a58ca09eca6acabe33e2f + languageName: node + linkType: hard + +"@types/estree-jsx@npm:^1.0.0": + version: 1.0.5 + resolution: "@types/estree-jsx@npm:1.0.5" + dependencies: + "@types/estree": "npm:*" + checksum: 10c0/07b354331516428b27a3ab99ee397547d47eb223c34053b48f84872fafb841770834b90cc1a0068398e7c7ccb15ec51ab00ec64b31dc5e3dbefd624638a35c6d + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:1.0.6, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + +"@types/hast@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/hast@npm:3.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10c0/3249781a511b38f1d330fd1e3344eed3c4e7ea8eff82e835d35da78e637480d36fad37a78be5a7aed8465d237ad0446abc1150859d0fde395354ea634decf9f7 + languageName: node + linkType: hard + +"@types/is-empty@npm:^1.0.0": + version: 1.2.3 + resolution: "@types/is-empty@npm:1.2.3" + checksum: 10c0/2ca9af27ce93cc0abe277178a69803e641d755152bf4fc415e1789451ff62f6e39cf15dbdc111d490171d757669937ad4789c7395af55f5e7d261f6bfe416974 + languageName: node + linkType: hard + +"@types/js-cookie@npm:^3.0.6": + version: 3.0.6 + resolution: "@types/js-cookie@npm:3.0.6" + checksum: 10c0/173afaf5ea9d86c22395b9d2a00b6adb0006dcfef165d6dcb0395cdc32f5a5dcf9c3c60f97194119963a15849b8f85121e1ae730b03e40bc0c29b84396ba22f9 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: 10c0/6bf5337bc447b706bb5b4431d37686aa2ea6d07cfd6f79cc31de80170d6ff9b1c7384a9c0ccbc45b3f512bae9e9f75c2e12109806a15331dc94e8a8db6dbb4ac + languageName: node + linkType: hard + +"@types/mdast@npm:^3.0.0": + version: 3.0.15 + resolution: "@types/mdast@npm:3.0.15" + dependencies: + "@types/unist": "npm:^2" + checksum: 10c0/fcbf716c03d1ed5465deca60862e9691414f9c43597c288c7d2aefbe274552e1bbd7aeee91b88a02597e88a28c139c57863d0126fcf8416a95fdc681d054ee3d + languageName: node + linkType: hard + +"@types/mdast@npm:^4.0.0": + version: 4.0.4 + resolution: "@types/mdast@npm:4.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10c0/84f403dbe582ee508fd9c7643ac781ad8597fcbfc9ccb8d4715a2c92e4545e5772cbd0dbdf18eda65789386d81b009967fdef01b24faf6640f817287f54d9c82 + languageName: node + linkType: hard + +"@types/ms@npm:*": + version: 0.7.34 + resolution: "@types/ms@npm:0.7.34" + checksum: 10c0/ac80bd90012116ceb2d188fde62d96830ca847823e8ca71255616bc73991aa7d9f057b8bfab79e8ee44ffefb031ddd1bcce63ea82f9e66f7c31ec02d2d823ccc + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:^22.0.0": + version: 22.10.2 + resolution: "@types/node@npm:22.10.2" + dependencies: + undici-types: "npm:~6.20.0" + checksum: 10c0/2c7b71a040f1ef5320938eca8ebc946e6905caa9bbf3d5665d9b3774a8d15ea9fab1582b849a6d28c7fc80756a62c5666bc66b69f42f4d5dafd1ccb193cdb4ac + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0, @types/normalize-package-data@npm:^2.4.3": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 10c0/aef7bb9b015883d6f4119c423dd28c4bdc17b0e8a0ccf112c78b4fe0e91fbc4af7c6204b04bba0e199a57d2f3fbbd5b4a14bf8739bf9d2a39b2a0aad545e0f86 + languageName: node + linkType: hard + +"@types/prop-types@npm:*": + version: 15.7.14 + resolution: "@types/prop-types@npm:15.7.14" + checksum: 10c0/1ec775160bfab90b67a782d735952158c7e702ca4502968aa82565bd8e452c2de8601c8dfe349733073c31179116cf7340710160d3836aa8a1ef76d1532893b1 + languageName: node + linkType: hard + +"@types/react-dom@npm:^17.0.26": + version: 17.0.26 + resolution: "@types/react-dom@npm:17.0.26" + peerDependencies: + "@types/react": ^17.0.0 + checksum: 10c0/8363921f08afe3f2ef82fe293301a0809ec646975fe9f5bfeb2e823f7237b97e47d27e1c6c2ffff27d15c12ab3cad1de6c77a737e37499fcc52793b0fd674f3f + languageName: node + linkType: hard + +"@types/react@npm:^17.0.83": + version: 17.0.83 + resolution: "@types/react@npm:17.0.83" + dependencies: + "@types/prop-types": "npm:*" + "@types/scheduler": "npm:^0.16" + csstype: "npm:^3.0.2" + checksum: 10c0/c8f76790190a9df42099f5f78d08dd4095f2da3bd97ff7cce0001d5a97ff3ffb31f703575acf2c457606e0d0b229ca8d1ba0ff459b77a4e44c5ea5154fe3fb4b + languageName: node + linkType: hard + +"@types/scheduler@npm:^0.16": + version: 0.16.8 + resolution: "@types/scheduler@npm:0.16.8" + checksum: 10c0/f86de504945b8fc41b1f391f847444d542e2e4067cf7e5d9bfeb5d2d2393d3203b1161bc0ef3b1e104d828dabfb60baf06e8d2c27e27ff7e8258e6e618d8c4ec + languageName: node + linkType: hard + +"@types/semver@npm:^7.5.5": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: 10c0/8663ff927234d1c5fcc04b33062cb2b9fcfbe0f5f351ed26c4d1e1581657deebd506b41ff7fdf89e787e3d33ce05854bc01686379b89e9c49b564c4cfa988efa + languageName: node + linkType: hard + +"@types/supports-color@npm:^8.0.0": + version: 8.1.3 + resolution: "@types/supports-color@npm:8.1.3" + checksum: 10c0/03aa3616b403f3deaeb774df6d3a3969845b0c9f449814a83c2c53eb6818f5f9b571ba205330b0ebe8e46f41fd550f581a34b4310b13f0e0448694cfff37ddbf + languageName: node + linkType: hard + +"@types/unist@npm:*, @types/unist@npm:^3.0.0": + version: 3.0.3 + resolution: "@types/unist@npm:3.0.3" + checksum: 10c0/2b1e4adcab78388e088fcc3c0ae8700f76619dbcb4741d7d201f87e2cb346bfc29a89003cfea2d76c996e1061452e14fcd737e8b25aacf949c1f2d6b2bc3dd60 + languageName: node + linkType: hard + +"@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2": + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 10c0/24dcdf25a168f453bb70298145eb043cfdbb82472db0bc0b56d6d51cd2e484b9ed8271d4ac93000a80da568f2402e9339723db262d0869e2bf13bc58e081768d + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:8.18.2, @typescript-eslint/eslint-plugin@npm:^8.17.0": + version: 8.18.2 + resolution: "@typescript-eslint/eslint-plugin@npm:8.18.2" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:8.18.2" + "@typescript-eslint/type-utils": "npm:8.18.2" + "@typescript-eslint/utils": "npm:8.18.2" + "@typescript-eslint/visitor-keys": "npm:8.18.2" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.3.1" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/ce854835a12747cd8efea5b70921e1a80b62af2a2d311b09343862a6af225b821a6729784547d37eb5f8eb286d1f086f41f305445adc3a054e37cc8c71561ccd + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:8.18.2, @typescript-eslint/parser@npm:^8.17.0": + version: 8.18.2 + resolution: "@typescript-eslint/parser@npm:8.18.2" + dependencies: + "@typescript-eslint/scope-manager": "npm:8.18.2" + "@typescript-eslint/types": "npm:8.18.2" + "@typescript-eslint/typescript-estree": "npm:8.18.2" + "@typescript-eslint/visitor-keys": "npm:8.18.2" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/ea28130e0a2733e3e40708ddfbb7b6522d9644e49cae2c3dc3faddd7ac7e7f73ed9775f19463ca0deca55edb52f5d9d522c206bb2a14fe3c9c6eef03d144b41f + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:8.18.2": + version: 8.18.2 + resolution: "@typescript-eslint/scope-manager@npm:8.18.2" + dependencies: + "@typescript-eslint/types": "npm:8.18.2" + "@typescript-eslint/visitor-keys": "npm:8.18.2" + checksum: 10c0/2c05f5361e84d687555717bfb15988d5c11601c1094edeaafc8db5c961359982d7aeb192d775d348ab65ac43c5a6c968f3e8503ee1e6bf875aca27588907139f + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:8.18.2": + version: 8.18.2 + resolution: "@typescript-eslint/type-utils@npm:8.18.2" + dependencies: + "@typescript-eslint/typescript-estree": "npm:8.18.2" + "@typescript-eslint/utils": "npm:8.18.2" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/0441ca33f7381abae559e188bd7b2844159806e8bf5ab8d6f6d9b3a7a6bf9f9d0babf8452e83565da0e9841f656b25f44fd96f40bda1006c934535e37a997c6a + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:8.18.2": + version: 8.18.2 + resolution: "@typescript-eslint/types@npm:8.18.2" + checksum: 10c0/4abf252671dd7c3a5c9b7ae2f523d91b04d937dbb601f3bc0182c234d50e4958be67248c1bb37833584ff0128844243145753614c7e80615b6cd6813f0713872 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:8.18.2": + version: 8.18.2 + resolution: "@typescript-eslint/typescript-estree@npm:8.18.2" + dependencies: + "@typescript-eslint/types": "npm:8.18.2" + "@typescript-eslint/visitor-keys": "npm:8.18.2" + debug: "npm:^4.3.4" + fast-glob: "npm:^3.3.2" + is-glob: "npm:^4.0.3" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + ts-api-utils: "npm:^1.3.0" + peerDependencies: + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/648296d6c95d80d37bdb5ee6662554af425ff85f1c4805ea344234a1c386c91a36b05cddf52c80264912b29693d3e1b9a45d84414a3aee1393ace2d0babc9e95 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:8.18.2, @typescript-eslint/utils@npm:^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/utils@npm:^8.13.0": + version: 8.18.2 + resolution: "@typescript-eslint/utils@npm:8.18.2" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + "@typescript-eslint/scope-manager": "npm:8.18.2" + "@typescript-eslint/types": "npm:8.18.2" + "@typescript-eslint/typescript-estree": "npm:8.18.2" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/1cb86e2e4f4e29cbaebe4272c15d98f6193b1476f65dd028d77bf4fd09e715b01d82619509c466b95056148db8d3e04f0a3ef27dc2f034a7c7ab4b2d429e58bb + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:8.18.2": + version: 8.18.2 + resolution: "@typescript-eslint/visitor-keys@npm:8.18.2" + dependencies: + "@typescript-eslint/types": "npm:8.18.2" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/b8fe05bc3bafa7930d6671c2e1807ae47788060eb573e6a000c9597690dfaff6a4eb9f6f934719a18bae631d238ca32847510aeecc61032170e58ab45244e869 + languageName: node + linkType: hard + +"@vitest/coverage-v8@npm:^2.1.8": + version: 2.1.8 + resolution: "@vitest/coverage-v8@npm:2.1.8" + dependencies: + "@ampproject/remapping": "npm:^2.3.0" + "@bcoe/v8-coverage": "npm:^0.2.3" + debug: "npm:^4.3.7" + istanbul-lib-coverage: "npm:^3.2.2" + istanbul-lib-report: "npm:^3.0.1" + istanbul-lib-source-maps: "npm:^5.0.6" + istanbul-reports: "npm:^3.1.7" + magic-string: "npm:^0.30.12" + magicast: "npm:^0.3.5" + std-env: "npm:^3.8.0" + test-exclude: "npm:^7.0.1" + tinyrainbow: "npm:^1.2.0" + peerDependencies: + "@vitest/browser": 2.1.8 + vitest: 2.1.8 + peerDependenciesMeta: + "@vitest/browser": + optional: true + checksum: 10c0/b228a23bbaf0eae07ac939399f968b0def2df786091948a12d614919db3f5b6e46db7a1ab4f9d05d5d7f696afd53133a67abc25915f85480cd032442664ac725 + languageName: node + linkType: hard + +"@vitest/eslint-plugin@npm:^1.1.14": + version: 1.1.20 + resolution: "@vitest/eslint-plugin@npm:1.1.20" + peerDependencies: + "@typescript-eslint/utils": ">= 8.0" + eslint: ">= 8.57.0" + typescript: ">= 5.0.0" + vitest: "*" + peerDependenciesMeta: + typescript: + optional: true + vitest: + optional: true + checksum: 10c0/d6ef1a55d0763fb0d85e9464d6c24bdd840c78c98c0ffe990933dc0f44dde433dbd7235cd011930908a3a5e24d8c432ad34c6b7171dffccc75e9745b8e76b159 + languageName: node + linkType: hard + +"@vitest/expect@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/expect@npm:2.1.8" + dependencies: + "@vitest/spy": "npm:2.1.8" + "@vitest/utils": "npm:2.1.8" + chai: "npm:^5.1.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/6fbf4abc2360efe4d3671d3425f8bb6012fe2dd932a88720d8b793030b766ba260494822c721d3fc497afe52373515c7e150635a95c25f6e1b567f86155c5408 + languageName: node + linkType: hard + +"@vitest/mocker@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/mocker@npm:2.1.8" + dependencies: + "@vitest/spy": "npm:2.1.8" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.12" + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/b4113ed8a57c0f60101d02e1b1769357a346ecd55ded499eab384d52106fd4b12d51e9aaa6db98f47de0d56662477be0ed8d46d6dfa84c235f9e1b234709814e + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:2.1.8, @vitest/pretty-format@npm:^2.1.8": + version: 2.1.8 + resolution: "@vitest/pretty-format@npm:2.1.8" + dependencies: + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/1dc5c9b1c7c7e78e46a2a16033b6b20be05958bbebc5a5b78f29e32718c80252034804fccd23f34db6b3583239db47e68fc5a8e41942c54b8047cc3b4133a052 + languageName: node + linkType: hard + +"@vitest/runner@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/runner@npm:2.1.8" + dependencies: + "@vitest/utils": "npm:2.1.8" + pathe: "npm:^1.1.2" + checksum: 10c0/d0826a71494adeafc8c6478257f584d11655145c83e2d8f94c17301d7059c7463ad768a69379e394c50838a7435abcc9255a6b7d8894f5ee06b153e314683a75 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/snapshot@npm:2.1.8" + dependencies: + "@vitest/pretty-format": "npm:2.1.8" + magic-string: "npm:^0.30.12" + pathe: "npm:^1.1.2" + checksum: 10c0/8d7a77a52e128630ea737ee0a0fe746d1d325cac5848326861dbf042844da4d5c1a5145539ae0ed1a3f0b0363506e98d86f2679fadf114ec4b987f1eb616867b + languageName: node + linkType: hard + +"@vitest/spy@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/spy@npm:2.1.8" + dependencies: + tinyspy: "npm:^3.0.2" + checksum: 10c0/9740f10772ede004ea7f9ffb8a6c3011341d75d9d7f2d4d181b123a701c4691e942f38cf1700684a3bb5eea3c78addf753fd8cdf78c51d8eadc3bada6fadf8f2 + languageName: node + linkType: hard + +"@vitest/utils@npm:2.1.8": + version: 2.1.8 + resolution: "@vitest/utils@npm:2.1.8" + dependencies: + "@vitest/pretty-format": "npm:2.1.8" + loupe: "npm:^3.1.2" + tinyrainbow: "npm:^1.2.0" + checksum: 10c0/d4a29ecd8f6c24c790e4c009f313a044d89e664e331bc9c3cfb57fe1380fb1d2999706dbbfc291f067d6c489602e76d00435309fbc906197c0d01f831ca17d64 + languageName: node + linkType: hard + +"JSONStream@npm:^1.3.5": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: "npm:^1.2.0" + through: "npm:>=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 10c0/0f54694da32224d57b715385d4a6b668d2117379d1f3223dc758459246cca58fdc4c628b83e8a8883334e454a0a30aa198ede77c788b55537c1844f686a751f2 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"abbrev@npm:^3.0.0": + version: 3.0.0 + resolution: "abbrev@npm:3.0.0" + checksum: 10c0/049704186396f571650eb7b22ed3627b77a5aedf98bb83caf2eac81ca2a3e25e795394b0464cfb2d6076df3db6a5312139eac5b6a126ca296ac53c5008069c28 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn@npm:^8.0.0, acorn@npm:^8.11.3, acorn@npm:^8.14.0, acorn@npm:^8.9.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"aggregate-error@npm:^5.0.0": + version: 5.0.0 + resolution: "aggregate-error@npm:5.0.0" + dependencies: + clean-stack: "npm:^5.2.0" + indent-string: "npm:^5.0.0" + checksum: 10c0/a5de7138571f514bad76290736f49a0db8809247082f2519037e0c37d03fc8d91d733e079d6b1674feda28a757b1932421ad205b8c0f8794a0c0e5bf1be2315e + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ajv@npm:^8.11.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + +"ansi-escapes@npm:^7.0.0": + version: 7.0.0 + resolution: "ansi-escapes@npm:7.0.0" + dependencies: + environment: "npm:^1.0.0" + checksum: 10c0/86e51e36fabef18c9c004af0a280573e828900641cea35134a124d2715e0c5a473494ab4ce396614505da77638ae290ff72dd8002d9747d2ee53f5d6bbe336be + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1, ansi-regex@npm:^6.1.0": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 10c0/60f0298ed34c74fef50daab88e8dab786036ed5a7fad02e012ab57e376e0a0b4b29e83b95ea9b5e7d89df762f5f25119b83e00706ecaccb22cfbacee98d74889 + languageName: node + linkType: hard + +"aproba@npm:^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 10c0/d06e26384a8f6245d8c8896e138c0388824e259a329e0c9f196b4fa533c82502a6fd449586e3604950a0c42921832a458bb3aa0aa9f0ba449cfd4f50fd0d09b5 + languageName: node + linkType: hard + +"archy@npm:~1.0.0": + version: 1.0.0 + resolution: "archy@npm:1.0.0" + checksum: 10c0/200c849dd1c304ea9914827b0555e7e1e90982302d574153e28637db1a663c53de62bad96df42d50e8ce7fc18d05e3437d9aa8c4b383803763755f0956c7d308 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"argv-formatter@npm:~1.0.0": + version: 1.0.0 + resolution: "argv-formatter@npm:1.0.0" + checksum: 10c0/e5582aef98e6b9a70cfe038a3abf6cdd926714b5ce761830bcbd5ac7be86d17ae583fcc8a2cdf4a2ac0b6024ec100b7312160fcefb1520998f476473da6a941d + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "array-buffer-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + is-array-buffer: "npm:^3.0.5" + checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d + languageName: node + linkType: hard + +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: 10c0/75c9c072faac47bd61779c0c595e912fe660d338504ac70d10e39e1b8a4a0c9c87658703d619b9d1b70d324177ae29dc8d07dda0d0a15d005597bc4c5a59c70c + languageName: node + linkType: hard + +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + is-string: "npm:^1.0.7" + checksum: 10c0/5b1004d203e85873b96ddc493f090c9672fd6c80d7a60b798da8a14bff8a670ff95db5aafc9abc14a211943f05220dacf8ea17638ae0af1a6a47b8c0b48ce370 + languageName: node + linkType: hard + +"array.prototype.findlast@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlast@npm:1.2.5" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/ddc952b829145ab45411b9d6adcb51a8c17c76bf89c9dd64b52d5dffa65d033da8c076ed2e17091779e83bc892b9848188d7b4b33453c5565e65a92863cb2775 + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.findlastindex@npm:1.2.5" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/962189487728b034f3134802b421b5f39e42ee2356d13b42d2ddb0e52057ffdcc170b9524867f4f0611a6f638f4c19b31e14606e8bcbda67799e26685b195aa3 + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": + version: 1.3.3 + resolution: "array.prototype.flat@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/d90e04dfbc43bb96b3d2248576753d1fb2298d2d972e29ca7ad5ec621f0d9e16ff8074dae647eac4f31f4fb7d3f561a7ac005fb01a71f51705a13b5af06a7d8a + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.3 + resolution: "array.prototype.flatmap@npm:1.3.3" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.4": + version: 1.1.4 + resolution: "array.prototype.tosorted@npm:1.1.4" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.3" + es-errors: "npm:^1.3.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/eb3c4c4fc0381b0bf6dba2ea4d48d367c2827a0d4236a5718d97caaccc6b78f11f4cadf090736e86301d295a6aa4967ed45568f92ced51be8cbbacd9ca410943 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.4": + version: 1.0.4 + resolution: "arraybuffer.prototype.slice@npm:1.0.4" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06 + languageName: node + linkType: hard + +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"bail@npm:^2.0.0": + version: 2.0.2 + resolution: "bail@npm:2.0.2" + checksum: 10c0/25cbea309ef6a1f56214187004e8f34014eb015713ea01fa5b9b7e9e776ca88d0fdffd64143ac42dc91966c915a4b7b683411b56e14929fad16153fc026ffb8b + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"before-after-hook@npm:^3.0.2": + version: 3.0.2 + resolution: "before-after-hook@npm:3.0.2" + checksum: 10c0/dea640f9e88a1085372c9bcc974b7bf379267490693da92ec102a7d8b515dd1e95f00ef575a146b83ca638104c57406c3427d37bdf082f602dde4b56d05bba14 + languageName: node + linkType: hard + +"bin-links@npm:^5.0.0": + version: 5.0.0 + resolution: "bin-links@npm:5.0.0" + dependencies: + cmd-shim: "npm:^7.0.0" + npm-normalize-package-bin: "npm:^4.0.0" + proc-log: "npm:^5.0.0" + read-cmd-shim: "npm:^5.0.0" + write-file-atomic: "npm:^6.0.0" + checksum: 10c0/7ef087164b13df1810bf087146880a5d43d7d0beb95c51ec0664224f9371e1ca0de70c813306de6de173fb1a3fd0ca49e636ba80c951a70ce6bd7cbf48daf075 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.3.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + +"bottleneck@npm:^2.15.3": + version: 2.19.5 + resolution: "bottleneck@npm:2.19.5" + checksum: 10c0/b0f72e45b2e0f56a21ba720183f16bef8e693452fb0495d997fa354e42904353a94bd8fd429868e6751bc85e54b6755190519eed5a0ae0a94a5185209ae7c6d0 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browserslist@npm:^4.24.2": + version: 4.24.3 + resolution: "browserslist@npm:4.24.3" + dependencies: + caniuse-lite: "npm:^1.0.30001688" + electron-to-chromium: "npm:^1.5.73" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.1" + bin: + browserslist: cli.js + checksum: 10c0/bab261ef7b6e1656a719a9fa31240ae7ce4d5ba68e479f6b11e348d819346ab4c0ff6f4821f43adcc9c193a734b186775a83b37979e70a69d182965909fe569a + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 10c0/2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a + languageName: node + linkType: hard + +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + +"cacache@npm:^19.0.0, cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": + version: 1.0.1 + resolution: "call-bind-apply-helpers@npm:1.0.1" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c + languageName: node + linkType: hard + +"call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": + version: 1.0.3 + resolution: "call-bound@npm:1.0.3" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001688": + version: 1.0.30001690 + resolution: "caniuse-lite@npm:1.0.30001690" + checksum: 10c0/646bd469032afa90400a84dec30a2b00a6eda62c03ead358117e3f884cda8aacec02ec058a6dbee5eaf9714f83e483b9b0eb4fb42febb8076569f5ca40f1d347 + languageName: node + linkType: hard + +"ccount@npm:^2.0.0": + version: 2.0.1 + resolution: "ccount@npm:2.0.1" + checksum: 10c0/3939b1664390174484322bc3f45b798462e6c07ee6384cb3d645e0aa2f318502d174845198c1561930e1d431087f74cf1fe291ae9a4722821a9f4ba67e574350 + languageName: node + linkType: hard + +"chai@npm:^5.1.2": + version: 5.1.2 + resolution: "chai@npm:5.1.2" + dependencies: + assertion-error: "npm:^2.0.1" + check-error: "npm:^2.1.1" + deep-eql: "npm:^5.0.1" + loupe: "npm:^3.1.0" + pathval: "npm:^2.0.0" + checksum: 10c0/6c04ff8495b6e535df9c1b062b6b094828454e9a3c9493393e55b2f4dbff7aa2a29a4645133cad160fb00a16196c4dc03dc9bb37e1f4ba9df3b5f50d7533a736 + languageName: node + linkType: hard + +"chalk@npm:^2.3.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chalk@npm:^5.3.0": + version: 5.4.1 + resolution: "chalk@npm:5.4.1" + checksum: 10c0/b23e88132c702f4855ca6d25cb5538b1114343e41472d5263ee8a37cccfccd9c4216d111e1097c6a27830407a1dc81fecdf2a56f2c63033d4dbbd88c10b0dcef + languageName: node + linkType: hard + +"chalk@npm:~5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 10c0/8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e + languageName: node + linkType: hard + +"character-entities-html4@npm:^2.0.0": + version: 2.1.0 + resolution: "character-entities-html4@npm:2.1.0" + checksum: 10c0/fe61b553f083400c20c0b0fd65095df30a0b445d960f3bbf271536ae6c3ba676f39cb7af0b4bf2755812f08ab9b88f2feed68f9aebb73bb153f7a115fe5c6e40 + languageName: node + linkType: hard + +"character-entities-legacy@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-legacy@npm:1.1.4" + checksum: 10c0/ea4ca9c29887335eed86d78fc67a640168342b1274da84c097abb0575a253d1265281a5052f9a863979e952bcc267b4ecaaf4fe233a7e1e0d8a47806c65b96c7 + languageName: node + linkType: hard + +"character-entities-legacy@npm:^3.0.0": + version: 3.0.0 + resolution: "character-entities-legacy@npm:3.0.0" + checksum: 10c0/ec4b430af873661aa754a896a2b55af089b4e938d3d010fad5219299a6b6d32ab175142699ee250640678cd64bdecd6db3c9af0b8759ab7b155d970d84c4c7d1 + languageName: node + linkType: hard + +"character-entities@npm:^1.0.0": + version: 1.2.4 + resolution: "character-entities@npm:1.2.4" + checksum: 10c0/ad015c3d7163563b8a0ee1f587fb0ef305ef344e9fd937f79ca51cccc233786a01d591d989d5bf7b2e66b528ac9efba47f3b1897358324e69932f6d4b25adfe1 + languageName: node + linkType: hard + +"character-entities@npm:^2.0.0": + version: 2.0.2 + resolution: "character-entities@npm:2.0.2" + checksum: 10c0/b0c645a45bcc90ff24f0e0140f4875a8436b8ef13b6bcd31ec02cfb2ca502b680362aa95386f7815bdc04b6464d48cf191210b3840d7c04241a149ede591a308 + languageName: node + linkType: hard + +"character-reference-invalid@npm:^1.0.0": + version: 1.1.4 + resolution: "character-reference-invalid@npm:1.1.4" + checksum: 10c0/29f05081c5817bd1e975b0bf61e77b60a40f62ad371d0f0ce0fdb48ab922278bc744d1fbe33771dced751887a8403f265ff634542675c8d7375f6ff4811efd0e + languageName: node + linkType: hard + +"character-reference-invalid@npm:^2.0.0": + version: 2.0.1 + resolution: "character-reference-invalid@npm:2.0.1" + checksum: 10c0/2ae0dec770cd8659d7e8b0ce24392d83b4c2f0eb4a3395c955dce5528edd4cc030a794cfa06600fcdd700b3f2de2f9b8e40e309c0011c4180e3be64a0b42e6a1 + languageName: node + linkType: hard + +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: 10c0/979f13eccab306cf1785fa10941a590b4e7ea9916ea2a4f8c87f0316fc3eab07eabefb6e587424ef0f88cbcd3805791f172ea739863ca3d7ce2afc54641c7f0e + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"ci-info@npm:^4.0.0, ci-info@npm:^4.1.0": + version: 4.1.0 + resolution: "ci-info@npm:4.1.0" + checksum: 10c0/0f969ce32a974c542bc8abe4454b220d9d9323bb9415054c92a900faa5fdda0bb222eda68c490127c1d78503510d46b6aca614ecaba5a60515b8ac7e170119e6 + languageName: node + linkType: hard + +"cidr-regex@npm:^4.1.1": + version: 4.1.1 + resolution: "cidr-regex@npm:4.1.1" + dependencies: + ip-regex: "npm:^5.0.0" + checksum: 10c0/11433b68346f1029543c6ad03468ab5a4eb96970e381aeba7f6075a73fc8202e37b5547c2be0ec11a4de3aa6b5fff23d8173ff8441276fdde07981b271a54f56 + languageName: node + linkType: hard + +"clean-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "clean-regexp@npm:1.0.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/fd9c7446551b8fc536f95e8a286d431017cd4ba1ec2e53997ec9159385e9c317672f6dfc4d49fdb97449fdb53b0bacd0a8bab9343b8fdd2e46c7ddf6173d0db7 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"clean-stack@npm:^5.2.0": + version: 5.2.0 + resolution: "clean-stack@npm:5.2.0" + dependencies: + escape-string-regexp: "npm:5.0.0" + checksum: 10c0/0de47a4152e49dcdeede5f47d7bb9a39a3ea748acb1cd2f0160dbee972d920be81390cb4c5566e6b795791b9efb12359e89fdd7c2e63b36025d59529558570f1 + languageName: node + linkType: hard + +"cli-columns@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-columns@npm:4.0.0" + dependencies: + string-width: "npm:^4.2.3" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/f724c874dba09376f7b2d6c70431d8691d5871bd5d26c6f658dd56b514e668ed5f5b8d803fb7e29f4000fc7f3a6d038d415b892ae7fa3dcd9cc458c07df17871 + languageName: node + linkType: hard + +"cli-cursor@npm:^5.0.0": + version: 5.0.0 + resolution: "cli-cursor@npm:5.0.0" + dependencies: + restore-cursor: "npm:^5.0.0" + checksum: 10c0/7ec62f69b79f6734ab209a3e4dbdc8af7422d44d360a7cb1efa8a0887bbe466a6e625650c466fe4359aee44dbe2dc0b6994b583d40a05d0808a5cb193641d220 + languageName: node + linkType: hard + +"cli-highlight@npm:^2.1.11": + version: 2.1.11 + resolution: "cli-highlight@npm:2.1.11" + dependencies: + chalk: "npm:^4.0.0" + highlight.js: "npm:^10.7.1" + mz: "npm:^2.4.0" + parse5: "npm:^5.1.1" + parse5-htmlparser2-tree-adapter: "npm:^6.0.0" + yargs: "npm:^16.0.0" + bin: + highlight: bin/highlight + checksum: 10c0/b5b4af3b968aa9df77eee449a400fbb659cf47c4b03a395370bd98d5554a00afaa5819b41a9a8a1ca0d37b0b896a94e57c65289b37359a25b700b1f56eb04852 + languageName: node + linkType: hard + +"cli-table3@npm:^0.6.5": + version: 0.6.5 + resolution: "cli-table3@npm:0.6.5" + dependencies: + "@colors/colors": "npm:1.5.0" + string-width: "npm:^4.2.0" + dependenciesMeta: + "@colors/colors": + optional: true + checksum: 10c0/d7cc9ed12212ae68241cc7a3133c52b844113b17856e11f4f81308acc3febcea7cc9fd298e70933e294dd642866b29fd5d113c2c098948701d0c35f09455de78 + languageName: node + linkType: hard + +"cli-truncate@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-truncate@npm:4.0.0" + dependencies: + slice-ansi: "npm:^5.0.0" + string-width: "npm:^7.0.0" + checksum: 10c0/d7f0b73e3d9b88cb496e6c086df7410b541b56a43d18ade6a573c9c18bd001b1c3fba1ad578f741a4218fdc794d042385f8ac02c25e1c295a2d8b9f3cb86eb4c + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"cmd-shim@npm:^7.0.0": + version: 7.0.0 + resolution: "cmd-shim@npm:7.0.0" + checksum: 10c0/f2a14eccea9d29ac39f5182b416af60b2d4ad13ef96c541580175a394c63192aeaa53a3edfc73c7f988685574623465304b80c417dde4049d6ad7370a78dc792 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"colorette@npm:^2.0.20": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"commander@npm:~12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 + languageName: node + linkType: hard + +"commitlint@npm:^19.5.0": + version: 19.6.1 + resolution: "commitlint@npm:19.6.1" + dependencies: + "@commitlint/cli": "npm:^19.6.1" + "@commitlint/types": "npm:^19.5.0" + bin: + commitlint: cli.js + checksum: 10c0/cbb6d1f16bd32fcf40fafedd90b1f85bb2a631ff14028debb4d365629e4a9ba6abb9a4150cdef0abce36fc4cb147891ec856e2529f36a6c0ba56eba52bd5861b + languageName: node + linkType: hard + +"common-ancestor-path@npm:^1.0.1": + version: 1.0.1 + resolution: "common-ancestor-path@npm:1.0.1" + checksum: 10c0/390c08d2a67a7a106d39499c002d827d2874966d938012453fd7ca34cd306881e2b9d604f657fa7a8e6e4896d67f39ebc09bf1bfd8da8ff318e0fb7a8752c534 + languageName: node + linkType: hard + +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: "npm:^1.0.0" + dot-prop: "npm:^5.1.0" + checksum: 10c0/78bd4dd4ed311a79bd264c9e13c36ed564cde657f1390e699e0f04b8eee1fc06ffb8698ce2dfb5fbe7342d509579c82d4e248f08915b708f77f7b72234086cc3 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "concat-stream@npm:2.0.0" + dependencies: + buffer-from: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.0.2" + typedarray: "npm:^0.0.6" + checksum: 10c0/29565dd9198fe1d8cf57f6cc71527dbc6ad67e12e4ac9401feb389c53042b2dceedf47034cbe702dfc4fd8df3ae7e6bfeeebe732cc4fa2674e484c13f04c219a + languageName: node + linkType: hard + +"config-chain@npm:^1.1.11": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" + dependencies: + ini: "npm:^1.3.4" + proto-list: "npm:~1.2.1" + checksum: 10c0/39d1df18739d7088736cc75695e98d7087aea43646351b028dfabd5508d79cf6ef4c5bcd90471f52cd87ae470d1c5490c0a8c1a292fbe6ee9ff688061ea0963e + languageName: node + linkType: hard + +"confusing-browser-globals@npm:1.0.11": + version: 1.0.11 + resolution: "confusing-browser-globals@npm:1.0.11" + checksum: 10c0/475d0a284fa964a5182b519af5738b5b64bf7e413cfd703c1b3496bf6f4df9f827893a9b221c0ea5873c1476835beb1e0df569ba643eff0734010c1eb780589e + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:^7.0.0": + version: 7.0.0 + resolution: "conventional-changelog-angular@npm:7.0.0" + dependencies: + compare-func: "npm:^2.0.0" + checksum: 10c0/90e73e25e224059b02951b6703b5f8742dc2a82c1fea62163978e6735fd3ab04350897a8fc6f443ec6b672d6b66e28a0820e833e544a0101f38879e5e6289b7e + languageName: node + linkType: hard + +"conventional-changelog-angular@npm:^8.0.0": + version: 8.0.0 + resolution: "conventional-changelog-angular@npm:8.0.0" + dependencies: + compare-func: "npm:^2.0.0" + checksum: 10c0/743faceab876bb9b9656f2389830d0ccb7c5caf02a629cb495d75c65c43414274728d7059b716d0c7d66fd663f8b978f25d44657148b8bc64ece12952cbfd886 + languageName: node + linkType: hard + +"conventional-changelog-conventionalcommits@npm:^7.0.2": + version: 7.0.2 + resolution: "conventional-changelog-conventionalcommits@npm:7.0.2" + dependencies: + compare-func: "npm:^2.0.0" + checksum: 10c0/3cb1eab35e37fc973cfb3aed0e159f54414e49b222988da1c2aa86cc8a87fe7531491bbb7657fe5fc4dc0e25f5b50e2065ba8ac71cc4c08eed9189102a2b81bd + languageName: node + linkType: hard + +"conventional-changelog-writer@npm:^8.0.0": + version: 8.0.0 + resolution: "conventional-changelog-writer@npm:8.0.0" + dependencies: + "@types/semver": "npm:^7.5.5" + conventional-commits-filter: "npm:^5.0.0" + handlebars: "npm:^4.7.7" + meow: "npm:^13.0.0" + semver: "npm:^7.5.2" + bin: + conventional-changelog-writer: dist/cli/index.js + checksum: 10c0/fd4afe58c5b4638f38ae4cea5f38ead73583c4d1a792b2885d576ac5710644d5f6baaf52cc40641465d9ba2b2490ee494fe325b5cb5b849c9001f6c3875c5656 + languageName: node + linkType: hard + +"conventional-commits-filter@npm:^5.0.0": + version: 5.0.0 + resolution: "conventional-commits-filter@npm:5.0.0" + checksum: 10c0/678900d6c589bbe1739929071ea0ca89c872b9f3cc6974994726eb7a197ca04243e9ea65cae39a55e41fdc20f27fdfc43060588750d828e0efab41f309a42934 + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^5.0.0": + version: 5.0.0 + resolution: "conventional-commits-parser@npm:5.0.0" + dependencies: + JSONStream: "npm:^1.3.5" + is-text-path: "npm:^2.0.0" + meow: "npm:^12.0.1" + split2: "npm:^4.0.0" + bin: + conventional-commits-parser: cli.mjs + checksum: 10c0/c9e542f4884119a96a6bf3311ff62cdee55762d8547f4c745ae3ebdc50afe4ba7691e165e34827d5cf63283cbd93ab69917afd7922423075b123d5d9a7a82ed2 + languageName: node + linkType: hard + +"conventional-commits-parser@npm:^6.0.0": + version: 6.0.0 + resolution: "conventional-commits-parser@npm:6.0.0" + dependencies: + meow: "npm:^13.0.0" + bin: + conventional-commits-parser: dist/cli/index.js + checksum: 10c0/9482e0819709b703fc826398bee09da7ac244f0361257a32fc280b14fb5be5636859391eadbe40ba3863c913f37b3c20c0626dea22f0202e70ee1ee65f75b1d9 + languageName: node + linkType: hard + +"convert-hrtime@npm:^5.0.0": + version: 5.0.0 + resolution: "convert-hrtime@npm:5.0.0" + checksum: 10c0/2092e51aab205e1141440e84e2a89f8881e68e47c1f8bc168dfd7c67047d8f1db43bac28044bc05749205651fead4e7910f52c7bb6066213480df99e333e9f47 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.38.1": + version: 3.39.0 + resolution: "core-js-compat@npm:3.39.0" + dependencies: + browserslist: "npm:^4.24.2" + checksum: 10c0/880579a3dab235e3b6350f1e324269c600753b48e891ea859331618d5051e68b7a95db6a03ad2f3cc7df4397318c25a5bc7740562ad39e94f56568638d09d414 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 + languageName: node + linkType: hard + +"cosmiconfig-typescript-loader@npm:^6.1.0": + version: 6.1.0 + resolution: "cosmiconfig-typescript-loader@npm:6.1.0" + dependencies: + jiti: "npm:^2.4.1" + peerDependencies: + "@types/node": "*" + cosmiconfig: ">=9" + typescript: ">=5" + checksum: 10c0/5e3baf85a9da7dcdd7ef53a54d1293400eed76baf0abb3a41bf9fcc789f1a2653319443471f9a1dc32951f1de4467a6696ccd0f88640e7827f1af6ff94ceaf1a + languageName: node + linkType: hard + +"cosmiconfig@npm:^9.0.0": + version: 9.0.0 + resolution: "cosmiconfig@npm:9.0.0" + dependencies: + env-paths: "npm:^2.2.1" + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"crypto-random-string@npm:^4.0.0": + version: 4.0.0 + resolution: "crypto-random-string@npm:4.0.0" + dependencies: + type-fest: "npm:^1.0.1" + checksum: 10c0/16e11a3c8140398f5408b7fded35a961b9423c5dac39a60cbbd08bd3f0e07d7de130e87262adea7db03ec1a7a4b7551054e0db07ee5408b012bac5400cfc07a5 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + +"cssstyle@npm:^4.1.0": + version: 4.1.0 + resolution: "cssstyle@npm:4.1.0" + dependencies: + rrweb-cssom: "npm:^0.7.1" + checksum: 10c0/05c6597e5d3e0ec6b15221f2c0ce9a0443a46cc50a6089a3ba9ee1ac27f83ff86a445a8f95435137dadd859f091fc61b6d342abaf396d3c910471b5b33cfcbfa + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 + languageName: node + linkType: hard + +"dargs@npm:^8.0.0": + version: 8.1.0 + resolution: "dargs@npm:8.1.0" + checksum: 10c0/08cbd1ee4ac1a16fb7700e761af2e3e22d1bdc04ac4f851926f552dde8f9e57714c0d04013c2cca1cda0cba8fb637e0f93ad15d5285547a939dd1989ee06a82d + languageName: node + linkType: hard + +"data-urls@npm:^5.0.0": + version: 5.0.0 + resolution: "data-urls@npm:5.0.0" + dependencies: + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + checksum: 10c0/1b894d7d41c861f3a4ed2ae9b1c3f0909d4575ada02e36d3d3bc584bdd84278e20709070c79c3b3bff7ac98598cb191eb3e86a89a79ea4ee1ef360e1694f92ad + languageName: node + linkType: hard + +"data-view-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-buffer@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.2": + version: 1.0.2 + resolution: "data-view-byte-length@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.2" + checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-offset@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:^4.3.7, debug@npm:~4.4.0": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: "npm:^2.1.1" + checksum: 10c0/37d96ae42cbc71c14844d2ae3ba55adf462ec89fd3a999459dec3833944cd999af6007ff29c780f1c61153bcaaf2c842d1e4ce1ec621e4fc4923244942e4a02a + languageName: node + linkType: hard + +"decimal.js@npm:^10.4.3": + version: 10.4.3 + resolution: "decimal.js@npm:10.4.3" + checksum: 10c0/6d60206689ff0911f0ce968d40f163304a6c1bc739927758e6efc7921cfa630130388966f16bf6ef6b838cb33679fbe8e7a78a2f3c478afce841fd55ac8fb8ee + languageName: node + linkType: hard + +"decode-named-character-reference@npm:^1.0.0": + version: 1.0.2 + resolution: "decode-named-character-reference@npm:1.0.2" + dependencies: + character-entities: "npm:^2.0.0" + checksum: 10c0/66a9fc5d9b5385a2b3675c69ba0d8e893393d64057f7dbbb585265bb4fc05ec513d76943b8e5aac7d8016d20eea4499322cbf4cd6d54b466976b78f3a7587a4c + languageName: node + linkType: hard + +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"dequal@npm:^2.0.0": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 + languageName: node + linkType: hard + +"devlop@npm:^1.0.0, devlop@npm:^1.1.0": + version: 1.1.0 + resolution: "devlop@npm:1.1.0" + dependencies: + dequal: "npm:^2.0.0" + checksum: 10c0/e0928ab8f94c59417a2b8389c45c55ce0a02d9ac7fd74ef62d01ba48060129e1d594501b77de01f3eeafc7cb00773819b0df74d96251cf20b31c5b3071f45c0e + languageName: node + linkType: hard + +"diff@npm:^5.0.0, diff@npm:^5.1.0": + version: 5.2.0 + resolution: "diff@npm:5.2.0" + checksum: 10c0/aed0941f206fe261ecb258dc8d0ceea8abbde3ace5827518ff8d302f0fc9cc81ce116c4d8f379151171336caf0516b79e01abdc1ed1201b6440d895a66689eb4 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/b6416aaff1f380bf56c3b552f31fdf7a69b45689368deca72d28636f41c16bb28ec3ebc40ace97db4c1afc0ceeb8120e8492fe0046841c94c2933b2e30a7d5ac + languageName: node + linkType: hard + +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 10c0/93f0d343ef87fe8869320e62f2459f7e70f49c6098d948cc47e060f4a3f827d0ad61e83cb82f2bd90cd5b9571b8d334289978a43c0f98fea4f0e99ee8faa0599 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"duplexer2@npm:~0.1.0": + version: 0.1.4 + resolution: "duplexer2@npm:0.1.4" + dependencies: + readable-stream: "npm:^2.0.2" + checksum: 10c0/0765a4cc6fe6d9615d43cc6dbccff6f8412811d89a6f6aa44828ca9422a0a469625ce023bf81cee68f52930dbedf9c5716056ff264ac886612702d134b5e39b4 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.73": + version: 1.5.76 + resolution: "electron-to-chromium@npm:1.5.76" + checksum: 10c0/5a977be9fd5810769a7b4eae0e4b41b6beca65f2b3f3b7442819f6c93366d767d183cfbf408714f944a9bf3aa304f8c9ab9d0cdfd8e878ab8f2cbb61f8b22acd + languageName: node + linkType: hard + +"emoji-regex@npm:^10.2.1, emoji-regex@npm:^10.3.0": + version: 10.4.0 + resolution: "emoji-regex@npm:10.4.0" + checksum: 10c0/a3fcedfc58bfcce21a05a5f36a529d81e88d602100145fcca3dc6f795e3c8acc4fc18fe773fbf9b6d6e9371205edb3afa2668ec3473fa2aa7fd47d2a9d46482d + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"emojilib@npm:^2.4.0": + version: 2.4.0 + resolution: "emojilib@npm:2.4.0" + checksum: 10c0/6e66ba8921175842193f974e18af448bb6adb0cf7aeea75e08b9d4ea8e9baba0e4a5347b46ed901491dcaba277485891c33a8d70b0560ca5cc9672a94c21ab8f + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.17.1": + version: 5.18.0 + resolution: "enhanced-resolve@npm:5.18.0" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/5fcc264a6040754ab5b349628cac2bb5f89cee475cbe340804e657a5b9565f70e6aafb338d5895554eb0ced9f66c50f38a255274a0591dcb64ee17c549c459ce + languageName: node + linkType: hard + +"entities@npm:^4.5.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + +"env-ci@npm:^11.0.0": + version: 11.1.0 + resolution: "env-ci@npm:11.1.0" + dependencies: + execa: "npm:^8.0.0" + java-properties: "npm:^1.0.2" + checksum: 10c0/14f0a597c1fe9ab5585532c01759db62f4c553277b33137d33cb71cdd621833184f182dc67408750973c9f884f5a0d5103fad4f873aabd9e6c4baf65f88bc22a + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"environment@npm:^1.0.0": + version: 1.1.0 + resolution: "environment@npm:1.1.0" + checksum: 10c0/fb26434b0b581ab397039e51ff3c92b34924a98b2039dcb47e41b7bca577b9dbf134a8eadb364415c74464b682e2d3afe1a4c0eb9873dc44ea814c5d3103331d + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1, error-ex@npm:^1.3.2": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6": + version: 1.23.7 + resolution: "es-abstract@npm:1.23.7" + dependencies: + array-buffer-byte-length: "npm:^1.0.2" + arraybuffer.prototype.slice: "npm:^1.0.4" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + data-view-buffer: "npm:^1.0.2" + data-view-byte-length: "npm:^1.0.2" + data-view-byte-offset: "npm:^1.0.1" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.0.3" + es-to-primitive: "npm:^1.3.0" + function.prototype.name: "npm:^1.1.8" + get-intrinsic: "npm:^1.2.6" + get-symbol-description: "npm:^1.1.0" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.1.0" + is-array-buffer: "npm:^3.0.5" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.2" + is-regex: "npm:^1.2.1" + is-shared-array-buffer: "npm:^1.0.4" + is-string: "npm:^1.1.1" + is-typed-array: "npm:^1.1.15" + is-weakref: "npm:^1.1.0" + math-intrinsics: "npm:^1.1.0" + object-inspect: "npm:^1.13.3" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.7" + regexp.prototype.flags: "npm:^1.5.3" + safe-array-concat: "npm:^1.1.3" + safe-regex-test: "npm:^1.1.0" + string.prototype.trim: "npm:^1.2.10" + string.prototype.trimend: "npm:^1.0.9" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.3" + typed-array-byte-length: "npm:^1.0.3" + typed-array-byte-offset: "npm:^1.0.4" + typed-array-length: "npm:^1.0.7" + unbox-primitive: "npm:^1.1.0" + which-typed-array: "npm:^1.1.18" + checksum: 10c0/68d24e56f47d773639d49c561366c8d9e775187e0d64f011209261fcb3a63caf764f60c0e66940bbd8815a862f9ca8114f6a5dfdeb776da87436d46bcd82ae48 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-iterator-helpers@npm:^1.1.0": + version: 1.2.1 + resolution: "es-iterator-helpers@npm:1.2.1" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.6" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.0.3" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.6" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.2.0" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + internal-slot: "npm:^1.1.0" + iterator.prototype: "npm:^1.1.4" + safe-array-concat: "npm:^1.1.3" + checksum: 10c0/97e3125ca472d82d8aceea11b790397648b52c26d8768ea1c1ee6309ef45a8755bb63225a43f3150c7591cffc17caf5752459f1e70d583b4184370a8f04ebd2f + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.5.4": + version: 1.5.4 + resolution: "es-module-lexer@npm:1.5.4" + checksum: 10c0/300a469488c2f22081df1e4c8398c78db92358496e639b0df7f89ac6455462aaf5d8893939087c1a1cbcbf20eed4610c70e0bcb8f3e4b0d80a5d2611c539408c + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: "npm:^1.2.4" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.1" + checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: "npm:^2.0.0" + checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.3.0": + version: 1.3.0 + resolution: "es-to-primitive@npm:1.3.0" + dependencies: + is-callable: "npm:^1.2.7" + is-date-object: "npm:^1.0.5" + is-symbol: "npm:^1.0.4" + checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b + languageName: node + linkType: hard + +"esbuild@npm:^0.21.3": + version: 0.21.5 + resolution: "esbuild@npm:0.21.5" + dependencies: + "@esbuild/aix-ppc64": "npm:0.21.5" + "@esbuild/android-arm": "npm:0.21.5" + "@esbuild/android-arm64": "npm:0.21.5" + "@esbuild/android-x64": "npm:0.21.5" + "@esbuild/darwin-arm64": "npm:0.21.5" + "@esbuild/darwin-x64": "npm:0.21.5" + "@esbuild/freebsd-arm64": "npm:0.21.5" + "@esbuild/freebsd-x64": "npm:0.21.5" + "@esbuild/linux-arm": "npm:0.21.5" + "@esbuild/linux-arm64": "npm:0.21.5" + "@esbuild/linux-ia32": "npm:0.21.5" + "@esbuild/linux-loong64": "npm:0.21.5" + "@esbuild/linux-mips64el": "npm:0.21.5" + "@esbuild/linux-ppc64": "npm:0.21.5" + "@esbuild/linux-riscv64": "npm:0.21.5" + "@esbuild/linux-s390x": "npm:0.21.5" + "@esbuild/linux-x64": "npm:0.21.5" + "@esbuild/netbsd-x64": "npm:0.21.5" + "@esbuild/openbsd-x64": "npm:0.21.5" + "@esbuild/sunos-x64": "npm:0.21.5" + "@esbuild/win32-arm64": "npm:0.21.5" + "@esbuild/win32-ia32": "npm:0.21.5" + "@esbuild/win32-x64": "npm:0.21.5" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/fa08508adf683c3f399e8a014a6382a6b65542213431e26206c0720e536b31c09b50798747c2a105a4bbba1d9767b8d3615a74c2f7bf1ddf6d836cd11eb672de + languageName: node + linkType: hard + +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-string-regexp@npm:5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-compat-utils@npm:^0.5.1": + version: 0.5.1 + resolution: "eslint-compat-utils@npm:0.5.1" + dependencies: + semver: "npm:^7.5.4" + peerDependencies: + eslint: ">=6.0.0" + checksum: 10c0/325e815205fab70ebcd379f6d4b5d44c7d791bb8dfe0c9888233f30ebabd9418422595b53a781b946c768d9244d858540e5e6129a6b3dd6d606f467d599edc6c + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^9.1.0": + version: 9.1.0 + resolution: "eslint-config-prettier@npm:9.1.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d + languageName: node + linkType: hard + +"eslint-config-xo-typescript@npm:^7.0.0": + version: 7.0.0 + resolution: "eslint-config-xo-typescript@npm:7.0.0" + dependencies: + "@stylistic/eslint-plugin": "npm:^2.6.1" + eslint-config-xo: "npm:^0.46.0" + typescript-eslint: "npm:^8.3.0" + peerDependencies: + eslint: ">=9.8.0" + typescript: ">=5.5.0" + checksum: 10c0/1137c3829580223ef42aa28cd8255c7f52a02f438fc0764fbff4598913ee3ff6b6bb85ea2048d4db18ad929947579e77fcf9703f88051849b4893f5da7c16a83 + languageName: node + linkType: hard + +"eslint-config-xo@npm:^0.46.0": + version: 0.46.0 + resolution: "eslint-config-xo@npm:0.46.0" + dependencies: + "@stylistic/eslint-plugin": "npm:^2.6.1" + confusing-browser-globals: "npm:1.0.11" + globals: "npm:^15.3.0" + peerDependencies: + eslint: ">=9.8.0" + checksum: 10c0/abc96ae7f4d11dc021967bd09d2e3243c21a62ef6dc3896a96bb0d40c038fdc0775889dd65b6f9493c93fde46e3f4f0d7022f10cb6731bb268584fab4dd9144e + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: "npm:^3.2.7" + is-core-module: "npm:^2.13.0" + resolve: "npm:^1.22.4" + checksum: 10c0/0ea8a24a72328a51fd95aa8f660dcca74c1429806737cf10261ab90cfcaaf62fd1eff664b76a44270868e0a932711a81b250053942595bcd00a93b1c1575dd61 + languageName: node + linkType: hard + +"eslint-mdx@npm:^3.1.5": + version: 3.1.5 + resolution: "eslint-mdx@npm:3.1.5" + dependencies: + acorn: "npm:^8.11.3" + acorn-jsx: "npm:^5.3.2" + espree: "npm:^9.6.1" + estree-util-visit: "npm:^2.0.0" + remark-mdx: "npm:^3.0.0" + remark-parse: "npm:^11.0.0" + remark-stringify: "npm:^11.0.0" + synckit: "npm:^0.9.0" + tslib: "npm:^2.6.2" + unified: "npm:^11.0.4" + unified-engine: "npm:^11.2.0" + unist-util-visit: "npm:^5.0.0" + uvu: "npm:^0.5.6" + vfile: "npm:^6.0.1" + peerDependencies: + eslint: ">=8.0.0" + checksum: 10c0/3a9e22ba5ead1d2f811adefd0c3aa54ed85c01329c2aaab25514d9da6a39c8a5bc44d568145f082cffab7d9368ca2730ab314e4f8d2b281ac47f86199d2014d3 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.12.0": + version: 2.12.0 + resolution: "eslint-module-utils@npm:2.12.0" + dependencies: + debug: "npm:^3.2.7" + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/4d8b46dcd525d71276f9be9ffac1d2be61c9d54cc53c992e6333cf957840dee09381842b1acbbb15fc6b255ebab99cd481c5007ab438e5455a14abe1a0468558 + languageName: node + linkType: hard + +"eslint-plugin-es-x@npm:^7.8.0": + version: 7.8.0 + resolution: "eslint-plugin-es-x@npm:7.8.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.1.2" + "@eslint-community/regexpp": "npm:^4.11.0" + eslint-compat-utils: "npm:^0.5.1" + peerDependencies: + eslint: ">=8" + checksum: 10c0/002fda8c029bc5da41e24e7ac11654062831d675fc4f5f20d0de460e24bf1e05cd559000678ef3e46c48641190f4fc07ae3d57aa5e8b085ef5f67e5f63742614 + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.31.0": + version: 2.31.0 + resolution: "eslint-plugin-import@npm:2.31.0" + dependencies: + "@rtsao/scc": "npm:^1.1.0" + array-includes: "npm:^3.1.8" + array.prototype.findlastindex: "npm:^1.2.5" + array.prototype.flat: "npm:^1.3.2" + array.prototype.flatmap: "npm:^1.3.2" + debug: "npm:^3.2.7" + doctrine: "npm:^2.1.0" + eslint-import-resolver-node: "npm:^0.3.9" + eslint-module-utils: "npm:^2.12.0" + hasown: "npm:^2.0.2" + is-core-module: "npm:^2.15.1" + is-glob: "npm:^4.0.3" + minimatch: "npm:^3.1.2" + object.fromentries: "npm:^2.0.8" + object.groupby: "npm:^1.0.3" + object.values: "npm:^1.2.0" + semver: "npm:^6.3.1" + string.prototype.trimend: "npm:^1.0.8" + tsconfig-paths: "npm:^3.15.0" + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + checksum: 10c0/e21d116ddd1900e091ad120b3eb68c5dd5437fe2c930f1211781cd38b246f090a6b74d5f3800b8255a0ed29782591521ad44eb21c5534960a8f1fb4040fd913a + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^28.9.0": + version: 28.10.0 + resolution: "eslint-plugin-jest@npm:28.10.0" + dependencies: + "@typescript-eslint/utils": "npm:^6.0.0 || ^7.0.0 || ^8.0.0" + peerDependencies: + "@typescript-eslint/eslint-plugin": ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + jest: "*" + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: 10c0/f1eeabcc9bf650e755ef07da501271e9a54d2ef6414c648a33d5dc71f2545fcfc060d06846549ec7978e7bd9d11e6cb57b33ccd97ebf5a86ee4682853c06381b + languageName: node + linkType: hard + +"eslint-plugin-markdown@npm:^3.0.1": + version: 3.0.1 + resolution: "eslint-plugin-markdown@npm:3.0.1" + dependencies: + mdast-util-from-markdown: "npm:^0.8.5" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/ba27a0f2115b85294591f3cf4e64c66b60cd508915cc3394869dda38c9e1f5ef230158f180cc21b5431085d4e4daac9f3f173078c00b54e659272318d0e6600d + languageName: node + linkType: hard + +"eslint-plugin-mdx@npm:^3.1.5": + version: 3.1.5 + resolution: "eslint-plugin-mdx@npm:3.1.5" + dependencies: + eslint-mdx: "npm:^3.1.5" + eslint-plugin-markdown: "npm:^3.0.1" + remark-mdx: "npm:^3.0.0" + remark-parse: "npm:^11.0.0" + remark-stringify: "npm:^11.0.0" + tslib: "npm:^2.6.2" + unified: "npm:^11.0.4" + vfile: "npm:^6.0.1" + peerDependencies: + eslint: ">=8.0.0" + checksum: 10c0/261e3ffee01bae7839b1357a7fb00ab23438d3b6fe6ad65b97dd06fbf2501571b95313914b0e41bf489ffd26d250acc7dfefc2f492247e6c2c343560a93693ce + languageName: node + linkType: hard + +"eslint-plugin-n@npm:^17.14.0": + version: 17.15.1 + resolution: "eslint-plugin-n@npm:17.15.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.1" + enhanced-resolve: "npm:^5.17.1" + eslint-plugin-es-x: "npm:^7.8.0" + get-tsconfig: "npm:^4.8.1" + globals: "npm:^15.11.0" + ignore: "npm:^5.3.2" + minimatch: "npm:^9.0.5" + semver: "npm:^7.6.3" + peerDependencies: + eslint: ">=8.23.0" + checksum: 10c0/0b52ffed0b80d74977e1157b4c0cc79efcdf81ea35d2997bdbf02f3d41f428f52ccb7fb3a08cf02e6fed8ae1bf4708d69fdf496e75b8b2bd3e671029d89ccc6c + languageName: node + linkType: hard + +"eslint-plugin-no-use-extend-native@npm:^0.7.2": + version: 0.7.2 + resolution: "eslint-plugin-no-use-extend-native@npm:0.7.2" + dependencies: + is-get-set-prop: "npm:^2.0.0" + is-js-type: "npm:^3.0.0" + is-obj-prop: "npm:^2.0.0" + is-proto-prop: "npm:^3.0.1" + peerDependencies: + eslint: ^9.3.0 + checksum: 10c0/907a92483426b859a1ac29972086062980f2ff60027830ab7ba51c8a3e654d3821b647ce81d46b4f2aa79df0158429dc4928dc50d7b0d83cd7c5cccc6d20e5a8 + languageName: node + linkType: hard + +"eslint-plugin-promise@npm:^7.1.0": + version: 7.2.1 + resolution: "eslint-plugin-promise@npm:7.2.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.4.0" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + checksum: 10c0/d494982faeeafbd2aa5fae9cbceca546169a8399000f72d5d940fa5c4ba554612903bcafbb8033647179e5d21ccf1d621b433d089695f7f47ce3d9fcf4cd0abf + languageName: node + linkType: hard + +"eslint-plugin-react-hooks@npm:^5.1.0": + version: 5.1.0 + resolution: "eslint-plugin-react-hooks@npm:5.1.0" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: 10c0/37ef76e1d916d46ab8e93a596078efcf2162e2c653614437e0c54e31d02a5dadabec22802fab717effe257aeb4bdc20c2a710666a89ab1cf07e01e614dde75d8 + languageName: node + linkType: hard + +"eslint-plugin-react@npm:^7.37.2": + version: 7.37.2 + resolution: "eslint-plugin-react@npm:7.37.2" + dependencies: + array-includes: "npm:^3.1.8" + array.prototype.findlast: "npm:^1.2.5" + array.prototype.flatmap: "npm:^1.3.2" + array.prototype.tosorted: "npm:^1.1.4" + doctrine: "npm:^2.1.0" + es-iterator-helpers: "npm:^1.1.0" + estraverse: "npm:^5.3.0" + hasown: "npm:^2.0.2" + jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" + minimatch: "npm:^3.1.2" + object.entries: "npm:^1.1.8" + object.fromentries: "npm:^2.0.8" + object.values: "npm:^1.2.0" + prop-types: "npm:^15.8.1" + resolve: "npm:^2.0.0-next.5" + semver: "npm:^6.3.1" + string.prototype.matchall: "npm:^4.0.11" + string.prototype.repeat: "npm:^1.0.0" + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + checksum: 10c0/01c498f263c201698bf653973760f86a07fa0cdec56c044f3eaa5ddaae71c64326015dfa5fde76ca8c5386ffe789fc79932624b614e13b6a1ad789fee3f7c491 + languageName: node + linkType: hard + +"eslint-plugin-unicorn@npm:^56.0.1": + version: 56.0.1 + resolution: "eslint-plugin-unicorn@npm:56.0.1" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.24.7" + "@eslint-community/eslint-utils": "npm:^4.4.0" + ci-info: "npm:^4.0.0" + clean-regexp: "npm:^1.0.0" + core-js-compat: "npm:^3.38.1" + esquery: "npm:^1.6.0" + globals: "npm:^15.9.0" + indent-string: "npm:^4.0.0" + is-builtin-module: "npm:^3.2.1" + jsesc: "npm:^3.0.2" + pluralize: "npm:^8.0.0" + read-pkg-up: "npm:^7.0.1" + regexp-tree: "npm:^0.1.27" + regjsparser: "npm:^0.10.0" + semver: "npm:^7.6.3" + strip-indent: "npm:^3.0.0" + peerDependencies: + eslint: ">=8.56.0" + checksum: 10c0/3b853ecde6ab597b12e28b962ba6ad7d3594f7f066d90135db2d3366ac13361c72500119163e13e1c38ca6fbdd331b1cc31dce9e8673880bff050fe51d6c64db + languageName: node + linkType: hard + +"eslint-scope@npm:^8.2.0": + version: 8.2.0 + resolution: "eslint-scope@npm:8.2.0" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/8d2d58e2136d548ac7e0099b1a90d9fab56f990d86eb518de1247a7066d38c908be2f3df477a79cf60d70b30ba18735d6c6e70e9914dca2ee515a729975d70d6 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-visitor-keys@npm:4.2.0" + checksum: 10c0/2ed81c663b147ca6f578312919483eb040295bbab759e5a371953456c636c5b49a559883e2677112453728d66293c0a4c90ab11cab3428cf02a0236d2e738269 + languageName: node + linkType: hard + +"eslint@npm:^9.17.0": + version: 9.17.0 + resolution: "eslint@npm:9.17.0" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.12.1" + "@eslint/config-array": "npm:^0.19.0" + "@eslint/core": "npm:^0.9.0" + "@eslint/eslintrc": "npm:^3.2.0" + "@eslint/js": "npm:9.17.0" + "@eslint/plugin-kit": "npm:^0.2.3" + "@humanfs/node": "npm:^0.16.6" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@humanwhocodes/retry": "npm:^0.4.1" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.6" + debug: "npm:^4.3.2" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^8.2.0" + eslint-visitor-keys: "npm:^4.2.0" + espree: "npm:^10.3.0" + esquery: "npm:^1.5.0" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^8.0.0" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + bin: + eslint: bin/eslint.js + checksum: 10c0/9edd8dd782b4ae2eb00a158ed4708194835d4494d75545fa63a51f020ed17f865c49b4ae1914a2ecbc7fdb262bd8059e811aeef9f0bae63dced9d3293be1bbdd + languageName: node + linkType: hard + +"espree@npm:^10.0.1, espree@npm:^10.3.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" + dependencies: + acorn: "npm:^8.14.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^4.2.0" + checksum: 10c0/272beeaca70d0a1a047d61baff64db04664a33d7cfb5d144f84bc8a5c6194c6c8ebe9cc594093ca53add88baa23e59b01e69e8a0160ab32eac570482e165c462 + languageName: node + linkType: hard + +"espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + +"esquery@npm:^1.5.0, esquery@npm:^1.6.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"estree-util-is-identifier-name@npm:^3.0.0": + version: 3.0.0 + resolution: "estree-util-is-identifier-name@npm:3.0.0" + checksum: 10c0/d1881c6ed14bd588ebd508fc90bf2a541811dbb9ca04dec2f39d27dcaa635f85b5ed9bbbe7fc6fb1ddfca68744a5f7c70456b4b7108b6c4c52780631cc787c5b + languageName: node + linkType: hard + +"estree-util-visit@npm:^2.0.0": + version: 2.0.0 + resolution: "estree-util-visit@npm:2.0.0" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + "@types/unist": "npm:^3.0.0" + checksum: 10c0/acda8b03cc8f890d79c7c7361f6c95331ba84b7ccc0c32b49f447fc30206b20002b37ffdfc97b6ad16e6fe065c63ecbae1622492e2b6b4775c15966606217f39 + languageName: node + linkType: hard + +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 10c0/4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 + languageName: node + linkType: hard + +"execa@npm:^8.0.0, execa@npm:~8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 10c0/2c52d8775f5bf103ce8eec9c7ab3059909ba350a5164744e9947ed14a53f51687c040a250bda833f906d1283aa8803975b84e6c8f7a7c42f99dc8ef80250d1af + languageName: node + linkType: hard + +"execa@npm:^9.0.0": + version: 9.5.2 + resolution: "execa@npm:9.5.2" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.3" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^8.0.0" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^6.0.0" + pretty-ms: "npm:^9.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.0.0" + checksum: 10c0/94782a6282e03253224406c29068d18f9095cc251a45d1f19ac3d8f2a9db2cbe32fb8ceb039db1451d8fce3531135a6c0c559f76d634f85416268fc4a6995365 + languageName: node + linkType: hard + +"expect-type@npm:^1.1.0": + version: 1.1.0 + resolution: "expect-type@npm:1.1.0" + checksum: 10c0/5af0febbe8fe18da05a6d51e3677adafd75213512285408156b368ca471252565d5ca6e59e4bddab25121f3cfcbbebc6a5489f8cc9db131cc29e69dcdcc7ae15 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"extend@npm:^3.0.0": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.0.3 + resolution: "fast-uri@npm:3.0.3" + checksum: 10c0/4b2c5ce681a062425eae4f15cdc8fc151fd310b2f69b1f96680677820a8b49c3cd6e80661a406e19d50f0c40a3f8bffdd458791baf66f4a879d80be28e10a320 + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.16": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: 10c0/7e3d8ae812a7f4fdf8cad18e9cde436a39addf266a5986f653ea0d81e0de0900f50c0f27c6d5aff3f686bcb48acbd45be115ae2216f36a6a13a7dbbf5cad878b + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.18.0 + resolution: "fastq@npm:1.18.0" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/7be87ecc41762adbddf558d24182f50a4b1a3ef3ee807d33b7623da7aee5faecdcc94fce5aa13fe91df93e269f383232bbcdb2dc5338cd1826503d6063221f36 + languageName: node + linkType: hard + +"figures@npm:^2.0.0": + version: 2.0.0 + resolution: "figures@npm:2.0.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/5dc5a75fec3e7e04ae65d6ce51d28b3e70d4656c51b06996b6fdb2cb5b542df512e3b3c04482f5193a964edddafa5521479ff948fa84e12ff556e53e094ab4ce + languageName: node + linkType: hard + +"figures@npm:^6.0.0, figures@npm:^6.1.0": + version: 6.1.0 + resolution: "figures@npm:6.1.0" + dependencies: + is-unicode-supported: "npm:^2.0.0" + checksum: 10c0/9159df4264d62ef447a3931537de92f5012210cf5135c35c010df50a2169377581378149abfe1eb238bd6acbba1c0d547b1f18e0af6eee49e30363cedaffcfe4 + languageName: node + linkType: hard + +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" + dependencies: + flat-cache: "npm:^4.0.0" + checksum: 10c0/9e2b5938b1cd9b6d7e3612bdc533afd4ac17b2fc646569e9a8abbf2eb48e5eb8e316bc38815a3ef6a1b456f4107f0d0f055a614ca613e75db6bf9ff4d72c1638 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up-simple@npm:^1.0.0": + version: 1.0.0 + resolution: "find-up-simple@npm:1.0.0" + checksum: 10c0/de1ad5e55c8c162f5600fe3297bb55a3da5cd9cb8c6755e463ec1d52c4c15a84e312a68397fb5962d13263b3dbd4ea294668c465ccacc41291d7cc97588769f9 + languageName: node + linkType: hard + +"find-up@npm:^2.0.0": + version: 2.1.0 + resolution: "find-up@npm:2.1.0" + dependencies: + locate-path: "npm:^2.0.0" + checksum: 10c0/c080875c9fe28eb1962f35cbe83c683796a0321899f1eed31a37577800055539815de13d53495049697d3ba313013344f843bb9401dd337a1b832be5edfc6840 + languageName: node + linkType: hard + +"find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"find-up@npm:^7.0.0": + version: 7.0.0 + resolution: "find-up@npm:7.0.0" + dependencies: + locate-path: "npm:^7.2.0" + path-exists: "npm:^5.0.0" + unicorn-magic: "npm:^0.1.0" + checksum: 10c0/e6ee3e6154560bc0ab3bc3b7d1348b31513f9bdf49a5dd2e952495427d559fa48cdf33953e85a309a323898b43fa1bfbc8b80c880dfc16068384783034030008 + languageName: node + linkType: hard + +"find-versions@npm:^6.0.0": + version: 6.0.0 + resolution: "find-versions@npm:6.0.0" + dependencies: + semver-regex: "npm:^4.0.5" + super-regex: "npm:^1.0.0" + checksum: 10c0/1e38da3058f389c8657cd6f47fbcf12412051e7d2d14017594b8ca54ec239d19058f2d9dde80f27415726ab62822e32e3ed0a81141cfc206a3b8c8f0d87a5732 + languageName: node + linkType: hard + +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.4" + checksum: 10c0/2c59d93e9faa2523e4fda6b4ada749bed432cfa28c8e251f33b25795e426a1c6dbada777afb1f74fcfff33934fdbdea921ee738fcc33e71adc9d6eca984a1cfc + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.2 + resolution: "flatted@npm:3.3.2" + checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.1 + resolution: "form-data@npm:4.0.1" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 + languageName: node + linkType: hard + +"from2@npm:^2.3.0": + version: 2.3.0 + resolution: "from2@npm:2.3.0" + dependencies: + inherits: "npm:^2.0.1" + readable-stream: "npm:^2.0.0" + checksum: 10c0/f87f7a2e4513244d551454a7f8324ef1f7837864a8701c536417286ec19ff4915606b1dfa8909a21b7591ebd8440ffde3642f7c303690b9a4d7c832d62248aa1 + languageName: node + linkType: hard + +"fs-extra@npm:^11.0.0": + version: 11.2.0 + resolution: "fs-extra@npm:11.2.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/d77a9a9efe60532d2e790e938c81a02c1b24904ef7a3efb3990b835514465ba720e99a6ea56fd5e2db53b4695319b644d76d5a0e9988a2beef80aa7b1da63398 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0, fs-minipass@npm:^3.0.3": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"function-timeout@npm:^1.0.1": + version: 1.0.2 + resolution: "function-timeout@npm:1.0.2" + checksum: 10c0/75d7ac6c83c450b84face2c9d22307b00e10c7376aa3a34c7be260853582c5e4c502904e2f6bf1d4500c4052e748e001388f6bbd9d34ebfdfb6c4fec2169d0ff + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": + version: 1.1.8 + resolution: "function.prototype.name@npm:1.1.8" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + functions-have-names: "npm:^1.2.3" + hasown: "npm:^2.0.2" + is-callable: "npm:^1.2.7" + checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253 + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-east-asian-width@npm:^1.0.0": + version: 1.3.0 + resolution: "get-east-asian-width@npm:1.3.0" + checksum: 10c0/1a049ba697e0f9a4d5514c4623781c5246982bdb61082da6b5ae6c33d838e52ce6726407df285cdbb27ec1908b333cf2820989bd3e986e37bb20979437fdf34b + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6": + version: 1.2.6 + resolution: "get-intrinsic@npm:1.2.6" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + dunder-proto: "npm:^1.0.0" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + function-bind: "npm:^1.1.2" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.0.0" + checksum: 10c0/0f1ea6d807d97d074e8a31ac698213a12757fcfa9a8f4778263d2e4702c40fe83198aadd3dba2e99aabc2e4cf8a38345545dbb0518297d3df8b00b56a156c32a + languageName: node + linkType: hard + +"get-set-props@npm:^0.2.0": + version: 0.2.0 + resolution: "get-set-props@npm:0.2.0" + checksum: 10c0/6030996bad46843651e46a737269a0db55bae4325e989addd93cb52ebb5c4829bca857550046da627e8158a24d4fe72bfacb34f28ecfed50fff69ff678bc042d + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + +"get-stream@npm:^7.0.0": + version: 7.0.1 + resolution: "get-stream@npm:7.0.1" + checksum: 10c0/d0e34acd2f65c80ec2bef1f8add0c36bd4819d06aedd221eba59382d314ae980ae25b68e0000145798a6f7e2f541417f78b44fdc2a3eb942b2b28cfcce69cc71 + languageName: node + linkType: hard + +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 10c0/5c2181e98202b9dae0bb4a849979291043e5892eb40312b47f0c22b9414fc9b28a3b6063d2375705eb24abc41ecf97894d9a51f64ff021511b504477b27b4290 + languageName: node + linkType: hard + +"get-stream@npm:^9.0.0": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10c0/d70e73857f2eea1826ac570c3a912757dcfbe8a718a033fa0c23e12ac8e7d633195b01710e0559af574cbb5af101009b42df7b6f6b29ceec8dbdf7291931b948 + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.1.0": + version: 1.1.0 + resolution: "get-symbol-description@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.8.1": + version: 4.8.1 + resolution: "get-tsconfig@npm:4.8.1" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/536ee85d202f604f4b5fb6be81bcd6e6d9a96846811e83e9acc6de4a04fb49506edea0e1b8cf1d5ee7af33e469916ec2809d4c5445ab8ae015a7a51fbd1572f9 + languageName: node + linkType: hard + +"git-log-parser@npm:^1.2.0": + version: 1.2.1 + resolution: "git-log-parser@npm:1.2.1" + dependencies: + argv-formatter: "npm:~1.0.0" + spawn-error-forwarder: "npm:~1.0.0" + split2: "npm:~1.0.0" + stream-combiner2: "npm:~1.1.1" + through2: "npm:~2.0.0" + traverse: "npm:0.6.8" + checksum: 10c0/8b35e5a4882a481164b1999a062141063645246152eedab4587f4efaf0c61a4964da6cb1891263e92bc1b91edf0850843a06b6cf88a389a7c6a66c1be67ead4f + languageName: node + linkType: hard + +"git-raw-commits@npm:^4.0.0": + version: 4.0.0 + resolution: "git-raw-commits@npm:4.0.0" + dependencies: + dargs: "npm:^8.0.0" + meow: "npm:^12.0.1" + split2: "npm:^4.0.0" + bin: + git-raw-commits: cli.mjs + checksum: 10c0/ab51335d9e55692fce8e42788013dba7a7e7bf9f5bf0622c8cd7ddc9206489e66bb939563fca4edb3aa87477e2118f052702aad1933b13c6fa738af7f29884f0 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7, glob@npm:^10.4.1, glob@npm:^10.4.5": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^11.0.0": + version: 11.0.0 + resolution: "glob@npm:11.0.0" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^4.0.1" + minimatch: "npm:^10.0.0" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^2.0.0" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/419866015d8795258a8ac51de5b9d1a99c72634fc3ead93338e4da388e89773ab21681e494eac0fbc4250b003451ca3110bb4f1c9393d15d14466270094fdb4e + languageName: node + linkType: hard + +"global-directory@npm:^4.0.1": + version: 4.0.1 + resolution: "global-directory@npm:4.0.1" + dependencies: + ini: "npm:4.1.1" + checksum: 10c0/f9cbeef41db4876f94dd0bac1c1b4282a7de9c16350ecaaf83e7b2dd777b32704cc25beeb1170b5a63c42a2c9abfade74d46357fe0133e933218bc89e613d4b2 + languageName: node + linkType: hard + +"globals@npm:^14.0.0": + version: 14.0.0 + resolution: "globals@npm:14.0.0" + checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d + languageName: node + linkType: hard + +"globals@npm:^15.11.0, globals@npm:^15.3.0, globals@npm:^15.9.0": + version: 15.14.0 + resolution: "globals@npm:15.14.0" + checksum: 10c0/039deb8648bd373b7940c15df9f96ab7508fe92b31bbd39cbd1c1a740bd26db12457aa3e5d211553b234f30e9b1db2fee3683012f543a01a6942c9062857facb + languageName: node + linkType: hard + +"globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + +"globby@npm:^14.0.0": + version: 14.0.2 + resolution: "globby@npm:14.0.2" + dependencies: + "@sindresorhus/merge-streams": "npm:^2.1.0" + fast-glob: "npm:^3.3.2" + ignore: "npm:^5.2.4" + path-type: "npm:^5.0.0" + slash: "npm:^5.1.0" + unicorn-magic: "npm:^0.1.0" + checksum: 10c0/3f771cd683b8794db1e7ebc8b6b888d43496d93a82aad4e9d974620f578581210b6c5a6e75ea29573ed16a1345222fab6e9b877a8d1ed56eeb147e09f69c6f78 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.10": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 10c0/4223a833e38e1d0d2aea630c2433cfb94ddc07dfc11d511dbd6be1d16688c5be848acc31f9a5d0d0ddbfb56d2ee5a6ae0278aceeb0ca6a13f27e06b9956fb952 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"handlebars@npm:^4.7.7": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: "npm:^1.2.5" + neo-async: "npm:^2.6.2" + source-map: "npm:^0.6.1" + uglify-js: "npm:^3.1.4" + wordwrap: "npm:^1.0.0" + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 10c0/7aff423ea38a14bb379316f3857fe0df3c5d66119270944247f155ba1f08e07a92b340c58edaa00cfe985c21508870ee5183e0634dcb53dd405f35c93ef7f10d + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.2": + version: 1.1.0 + resolution: "has-bigints@npm:1.1.0" + checksum: 10c0/2de0cdc4a1ccf7a1e75ffede1876994525ac03cc6f5ae7392d3415dd475cd9eee5bceec63669ab61aa997ff6cceebb50ef75561c7002bed8988de2b9d1b40788 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.2.0": + version: 1.2.0 + resolution: "has-proto@npm:1.2.0" + dependencies: + dunder-proto: "npm:^1.0.0" + checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"highlight.js@npm:^10.7.1": + version: 10.7.3 + resolution: "highlight.js@npm:10.7.3" + checksum: 10c0/073837eaf816922427a9005c56c42ad8786473dc042332dfe7901aa065e92bc3d94ebf704975257526482066abb2c8677cc0326559bb8621e046c21c5991c434 + languageName: node + linkType: hard + +"hook-std@npm:^3.0.0": + version: 3.0.0 + resolution: "hook-std@npm:3.0.0" + checksum: 10c0/51841e049b130347acb59fb129253891d95e56e6fa268d0bcf95eaca5223f3ca2032b7f0af5feb0c0f61c8571f7af29339f185280ff28a624d3ebdcb6080540b + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 + languageName: node + linkType: hard + +"hosted-git-info@npm:^7.0.0": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: "npm:^10.0.1" + checksum: 10c0/b19dbd92d3c0b4b0f1513cf79b0fc189f54d6af2129eeb201de2e9baaa711f1936929c848b866d9c8667a0f956f34bf4f07418c12be1ee9ca74fd9246335ca1f + languageName: node + linkType: hard + +"hosted-git-info@npm:^8.0.0, hosted-git-info@npm:^8.0.2": + version: 8.0.2 + resolution: "hosted-git-info@npm:8.0.2" + dependencies: + lru-cache: "npm:^10.0.1" + checksum: 10c0/e64f6c1b6db625869934b35c4959aacc365799d9cb1856e0224b5557ee5ecfe224bb8aa850479179a8f3968063ea0f92b8fbb67fe009d46859431dcde7fdc36d + languageName: node + linkType: hard + +"html-encoding-sniffer@npm:^4.0.0": + version: 4.0.0 + resolution: "html-encoding-sniffer@npm:4.0.0" + dependencies: + whatwg-encoding: "npm:^3.1.1" + checksum: 10c0/523398055dc61ac9b34718a719cb4aa691e4166f29187e211e1607de63dc25ac7af52ca7c9aead0c4b3c0415ffecb17326396e1202e2e86ff4bca4c0ee4c6140 + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.2": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.0, https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.5": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 10c0/5a9359073fe17a8b58e5a085e9a39a950366d9f00217c4ff5878bd312e09d80f460536ea6a3f260b5943a01fe55c158d1cea3fc7bee3d0520aeef04f6d915c82 + languageName: node + linkType: hard + +"human-signals@npm:^8.0.0": + version: 8.0.0 + resolution: "human-signals@npm:8.0.0" + checksum: 10c0/e4dac4f7d3eb791ed04129fc6a85bd454a9102d3e3b76c911d0db7057ebd60b2956b435b5b5712aec18960488ede3c21ef7c56e42cdd70760c0d84d3c05cd92e + languageName: node + linkType: hard + +"husky@npm:^9.1.7": + version: 9.1.7 + resolution: "husky@npm:9.1.7" + bin: + husky: bin.js + checksum: 10c0/35bb110a71086c48906aa7cd3ed4913fb913823715359d65e32e0b964cb1e255593b0ae8014a5005c66a68e6fa66c38dcfa8056dbbdfb8b0187c0ffe7ee3a58f + languageName: node + linkType: hard + +"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ignore-walk@npm:^7.0.0": + version: 7.0.0 + resolution: "ignore-walk@npm:7.0.0" + dependencies: + minimatch: "npm:^9.0.0" + checksum: 10c0/3754bcde369a53a92c1d0835ea93feb6c5b2934984d3f5a8f9dd962d13ac33ee3a9e930901a89b5d46fc061870639d983f497186afdfe3484e135f2ad89f5577 + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1, ignore@npm:^5.3.2": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"ignore@npm:^6.0.0": + version: 6.0.2 + resolution: "ignore@npm:6.0.2" + checksum: 10c0/9a38feac1861906a78ba0f03e8ef3cd6b0526dce2a1a84e1009324b557763afeb9c3ebcc04666b21f7bbf71adda45e76781bb9e2eaa0903d45dcaded634454f5 + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"import-from-esm@npm:^1.0.3, import-from-esm@npm:^1.3.1": + version: 1.3.4 + resolution: "import-from-esm@npm:1.3.4" + dependencies: + debug: "npm:^4.3.4" + import-meta-resolve: "npm:^4.0.0" + checksum: 10c0/fcd42ead421892e1d9dbc90e510f45c7d3b58887c35077cf2318e4aa39b52c07c06e2b54efd16dfe8e712421439c23794d18a5e8956cca237fc90790ed8e2241 + languageName: node + linkType: hard + +"import-meta-resolve@npm:^4.0.0": + version: 4.1.0 + resolution: "import-meta-resolve@npm:4.1.0" + checksum: 10c0/42f3284b0460635ddf105c4ad99c6716099c3ce76702602290ad5cbbcd295700cbc04e4bdf47bacf9e3f1a4cec2e1ff887dabc20458bef398f9de22ddff45ef5 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 + languageName: node + linkType: hard + +"index-to-position@npm:^0.1.2": + version: 0.1.2 + resolution: "index-to-position@npm:0.1.2" + checksum: 10c0/7c91bde8bafc22684b74a7a24915bee4691cba48352ddb4ebe3b20a3a87bc0fa7a05f586137245ca8f92222a11f341f7631ff7f38cd78a523505d2d02dbfa257 + languageName: node + linkType: hard + +"inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:4.1.1": + version: 4.1.1 + resolution: "ini@npm:4.1.1" + checksum: 10c0/7fddc8dfd3e63567d4fdd5d999d1bf8a8487f1479d0b34a1d01f28d391a9228d261e19abc38e1a6a1ceb3400c727204fce05725d5eb598dfcf2077a1e3afe211 + languageName: node + linkType: hard + +"ini@npm:^1.3.4, ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"ini@npm:^4.1.2, ini@npm:^4.1.3": + version: 4.1.3 + resolution: "ini@npm:4.1.3" + checksum: 10c0/0d27eff094d5f3899dd7c00d0c04ea733ca03a8eb6f9406ce15daac1a81de022cb417d6eaff7e4342451ffa663389c565ffc68d6825eaf686bf003280b945764 + languageName: node + linkType: hard + +"ini@npm:^5.0.0": + version: 5.0.0 + resolution: "ini@npm:5.0.0" + checksum: 10c0/657491ce766cbb4b335ab221ee8f72b9654d9f0e35c32fe5ff2eb7ab8c5ce72237ff6456555b50cde88e6507a719a70e28e327b450782b4fc20c90326ec8c1a8 + languageName: node + linkType: hard + +"init-package-json@npm:^7.0.2": + version: 7.0.2 + resolution: "init-package-json@npm:7.0.2" + dependencies: + "@npmcli/package-json": "npm:^6.0.0" + npm-package-arg: "npm:^12.0.0" + promzard: "npm:^2.0.0" + read: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + validate-npm-package-name: "npm:^6.0.0" + checksum: 10c0/258860a3a41abd2dcb83727e234dd2f2f56d0b30191e6fa8dd424b83d5127a44330d6e97573cbe8df7582ab76d1b3da4090008b38f06003403988a5e5101fd6b + languageName: node + linkType: hard + +"internal-slot@npm:^1.1.0": + version: 1.1.0 + resolution: "internal-slot@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.2" + side-channel: "npm:^1.1.0" + checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7 + languageName: node + linkType: hard + +"into-stream@npm:^7.0.0": + version: 7.0.0 + resolution: "into-stream@npm:7.0.0" + dependencies: + from2: "npm:^2.3.0" + p-is-promise: "npm:^3.0.0" + checksum: 10c0/ac6975c0029bf969931781ab1534996b35068f5d51ccd55a00b601e2fc638cf040a42c9fb8e3c8f320509af9a56c9b11da8f1159f76db3ed8096779cce618c95 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"ip-regex@npm:^5.0.0": + version: 5.0.0 + resolution: "ip-regex@npm:5.0.0" + checksum: 10c0/23f07cf393436627b3a91f7121eee5bc831522d07c95ddd13f5a6f7757698b08551480f12e5dbb3bf248724da135d54405c9687733dba7314f74efae593bdf06 + languageName: node + linkType: hard + +"is-alphabetical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphabetical@npm:1.0.4" + checksum: 10c0/1505b1de5a1fd74022c05fb21b0e683a8f5229366bac8dc4d34cf6935bcfd104d1125a5e6b083fb778847629f76e5bdac538de5367bdf2b927a1356164e23985 + languageName: node + linkType: hard + +"is-alphabetical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphabetical@npm:2.0.1" + checksum: 10c0/932367456f17237533fd1fc9fe179df77957271020b83ea31da50e5cc472d35ef6b5fb8147453274ffd251134472ce24eb6f8d8398d96dee98237cdb81a6c9a7 + languageName: node + linkType: hard + +"is-alphanumerical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphanumerical@npm:1.0.4" + dependencies: + is-alphabetical: "npm:^1.0.0" + is-decimal: "npm:^1.0.0" + checksum: 10c0/d623abae7130a7015c6bf33d99151d4e7005572fd170b86568ff4de5ae86ac7096608b87dd4a1d4dbbd497e392b6396930ba76c9297a69455909cebb68005905 + languageName: node + linkType: hard + +"is-alphanumerical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphanumerical@npm:2.0.1" + dependencies: + is-alphabetical: "npm:^2.0.0" + is-decimal: "npm:^2.0.0" + checksum: 10c0/4b35c42b18e40d41378293f82a3ecd9de77049b476f748db5697c297f686e1e05b072a6aaae2d16f54d2a57f85b00cbbe755c75f6d583d1c77d6657bd0feb5a2 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": + version: 3.0.5 + resolution: "is-array-buffer@npm:3.0.5" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-async-function@npm:^2.0.0": + version: 2.0.0 + resolution: "is-async-function@npm:2.0.0" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/787bc931576aad525d751fc5ce211960fe91e49ac84a5c22d6ae0bc9541945fbc3f686dc590c3175722ce4f6d7b798a93f6f8ff4847fdb2199aea6f4baf5d668 + languageName: node + linkType: hard + +"is-bigint@npm:^1.1.0": + version: 1.1.0 + resolution: "is-bigint@npm:1.1.0" + dependencies: + has-bigints: "npm:^1.0.2" + checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.2.1": + version: 1.2.1 + resolution: "is-boolean-object@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5 + languageName: node + linkType: hard + +"is-builtin-module@npm:^3.2.1": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 10c0/5a66937a03f3b18803381518f0ef679752ac18cdb7dd53b5e23ee8df8d440558737bd8dcc04d2aae555909d2ecb4a81b5c0d334d119402584b61e6a003e31af1 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + +"is-cidr@npm:^5.1.0": + version: 5.1.0 + resolution: "is-cidr@npm:5.1.0" + dependencies: + cidr-regex: "npm:^4.1.1" + checksum: 10c0/784d16b6efc3950f9c5ce4141be45b35f3796586986e512cde99d1cb31f9bda5127b1da03e9fb97eb16198e644985e9c0c9a4c6f027ab6e7fff36c121e51bedc + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.15.1, is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": + version: 1.0.2 + resolution: "is-data-view@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": + version: 1.1.0 + resolution: "is-date-object@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f + languageName: node + linkType: hard + +"is-decimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-decimal@npm:1.0.4" + checksum: 10c0/a4ad53c4c5c4f5a12214e7053b10326711f6a71f0c63ba1314a77bd71df566b778e4ebd29f9fb6815f07a4dc50c3767fb19bd6fc9fa05e601410f1d64ffeac48 + languageName: node + linkType: hard + +"is-decimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-decimal@npm:2.0.1" + checksum: 10c0/8085dd66f7d82f9de818fba48b9e9c0429cb4291824e6c5f2622e96b9680b54a07a624cfc663b24148b8e853c62a1c987cfe8b0b5a13f5156991afaf6736e334 + languageName: node + linkType: hard + +"is-empty@npm:^1.0.0": + version: 1.2.0 + resolution: "is-empty@npm:1.2.0" + checksum: 10c0/f0dd6534716f2749586c35f1dcf37a0a5ac31e91d629ae2652b36c7f72c0ce71f0b68f082a6eed95b1af6f84ba31cd757c2343b19507878ed1e532a3383ebaaa + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-finalizationregistry@npm:^1.1.0": + version: 1.1.1 + resolution: "is-finalizationregistry@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 10c0/df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^5.0.0": + version: 5.0.0 + resolution: "is-fullwidth-code-point@npm:5.0.0" + dependencies: + get-east-asian-width: "npm:^1.0.0" + checksum: 10c0/cd591b27d43d76b05fa65ed03eddce57a16e1eca0b7797ff7255de97019bcaf0219acfc0c4f7af13319e13541f2a53c0ace476f442b13267b9a6a7568f2b65c8 + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.10": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/df03514df01a6098945b5a0cfa1abff715807c8e72f57c49a0686ad54b3b74d394e2d8714e6f709a71eb00c9630d48e73ca1796c1ccc84ac95092c1fecc0d98b + languageName: node + linkType: hard + +"is-get-set-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "is-get-set-prop@npm:2.0.0" + dependencies: + get-set-props: "npm:^0.2.0" + lowercase-keys: "npm:^3.0.0" + checksum: 10c0/ea745d123bf408999ad5110def63e6943dd03519f941e598e8a4ba4c59c6548bfd97e0f4074b4708add10660fcbcaf174c1c957532f8c2045a59b22181a2f1b9 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-hexadecimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-hexadecimal@npm:1.0.4" + checksum: 10c0/ec4c64e5624c0f240922324bc697e166554f09d3ddc7633fc526084502626445d0a871fbd8cae52a9844e83bd0bb414193cc5a66806d7b2867907003fc70c5ea + languageName: node + linkType: hard + +"is-hexadecimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-hexadecimal@npm:2.0.1" + checksum: 10c0/3eb60fe2f1e2bbc760b927dcad4d51eaa0c60138cf7fc671803f66353ad90c301605b502c7ea4c6bb0548e1c7e79dfd37b73b632652e3b76030bba603a7e9626 + languageName: node + linkType: hard + +"is-js-type@npm:^3.0.0": + version: 3.0.0 + resolution: "is-js-type@npm:3.0.0" + dependencies: + js-types: "npm:^4.0.0" + checksum: 10c0/b0c87c52dd9199483dcdb19343c3cdda00981d545af9d7d6e30bb2f03cf73b7a4f5857d22254f95e590ef8f2978877dcbe24268f60ccaead86cc72526f7c3718 + languageName: node + linkType: hard + +"is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: 10c0/2c4d431b74e00fdda7162cd8e4b763d6f6f217edf97d4f8538b94b8702b150610e2c64961340015fe8df5b1fcee33ccd2e9b62619c4a8a3a155f8de6d6d355fc + languageName: node + linkType: hard + +"is-number-object@npm:^1.1.1": + version: 1.1.1 + resolution: "is-number-object@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-obj-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj-prop@npm:2.0.0" + dependencies: + lowercase-keys: "npm:^3.0.0" + obj-props: "npm:^2.0.0" + checksum: 10c0/412677fae1db39ecd6a8de406689e05d2339ec230b951c188a58b2f6fa84213a29b09d72a25f26bb3ded5f6626c9f93b73f23cc7fcdc23255d45a78f9d208906 + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: 10c0/85044ed7ba8bd169e2c2af3a178cacb92a97aa75de9569d02efef7f443a824b5e153eba72b9ae3aca6f8ce81955271aa2dc7da67a8b720575d3e38104208cb4e + languageName: node + linkType: hard + +"is-plain-obj@npm:^4.0.0, is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e + languageName: node + linkType: hard + +"is-potential-custom-element-name@npm:^1.0.1": + version: 1.0.1 + resolution: "is-potential-custom-element-name@npm:1.0.1" + checksum: 10c0/b73e2f22bc863b0939941d369486d308b43d7aef1f9439705e3582bfccaa4516406865e32c968a35f97a99396dac84e2624e67b0a16b0a15086a785e16ce7db9 + languageName: node + linkType: hard + +"is-proto-prop@npm:^3.0.1": + version: 3.0.1 + resolution: "is-proto-prop@npm:3.0.1" + dependencies: + lowercase-keys: "npm:^3.0.0" + prototype-properties: "npm:^5.0.0" + checksum: 10c0/53fc3447918a27eff0e873f8691f12c1cba69c357177cf456b8cac9d8331765adcad6137476e02132427096706bcc5ebfe23afdcc092a2af161c537552e8a755 + languageName: node + linkType: hard + +"is-regex@npm:^1.2.1": + version: 1.2.1 + resolution: "is-regex@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.2" + checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04 + languageName: node + linkType: hard + +"is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 10c0/f73732e13f099b2dc879c2a12341cfc22ccaca8dd504e6edae26484bd5707a35d503fba5b4daad530a9b088ced1ae6c9d8200fd92e09b428fe14ea79ce8080b7 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.4": + version: 1.0.4 + resolution: "is-shared-array-buffer@npm:1.0.4" + dependencies: + call-bound: "npm:^1.0.3" + checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 10c0/eb2f7127af02ee9aa2a0237b730e47ac2de0d4e76a4a905a50a11557f2339df5765eaea4ceb8029f1efa978586abe776908720bfcb1900c20c6ec5145f6f29d8 + languageName: node + linkType: hard + +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10c0/2706c7f19b851327ba374687bc4a3940805e14ca496dc672b9629e744d143b1ad9c6f1b162dece81c7bfbc0f83b32b61ccc19ad2e05aad2dd7af347408f60c7f + languageName: node + linkType: hard + +"is-string@npm:^1.0.7, is-string@npm:^1.1.1": + version: 1.1.1 + resolution: "is-string@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.3" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": + version: 1.1.1 + resolution: "is-symbol@npm:1.1.1" + dependencies: + call-bound: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + safe-regex-test: "npm:^1.1.0" + checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e + languageName: node + linkType: hard + +"is-text-path@npm:^2.0.0": + version: 2.0.0 + resolution: "is-text-path@npm:2.0.0" + dependencies: + text-extensions: "npm:^2.0.0" + checksum: 10c0/e3c470e1262a3a54aa0fca1c0300b2659a7aed155714be6b643f88822c03bcfa6659b491f7a05c5acd3c1a3d6d42bab47e1bdd35bcc3a25973c4f26b2928bc1a + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" + dependencies: + which-typed-array: "npm:^1.1.16" + checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4 + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: 10c0/a0f53e9a7c1fdbcf2d2ef6e40d4736fdffff1c9f8944c75e15425118ff3610172c87bf7bc6c34d3903b04be59790bb2212ddbe21ee65b5a97030fc50370545a5 + languageName: node + linkType: hard + +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: 10c0/443c35bb86d5e6cc5929cd9c75a4024bb0fff9586ed50b092f94e700b89c43a33b186b76dbc6d54f3d3d09ece689ab38dcdc1af6a482cbe79c0f2da0a17f1299 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.0": + version: 1.1.0 + resolution: "is-weakref@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + checksum: 10c0/aa835f62e29cb60132ecb3ec7d11bd0f39ec7322325abe8412b805aef47153ec2daefdb21759b049711c674f49b13202a31d8d126bcdff7d8671c78babd4ae5b + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.3": + version: 2.0.4 + resolution: "is-weakset@npm:2.0.4" + dependencies: + call-bound: "npm:^1.0.3" + get-intrinsic: "npm:^1.2.6" + checksum: 10c0/6491eba08acb8dc9532da23cb226b7d0192ede0b88f16199e592e4769db0a077119c1f5d2283d1e0d16d739115f70046e887e477eb0e66cd90e1bb29f28ba647 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"issue-parser@npm:^7.0.0": + version: 7.0.1 + resolution: "issue-parser@npm:7.0.1" + dependencies: + lodash.capitalize: "npm:^4.2.1" + lodash.escaperegexp: "npm:^4.1.2" + lodash.isplainobject: "npm:^4.0.6" + lodash.isstring: "npm:^4.0.1" + lodash.uniqby: "npm:^4.7.0" + checksum: 10c0/1b2dad16081ae423bb96143132701e89aa8f6345ab0a10f692594ddf5699b514adccaaaf24d7c59afc977c447895bdee15fff2dfc9d6015e177f6966b06f5dcb + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.2": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0, istanbul-lib-report@npm:^3.0.1": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^5.0.6": + version: 5.0.6 + resolution: "istanbul-lib-source-maps@npm:5.0.6" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.23" + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.7": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 + languageName: node + linkType: hard + +"iterator.prototype@npm:^1.1.4": + version: 1.1.4 + resolution: "iterator.prototype@npm:1.1.4" + dependencies: + define-data-property: "npm:^1.1.4" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" + reflect.getprototypeof: "npm:^1.0.8" + set-function-name: "npm:^2.0.2" + checksum: 10c0/e63fcb5c1094192f43795b836fae9149a7dc2d445425958045e8e193df428407f909efca21bfdf0d885668ae8204681984afac7dd75478118e62f3cd3959c538 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jackspeak@npm:^4.0.1": + version: 4.0.2 + resolution: "jackspeak@npm:4.0.2" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + checksum: 10c0/b26039d11c0163a95b1e58851b9ac453cce64ad6d1eb98a00b303ad5eeb761b29d33c9419d1e16c016d3f7151c8edf7df223e6cf93a1907655fd95d6ce85c0de + languageName: node + linkType: hard + +"java-properties@npm:^1.0.2": + version: 1.0.2 + resolution: "java-properties@npm:1.0.2" + checksum: 10c0/be0f58c83b5a852f313de2ea57f7b8b7d46dc062b2ffe487d58838e7034d4660f4d22f2a96aae4daa622af6d734726c0d08b01396e59666ededbcfdc25a694d6 + languageName: node + linkType: hard + +"jiti@npm:^2.4.1": + version: 2.4.2 + resolution: "jiti@npm:2.4.2" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10c0/4ceac133a08c8faff7eac84aabb917e85e8257f5ad659e843004ce76e981c457c390a220881748ac67ba1b940b9b729b30fb85cbaf6e7989f04b6002c94da331 + languageName: node + linkType: hard + +"js-cookie@npm:^3.0.5": + version: 3.0.5 + resolution: "js-cookie@npm:3.0.5" + checksum: 10c0/04a0e560407b4489daac3a63e231d35f4e86f78bff9d792011391b49c59f721b513411cd75714c418049c8dc9750b20fcddad1ca5a2ca616c3aca4874cce5b3a + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-types@npm:^4.0.0": + version: 4.0.0 + resolution: "js-types@npm:4.0.0" + checksum: 10c0/3e6091a03bb9aa032e8595cb4e6955c661b3ae080ba541dda3254da58ec581d591554eac13cca9651534cb76bd7d4b0a3bd45cc1325718cd76dc29841f606830 + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsdom@npm:^25.0.1": + version: 25.0.1 + resolution: "jsdom@npm:25.0.1" + dependencies: + cssstyle: "npm:^4.1.0" + data-urls: "npm:^5.0.0" + decimal.js: "npm:^10.4.3" + form-data: "npm:^4.0.0" + html-encoding-sniffer: "npm:^4.0.0" + http-proxy-agent: "npm:^7.0.2" + https-proxy-agent: "npm:^7.0.5" + is-potential-custom-element-name: "npm:^1.0.1" + nwsapi: "npm:^2.2.12" + parse5: "npm:^7.1.2" + rrweb-cssom: "npm:^0.7.1" + saxes: "npm:^6.0.0" + symbol-tree: "npm:^3.2.4" + tough-cookie: "npm:^5.0.0" + w3c-xmlserializer: "npm:^5.0.0" + webidl-conversions: "npm:^7.0.0" + whatwg-encoding: "npm:^3.1.1" + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + ws: "npm:^8.18.0" + xml-name-validator: "npm:^5.0.0" + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + checksum: 10c0/6bda32a6dfe4e37a30568bf51136bdb3ba9c0b72aadd6356280404275a34c9e097c8c25b5eb3c742e602623741e172da977ff456684befd77c9042ed9bf8c2b4 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + +"jsesc@npm:~0.5.0": + version: 0.5.0 + resolution: "jsesc@npm:0.5.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/f93792440ae1d80f091b65f8ceddf8e55c4bb7f1a09dee5dcbdb0db5612c55c0f6045625aa6b7e8edb2e0a4feabd80ee48616dbe2d37055573a84db3d24f96d9 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^3.0.0": + version: 3.0.2 + resolution: "json-parse-even-better-errors@npm:3.0.2" + checksum: 10c0/147f12b005768abe9fab78d2521ce2b7e1381a118413d634a40e6d907d7d10f5e9a05e47141e96d6853af7cc36d2c834d0a014251be48791e037ff2f13d2b94b + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^4.0.0": + version: 4.0.0 + resolution: "json-parse-even-better-errors@npm:4.0.0" + checksum: 10c0/84cd9304a97e8fb2af3937bf53acb91c026aeb859703c332684e688ea60db27fc2242aa532a84e1883fdcbe1e5c1fb57c2bef38e312021aa1cd300defc63cf16 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"json-stringify-nice@npm:^1.1.4": + version: 1.1.4 + resolution: "json-stringify-nice@npm:1.1.4" + checksum: 10c0/13673b67ba9e7fde75a103cade0b0d2dd0d21cd3b918de8d8f6cd59d48ad8c78b0e85f6f4a5842073ddfc91ebdde5ef7c81c7f51945b96a33eaddc5d41324b87 + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: "npm:^1.2.0" + bin: + json5: lib/cli.js + checksum: 10c0/9ee316bf21f000b00752e6c2a3b79ecf5324515a5c60ee88983a1910a45426b643a4f3461657586e8aeca87aaf96f0a519b0516d2ae527a6c3e7eed80f68717f + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 10c0/89bc68080cd0a0e276d4b5ab1b79cacd68f562467008d176dc23e16e97d4efec9e21741d92ba5087a8433526a45a7e6a9d5ef25408696c402ca1cfbc01a90bf0 + languageName: node + linkType: hard + +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0": + version: 3.3.5 + resolution: "jsx-ast-utils@npm:3.3.5" + dependencies: + array-includes: "npm:^3.1.6" + array.prototype.flat: "npm:^1.3.1" + object.assign: "npm:^4.1.4" + object.values: "npm:^1.1.6" + checksum: 10c0/a32679e9cb55469cb6d8bbc863f7d631b2c98b7fc7bf172629261751a6e7bc8da6ae374ddb74d5fbd8b06cf0eb4572287b259813d92b36e384024ed35e4c13e1 + languageName: node + linkType: hard + +"just-diff-apply@npm:^5.2.0": + version: 5.5.0 + resolution: "just-diff-apply@npm:5.5.0" + checksum: 10c0/d7b85371f2a5a17a108467fda35dddd95264ab438ccec7837b67af5913c57ded7246039d1df2b5bc1ade034ccf815b56d69786c5f1e07383168a066007c796c0 + languageName: node + linkType: hard + +"just-diff@npm:^6.0.0": + version: 6.0.2 + resolution: "just-diff@npm:6.0.2" + checksum: 10c0/1931ca1f0cea4cc480172165c189a84889033ad7a60bee302268ba8ca9f222b43773fd5f272a23ee618d43d85d3048411f06b635571a198159e9a85bb2495f5c + languageName: node + linkType: hard + +"keyv@npm:^4.5.4": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"kleur@npm:^4.0.3": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 10c0/e9de6cb49657b6fa70ba2d1448fd3d691a5c4370d8f7bbf1c2f64c24d461270f2117e1b0afe8cb3114f13bbd8e51de158c2a224953960331904e636a5e4c0f2a + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"libnpmaccess@npm:^9.0.0": + version: 9.0.0 + resolution: "libnpmaccess@npm:9.0.0" + dependencies: + npm-package-arg: "npm:^12.0.0" + npm-registry-fetch: "npm:^18.0.1" + checksum: 10c0/5e86cb1b5ead4baa777ee2dbafe27e63c571056d547c83c8e0cd18a173712d9671728e26e405f74c14d10ca592bfd4f2c27c0a5f9882ab9ab3983c5b3d5e249a + languageName: node + linkType: hard + +"libnpmdiff@npm:^7.0.0": + version: 7.0.0 + resolution: "libnpmdiff@npm:7.0.0" + dependencies: + "@npmcli/arborist": "npm:^8.0.0" + "@npmcli/installed-package-contents": "npm:^3.0.0" + binary-extensions: "npm:^2.3.0" + diff: "npm:^5.1.0" + minimatch: "npm:^9.0.4" + npm-package-arg: "npm:^12.0.0" + pacote: "npm:^19.0.0" + tar: "npm:^6.2.1" + checksum: 10c0/9404a613bac00d7023644cb6acfbf8811034692c258c5b795be6c0eb83ef3e490c3d4bcd0fdee10d1986a0a688d263dfc1cb630cc89da228eae268cff7f30be3 + languageName: node + linkType: hard + +"libnpmexec@npm:^9.0.0": + version: 9.0.0 + resolution: "libnpmexec@npm:9.0.0" + dependencies: + "@npmcli/arborist": "npm:^8.0.0" + "@npmcli/run-script": "npm:^9.0.1" + ci-info: "npm:^4.0.0" + npm-package-arg: "npm:^12.0.0" + pacote: "npm:^19.0.0" + proc-log: "npm:^5.0.0" + read: "npm:^4.0.0" + read-package-json-fast: "npm:^4.0.0" + semver: "npm:^7.3.7" + walk-up-path: "npm:^3.0.1" + checksum: 10c0/79eb783d2bf3995c3b4436ab05e2a82f11f84ca0f049613e299da51fd6ff10e1b33ce2497f1e0fcb6e9bf27c51806cdf8cb78f278a36726230529c58ebfdf636 + languageName: node + linkType: hard + +"libnpmfund@npm:^6.0.0": + version: 6.0.0 + resolution: "libnpmfund@npm:6.0.0" + dependencies: + "@npmcli/arborist": "npm:^8.0.0" + checksum: 10c0/bf0a66c131c7a474c98f7545d45bf9adb8338cade923c1a7a5fc062b32f38956d9e720ac80201fbd0e6913b6b2d8176ae161205dcfb6ea8d6f3740bcb316fa3a + languageName: node + linkType: hard + +"libnpmhook@npm:^11.0.0": + version: 11.0.0 + resolution: "libnpmhook@npm:11.0.0" + dependencies: + aproba: "npm:^2.0.0" + npm-registry-fetch: "npm:^18.0.1" + checksum: 10c0/edac74fb7f006f9305b9f8ac0dfc22bca5e404ba0bb65c9f2ef21c8b905ec1fc5ca90471b551fcfba1d216f08fc470804cd21b87f5405b75927df5a975ab0cae + languageName: node + linkType: hard + +"libnpmorg@npm:^7.0.0": + version: 7.0.0 + resolution: "libnpmorg@npm:7.0.0" + dependencies: + aproba: "npm:^2.0.0" + npm-registry-fetch: "npm:^18.0.1" + checksum: 10c0/7fbb0ae997de4920517658df20b633e32f91797d0b287fc9a3e361891fc8e31afbb3d3851dafd44e57067f497056e5ff2a7a6f805b353f2e8de5ecd1692e6ad6 + languageName: node + linkType: hard + +"libnpmpack@npm:^8.0.0": + version: 8.0.0 + resolution: "libnpmpack@npm:8.0.0" + dependencies: + "@npmcli/arborist": "npm:^8.0.0" + "@npmcli/run-script": "npm:^9.0.1" + npm-package-arg: "npm:^12.0.0" + pacote: "npm:^19.0.0" + checksum: 10c0/c8232f22b7789c3f06dd91eee82fc342e4f14fa737aa31f2cff33ea9f0a5c797fd1947317d8f7619acdcdfdc6949f2c02433be3b9e11978d86cb59f3b40d3ca1 + languageName: node + linkType: hard + +"libnpmpublish@npm:^10.0.1": + version: 10.0.1 + resolution: "libnpmpublish@npm:10.0.1" + dependencies: + ci-info: "npm:^4.0.0" + normalize-package-data: "npm:^7.0.0" + npm-package-arg: "npm:^12.0.0" + npm-registry-fetch: "npm:^18.0.1" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.7" + sigstore: "npm:^3.0.0" + ssri: "npm:^12.0.0" + checksum: 10c0/9420382ab7a80541274d6bba77fc1d96b195c00141ca5ea4cf198814b88e6bda4463a05c5a7e95a9956ff5890fe7dba349518ca06538d31f01bf677c5703247e + languageName: node + linkType: hard + +"libnpmsearch@npm:^8.0.0": + version: 8.0.0 + resolution: "libnpmsearch@npm:8.0.0" + dependencies: + npm-registry-fetch: "npm:^18.0.1" + checksum: 10c0/96063ad6676ed85724b7b246da630c4d59cc7e9c0cc20431cf5b06d40060bb409c04b96070711825fadcc5d6c2abaccb1048268d7262d6c4db2be3a3f2a9404d + languageName: node + linkType: hard + +"libnpmteam@npm:^7.0.0": + version: 7.0.0 + resolution: "libnpmteam@npm:7.0.0" + dependencies: + aproba: "npm:^2.0.0" + npm-registry-fetch: "npm:^18.0.1" + checksum: 10c0/06872f449d6fd1f90c3507bd0654d8102b3820dd8a0882d20a01ad62a3b4f3f165e57f4d833f9a7454bb1ec884c2c7b722490d86a997804efab9697e9ae8cc0e + languageName: node + linkType: hard + +"libnpmversion@npm:^7.0.0": + version: 7.0.0 + resolution: "libnpmversion@npm:7.0.0" + dependencies: + "@npmcli/git": "npm:^6.0.1" + "@npmcli/run-script": "npm:^9.0.1" + json-parse-even-better-errors: "npm:^4.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.7" + checksum: 10c0/60d5543aa7fda90b11a10aeedf13482df242bb6ebff70c9eec4d26dcefb5c62cb9dd3fcfdd997b1aba84aa31d117a22b7f24633b75cbe63aa9cc4c519cab2c77 + languageName: node + linkType: hard + +"lilconfig@npm:~3.1.3": + version: 3.1.3 + resolution: "lilconfig@npm:3.1.3" + checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + +"lines-and-columns@npm:^2.0.3": + version: 2.0.4 + resolution: "lines-and-columns@npm:2.0.4" + checksum: 10c0/4db28bf065cd7ad897c0700f22d3d0d7c5ed6777e138861c601c496d545340df3fc19e18bd04ff8d95a246a245eb55685b82ca2f8c2ca53a008e9c5316250379 + languageName: node + linkType: hard + +"lint-staged@npm:^15.2.2": + version: 15.2.11 + resolution: "lint-staged@npm:15.2.11" + dependencies: + chalk: "npm:~5.3.0" + commander: "npm:~12.1.0" + debug: "npm:~4.4.0" + execa: "npm:~8.0.1" + lilconfig: "npm:~3.1.3" + listr2: "npm:~8.2.5" + micromatch: "npm:~4.0.8" + pidtree: "npm:~0.6.0" + string-argv: "npm:~0.3.2" + yaml: "npm:~2.6.1" + bin: + lint-staged: bin/lint-staged.js + checksum: 10c0/28e2ad08b90460cc18398a023eaf93954d7753f958c2b889ead2d9305407d7b4ef0ee007875410d6ce1df758007fda77e079c82eb79c9ce684fba71e6f7d0452 + languageName: node + linkType: hard + +"listr2@npm:~8.2.5": + version: 8.2.5 + resolution: "listr2@npm:8.2.5" + dependencies: + cli-truncate: "npm:^4.0.0" + colorette: "npm:^2.0.20" + eventemitter3: "npm:^5.0.1" + log-update: "npm:^6.1.0" + rfdc: "npm:^1.4.1" + wrap-ansi: "npm:^9.0.0" + checksum: 10c0/f5a9599514b00c27d7eb32d1117c83c61394b2a985ec20e542c798bf91cf42b19340215701522736f5b7b42f557e544afeadec47866e35e5d4f268f552729671 + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.2" + parse-json: "npm:^4.0.0" + pify: "npm:^3.0.0" + strip-bom: "npm:^3.0.0" + checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 + languageName: node + linkType: hard + +"load-plugin@npm:^6.0.0": + version: 6.0.3 + resolution: "load-plugin@npm:6.0.3" + dependencies: + "@npmcli/config": "npm:^8.0.0" + import-meta-resolve: "npm:^4.0.0" + checksum: 10c0/cbbd4e18472a0ed543b6d60e867a1e2aae385205fcaa76d300ab5a72697e057422cd1e6ff2ba19755c55a86b3d53e53b81a814c757be720895ba525d05f75797 + languageName: node + linkType: hard + +"locate-path@npm:^2.0.0": + version: 2.0.0 + resolution: "locate-path@npm:2.0.0" + dependencies: + p-locate: "npm:^2.0.0" + path-exists: "npm:^3.0.0" + checksum: 10c0/24efa0e589be6aa3c469b502f795126b26ab97afa378846cb508174211515633b770aa0ba610cab113caedab8d2a4902b061a08aaed5297c12ab6f5be4df0133 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"locate-path@npm:^7.2.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10c0/139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"lodash-es@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash-es@npm:4.17.21" + checksum: 10c0/fb407355f7e6cd523a9383e76e6b455321f0f153a6c9625e21a8827d10c54c2a2341bd2ae8d034358b60e07325e1330c14c224ff582d04612a46a4f0479ff2f2 + languageName: node + linkType: hard + +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: 10c0/fcba15d21a458076dd309fce6b1b4bf611d84a0ec252cb92447c948c533ac250b95d2e00955801ebc367e5af5ed288b996d75d37d2035260a937008e14eaf432 + languageName: node + linkType: hard + +"lodash.capitalize@npm:^4.2.1": + version: 4.2.1 + resolution: "lodash.capitalize@npm:4.2.1" + checksum: 10c0/b289326497c2e24d6b8afa2af2ca4e068ef6ef007ade36bfb6f70af77ce10ea3f090eeee947d5fdcf2db4bcfa4703c8c10a5857a2b39e308bddfd1d11ad35970 + languageName: node + linkType: hard + +"lodash.escaperegexp@npm:^4.1.2": + version: 4.1.2 + resolution: "lodash.escaperegexp@npm:4.1.2" + checksum: 10c0/484ad4067fa9119bb0f7c19a36ab143d0173a081314993fe977bd00cf2a3c6a487ce417a10f6bac598d968364f992153315f0dbe25c9e38e3eb7581dd333e087 + languageName: node + linkType: hard + +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: 10c0/afd70b5c450d1e09f32a737bed06ff85b873ecd3d3d3400458725283e3f2e0bb6bf48e67dbe7a309eb371a822b16a26cca4a63c8c52db3fc7dc9d5f9dd324cbb + languageName: node + linkType: hard + +"lodash.isstring@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.isstring@npm:4.0.1" + checksum: 10c0/09eaf980a283f9eef58ef95b30ec7fee61df4d6bf4aba3b5f096869cc58f24c9da17900febc8ffd67819b4e29de29793190e88dc96983db92d84c95fa85d1c92 + languageName: node + linkType: hard + +"lodash.kebabcase@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.kebabcase@npm:4.1.1" + checksum: 10c0/da5d8f41dbb5bc723d4bf9203d5096ca8da804d6aec3d2b56457156ba6c8d999ff448d347ebd97490da853cb36696ea4da09a431499f1ee8deb17b094ecf4e33 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + +"lodash.mergewith@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: 10c0/4adbed65ff96fd65b0b3861f6899f98304f90fd71e7f1eb36c1270e05d500ee7f5ec44c02ef979b5ddbf75c0a0b9b99c35f0ad58f4011934c4d4e99e5200b3b5 + languageName: node + linkType: hard + +"lodash.snakecase@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.snakecase@npm:4.1.1" + checksum: 10c0/f0b3f2497eb20eea1a1cfc22d645ecaeb78ac14593eb0a40057977606d2f35f7aaff0913a06553c783b535aafc55b718f523f9eb78f8d5293f492af41002eaf9 + languageName: node + linkType: hard + +"lodash.startcase@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.startcase@npm:4.4.0" + checksum: 10c0/bd82aa87a45de8080e1c5ee61128c7aee77bf7f1d86f4ff94f4a6d7438fc9e15e5f03374b947be577a93804c8ad6241f0251beaf1452bf716064eeb657b3a9f0 + languageName: node + linkType: hard + +"lodash.uniq@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniq@npm:4.5.0" + checksum: 10c0/262d400bb0952f112162a320cc4a75dea4f66078b9e7e3075ffbc9c6aa30b3e9df3cf20e7da7d566105e1ccf7804e4fbd7d804eee0b53de05d83f16ffbf41c5e + languageName: node + linkType: hard + +"lodash.uniqby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.uniqby@npm:4.7.0" + checksum: 10c0/c505c0de20ca759599a2ba38710e8fb95ff2d2028e24d86c901ef2c74be8056518571b9b754bfb75053b2818d30dd02243e4a4621a6940c206bbb3f7626db656 + languageName: node + linkType: hard + +"lodash.upperfirst@npm:^4.3.1": + version: 4.3.1 + resolution: "lodash.upperfirst@npm:4.3.1" + checksum: 10c0/435625da4b3ee74e7a1367a780d9107ab0b13ef4359fc074b2a1a40458eb8d91b655af62f6795b7138d493303a98c0285340160341561d6896e4947e077fa975 + languageName: node + linkType: hard + +"log-update@npm:^6.1.0": + version: 6.1.0 + resolution: "log-update@npm:6.1.0" + dependencies: + ansi-escapes: "npm:^7.0.0" + cli-cursor: "npm:^5.0.0" + slice-ansi: "npm:^7.1.0" + strip-ansi: "npm:^7.1.0" + wrap-ansi: "npm:^9.0.0" + checksum: 10c0/4b350c0a83d7753fea34dcac6cd797d1dc9603291565de009baa4aa91c0447eab0d3815a05c8ec9ac04fdfffb43c82adcdb03ec1fceafd8518e1a8c1cff4ff89 + languageName: node + linkType: hard + +"longest-streak@npm:^3.0.0": + version: 3.1.0 + resolution: "longest-streak@npm:3.1.0" + checksum: 10c0/7c2f02d0454b52834d1bcedef79c557bd295ee71fdabb02d041ff3aa9da48a90b5df7c0409156dedbc4df9b65da18742652aaea4759d6ece01f08971af6a7eaa + languageName: node + linkType: hard + +"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: "npm:^3.0.0 || ^4.0.0" + bin: + loose-envify: cli.js + checksum: 10c0/655d110220983c1a4b9c0c679a2e8016d4b67f6e9c7b5435ff5979ecdb20d0813f4dec0a08674fcbdd4846a3f07edbb50a36811fd37930b94aaa0d9daceb017e + languageName: node + linkType: hard + +"loupe@npm:^3.1.0, loupe@npm:^3.1.2": + version: 3.1.2 + resolution: "loupe@npm:3.1.2" + checksum: 10c0/b13c02e3ddd6a9d5f8bf84133b3242de556512d824dddeea71cce2dbd6579c8f4d672381c4e742d45cf4423d0701765b4a6e5fbc24701def16bc2b40f8daa96a + languageName: node + linkType: hard + +"lowercase-keys@npm:^3.0.0": + version: 3.0.0 + resolution: "lowercase-keys@npm:3.0.0" + checksum: 10c0/ef62b9fa5690ab0a6e4ef40c94efce68e3ed124f583cc3be38b26ff871da0178a28b9a84ce0c209653bb25ca135520ab87fea7cd411a54ac4899cb2f30501430 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.2.2": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^11.0.0": + version: 11.0.2 + resolution: "lru-cache@npm:11.0.2" + checksum: 10c0/c993b8e06ead0b24b969c1dbb5b301716aed66e320e9014a80012f5febe280b438f28ff50046b2c55ff404e889351ccb332ff91f8dd175a21f5eae80e3fb155f + languageName: node + linkType: hard + +"magic-string@npm:^0.30.12": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 + languageName: node + linkType: hard + +"magicast@npm:^0.3.5": + version: 0.3.5 + resolution: "magicast@npm:0.3.5" + dependencies: + "@babel/parser": "npm:^7.25.4" + "@babel/types": "npm:^7.25.4" + source-map-js: "npm:^1.2.0" + checksum: 10c0/a6cacc0a848af84f03e3f5bda7b0de75e4d0aa9ddce5517fd23ed0f31b5ddd51b2d0ff0b7e09b51f7de0f4053c7a1107117edda6b0732dca3e9e39e6c5a68c64 + languageName: node + linkType: hard + +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.0, make-fetch-happen@npm:^14.0.1, make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"marked-terminal@npm:^7.0.0": + version: 7.2.1 + resolution: "marked-terminal@npm:7.2.1" + dependencies: + ansi-escapes: "npm:^7.0.0" + ansi-regex: "npm:^6.1.0" + chalk: "npm:^5.3.0" + cli-highlight: "npm:^2.1.11" + cli-table3: "npm:^0.6.5" + node-emoji: "npm:^2.1.3" + supports-hyperlinks: "npm:^3.1.0" + peerDependencies: + marked: ">=1 <15" + checksum: 10c0/33e7901fd7ded6062440582a84d0896b96faf3e9b15ad54d92b7792a3e5533e925f170a905e9ac719a73f83dd3e08f71dfd9f2f75924fdb6c358beceece49450 + languageName: node + linkType: hard + +"marked@npm:^12.0.0": + version: 12.0.2 + resolution: "marked@npm:12.0.2" + bin: + marked: bin/marked.js + checksum: 10c0/45ae2e1e3f06b30a5b5f64efc6cde9830c81d1d024fd7668772a3217f1bc0f326e66a6b8970482d9783edf1f581fecac7023a7fa160f2c14dbcc16e064b4eafb + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.0.0, math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^0.8.5": + version: 0.8.5 + resolution: "mdast-util-from-markdown@npm:0.8.5" + dependencies: + "@types/mdast": "npm:^3.0.0" + mdast-util-to-string: "npm:^2.0.0" + micromark: "npm:~2.11.0" + parse-entities: "npm:^2.0.0" + unist-util-stringify-position: "npm:^2.0.0" + checksum: 10c0/86e7589e574378817c180f10ab602db844b6b71b7b1769314947a02ef42ac5c1435f5163d02a975ae8cdab8b6e6176acbd9188da1848ddd5f0d5e09d0291c870 + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^2.0.0": + version: 2.0.2 + resolution: "mdast-util-from-markdown@npm:2.0.2" + dependencies: + "@types/mdast": "npm:^4.0.0" + "@types/unist": "npm:^3.0.0" + decode-named-character-reference: "npm:^1.0.0" + devlop: "npm:^1.0.0" + mdast-util-to-string: "npm:^4.0.0" + micromark: "npm:^4.0.0" + micromark-util-decode-numeric-character-reference: "npm:^2.0.0" + micromark-util-decode-string: "npm:^2.0.0" + micromark-util-normalize-identifier: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + unist-util-stringify-position: "npm:^4.0.0" + checksum: 10c0/76eb2bd2c6f7a0318087c73376b8af6d7561c1e16654e7667e640f391341096c56142618fd0ff62f6d39e5ab4895898b9789c84cd7cec2874359a437a0e1ff15 + languageName: node + linkType: hard + +"mdast-util-mdx-expression@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-mdx-expression@npm:2.0.1" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + devlop: "npm:^1.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/9a1e57940f66431f10312fa239096efa7627f375e7933b5d3162c0b5c1712a72ac87447aff2b6838d2bbd5c1311b188718cc90b33b67dc67a88550e0a6ef6183 + languageName: node + linkType: hard + +"mdast-util-mdx-jsx@npm:^3.0.0": + version: 3.1.3 + resolution: "mdast-util-mdx-jsx@npm:3.1.3" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + "@types/unist": "npm:^3.0.0" + ccount: "npm:^2.0.0" + devlop: "npm:^1.1.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + parse-entities: "npm:^4.0.0" + stringify-entities: "npm:^4.0.0" + unist-util-stringify-position: "npm:^4.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/1b0b64215efbbbb1ee9ba2a2b3e5f11859dada7dff162949a0d503aefbd75c0308f17d404df126c54acea06d2224905915b2cac2e6c999514c919bd963b8de24 + languageName: node + linkType: hard + +"mdast-util-mdx@npm:^3.0.0": + version: 3.0.0 + resolution: "mdast-util-mdx@npm:3.0.0" + dependencies: + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-mdx-expression: "npm:^2.0.0" + mdast-util-mdx-jsx: "npm:^3.0.0" + mdast-util-mdxjs-esm: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/4faea13f77d6bc9aa64ee41a5e4779110b73444a17fda363df6ebe880ecfa58b321155b71f8801c3faa6d70d6222a32a00cbd6dbf5fad8db417f4688bc9c74e1 + languageName: node + linkType: hard + +"mdast-util-mdxjs-esm@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-mdxjs-esm@npm:2.0.1" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + devlop: "npm:^1.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/5bda92fc154141705af2b804a534d891f28dac6273186edf1a4c5e3f045d5b01dbcac7400d27aaf91b7e76e8dce007c7b2fdf136c11ea78206ad00bdf9db46bc + languageName: node + linkType: hard + +"mdast-util-phrasing@npm:^4.0.0": + version: 4.1.0 + resolution: "mdast-util-phrasing@npm:4.1.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + unist-util-is: "npm:^6.0.0" + checksum: 10c0/bf6c31d51349aa3d74603d5e5a312f59f3f65662ed16c58017169a5fb0f84ca98578f626c5ee9e4aa3e0a81c996db8717096705521bddb4a0185f98c12c9b42f + languageName: node + linkType: hard + +"mdast-util-to-markdown@npm:^2.0.0": + version: 2.1.2 + resolution: "mdast-util-to-markdown@npm:2.1.2" + dependencies: + "@types/mdast": "npm:^4.0.0" + "@types/unist": "npm:^3.0.0" + longest-streak: "npm:^3.0.0" + mdast-util-phrasing: "npm:^4.0.0" + mdast-util-to-string: "npm:^4.0.0" + micromark-util-classify-character: "npm:^2.0.0" + micromark-util-decode-string: "npm:^2.0.0" + unist-util-visit: "npm:^5.0.0" + zwitch: "npm:^2.0.0" + checksum: 10c0/4649722a6099f12e797bd8d6469b2b43b44e526b5182862d9c7766a3431caad2c0112929c538a972f214e63c015395e5d3f54bd81d9ac1b16e6d8baaf582f749 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-to-string@npm:2.0.0" + checksum: 10c0/a4231085133cdfec24644b694c13661e5a01d26716be0105b6792889faa04b8030e4abbf72d4be3363098b2b38b2b98f1f1f1f0858eb6580dc04e2aca1436a37 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^4.0.0": + version: 4.0.0 + resolution: "mdast-util-to-string@npm:4.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + checksum: 10c0/2d3c1af29bf3fe9c20f552ee9685af308002488f3b04b12fa66652c9718f66f41a32f8362aa2d770c3ff464c034860b41715902ada2306bb0a055146cef064d7 + languageName: node + linkType: hard + +"meow@npm:^12.0.1": + version: 12.1.1 + resolution: "meow@npm:12.1.1" + checksum: 10c0/a125ca99a32e2306e2f4cbe651a0d27f6eb67918d43a075f6e80b35e9bf372ebf0fc3a9fbc201cbbc9516444b6265fb3c9f80c5b7ebd32f548aa93eb7c28e088 + languageName: node + linkType: hard + +"meow@npm:^13.0.0": + version: 13.2.0 + resolution: "meow@npm:13.2.0" + checksum: 10c0/d5b339ae314715bcd0b619dd2f8a266891928e21526b4800d49b4fba1cc3fff7e2c1ff5edd3344149fac841bc2306157f858e8c4d5eaee4d52ce52ad925664ce + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromark-core-commonmark@npm:^2.0.0": + version: 2.0.2 + resolution: "micromark-core-commonmark@npm:2.0.2" + dependencies: + decode-named-character-reference: "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-factory-destination: "npm:^2.0.0" + micromark-factory-label: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-factory-title: "npm:^2.0.0" + micromark-factory-whitespace: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-chunked: "npm:^2.0.0" + micromark-util-classify-character: "npm:^2.0.0" + micromark-util-html-tag-name: "npm:^2.0.0" + micromark-util-normalize-identifier: "npm:^2.0.0" + micromark-util-resolve-all: "npm:^2.0.0" + micromark-util-subtokenize: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/87c7a75cd339189eb6f1d6323037f7d108d1331d953b84fe839b37fd385ee2292b27222327c1ceffda46ba5d5d4dee703482475e5ee8744be40c9e308d8acb77 + languageName: node + linkType: hard + +"micromark-extension-mdx-expression@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-mdx-expression@npm:3.0.0" + dependencies: + "@types/estree": "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-factory-mdx-expression: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-events-to-acorn: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/fa799c594d8ff9ecbbd28e226959c4928590cfcddb60a926d9d859d00fc7acd25684b6f78dbe6a7f0830879a402b4a3628efd40bb9df1f5846e6d2b7332715f7 + languageName: node + linkType: hard + +"micromark-extension-mdx-jsx@npm:^3.0.0": + version: 3.0.1 + resolution: "micromark-extension-mdx-jsx@npm:3.0.1" + dependencies: + "@types/acorn": "npm:^4.0.0" + "@types/estree": "npm:^1.0.0" + devlop: "npm:^1.0.0" + estree-util-is-identifier-name: "npm:^3.0.0" + micromark-factory-mdx-expression: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-events-to-acorn: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/11e65abd6b57bcf82665469cd1ff238b7cfc4ebb4942a0361df2dc7dd4ab133681b2bcbd4c388dddf6e4db062665d31efeb48cc844ee61c8d8de9d167cc946d8 + languageName: node + linkType: hard + +"micromark-extension-mdx-md@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-mdx-md@npm:2.0.0" + dependencies: + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/bae91c61273de0e5ba80a980c03470e6cd9d7924aa936f46fbda15d780704d9386e945b99eda200e087b96254fbb4271a9545d5ce02676cd6ae67886a8bf82df + languageName: node + linkType: hard + +"micromark-extension-mdxjs-esm@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-mdxjs-esm@npm:3.0.0" + dependencies: + "@types/estree": "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-core-commonmark: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-events-to-acorn: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + unist-util-position-from-estree: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/13e3f726495a960650cdedcba39198ace5bdc953ccb12c14d71fc9ed9bb88e40cc3ba9231e973f6984da3b3573e7ddb23ce409f7c16f52a8d57b608bf46c748d + languageName: node + linkType: hard + +"micromark-extension-mdxjs@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-mdxjs@npm:3.0.0" + dependencies: + acorn: "npm:^8.0.0" + acorn-jsx: "npm:^5.0.0" + micromark-extension-mdx-expression: "npm:^3.0.0" + micromark-extension-mdx-jsx: "npm:^3.0.0" + micromark-extension-mdx-md: "npm:^2.0.0" + micromark-extension-mdxjs-esm: "npm:^3.0.0" + micromark-util-combine-extensions: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/fd84f036ddad0aabbc12e7f1b3e9dcfe31573bbc413c5ae903779ef0366d7a4c08193547e7ba75718c9f45654e45f52e575cfc2f23a5f89205a8a70d9a506aea + languageName: node + linkType: hard + +"micromark-factory-destination@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-destination@npm:2.0.1" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/bbafcf869cee5bf511161354cb87d61c142592fbecea051000ff116068dc85216e6d48519d147890b9ea5d7e2864a6341c0c09d9948c203bff624a80a476023c + languageName: node + linkType: hard + +"micromark-factory-label@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-label@npm:2.0.1" + dependencies: + devlop: "npm:^1.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/0137716b4ecb428114165505e94a2f18855c8bbea21b07a8b5ce514b32a595ed789d2b967125718fc44c4197ceaa48f6609d58807a68e778138d2e6b91b824e8 + languageName: node + linkType: hard + +"micromark-factory-mdx-expression@npm:^2.0.0": + version: 2.0.2 + resolution: "micromark-factory-mdx-expression@npm:2.0.2" + dependencies: + "@types/estree": "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-events-to-acorn: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + unist-util-position-from-estree: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/87372775ae06478ab754efa058a5e382972f634c14f0afa303111037c30abf733fe65329a7e59cda969266e63f82104d9ed8ff9ada39189eab0651b6540ca64a + languageName: node + linkType: hard + +"micromark-factory-space@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-space@npm:2.0.1" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/f9ed43f1c0652d8d898de0ac2be3f77f776fffe7dd96bdbba1e02d7ce33d3853c6ff5daa52568fc4fa32cdf3a62d86b85ead9b9189f7211e1d69ff2163c450fb + languageName: node + linkType: hard + +"micromark-factory-title@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-title@npm:2.0.1" + dependencies: + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/e72fad8d6e88823514916890099a5af20b6a9178ccf78e7e5e05f4de99bb8797acb756257d7a3a57a53854cb0086bf8aab15b1a9e9db8982500dd2c9ff5948b6 + languageName: node + linkType: hard + +"micromark-factory-whitespace@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-whitespace@npm:2.0.1" + dependencies: + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/20a1ec58698f24b766510a309b23a10175034fcf1551eaa9da3adcbed3e00cd53d1ebe5f030cf873f76a1cec3c34eb8c50cc227be3344caa9ed25d56cf611224 + languageName: node + linkType: hard + +"micromark-util-character@npm:^2.0.0": + version: 2.1.1 + resolution: "micromark-util-character@npm:2.1.1" + dependencies: + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/d3fe7a5e2c4060fc2a076f9ce699c82a2e87190a3946e1e5eea77f563869b504961f5668d9c9c014724db28ac32fa909070ea8b30c3a39bd0483cc6c04cc76a1 + languageName: node + linkType: hard + +"micromark-util-chunked@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-chunked@npm:2.0.1" + dependencies: + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/b68c0c16fe8106949537bdcfe1be9cf36c0ccd3bc54c4007003cb0984c3750b6cdd0fd77d03f269a3382b85b0de58bde4f6eedbe7ecdf7244759112289b1ab56 + languageName: node + linkType: hard + +"micromark-util-classify-character@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-classify-character@npm:2.0.1" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/8a02e59304005c475c332f581697e92e8c585bcd45d5d225a66c1c1b14ab5a8062705188c2ccec33cc998d33502514121478b2091feddbc751887fc9c290ed08 + languageName: node + linkType: hard + +"micromark-util-combine-extensions@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-combine-extensions@npm:2.0.1" + dependencies: + micromark-util-chunked: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/f15e282af24c8372cbb10b9b0b3e2c0aa681fea0ca323a44d6bc537dc1d9382c819c3689f14eaa000118f5a163245358ce6276b2cda9a84439cdb221f5d86ae7 + languageName: node + linkType: hard + +"micromark-util-decode-numeric-character-reference@npm:^2.0.0": + version: 2.0.2 + resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.2" + dependencies: + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/9c8a9f2c790e5593ffe513901c3a110e9ec8882a08f466da014112a25e5059b51551ca0aeb7ff494657d86eceb2f02ee556c6558b8d66aadc61eae4a240da0df + languageName: node + linkType: hard + +"micromark-util-decode-string@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-decode-string@npm:2.0.1" + dependencies: + decode-named-character-reference: "npm:^1.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-decode-numeric-character-reference: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/f24d75b2e5310be6e7b6dee532e0d17d3bf46996841d6295f2a9c87a2046fff4ab603c52ab9d7a7a6430a8b787b1574ae895849c603d262d1b22eef71736b5cb + languageName: node + linkType: hard + +"micromark-util-encode@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-encode@npm:2.0.1" + checksum: 10c0/b2b29f901093845da8a1bf997ea8b7f5e061ffdba85070dfe14b0197c48fda64ffcf82bfe53c90cf9dc185e69eef8c5d41cae3ba918b96bc279326921b59008a + languageName: node + linkType: hard + +"micromark-util-events-to-acorn@npm:^2.0.0": + version: 2.0.2 + resolution: "micromark-util-events-to-acorn@npm:2.0.2" + dependencies: + "@types/acorn": "npm:^4.0.0" + "@types/estree": "npm:^1.0.0" + "@types/unist": "npm:^3.0.0" + devlop: "npm:^1.0.0" + estree-util-visit: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/2bd2660a49efddb625e6adcabdc3384ae4c50c7a04270737270f4aab53d09e8253e6d2607cd947c4c77f8a9900278915babb240e61fd143dc5bab51d9fd50709 + languageName: node + linkType: hard + +"micromark-util-html-tag-name@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-html-tag-name@npm:2.0.1" + checksum: 10c0/ae80444db786fde908e9295f19a27a4aa304171852c77414516418650097b8afb401961c9edb09d677b06e97e8370cfa65638dde8438ebd41d60c0a8678b85b9 + languageName: node + linkType: hard + +"micromark-util-normalize-identifier@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-normalize-identifier@npm:2.0.1" + dependencies: + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/5299265fa360769fc499a89f40142f10a9d4a5c3dd8e6eac8a8ef3c2e4a6570e4c009cf75ea46dce5ee31c01f25587bde2f4a5cc0a935584ae86dd857f2babbd + languageName: node + linkType: hard + +"micromark-util-resolve-all@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-resolve-all@npm:2.0.1" + dependencies: + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/bb6ca28764696bb479dc44a2d5b5fe003e7177aeae1d6b0d43f24cc223bab90234092d9c3ce4a4d2b8df095ccfd820537b10eb96bb7044d635f385d65a4c984a + languageName: node + linkType: hard + +"micromark-util-sanitize-uri@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-sanitize-uri@npm:2.0.1" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-encode: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/60e92166e1870fd4f1961468c2651013ff760617342918e0e0c3c4e872433aa2e60c1e5a672bfe5d89dc98f742d6b33897585cf86ae002cda23e905a3c02527c + languageName: node + linkType: hard + +"micromark-util-subtokenize@npm:^2.0.0": + version: 2.0.3 + resolution: "micromark-util-subtokenize@npm:2.0.3" + dependencies: + devlop: "npm:^1.0.0" + micromark-util-chunked: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/75501986ecb02a6f06c0f3e58b584ae3ff3553b520260e8ce27d2db8c79b8888861dd9d3b26e30f5c6084fddd90f96dc3ff551f02c2ac4d669ebe920e483b6d6 + languageName: node + linkType: hard + +"micromark-util-symbol@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-symbol@npm:2.0.1" + checksum: 10c0/f2d1b207771e573232436618e78c5e46cd4b5c560dd4a6d63863d58018abbf49cb96ec69f7007471e51434c60de3c9268ef2bf46852f26ff4aacd10f9da16fe9 + languageName: node + linkType: hard + +"micromark-util-types@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-types@npm:2.0.1" + checksum: 10c0/872ec9334bb42afcc91c5bed8b7ee03b75654b36c6f221ab4d2b1bb0299279f00db948bf38ec6bc1ec03d0cf7842c21ab805190bf676157ba587eb0386d38b71 + languageName: node + linkType: hard + +"micromark@npm:^4.0.0": + version: 4.0.1 + resolution: "micromark@npm:4.0.1" + dependencies: + "@types/debug": "npm:^4.0.0" + debug: "npm:^4.0.0" + decode-named-character-reference: "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-core-commonmark: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-chunked: "npm:^2.0.0" + micromark-util-combine-extensions: "npm:^2.0.0" + micromark-util-decode-numeric-character-reference: "npm:^2.0.0" + micromark-util-encode: "npm:^2.0.0" + micromark-util-normalize-identifier: "npm:^2.0.0" + micromark-util-resolve-all: "npm:^2.0.0" + micromark-util-sanitize-uri: "npm:^2.0.0" + micromark-util-subtokenize: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/b5d950c84664ce209575e5a54946488f0a1e1240d080544e657b65074c9b08208a5315d9db066b93cbc199ec05f68552ba8b09fd5e716c726f4a4712275a7c5c + languageName: node + linkType: hard + +"micromark@npm:~2.11.0": + version: 2.11.4 + resolution: "micromark@npm:2.11.4" + dependencies: + debug: "npm:^4.0.0" + parse-entities: "npm:^2.0.0" + checksum: 10c0/67307cbacae621ab1eb23e333a5addc7600cf97d3b40cad22fc1c2d03d734d6d9cbc3f5a7e5d655a8c0862a949abe590ab7cfa96be366bfe09e239a94e6eea55 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:~4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mime@npm:^4.0.0": + version: 4.0.6 + resolution: "mime@npm:4.0.6" + bin: + mime: bin/cli.js + checksum: 10c0/1797b1c6da4cdb817fc18a4b8d99d6034885946f3d3680c2e4eb18bf19d4a64b42559f1eae0d1607e216f584311f9f806b5bfa1426baebeae4807bec5e14188a + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 10c0/de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + +"mimic-function@npm:^5.0.0": + version: 5.0.1 + resolution: "mimic-function@npm:5.0.1" + checksum: 10c0/f3d9464dd1816ecf6bdf2aec6ba32c0728022039d992f178237d8e289b48764fee4131319e72eedd4f7f094e22ded0af836c3187a7edc4595d28dd74368fd81d + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: 10c0/7e207bd5c20401b292de291f02913230cb1163abca162044f7db1d951fa245b174dc00869d40dd9a9f32a885ad6a5f3e767ee104cf278f399cb4e92d3f582d5c + languageName: node + linkType: hard + +"minimatch@npm:^10.0.0": + version: 10.0.1 + resolution: "minimatch@npm:10.0.1" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/e6c29a81fe83e1877ad51348306be2e8aeca18c88fdee7a99df44322314279e15799e41d7cb274e4e8bb0b451a3bc622d6182e157dfa1717d6cda75e9cd8cd5d + languageName: node + linkType: hard + +"minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass-fetch@npm:4.0.0" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/7fa30ce7c373fb6f94c086b374fff1589fd7e78451855d2d06c2e2d9df936d131e73e952163063016592ed3081444bd8d1ea608533313b0149156ce23311da4b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.1, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" + dependencies: + minipass: "npm:^7.0.4" + rimraf: "npm:^5.0.5" + checksum: 10c0/82f8bf70da8af656909a8ee299d7ed3b3372636749d29e105f97f20e88971be31f5ed7642f2e898f00283b68b701cc01307401cdc209b0efc5dd3818220e5093 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"mri@npm:^1.1.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 10c0/a3d32379c2554cf7351db6237ddc18dc9e54e4214953f3da105b97dc3babe0deb3ffe99cf409b38ea47cc29f9430561ba6b53b24ab8f9ce97a4b50409e4a50e7 + languageName: node + linkType: hard + +"ms@npm:^2.1.1, ms@npm:^2.1.2, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"mute-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "mute-stream@npm:2.0.0" + checksum: 10c0/2cf48a2087175c60c8dcdbc619908b49c07f7adcfc37d29236b0c5c612d6204f789104c98cc44d38acab7b3c96f4a3ec2cfdc4934d0738d876dbefa2a12c69f4 + languageName: node + linkType: hard + +"mz@npm:^2.4.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: "npm:^1.0.0" + object-assign: "npm:^4.0.1" + thenify-all: "npm:^1.0.0" + checksum: 10c0/103114e93f87362f0b56ab5b2e7245051ad0276b646e3902c98397d18bb8f4a77f2ea4a2c9d3ad516034ea3a56553b60d3f5f78220001ca4c404bd711bd0af39 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.8 + resolution: "nanoid@npm:3.3.8" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"nerf-dart@npm:^1.0.0": + version: 1.0.0 + resolution: "nerf-dart@npm:1.0.0" + checksum: 10c0/e19e17d7bd91dfcb1acd07cbdd8df1f0613f3408227538fe91793c6dfcf58e95b5f18b88b4a13e9b31587e89a119fd76d6df4b8d8c65564dd2c409d787819583 + languageName: node + linkType: hard + +"node-emoji@npm:^2.1.3": + version: 2.2.0 + resolution: "node-emoji@npm:2.2.0" + dependencies: + "@sindresorhus/is": "npm:^4.6.0" + char-regex: "npm:^1.0.2" + emojilib: "npm:^2.4.0" + skin-tone: "npm:^2.0.0" + checksum: 10c0/9525defbd90a82a2131758c2470203fa2a2faa8edd177147a8654a26307fe03594e52847ecbe2746d06cfc5c50acd12bd500f035350a7609e8217c9894c19aad + languageName: node + linkType: hard + +"node-gyp@npm:^11.0.0, node-gyp@npm:latest": + version: 11.0.0 + resolution: "node-gyp@npm:11.0.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/a3b885bbee2d271f1def32ba2e30ffcf4562a3db33af06b8b365e053153e2dd2051b9945783c3c8e852d26a0f20f65b251c7e83361623383a99635c0280ee573 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa + languageName: node + linkType: hard + +"nopt@npm:^7.2.1": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.0.0 + resolution: "nopt@npm:8.0.0" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/19cb986f79abaca2d0f0b560021da7b32ee6fcc3de48f3eaeb0c324d36755c17754f886a754c091f01f740c17caf7d6aea8237b7fbaf39f476ae5e30a249f18f + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: "npm:^2.1.4" + resolve: "npm:^1.10.0" + semver: "npm:2 || 3 || 4 || 5" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 + languageName: node + linkType: hard + +"normalize-package-data@npm:^6.0.0": + version: 6.0.2 + resolution: "normalize-package-data@npm:6.0.2" + dependencies: + hosted-git-info: "npm:^7.0.0" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + checksum: 10c0/7e32174e7f5575ede6d3d449593247183880122b4967d4ae6edb28cea5769ca025defda54fc91ec0e3c972fdb5ab11f9284606ba278826171b264cb16a9311ef + languageName: node + linkType: hard + +"normalize-package-data@npm:^7.0.0": + version: 7.0.0 + resolution: "normalize-package-data@npm:7.0.0" + dependencies: + hosted-git-info: "npm:^8.0.0" + semver: "npm:^7.3.5" + validate-npm-package-license: "npm:^3.0.4" + checksum: 10c0/d492cbc4cdd92e99cba517b08cec6adf40ff37f2e97ecf4484ccb2da1ef5bd81c6dfbd8b434d3bdc749df639492ecdc71f4a61de1a8b99fe97fdf4faac13e7f1 + languageName: node + linkType: hard + +"normalize-url@npm:^8.0.0": + version: 8.0.1 + resolution: "normalize-url@npm:8.0.1" + checksum: 10c0/eb439231c4b84430f187530e6fdac605c5048ef4ec556447a10c00a91fc69b52d8d8298d9d608e68d3e0f7dc2d812d3455edf425e0f215993667c3183bcab1ef + languageName: node + linkType: hard + +"npm-audit-report@npm:^6.0.0": + version: 6.0.0 + resolution: "npm-audit-report@npm:6.0.0" + checksum: 10c0/16307fb0d13e0df74f737b58c76b1741dcc5f997da0349a928155903fe1a50585421a2f7fd926c7c266751a1d0670bf5536e4277b05a641ab36c12343eac771a + languageName: node + linkType: hard + +"npm-bundled@npm:^4.0.0": + version: 4.0.0 + resolution: "npm-bundled@npm:4.0.0" + dependencies: + npm-normalize-package-bin: "npm:^4.0.0" + checksum: 10c0/e6e20caefbc6a41138d3767ec998f6a2cf55f33371c119417a556ff6052390a2ffeb3b465a74aea127fb211ddfcb7db776620faf12b64e48e60e332b25b5b8a0 + languageName: node + linkType: hard + +"npm-install-checks@npm:^6.0.0": + version: 6.3.0 + resolution: "npm-install-checks@npm:6.3.0" + dependencies: + semver: "npm:^7.1.1" + checksum: 10c0/b046ef1de9b40f5d3a9831ce198e1770140a1c3f253dae22eb7b06045191ef79f18f1dcc15a945c919b3c161426861a28050abd321bf439190185794783b6452 + languageName: node + linkType: hard + +"npm-install-checks@npm:^7.1.0, npm-install-checks@npm:^7.1.1": + version: 7.1.1 + resolution: "npm-install-checks@npm:7.1.1" + dependencies: + semver: "npm:^7.1.1" + checksum: 10c0/3cfd705ef3f70add31a32b4a5462d16e0f06d9df636072483fb43c854414a1cc128f496e84a8d9c12c1f1820307b7a3c275643589c564dac3c870eb636f8eea4 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: 10c0/f1831a7f12622840e1375c785c3dab7b1d82dd521211c17ee5e9610cd1a34d8b232d3fdeebf50c170eddcb321d2c644bf73dbe35545da7d588c6b3fa488db0a5 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^4.0.0": + version: 4.0.0 + resolution: "npm-normalize-package-bin@npm:4.0.0" + checksum: 10c0/1fa546fcae8eaab61ef9b9ec237b6c795008da50e1883eae030e9e38bb04ffa32c5aabcef9a0400eae3dc1f91809bcfa85e437ce80d677c69b419d1d9cacf0ab + languageName: node + linkType: hard + +"npm-package-arg@npm:^11.0.0": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: "npm:^7.0.0" + proc-log: "npm:^4.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^5.0.0" + checksum: 10c0/e18333485e05c3a8774f4b5701ef74f4799533e650b70a68ca8dd697666c9a8d46932cb765fc593edce299521033bd4025a40323d5240cea8a393c784c0c285a + languageName: node + linkType: hard + +"npm-package-arg@npm:^12.0.0": + version: 12.0.1 + resolution: "npm-package-arg@npm:12.0.1" + dependencies: + hosted-git-info: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + validate-npm-package-name: "npm:^6.0.0" + checksum: 10c0/e7cafb0952541858abe63dfa2fd7b45f1626e310c0b60d6266fafe20c1b5b76388913c3f39390820bee9eac035705639dc62adbcf14748536f867c4d06bbf209 + languageName: node + linkType: hard + +"npm-packlist@npm:^9.0.0": + version: 9.0.0 + resolution: "npm-packlist@npm:9.0.0" + dependencies: + ignore-walk: "npm:^7.0.0" + checksum: 10c0/3eb9e877fff81ed1f97b86a387a13a7d0136a26c4c21d8fab7e49be653e71d604ba63091ec80e3a0b1d1fd879639eab91ddda1a8df45d7631795b83911f2f9b8 + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^10.0.0": + version: 10.0.0 + resolution: "npm-pick-manifest@npm:10.0.0" + dependencies: + npm-install-checks: "npm:^7.1.0" + npm-normalize-package-bin: "npm:^4.0.0" + npm-package-arg: "npm:^12.0.0" + semver: "npm:^7.3.5" + checksum: 10c0/946e791f6164a04dbc3340749cd7521d4d1f60accb2d0ca901375314b8425c8a12b34b4b70e2850462cc898fba5fa8d1f283221bf788a1d37276f06a85c4562a + languageName: node + linkType: hard + +"npm-pick-manifest@npm:^9.0.0": + version: 9.1.0 + resolution: "npm-pick-manifest@npm:9.1.0" + dependencies: + npm-install-checks: "npm:^6.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + npm-package-arg: "npm:^11.0.0" + semver: "npm:^7.3.5" + checksum: 10c0/8765f4199755b381323da2bff2202b4b15b59f59dba0d1be3f2f793b591321cd19e1b5a686ef48d9753a6bd4868550da632541a45dfb61809d55664222d73e44 + languageName: node + linkType: hard + +"npm-profile@npm:^11.0.1": + version: 11.0.1 + resolution: "npm-profile@npm:11.0.1" + dependencies: + npm-registry-fetch: "npm:^18.0.0" + proc-log: "npm:^5.0.0" + checksum: 10c0/4fc6aad91f27bbc122917acd038d5c2b0187519ea149dab6f4f39fe921c0794374f7cf444ea0bf438c49ed6fdc37202cac9bdc107609236c077607dd06f5be4a + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^18.0.0, npm-registry-fetch@npm:^18.0.1, npm-registry-fetch@npm:^18.0.2": + version: 18.0.2 + resolution: "npm-registry-fetch@npm:18.0.2" + dependencies: + "@npmcli/redact": "npm:^3.0.0" + jsonparse: "npm:^1.3.1" + make-fetch-happen: "npm:^14.0.0" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minizlib: "npm:^3.0.1" + npm-package-arg: "npm:^12.0.0" + proc-log: "npm:^5.0.0" + checksum: 10c0/43e02befb393f67d5014d690a96d55f0b5f837a3eb9a79b17738ff0e3a1f081968480f2f280d1ad77a088ebd88c196793d929b0e4d24a8389a324dfd4006bc39 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + +"npm-run-path@npm:^6.0.0": + version: 6.0.0 + resolution: "npm-run-path@npm:6.0.0" + dependencies: + path-key: "npm:^4.0.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10c0/b223c8a0dcd608abf95363ea5c3c0ccc3cd877daf0102eaf1b0f2390d6858d8337fbb7c443af2403b067a7d2c116d10691ecd22ab3c5273c44da1ff8d07753bd + languageName: node + linkType: hard + +"npm-user-validate@npm:^3.0.0": + version: 3.0.0 + resolution: "npm-user-validate@npm:3.0.0" + checksum: 10c0/d6aea1188d65ee6dc45adac88300bee3548b0217b14cdc5270c13af123486271cbafe1f140cec1df5f11c484f705f45a59948086dce4eab2040ce0ba3baebb53 + languageName: node + linkType: hard + +"npm@npm:^10.5.0": + version: 10.9.2 + resolution: "npm@npm:10.9.2" + dependencies: + "@isaacs/string-locale-compare": "npm:^1.1.0" + "@npmcli/arborist": "npm:^8.0.0" + "@npmcli/config": "npm:^9.0.0" + "@npmcli/fs": "npm:^4.0.0" + "@npmcli/map-workspaces": "npm:^4.0.2" + "@npmcli/package-json": "npm:^6.1.0" + "@npmcli/promise-spawn": "npm:^8.0.2" + "@npmcli/redact": "npm:^3.0.0" + "@npmcli/run-script": "npm:^9.0.1" + "@sigstore/tuf": "npm:^3.0.0" + abbrev: "npm:^3.0.0" + archy: "npm:~1.0.0" + cacache: "npm:^19.0.1" + chalk: "npm:^5.3.0" + ci-info: "npm:^4.1.0" + cli-columns: "npm:^4.0.0" + fastest-levenshtein: "npm:^1.0.16" + fs-minipass: "npm:^3.0.3" + glob: "npm:^10.4.5" + graceful-fs: "npm:^4.2.11" + hosted-git-info: "npm:^8.0.2" + ini: "npm:^5.0.0" + init-package-json: "npm:^7.0.2" + is-cidr: "npm:^5.1.0" + json-parse-even-better-errors: "npm:^4.0.0" + libnpmaccess: "npm:^9.0.0" + libnpmdiff: "npm:^7.0.0" + libnpmexec: "npm:^9.0.0" + libnpmfund: "npm:^6.0.0" + libnpmhook: "npm:^11.0.0" + libnpmorg: "npm:^7.0.0" + libnpmpack: "npm:^8.0.0" + libnpmpublish: "npm:^10.0.1" + libnpmsearch: "npm:^8.0.0" + libnpmteam: "npm:^7.0.0" + libnpmversion: "npm:^7.0.0" + make-fetch-happen: "npm:^14.0.3" + minimatch: "npm:^9.0.5" + minipass: "npm:^7.1.1" + minipass-pipeline: "npm:^1.2.4" + ms: "npm:^2.1.2" + node-gyp: "npm:^11.0.0" + nopt: "npm:^8.0.0" + normalize-package-data: "npm:^7.0.0" + npm-audit-report: "npm:^6.0.0" + npm-install-checks: "npm:^7.1.1" + npm-package-arg: "npm:^12.0.0" + npm-pick-manifest: "npm:^10.0.0" + npm-profile: "npm:^11.0.1" + npm-registry-fetch: "npm:^18.0.2" + npm-user-validate: "npm:^3.0.0" + p-map: "npm:^4.0.0" + pacote: "npm:^19.0.1" + parse-conflict-json: "npm:^4.0.0" + proc-log: "npm:^5.0.0" + qrcode-terminal: "npm:^0.12.0" + read: "npm:^4.0.0" + semver: "npm:^7.6.3" + spdx-expression-parse: "npm:^4.0.0" + ssri: "npm:^12.0.0" + supports-color: "npm:^9.4.0" + tar: "npm:^6.2.1" + text-table: "npm:~0.2.0" + tiny-relative-date: "npm:^1.3.0" + treeverse: "npm:^3.0.0" + validate-npm-package-name: "npm:^6.0.0" + which: "npm:^5.0.0" + write-file-atomic: "npm:^6.0.0" + bin: + npm: bin/npm-cli.js + npx: bin/npx-cli.js + checksum: 10c0/b6cc861a857a0a28ee91a9f10d42d37043b32712656d7f5d490cf3a60755606cfbd3c0e14ff3e0e3b90eed122a8c1fc7e5abc974b6e5db25cafc37d52d2cea57 + languageName: node + linkType: hard + +"nwsapi@npm:^2.2.12": + version: 2.2.16 + resolution: "nwsapi@npm:2.2.16" + checksum: 10c0/0aa0637f4d51043d0183d994e08336bae996b03b42984381bf09ebdf3ff4909c018eda6b2a8aba0a08f3ea8303db8a0dad0608b38dc0bff15fd87017286ae21a + languageName: node + linkType: hard + +"obj-props@npm:^2.0.0": + version: 2.0.0 + resolution: "obj-props@npm:2.0.0" + checksum: 10c0/6c6514c206760dab2f8e7003dcea97ef2930b6278842a21aac0c99050443e4918c013774375bfe7186156387bf2b897a1c67046bd5628184301fdee60e2e4dde + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3": + version: 1.13.3 + resolution: "object-inspect@npm:1.13.3" + checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.4, object.assign@npm:^4.1.7": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc + languageName: node + linkType: hard + +"object.entries@npm:^1.1.8": + version: 1.1.8 + resolution: "object.entries@npm:1.1.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/db9ea979d2956a3bc26c262da4a4d212d36f374652cc4c13efdd069c1a519c16571c137e2893d1c46e1cb0e15c88fd6419eaf410c945f329f09835487d7e65d3 + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.8": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/cd4327e6c3369cfa805deb4cbbe919bfb7d3aeebf0bcaba291bb568ea7169f8f8cdbcabe2f00b40db0c20cd20f08e11b5f3a5a36fb7dd3fe04850c50db3bf83b + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.3": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + checksum: 10c0/60d0455c85c736fbfeda0217d1a77525956f76f7b2495edeca9e9bbf8168a45783199e77b894d30638837c654d0cc410e0e02cbfcf445bc8de71c3da1ede6a9c + languageName: node + linkType: hard + +"object.values@npm:^1.1.6, object.values@npm:^1.2.0": + version: 1.2.1 + resolution: "object.values@npm:1.2.1" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9 + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 10c0/4eef7c6abfef697dd4479345a4100c382d73c149d2d56170a54a07418c50816937ad09500e1ed1e79d235989d073a9bade8557122aee24f0576ecde0f392bb6c + languageName: node + linkType: hard + +"onetime@npm:^7.0.0": + version: 7.0.0 + resolution: "onetime@npm:7.0.0" + dependencies: + mimic-function: "npm:^5.0.0" + checksum: 10c0/5cb9179d74b63f52a196a2e7037ba2b9a893245a5532d3f44360012005c9cadb60851d56716ebff18a6f47129dab7168022445df47c2aff3b276d92585ed1221 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + +"p-each-series@npm:^3.0.0": + version: 3.0.0 + resolution: "p-each-series@npm:3.0.0" + checksum: 10c0/695acfd295788a9d6fc68e86a0d205e7bffc17e0e577922d9ed3ae1d2c52566b985637f85af79484ce6fa4b3c1214f2bc75e9bc14974d0ea19f61b13e5ea0c4e + languageName: node + linkType: hard + +"p-filter@npm:^4.0.0": + version: 4.1.0 + resolution: "p-filter@npm:4.1.0" + dependencies: + p-map: "npm:^7.0.1" + checksum: 10c0/aaa663a74e7d97846377f1b7f7713692f95ca3320f0e6f7f2f06db073926bd8ef7b452d0eefc102c6c23f7482339fc52ea487aec2071dc01cae054665f3f004e + languageName: node + linkType: hard + +"p-is-promise@npm:^3.0.0": + version: 3.0.0 + resolution: "p-is-promise@npm:3.0.0" + checksum: 10c0/17a52c7a59a31a435a4721a7110faeccb7cc9179cf9cd00016b7a9a7156e2c2ed9d8e2efc0142acab74d5064fbb443eaeaf67517cf3668f2a7c93a7effad5bb9 + languageName: node + linkType: hard + +"p-limit@npm:^1.1.0": + version: 1.3.0 + resolution: "p-limit@npm:1.3.0" + dependencies: + p-try: "npm:^1.0.0" + checksum: 10c0/5c1b1d53d180b2c7501efb04b7c817448e10efe1ba46f4783f8951994d5027e4cd88f36ad79af50546682594c4ebd11702ac4b9364c47f8074890e2acad0edee + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-locate@npm:^2.0.0": + version: 2.0.0 + resolution: "p-locate@npm:2.0.0" + dependencies: + p-limit: "npm:^1.1.0" + checksum: 10c0/82da4be88fb02fd29175e66021610c881938d3cc97c813c71c1a605fac05617d57fd5d3b337494a6106c0edb2a37c860241430851411f1b265108cead34aee67 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^7.0.1, p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"p-reduce@npm:^3.0.0": + version: 3.0.0 + resolution: "p-reduce@npm:3.0.0" + checksum: 10c0/794cd6c98ad246f6f41fa4b925e56c7d8759b92f67712f5f735418dc7b47cd9aadaecbbbedaea2df879fd9c5d7622ed0b22a2c090d2ec349cf0578485a660196 + languageName: node + linkType: hard + +"p-try@npm:^1.0.0": + version: 1.0.0 + resolution: "p-try@npm:1.0.0" + checksum: 10c0/757ba31de5819502b80c447826fac8be5f16d3cb4fbf9bc8bc4971dba0682e84ac33e4b24176ca7058c69e29f64f34d8d9e9b08e873b7b7bb0aa89d620fa224a + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"pacote@npm:^19.0.0, pacote@npm:^19.0.1": + version: 19.0.1 + resolution: "pacote@npm:19.0.1" + dependencies: + "@npmcli/git": "npm:^6.0.0" + "@npmcli/installed-package-contents": "npm:^3.0.0" + "@npmcli/package-json": "npm:^6.0.0" + "@npmcli/promise-spawn": "npm:^8.0.0" + "@npmcli/run-script": "npm:^9.0.0" + cacache: "npm:^19.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^7.0.2" + npm-package-arg: "npm:^12.0.0" + npm-packlist: "npm:^9.0.0" + npm-pick-manifest: "npm:^10.0.0" + npm-registry-fetch: "npm:^18.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + sigstore: "npm:^3.0.0" + ssri: "npm:^12.0.0" + tar: "npm:^6.1.11" + bin: + pacote: bin/index.js + checksum: 10c0/01a1fe755ec7333904c36cd6058e4fcdcfa2869799b929a4a57eb3ac3ca87023825c76aa9e6337904f08f760bff790b592c018357d331acc4c26d2cc273bbc51 + languageName: node + linkType: hard + +"pacote@npm:^20.0.0": + version: 20.0.0 + resolution: "pacote@npm:20.0.0" + dependencies: + "@npmcli/git": "npm:^6.0.0" + "@npmcli/installed-package-contents": "npm:^3.0.0" + "@npmcli/package-json": "npm:^6.0.0" + "@npmcli/promise-spawn": "npm:^8.0.0" + "@npmcli/run-script": "npm:^9.0.0" + cacache: "npm:^19.0.0" + fs-minipass: "npm:^3.0.0" + minipass: "npm:^7.0.2" + npm-package-arg: "npm:^12.0.0" + npm-packlist: "npm:^9.0.0" + npm-pick-manifest: "npm:^10.0.0" + npm-registry-fetch: "npm:^18.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + sigstore: "npm:^3.0.0" + ssri: "npm:^12.0.0" + tar: "npm:^6.1.11" + bin: + pacote: bin/index.js + checksum: 10c0/435c385446ecc81b1eb1584f4fa3cb102e630a22877f39b5c1a92eddfeaf222bd027b205e32632be2801e3bcbe525165cdffb5ceca5c13bbc81f8132fe1ba49e + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-conflict-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-conflict-json@npm:4.0.0" + dependencies: + json-parse-even-better-errors: "npm:^4.0.0" + just-diff: "npm:^6.0.0" + just-diff-apply: "npm:^5.2.0" + checksum: 10c0/5e027cdb6c93a283e32e406e829c1d5b30bfb344ab93dd5a0b8fe983f26dab05dd4d8cba3b3106259f32cbea722f383eda2c8132da3a4a9846803d2bdb004feb + languageName: node + linkType: hard + +"parse-entities@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-entities@npm:2.0.0" + dependencies: + character-entities: "npm:^1.0.0" + character-entities-legacy: "npm:^1.0.0" + character-reference-invalid: "npm:^1.0.0" + is-alphanumerical: "npm:^1.0.0" + is-decimal: "npm:^1.0.0" + is-hexadecimal: "npm:^1.0.0" + checksum: 10c0/f85a22c0ea406ff26b53fdc28641f01cc36fa49eb2e3135f02693286c89ef0bcefc2262d99b3688e20aac2a14fd10b75c518583e875c1b9fe3d1f937795e0854 + languageName: node + linkType: hard + +"parse-entities@npm:^4.0.0": + version: 4.0.2 + resolution: "parse-entities@npm:4.0.2" + dependencies: + "@types/unist": "npm:^2.0.0" + character-entities-legacy: "npm:^3.0.0" + character-reference-invalid: "npm:^2.0.0" + decode-named-character-reference: "npm:^1.0.0" + is-alphanumerical: "npm:^2.0.0" + is-decimal: "npm:^2.0.0" + is-hexadecimal: "npm:^2.0.0" + checksum: 10c0/a13906b1151750b78ed83d386294066daf5fb559e08c5af9591b2d98cc209123103016a01df776f65f8219ad26652d6d6b210d0974d452049cddfc53a8916c34 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: "npm:^1.3.1" + json-parse-better-errors: "npm:^1.0.1" + checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + +"parse-json@npm:^7.0.0": + version: 7.1.1 + resolution: "parse-json@npm:7.1.1" + dependencies: + "@babel/code-frame": "npm:^7.21.4" + error-ex: "npm:^1.3.2" + json-parse-even-better-errors: "npm:^3.0.0" + lines-and-columns: "npm:^2.0.3" + type-fest: "npm:^3.8.0" + checksum: 10c0/a85ebc7430af7763fa52eb456d7efd35c35be5b06f04d8d80c37d0d33312ac6cdff12647acb9c95448dcc8b907dfafa81fb126e094aa132b0abc2a71b9df51d5 + languageName: node + linkType: hard + +"parse-json@npm:^8.0.0": + version: 8.1.0 + resolution: "parse-json@npm:8.1.0" + dependencies: + "@babel/code-frame": "npm:^7.22.13" + index-to-position: "npm:^0.1.2" + type-fest: "npm:^4.7.1" + checksum: 10c0/39a49acafc1c41a763df2599a826eb77873a44b098a5f2ba548843229b334a16ff9d613d0381328e58031b0afaabc18ed2a01337a6522911ac7a81828df58bcb + languageName: node + linkType: hard + +"parse-ms@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-ms@npm:4.0.0" + checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16 + languageName: node + linkType: hard + +"parse5-htmlparser2-tree-adapter@npm:^6.0.0": + version: 6.0.1 + resolution: "parse5-htmlparser2-tree-adapter@npm:6.0.1" + dependencies: + parse5: "npm:^6.0.1" + checksum: 10c0/dfa5960e2aaf125707e19a4b1bc333de49232eba5a6ffffb95d313a7d6087c3b7a274b58bee8d3bd41bdf150638815d1d601a42bbf2a0345208c3c35b1279556 + languageName: node + linkType: hard + +"parse5@npm:^5.1.1": + version: 5.1.1 + resolution: "parse5@npm:5.1.1" + checksum: 10c0/b0f87a77a7fea5f242e3d76917c983bbea47703b9371801d51536b78942db6441cbda174bf84eb30e47315ddc6f8a0b57d68e562c790154430270acd76c1fa03 + languageName: node + linkType: hard + +"parse5@npm:^6.0.1": + version: 6.0.1 + resolution: "parse5@npm:6.0.1" + checksum: 10c0/595821edc094ecbcfb9ddcb46a3e1fe3a718540f8320eff08b8cf6742a5114cce2d46d45f95c26191c11b184dcaf4e2960abcd9c5ed9eb9393ac9a37efcfdecb + languageName: node + linkType: hard + +"parse5@npm:^7.1.2": + version: 7.2.1 + resolution: "parse5@npm:7.2.1" + dependencies: + entities: "npm:^4.5.0" + checksum: 10c0/829d37a0c709215a887e410a7118d754f8e1afd7edb529db95bc7bbf8045fb0266a7b67801331d8e8d9d073ea75793624ec27ce9ff3b96862c3b9008f4d68e80 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 10c0/b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-scurry@npm:^2.0.0": + version: 2.0.0 + resolution: "path-scurry@npm:2.0.0" + dependencies: + lru-cache: "npm:^11.0.0" + minipass: "npm:^7.1.2" + checksum: 10c0/3da4adedaa8e7ef8d6dc4f35a0ff8f05a9b4d8365f2b28047752b62d4c1ad73eec21e37b1579ef2d075920157856a3b52ae8309c480a6f1a8bbe06ff8e52b33c + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"path-type@npm:^5.0.0": + version: 5.0.0 + resolution: "path-type@npm:5.0.0" + checksum: 10c0/e8f4b15111bf483900c75609e5e74e3fcb79f2ddb73e41470028fcd3e4b5162ec65da9907be077ee5012c18801ff7fffb35f9f37a077f3f81d85a0b7d6578efd + languageName: node + linkType: hard + +"pathe@npm:^1.1.2": + version: 1.1.2 + resolution: "pathe@npm:1.1.2" + checksum: 10c0/64ee0a4e587fb0f208d9777a6c56e4f9050039268faaaaecd50e959ef01bf847b7872785c36483fa5cdcdbdfdb31fef2ff222684d4fc21c330ab60395c681897 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.0 + resolution: "pathval@npm:2.0.0" + checksum: 10c0/602e4ee347fba8a599115af2ccd8179836a63c925c23e04bd056d0674a64b39e3a081b643cc7bc0b84390517df2d800a46fcc5598d42c155fe4977095c2f77c5 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pidtree@npm:~0.6.0": + version: 0.6.0 + resolution: "pidtree@npm:0.6.0" + bin: + pidtree: bin/pidtree.js + checksum: 10c0/0829ec4e9209e230f74ebf4265f5ccc9ebfb488334b525cb13f86ff801dca44b362c41252cd43ae4d7653a10a5c6ab3be39d2c79064d6895e0d78dc50a5ed6e9 + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 + languageName: node + linkType: hard + +"pinst@npm:^3.0.0": + version: 3.0.0 + resolution: "pinst@npm:3.0.0" + bin: + pinst: bin.js + checksum: 10c0/abb1ed62ea2acb2207a7a860715bdb26ecbde74ede8fad5f6200194f3e22db25e2b7a49af05e5cc7fc05384709c651e0000323f0077d7239060c4b68c8acd428 + languageName: node + linkType: hard + +"pkg-conf@npm:^2.1.0": + version: 2.1.0 + resolution: "pkg-conf@npm:2.1.0" + dependencies: + find-up: "npm:^2.0.0" + load-json-file: "npm:^4.0.0" + checksum: 10c0/e1474a4f7714ee78204b4a7f2316dec9e59887762bdc126ebd0eb701bbde7c6a6da65c4dc9c2a7c1eaeee49914009bf4a4368f5d9894c596ddf812ff982fdb05 + languageName: node + linkType: hard + +"pluralize@npm:^8.0.0": + version: 8.0.0 + resolution: "pluralize@npm:8.0.0" + checksum: 10c0/2044cfc34b2e8c88b73379ea4a36fc577db04f651c2909041b054c981cd863dd5373ebd030123ab058d194ae615d3a97cfdac653991e499d10caf592e8b3dc33 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.1.2": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e + languageName: node + linkType: hard + +"postcss@npm:^8.4.43": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" + dependencies: + nanoid: "npm:^3.3.7" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + +"pretty-ms@npm:^9.0.0": + version: 9.2.0 + resolution: "pretty-ms@npm:9.2.0" + dependencies: + parse-ms: "npm:^4.0.0" + checksum: 10c0/ab6d066f90e9f77020426986e1b018369f41575674544c539aabec2e63a20fec01166d8cf6571d0e165ad11cfe5a8134a2a48a36d42ab291c59c6deca5264cbb + languageName: node + linkType: hard + +"proc-log@npm:^4.0.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 + languageName: node + linkType: hard + +"proggy@npm:^3.0.0": + version: 3.0.0 + resolution: "proggy@npm:3.0.0" + checksum: 10c0/b4265664405e780edf7a164b2424bb59fc7bd3ab917365c88c6540e5f3bedcbbfb1a534da9c6a4a5570f374a41ef6942e9a4e862dc3ea744798b6c7be63e4351 + languageName: node + linkType: hard + +"promise-all-reject-late@npm:^1.0.0": + version: 1.0.1 + resolution: "promise-all-reject-late@npm:1.0.1" + checksum: 10c0/f1af0c7b0067e84d64751148ee5bb6c3e84f4a4d1316d6fe56261e1d2637cf71b49894bcbd2c6daf7d45afb1bc99efc3749be277c3e0518b70d0c5a29d037011 + languageName: node + linkType: hard + +"promise-call-limit@npm:^3.0.1": + version: 3.0.2 + resolution: "promise-call-limit@npm:3.0.2" + checksum: 10c0/1f984c16025925594d738833f5da7525b755f825a198d5a0cac1c0280b4f38ecc3c32c1f4e5ef614ddcfd6718c1a8c3f98a3290ae6f421342281c9a88c488bf7 + languageName: node + linkType: hard + +"promise-inflight@npm:^1.0.1": + version: 1.0.1 + resolution: "promise-inflight@npm:1.0.1" + checksum: 10c0/d179d148d98fbff3d815752fa9a08a87d3190551d1420f17c4467f628214db12235ae068d98cd001f024453676d8985af8f28f002345646c4ece4600a79620bc + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"promzard@npm:^2.0.0": + version: 2.0.0 + resolution: "promzard@npm:2.0.0" + dependencies: + read: "npm:^4.0.0" + checksum: 10c0/09d8c8c5d49ebed99686b7bed386f02ef32fc90cef4b2626c46e39d74903735a1ca88788613076561fc5548a76fe5f91897f2afd8025ce77dfa1f603eaaee1cd + languageName: node + linkType: hard + +"prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: "npm:^1.4.0" + object-assign: "npm:^4.1.1" + react-is: "npm:^16.13.1" + checksum: 10c0/59ece7ca2fb9838031d73a48d4becb9a7cc1ed10e610517c7d8f19a1e02fa47f7c27d557d8a5702bec3cfeccddc853579832b43f449e54635803f277b1c78077 + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 10c0/b9179f99394ec8a68b8afc817690185f3b03933f7b46ce2e22c1930dc84b60d09f5ad222beab4e59e58c6c039c7f7fcf620397235ef441a356f31f9744010e12 + languageName: node + linkType: hard + +"prototype-properties@npm:^5.0.0": + version: 5.0.0 + resolution: "prototype-properties@npm:5.0.0" + checksum: 10c0/6896094f42dd439fa86f1fb3921fae6ae5147763226545da0217baed3c6a288316298faabbd4e6147210723970da1a9d3d63cac2fd546ee9a8ca55dfbeb5f926 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"qrcode-terminal@npm:^0.12.0": + version: 0.12.0 + resolution: "qrcode-terminal@npm:0.12.0" + bin: + qrcode-terminal: ./bin/qrcode-terminal.js + checksum: 10c0/1d8996a743d6c95e22056bd45fe958c306213adc97d7ef8cf1e03bc1aeeb6f27180a747ec3d761141921351eb1e3ca688f7b673ab54cdae9fa358dffaa49563c + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"rc@npm:^1.2.8": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"react-dom@npm:^17.0.2": + version: 17.0.2 + resolution: "react-dom@npm:17.0.2" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + scheduler: "npm:^0.20.2" + peerDependencies: + react: 17.0.2 + checksum: 10c0/51abbcb72450fe527ebf978c3bc989ba266630faaa53f47a2fae5392369729e8de62b2e4683598cbe651ea7873cd34ec7d5127e2f50bf4bfe6bd0c3ad9bddcb0 + languageName: node + linkType: hard + +"react-error-boundary@npm:^3.1.0": + version: 3.1.4 + resolution: "react-error-boundary@npm:3.1.4" + dependencies: + "@babel/runtime": "npm:^7.12.5" + peerDependencies: + react: ">=16.13.1" + checksum: 10c0/f977ca61823e43de2381d53dd7aa8b4d79ff6a984c9afdc88dc44f9973b99de7fd382d2f0f91f2688e24bb987c0185bf45d0b004f22afaaab0f990a830253bfb + languageName: node + linkType: hard + +"react-is@npm:^16.13.1": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 + languageName: node + linkType: hard + +"react@npm:^17.0.2": + version: 17.0.2 + resolution: "react@npm:17.0.2" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + checksum: 10c0/07ae8959acf1596f0550685102fd6097d461a54a4fd46a50f88a0cd7daaa97fdd6415de1dcb4bfe0da6aa43221a6746ce380410fa848acc60f8ac41f6649c148 + languageName: node + linkType: hard + +"read-cmd-shim@npm:^5.0.0": + version: 5.0.0 + resolution: "read-cmd-shim@npm:5.0.0" + checksum: 10c0/5688aea2742d928575a1dd87ee0ce691f57b344935fe87d6460067951e7a3bb3677501513316785e1e9ea43b0bb1635eacba3b00b81ad158f9b23512f1de26d2 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^3.0.0": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: "npm:^3.0.0" + npm-normalize-package-bin: "npm:^3.0.0" + checksum: 10c0/37787e075f0260a92be0428687d9020eecad7ece3bda37461c2219e50d1ec183ab6ba1d9ada193691435dfe119a42c8a5b5b5463f08c8ddbc3d330800b265318 + languageName: node + linkType: hard + +"read-package-json-fast@npm:^4.0.0": + version: 4.0.0 + resolution: "read-package-json-fast@npm:4.0.0" + dependencies: + json-parse-even-better-errors: "npm:^4.0.0" + npm-normalize-package-bin: "npm:^4.0.0" + checksum: 10c0/8a03509ae8e852f1abc4b109c1be571dd90ac9ea65d55433b2fe287e409113441a9b00df698288fe48aa786c1a2550569d47b5ab01ed83ada073d691d5aff582 + languageName: node + linkType: hard + +"read-package-up@npm:^11.0.0": + version: 11.0.0 + resolution: "read-package-up@npm:11.0.0" + dependencies: + find-up-simple: "npm:^1.0.0" + read-pkg: "npm:^9.0.0" + type-fest: "npm:^4.6.0" + checksum: 10c0/ffee09613c2b3c3ff7e7b5e838aa01f33cba5c6dfa14f87bf6f64ed27e32678e5550e712fd7e3f3105a05c43aa774d084af04ee86d3044978edb69f30ee4505a + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: "npm:^4.1.0" + read-pkg: "npm:^5.2.0" + type-fest: "npm:^0.8.1" + checksum: 10c0/82b3ac9fd7c6ca1bdc1d7253eb1091a98ff3d195ee0a45386582ce3e69f90266163c34121e6a0a02f1630073a6c0585f7880b3865efcae9c452fa667f02ca385 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": "npm:^2.4.0" + normalize-package-data: "npm:^2.5.0" + parse-json: "npm:^5.0.0" + type-fest: "npm:^0.6.0" + checksum: 10c0/b51a17d4b51418e777029e3a7694c9bd6c578a5ab99db544764a0b0f2c7c0f58f8a6bc101f86a6fceb8ba6d237d67c89acf6170f6b98695d0420ddc86cf109fb + languageName: node + linkType: hard + +"read-pkg@npm:^9.0.0": + version: 9.0.1 + resolution: "read-pkg@npm:9.0.1" + dependencies: + "@types/normalize-package-data": "npm:^2.4.3" + normalize-package-data: "npm:^6.0.0" + parse-json: "npm:^8.0.0" + type-fest: "npm:^4.6.0" + unicorn-magic: "npm:^0.1.0" + checksum: 10c0/f3e27549dcdb18335597f4125a3d093a40ab0a18c16a6929a1575360ed5d8679b709b4a672730d9abf6aa8537a7f02bae0b4b38626f99409255acbd8f72f9964 + languageName: node + linkType: hard + +"read@npm:^4.0.0": + version: 4.0.0 + resolution: "read@npm:4.0.0" + dependencies: + mute-stream: "npm:^2.0.0" + checksum: 10c0/448dd2cb8163fa7004dbe9e7fc9b0814cedd55028e2d45fbebd774f6b05e3ac046b092f3910a4eff942471187afa0b56b5db6caf2cd230d264d8d8fe22f9af6f + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.2, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.2": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.8, reflect.getprototypeof@npm:^1.0.9": + version: 1.0.9 + resolution: "reflect.getprototypeof@npm:1.0.9" + dependencies: + call-bind: "npm:^1.0.8" + define-properties: "npm:^1.2.1" + dunder-proto: "npm:^1.0.1" + es-abstract: "npm:^1.23.6" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.6" + gopd: "npm:^1.2.0" + which-builtin-type: "npm:^1.2.1" + checksum: 10c0/db42118a8699fa8b5856e6aa06eac32498a7bbc3c22832729049501733d060662bf16f204c546db87df8bb78b36491ecd6b3b0478c0a27be6c8302cc0770a42e + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 10c0/1b16eb2c4bceb1665c89de70dcb64126a22bc8eb958feef3cd68fe11ac6d2a4899b5cd1b80b0774c7c03591dc57d16631a7f69d2daa2ec98100e2f29f7ec4cc4 + languageName: node + linkType: hard + +"regexp-tree@npm:^0.1.27": + version: 0.1.27 + resolution: "regexp-tree@npm:0.1.27" + bin: + regexp-tree: bin/regexp-tree + checksum: 10c0/f636f44b4a0d93d7d6926585ecd81f63e4ce2ac895bc417b2ead0874cd36b337dcc3d0fedc63f69bf5aaeaa4340f36ca7e750c9687cceaf8087374e5284e843c + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.3": + version: 1.5.3 + resolution: "regexp.prototype.flags@npm:1.5.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/e1a7c7dc42cc91abf73e47a269c4b3a8f225321b7f617baa25821f6a123a91d23a73b5152f21872c566e699207e1135d075d2251cd3e84cc96d82a910adf6020 + languageName: node + linkType: hard + +"registry-auth-token@npm:^5.0.0": + version: 5.0.3 + resolution: "registry-auth-token@npm:5.0.3" + dependencies: + "@pnpm/npm-conf": "npm:^2.1.0" + checksum: 10c0/f92313032fae7dca787aa878cc7fa8499ee5da960802777f6b9f168a5d8f24a97fcfa0cf30a604bcf38b050a5db5f034b1e2fec18a3326f41822a6aff9514c85 + languageName: node + linkType: hard + +"regjsparser@npm:^0.10.0": + version: 0.10.0 + resolution: "regjsparser@npm:0.10.0" + dependencies: + jsesc: "npm:~0.5.0" + bin: + regjsparser: bin/parser + checksum: 10c0/0f0508c142eddbceae55dab9715e714305c19e1e130db53168e8fa5f9f7ff9a4901f674cf6f71e04a0973b2f883882ba05808c80778b2d52b053d925050010f4 + languageName: node + linkType: hard + +"remark-mdx@npm:^3.0.0": + version: 3.1.0 + resolution: "remark-mdx@npm:3.1.0" + dependencies: + mdast-util-mdx: "npm:^3.0.0" + micromark-extension-mdxjs: "npm:^3.0.0" + checksum: 10c0/247800fa8561624bdca5776457c5965d99e5e60080e80262c600fe12ddd573862e029e39349e1e36e4c3bf79c8e571ecf4d3d2d8c13485b758391fb500e24a1a + languageName: node + linkType: hard + +"remark-parse@npm:^11.0.0": + version: 11.0.0 + resolution: "remark-parse@npm:11.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + unified: "npm:^11.0.0" + checksum: 10c0/6eed15ddb8680eca93e04fcb2d1b8db65a743dcc0023f5007265dda558b09db595a087f622062ccad2630953cd5cddc1055ce491d25a81f3317c858348a8dd38 + languageName: node + linkType: hard + +"remark-stringify@npm:^11.0.0": + version: 11.0.0 + resolution: "remark-stringify@npm:11.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + unified: "npm:^11.0.0" + checksum: 10c0/0cdb37ce1217578f6f847c7ec9f50cbab35df5b9e3903d543e74b405404e67c07defcb23cd260a567b41b769400f6de03c2c3d9cd6ae7a6707d5c8d89ead489f + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10c0/fb8f7bbe2ca281a73b7ef423a1cbc786fb244bd7a95cbe5c3fba25b27d327150beca8ba02f622baea65919a57e061eb5005204daa5f93ed590d9b77463a567ab + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.22.4": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 + languageName: node + linkType: hard + +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/a6c33555e3482ea2ec4c6e3d3bf0d78128abf69dca99ae468e64f1e30acaa318fd267fb66c8836b04d558d3e2d6ed875fe388067e7d8e0de647d3c21af21c43a + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/78ad6edb8309a2bfb720c2c1898f7907a37f858866ce11a5974643af1203a6a6e05b2fa9c53d8064a673a447b83d42569260c306d43628bff5bb101969708355 + languageName: node + linkType: hard + +"restore-cursor@npm:^5.0.0": + version: 5.1.0 + resolution: "restore-cursor@npm:5.1.0" + dependencies: + onetime: "npm:^7.0.0" + signal-exit: "npm:^4.1.0" + checksum: 10c0/c2ba89131eea791d1b25205bdfdc86699767e2b88dee2a590b1a6caa51737deac8bad0260a5ded2f7c074b7db2f3a626bcf1fcf3cdf35974cbeea5e2e6764f60 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rfdc@npm:^1.4.1": + version: 1.4.1 + resolution: "rfdc@npm:1.4.1" + checksum: 10c0/4614e4292356cafade0b6031527eea9bc90f2372a22c012313be1dcc69a3b90c7338158b414539be863fa95bfcb2ddcd0587be696841af4e6679d85e62c060c7 + languageName: node + linkType: hard + +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: "npm:^10.3.7" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10c0/7da4fd0e15118ee05b918359462cfa1e7fe4b1228c7765195a45b55576e8c15b95db513b8466ec89129666f4af45ad978a3057a02139afba1a63512a2d9644cc + languageName: node + linkType: hard + +"rimraf@npm:^6.0.1": + version: 6.0.1 + resolution: "rimraf@npm:6.0.1" + dependencies: + glob: "npm:^11.0.0" + package-json-from-dist: "npm:^1.0.0" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10c0/b30b6b072771f0d1e73b4ca5f37bb2944ee09375be9db5f558fcd3310000d29dfcfa93cf7734d75295ad5a7486dc8e40f63089ced1722a664539ffc0c3ece8c6 + languageName: node + linkType: hard + +"rollup@npm:^4.20.0": + version: 4.29.1 + resolution: "rollup@npm:4.29.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.29.1" + "@rollup/rollup-android-arm64": "npm:4.29.1" + "@rollup/rollup-darwin-arm64": "npm:4.29.1" + "@rollup/rollup-darwin-x64": "npm:4.29.1" + "@rollup/rollup-freebsd-arm64": "npm:4.29.1" + "@rollup/rollup-freebsd-x64": "npm:4.29.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.29.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.29.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.29.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.29.1" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.29.1" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.29.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.29.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.29.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.29.1" + "@rollup/rollup-linux-x64-musl": "npm:4.29.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.29.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.29.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.29.1" + "@types/estree": "npm:1.0.6" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/fcd0321df78fdc74b36858e92c4b73ebf5aa8f0b9cf7c446f008e0dc3c5c4ed855d662dc44e5a09c7794bbe91017b4dd7be88b619c239f0494f9f0fbfa67c557 + languageName: node + linkType: hard + +"rrweb-cssom@npm:^0.7.1": + version: 0.7.1 + resolution: "rrweb-cssom@npm:0.7.1" + checksum: 10c0/127b8ca6c8aac45e2755abbae6138d4a813b1bedc2caabf79466ae83ab3cfc84b5bfab513b7033f0aa4561c7753edf787d0dd01163ceacdee2e8eb1b6bf7237e + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"sade@npm:^1.7.3": + version: 1.8.1 + resolution: "sade@npm:1.8.1" + dependencies: + mri: "npm:^1.1.0" + checksum: 10c0/da8a3a5d667ad5ce3bf6d4f054bbb9f711103e5df21003c5a5c1a8a77ce12b640ed4017dd423b13c2307ea7e645adee7c2ae3afe8051b9db16a6f6d3da3f90b1 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.1.3": + version: 1.1.3 + resolution: "safe-array-concat@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.6" + has-symbols: "npm:^1.1.0" + isarray: "npm:^2.0.5" + checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-regex-test@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.2.1" + checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"saxes@npm:^6.0.0": + version: 6.0.0 + resolution: "saxes@npm:6.0.0" + dependencies: + xmlchars: "npm:^2.2.0" + checksum: 10c0/3847b839f060ef3476eb8623d099aa502ad658f5c40fd60c105ebce86d244389b0d76fcae30f4d0c728d7705ceb2f7e9b34bb54717b6a7dbedaf5dad2d9a4b74 + languageName: node + linkType: hard + +"scheduler@npm:^0.20.2": + version: 0.20.2 + resolution: "scheduler@npm:0.20.2" + dependencies: + loose-envify: "npm:^1.1.0" + object-assign: "npm:^4.1.1" + checksum: 10c0/b0982e4b0f34f4ffa4f2f486161c0fd9ce9b88680b045dccbf250eb1aa4fd27413570645455187a83535e2370f5c667a251045547765408492bd883cbe95fcdb + languageName: node + linkType: hard + +"semantic-release@npm:^24.2.0": + version: 24.2.0 + resolution: "semantic-release@npm:24.2.0" + dependencies: + "@semantic-release/commit-analyzer": "npm:^13.0.0-beta.1" + "@semantic-release/error": "npm:^4.0.0" + "@semantic-release/github": "npm:^11.0.0" + "@semantic-release/npm": "npm:^12.0.0" + "@semantic-release/release-notes-generator": "npm:^14.0.0-beta.1" + aggregate-error: "npm:^5.0.0" + cosmiconfig: "npm:^9.0.0" + debug: "npm:^4.0.0" + env-ci: "npm:^11.0.0" + execa: "npm:^9.0.0" + figures: "npm:^6.0.0" + find-versions: "npm:^6.0.0" + get-stream: "npm:^6.0.0" + git-log-parser: "npm:^1.2.0" + hook-std: "npm:^3.0.0" + hosted-git-info: "npm:^8.0.0" + import-from-esm: "npm:^1.3.1" + lodash-es: "npm:^4.17.21" + marked: "npm:^12.0.0" + marked-terminal: "npm:^7.0.0" + micromatch: "npm:^4.0.2" + p-each-series: "npm:^3.0.0" + p-reduce: "npm:^3.0.0" + read-package-up: "npm:^11.0.0" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.3.2" + semver-diff: "npm:^4.0.0" + signale: "npm:^1.2.1" + yargs: "npm:^17.5.1" + bin: + semantic-release: bin/semantic-release.js + checksum: 10c0/c4594d862366c372a78700f1bde5791abb15c5348da4427295661ab87989d53e071d956d8cac44b84e7720d8775d0eead686941699056c4d8346458e964c7eb8 + languageName: node + linkType: hard + +"semver-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "semver-diff@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/3ed1bb22f39b4b6e98785bb066e821eabb9445d3b23e092866c50e7df8b9bd3eda617b242f81db4159586e0e39b0deb908dd160a24f783bd6f52095b22cd68ea + languageName: node + linkType: hard + +"semver-regex@npm:^4.0.5": + version: 4.0.5 + resolution: "semver-regex@npm:4.0.5" + checksum: 10c0/c270eda133691dfaab90318df995e96222e4c26c47b17f7c8bd5e5fe88b81ed67b59695fe27546e0314b0f0423c7faed1f93379ad9db47c816df2ddf770918ff + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.1.0": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"signale@npm:^1.2.1": + version: 1.4.0 + resolution: "signale@npm:1.4.0" + dependencies: + chalk: "npm:^2.3.2" + figures: "npm:^2.0.0" + pkg-conf: "npm:^2.1.0" + checksum: 10c0/3b637421368a30805da3948f82350cb9959ddfb19073f44609495384b98baba1c62b1c5c094db57000836c8bc84c6c05c979aa7e072ceeaaf0032d7991b329c7 + languageName: node + linkType: hard + +"sigstore@npm:^3.0.0": + version: 3.0.0 + resolution: "sigstore@npm:3.0.0" + dependencies: + "@sigstore/bundle": "npm:^3.0.0" + "@sigstore/core": "npm:^2.0.0" + "@sigstore/protobuf-specs": "npm:^0.3.2" + "@sigstore/sign": "npm:^3.0.0" + "@sigstore/tuf": "npm:^3.0.0" + "@sigstore/verify": "npm:^2.0.0" + checksum: 10c0/9f9fa8419d07cb4ebb4fbe324e8a68023f851827629a4906d2ffa59b51f17551f514d80aa541c2d2b9918340a1c42cfda2e1ba0ac65a2f9768e8437c520beecd + languageName: node + linkType: hard + +"skin-tone@npm:^2.0.0": + version: 2.0.0 + resolution: "skin-tone@npm:2.0.0" + dependencies: + unicode-emoji-modifier-base: "npm:^1.0.0" + checksum: 10c0/82d4c2527864f9cbd6cb7f3c4abb31e2224752234d5013b881d3e34e9ab543545b05206df5a17d14b515459fcb265ce409f9cfe443903176b0360cd20e4e4ba5 + languageName: node + linkType: hard + +"slash@npm:^5.1.0": + version: 5.1.0 + resolution: "slash@npm:5.1.0" + checksum: 10c0/eb48b815caf0bdc390d0519d41b9e0556a14380f6799c72ba35caf03544d501d18befdeeef074bc9c052acf69654bc9e0d79d7f1de0866284137a40805299eb3 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: "npm:^6.0.0" + is-fullwidth-code-point: "npm:^4.0.0" + checksum: 10c0/2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f + languageName: node + linkType: hard + +"slice-ansi@npm:^7.1.0": + version: 7.1.0 + resolution: "slice-ansi@npm:7.1.0" + dependencies: + ansi-styles: "npm:^6.2.1" + is-fullwidth-code-point: "npm:^5.0.0" + checksum: 10c0/631c971d4abf56cf880f034d43fcc44ff883624867bf11ecbd538c47343911d734a4656d7bc02362b40b89d765652a7f935595441e519b59e2ad3f4d5d6fe7ca + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"spawn-error-forwarder@npm:~1.0.0": + version: 1.0.0 + resolution: "spawn-error-forwarder@npm:1.0.0" + checksum: 10c0/531cb73404af88b5400f9b7a976836b9f09cb48e4c0c79784ad80001ea942eb256e311f14cc7d171539cd1a86297c1c5461177c3fa736ac30627f5f8a6b06db6 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^4.0.0": + version: 4.0.0 + resolution: "spdx-expression-parse@npm:4.0.0" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/965c487e77f4fb173f1c471f3eef4eb44b9f0321adc7f93d95e7620da31faa67d29356eb02523cd7df8a7fc1ec8238773cdbf9e45bd050329d2b26492771b736 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 10c0/bdff7534fad6ef59be49becda1edc3fb7f5b3d6f296a715516ab9d972b8ad59af2c34b2003e01db8970d4c673d185ff696ba74c6b61d3bf327e2b3eac22c297c + languageName: node + linkType: hard + +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 10c0/b292beb8ce9215f8c642bb68be6249c5a4c7f332fc8ecadae7be5cbdf1ea95addc95f0459ef2e7ad9d45fd1064698a097e4eb211c83e772b49bc0ee423e91534 + languageName: node + linkType: hard + +"split2@npm:~1.0.0": + version: 1.0.0 + resolution: "split2@npm:1.0.0" + dependencies: + through2: "npm:~2.0.0" + checksum: 10c0/5923936c492ebbdfed66705a25a1d53eb98d2cff740421f4b558842fdf731f108872c24fe13fa091feef8b564543bdf25c967c03fce6ea09b7119b9d3ed07eda + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.8.0": + version: 3.8.0 + resolution: "std-env@npm:3.8.0" + checksum: 10c0/f560a2902fd0fa3d648d7d0acecbd19d664006f7372c1fba197ed4c216b4c9e48db6e2769b5fe1616d42a9333c9f066c5011935035e85c59f45dc4f796272040 + languageName: node + linkType: hard + +"stream-combiner2@npm:~1.1.1": + version: 1.1.1 + resolution: "stream-combiner2@npm:1.1.1" + dependencies: + duplexer2: "npm:~0.1.0" + readable-stream: "npm:^2.0.2" + checksum: 10c0/96a14ae94493aad307176d0c0a795446cedf6c49d11d08e5d0a56bcf9f22352b0dd148b0497c8456f08b00da0867288e9750bf0286b71f6b621c0f2ba6768758 + languageName: node + linkType: hard + +"string-argv@npm:~0.3.2": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 10c0/75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string-width@npm:^6.0.0": + version: 6.1.0 + resolution: "string-width@npm:6.1.0" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^10.2.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/7b2991ea7c946a43042070787b85af454079116dfd6d853aab4ff8a6d4ac717cdc18656cfee15b7a7a78286669202a4a56385728f0740cb1e15001c71807b361 + languageName: node + linkType: hard + +"string-width@npm:^7.0.0": + version: 7.2.0 + resolution: "string-width@npm:7.2.0" + dependencies: + emoji-regex: "npm:^10.3.0" + get-east-asian-width: "npm:^1.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/eb0430dd43f3199c7a46dcbf7a0b34539c76fe3aa62763d0b0655acdcbdf360b3f66f3d58ca25ba0205f42ea3491fa00f09426d3b7d3040e506878fc7664c9b9 + languageName: node + linkType: hard + +"string.prototype.matchall@npm:^4.0.11": + version: 4.0.12 + resolution: "string.prototype.matchall@npm:4.0.12" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.6" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.6" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + internal-slot: "npm:^1.1.0" + regexp.prototype.flags: "npm:^1.5.3" + set-function-name: "npm:^2.0.2" + side-channel: "npm:^1.1.0" + checksum: 10c0/1a53328ada73f4a77f1fdf1c79414700cf718d0a8ef6672af5603e709d26a24f2181208144aed7e858b1bcc1a0d08567a570abfb45567db4ae47637ed2c2f85c + languageName: node + linkType: hard + +"string.prototype.repeat@npm:^1.0.0": + version: 1.0.0 + resolution: "string.prototype.repeat@npm:1.0.0" + dependencies: + define-properties: "npm:^1.1.3" + es-abstract: "npm:^1.17.5" + checksum: 10c0/94c7978566cffa1327d470fd924366438af9b04b497c43a9805e476e2e908aa37a1fd34cc0911156c17556dab62159d12c7b92b3cc304c3e1281fe4c8e668f40 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.10": + version: 1.2.10 + resolution: "string.prototype.trim@npm:1.2.10" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-data-property: "npm:^1.1.4" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.5" + es-object-atoms: "npm:^1.0.0" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8, string.prototype.trimend@npm:^1.0.9": + version: 1.0.9 + resolution: "string.prototype.trimend@npm:1.0.9" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.2" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6 + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e + languageName: node + linkType: hard + +"stringify-entities@npm:^4.0.0": + version: 4.0.4 + resolution: "stringify-entities@npm:4.0.4" + dependencies: + character-entities-html4: "npm:^2.0.0" + character-entities-legacy: "npm:^3.0.0" + checksum: 10c0/537c7e656354192406bdd08157d759cd615724e9d0873602d2c9b2f6a5c0a8d0b1d73a0a08677848105c5eebac6db037b57c0b3a4ec86331117fa7319ed50448 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 10c0/a771a17901427bac6293fd416db7577e2bc1c34a19d38351e9d5478c3c415f523f391003b42ed475f27e33a78233035df183525395f731d3bfb8cdcbd4da08ce + languageName: node + linkType: hard + +"strip-final-newline@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-final-newline@npm:4.0.0" + checksum: 10c0/b0cf2b62d597a1b0e3ebc42b88767f0a0d45601f89fd379a928a1812c8779440c81abba708082c946445af1d6b62d5f16e2a7cf4f30d9d6587b89425fae801ff + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: "npm:^1.0.0" + checksum: 10c0/ae0deaf41c8d1001c5d4fbe16cb553865c1863da4fae036683b474fa926af9fc121e155cb3fc57a68262b2ae7d5b8420aa752c97a6428c315d00efe2a3875679 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"super-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "super-regex@npm:1.0.0" + dependencies: + function-timeout: "npm:^1.0.1" + time-span: "npm:^5.1.0" + checksum: 10c0/9727b57702308af74be90ed92d4612eed6c8b03fdf25efe1a3455e40d7145246516638bcabf3538e9e9c706d8ecb233e4888e0223283543fb2836d4d7acb6200 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:^9.0.0, supports-color@npm:^9.4.0": + version: 9.4.0 + resolution: "supports-color@npm:9.4.0" + checksum: 10c0/6c24e6b2b64c6a60e5248490cfa50de5924da32cf09ae357ad8ebbf305cc5d2717ba705a9d4cb397d80bbf39417e8fdc8d7a0ce18bd0041bf7b5b456229164e4 + languageName: node + linkType: hard + +"supports-hyperlinks@npm:^3.1.0": + version: 3.1.0 + resolution: "supports-hyperlinks@npm:3.1.0" + dependencies: + has-flag: "npm:^4.0.0" + supports-color: "npm:^7.0.0" + checksum: 10c0/78cc3e17eb27e6846fa355a8ebf343befe36272899cd409e45317a06c1997e95c23ff99d91080a517bd8c96508d4fa456e6ceb338c02ba5d7544277dbec0f10f + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"symbol-tree@npm:^3.2.4": + version: 3.2.4 + resolution: "symbol-tree@npm:3.2.4" + checksum: 10c0/dfbe201ae09ac6053d163578778c53aa860a784147ecf95705de0cd23f42c851e1be7889241495e95c37cabb058edb1052f141387bef68f705afc8f9dd358509 + languageName: node + linkType: hard + +"synckit@npm:^0.9.0": + version: 0.9.2 + resolution: "synckit@npm:0.9.2" + dependencies: + "@pkgr/core": "npm:^0.1.0" + tslib: "npm:^2.6.2" + checksum: 10c0/e0c262817444e5b872708adb6f5ad37951ba33f6b2d1d4477d45db1f57573a784618ceed5e6614e0225db330632b1f6b95bb74d21e4d013e45ad4bde03d0cb59 + languageName: node + linkType: hard + +"tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"temp-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "temp-dir@npm:3.0.0" + checksum: 10c0/a86978a400984cd5f315b77ebf3fe53bb58c61f192278cafcb1f3fb32d584a21dc8e08b93171d7874b7cc972234d3455c467306cc1bfc4524b622e5ad3bfd671 + languageName: node + linkType: hard + +"tempy@npm:^3.0.0": + version: 3.1.0 + resolution: "tempy@npm:3.1.0" + dependencies: + is-stream: "npm:^3.0.0" + temp-dir: "npm:^3.0.0" + type-fest: "npm:^2.12.2" + unique-string: "npm:^3.0.0" + checksum: 10c0/b88e70baa8d935ba8f0e0372b59ad1a961121f098da5fb4a6e05bec98ec32a49026b553532fb75c1c102ec782fd4c6a6bde0d46cbe87013fa324451ce476fb76 + languageName: node + linkType: hard + +"test-exclude@npm:^7.0.1": + version: 7.0.1 + resolution: "test-exclude@npm:7.0.1" + dependencies: + "@istanbuljs/schema": "npm:^0.1.2" + glob: "npm:^10.4.1" + minimatch: "npm:^9.0.4" + checksum: 10c0/6d67b9af4336a2e12b26a68c83308c7863534c65f27ed4ff7068a56f5a58f7ac703e8fc80f698a19bb154fd8f705cdf7ec347d9512b2c522c737269507e7b263 + languageName: node + linkType: hard + +"text-extensions@npm:^2.0.0": + version: 2.4.0 + resolution: "text-extensions@npm:2.4.0" + checksum: 10c0/6790e7ee72ad4d54f2e96c50a13e158bb57ce840dddc770e80960ed1550115c57bdc2cee45d5354d7b4f269636f5ca06aab4d6e0281556c841389aa837b23fcb + languageName: node + linkType: hard + +"text-table@npm:~0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: "npm:>= 3.1.0 < 4" + checksum: 10c0/9b896a22735e8122754fe70f1d65f7ee691c1d70b1f116fda04fea103d0f9b356e3676cb789506e3909ae0486a79a476e4914b0f92472c2e093d206aed4b7d6b + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: "npm:^1.0.0" + checksum: 10c0/f375aeb2b05c100a456a30bc3ed07ef03a39cbdefe02e0403fb714b8c7e57eeaad1a2f5c4ecfb9ce554ce3db9c2b024eba144843cd9e344566d9fcee73b04767 + languageName: node + linkType: hard + +"through2@npm:~2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: "npm:~2.3.6" + xtend: "npm:~4.0.1" + checksum: 10c0/cbfe5b57943fa12b4f8c043658c2a00476216d79c014895cef1ac7a1d9a8b31f6b438d0e53eecbb81054b93128324a82ecd59ec1a4f91f01f7ac113dcb14eade + languageName: node + linkType: hard + +"through@npm:>=2.2.7 <3": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: 10c0/4b09f3774099de0d4df26d95c5821a62faee32c7e96fb1f4ebd54a2d7c11c57fe88b0a0d49cf375de5fee5ae6bf4eb56dbbf29d07366864e2ee805349970d3cc + languageName: node + linkType: hard + +"time-span@npm:^5.1.0": + version: 5.1.0 + resolution: "time-span@npm:5.1.0" + dependencies: + convert-hrtime: "npm:^5.0.0" + checksum: 10c0/37b8284c53f4ee320377512ac19e3a034f2b025f5abd6959b8c1d0f69e0f06ab03681df209f2e452d30129e7b1f25bf573fb0f29d57e71f9b4a6b5b99f4c4b9e + languageName: node + linkType: hard + +"tiny-relative-date@npm:^1.3.0": + version: 1.3.0 + resolution: "tiny-relative-date@npm:1.3.0" + checksum: 10c0/70a0818793bd00345771a4ddfa9e339c102f891766c5ebce6a011905a1a20e30212851c9ffb11b52b79e2445be32bc21d164c4c6d317aef730766b2a61008f30 + languageName: node + linkType: hard + +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.0, tinyexec@npm:^0.3.1": + version: 0.3.1 + resolution: "tinyexec@npm:0.3.1" + checksum: 10c0/11e7a7c5d8b3bddf8b5cbe82a9290d70a6fad84d528421d5d18297f165723cb53d2e737d8f58dcce5ca56f2e4aa2d060f02510b1f8971784f97eb3e9aec28f09 + languageName: node + linkType: hard + +"tinypool@npm:^1.0.1": + version: 1.0.2 + resolution: "tinypool@npm:1.0.2" + checksum: 10c0/31ac184c0ff1cf9a074741254fe9ea6de95026749eb2b8ec6fd2b9d8ca94abdccda731f8e102e7f32e72ed3b36d32c6975fd5f5523df3f1b6de6c3d8dfd95e63 + languageName: node + linkType: hard + +"tinyrainbow@npm:^1.2.0": + version: 1.2.0 + resolution: "tinyrainbow@npm:1.2.0" + checksum: 10c0/7f78a4b997e5ba0f5ecb75e7ed786f30bab9063716e7dff24dd84013fb338802e43d176cb21ed12480561f5649a82184cf31efb296601a29d38145b1cdb4c192 + languageName: node + linkType: hard + +"tinyspy@npm:^3.0.2": + version: 3.0.2 + resolution: "tinyspy@npm:3.0.2" + checksum: 10c0/55ffad24e346622b59292e097c2ee30a63919d5acb7ceca87fc0d1c223090089890587b426e20054733f97a58f20af2c349fb7cc193697203868ab7ba00bcea0 + languageName: node + linkType: hard + +"tldts-core@npm:^6.1.69": + version: 6.1.69 + resolution: "tldts-core@npm:6.1.69" + checksum: 10c0/654b7ca5e349c89613b99179c5a3f55870be0b77d4ce062eaf6cdda7b160dc454a79a48e825e711f89e93588e62cbb6b166171a044a7427f5987ae9602d68328 + languageName: node + linkType: hard + +"tldts@npm:^6.1.32": + version: 6.1.69 + resolution: "tldts@npm:6.1.69" + dependencies: + tldts-core: "npm:^6.1.69" + bin: + tldts: bin/cli.js + checksum: 10c0/47ca3c435f3fbe325a263e07417079551911afce45be0cc8b4a1c9ba14b8e9e6c493c6260dc5f34d3c4b396671fe641b2ebea9646e34c4a4d03223da848c7658 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"tough-cookie@npm:^5.0.0": + version: 5.0.0 + resolution: "tough-cookie@npm:5.0.0" + dependencies: + tldts: "npm:^6.1.32" + checksum: 10c0/4a69c885bf6f45c5a64e60262af99e8c0d58a33bd3d0ce5da62121eeb9c00996d0128a72df8fc4614cbde59cc8b70aa3e21e4c3c98c2bbde137d7aba7fa00124 + languageName: node + linkType: hard + +"tr46@npm:^5.0.0": + version: 5.0.0 + resolution: "tr46@npm:5.0.0" + dependencies: + punycode: "npm:^2.3.1" + checksum: 10c0/1521b6e7bbc8adc825c4561480f9fe48eb2276c81335eed9fa610aa4c44a48a3221f78b10e5f18b875769eb3413e30efbf209ed556a17a42aa8d690df44b7bee + languageName: node + linkType: hard + +"traverse@npm:0.6.8": + version: 0.6.8 + resolution: "traverse@npm:0.6.8" + checksum: 10c0/d97a71be2ca895ff6b813840db37f9b5d88e30f7c4c4bd5b22c5c68ebc22d4a10c4599e02c51414523cc7ada3432e118ea62ebd53cf6f3a4f3aa951bd45072a9 + languageName: node + linkType: hard + +"treeverse@npm:^3.0.0": + version: 3.0.0 + resolution: "treeverse@npm:3.0.0" + checksum: 10c0/286479b9c05a8fb0538ee7d67a5502cea7704f258057c784c9c1118a2f598788b2c0f7a8d89e74648af88af0225b31766acecd78e6060736f09b21dd3fa255db + languageName: node + linkType: hard + +"trough@npm:^2.0.0": + version: 2.2.0 + resolution: "trough@npm:2.2.0" + checksum: 10c0/58b671fc970e7867a48514168894396dd94e6d9d6456aca427cc299c004fe67f35ed7172a36449086b2edde10e78a71a284ec0076809add6834fb8f857ccb9b0 + languageName: node + linkType: hard + +"ts-api-utils@npm:^1.3.0": + version: 1.4.3 + resolution: "ts-api-utils@npm:1.4.3" + peerDependencies: + typescript: ">=4.2.0" + checksum: 10c0/e65dc6e7e8141140c23e1dc94984bf995d4f6801919c71d6dc27cf0cd51b100a91ffcfe5217626193e5bea9d46831e8586febdc7e172df3f1091a7384299e23a + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": "npm:^0.0.29" + json5: "npm:^1.0.2" + minimist: "npm:^1.2.6" + strip-bom: "npm:^3.0.0" + checksum: 10c0/5b4f301a2b7a3766a986baf8fc0e177eb80bdba6e396792ff92dc23b5bca8bb279fc96517dcaaef63a3b49bebc6c4c833653ec58155780bc906bdbcf7dda0ef5 + languageName: node + linkType: hard + +"tslib@npm:^2.6.2": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"tuf-js@npm:^3.0.1": + version: 3.0.1 + resolution: "tuf-js@npm:3.0.1" + dependencies: + "@tufjs/models": "npm:3.0.1" + debug: "npm:^4.3.6" + make-fetch-happen: "npm:^14.0.1" + checksum: 10c0/4214dd6bb1ec8a6cadbc5690e5a8556de0306f0e95022e54fc7c0ff9dbcc229ab379fd4b048511387f9c0023ea8f8c35acd8f7313f6cbc94a1b8af8b289f62ad + languageName: node + linkType: hard + +"tunnel@npm:^0.0.6": + version: 0.0.6 + resolution: "tunnel@npm:0.0.6" + checksum: 10c0/e27e7e896f2426c1c747325b5f54efebc1a004647d853fad892b46d64e37591ccd0b97439470795e5262b5c0748d22beb4489a04a0a448029636670bfd801b75 + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: 10c0/0c585c26416fce9ecb5691873a1301b5aff54673c7999b6f925691ed01f5b9232db408cdbb0bd003d19f5ae284322523f44092d1f81ca0a48f11f7cf0be8cd38 + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: 10c0/dffbb99329da2aa840f506d376c863bd55f5636f4741ad6e65e82f5ce47e6914108f44f340a0b74009b0cb5d09d6752ae83203e53e98b1192cf80ecee5651636 + languageName: node + linkType: hard + +"type-fest@npm:^1.0.1": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: 10c0/a3c0f4ee28ff6ddf800d769eafafcdeab32efa38763c1a1b8daeae681920f6e345d7920bf277245235561d8117dab765cb5f829c76b713b4c9de0998a5397141 + languageName: node + linkType: hard + +"type-fest@npm:^2.12.2": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: 10c0/a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb + languageName: node + linkType: hard + +"type-fest@npm:^3.8.0": + version: 3.13.1 + resolution: "type-fest@npm:3.13.1" + checksum: 10c0/547d22186f73a8c04590b70dcf63baff390078c75ea8acd366bbd510fd0646e348bd1970e47ecf795b7cff0b41d26e9c475c1fedd6ef5c45c82075fbf916b629 + languageName: node + linkType: hard + +"type-fest@npm:^4.6.0, type-fest@npm:^4.7.1": + version: 4.30.2 + resolution: "type-fest@npm:4.30.2" + checksum: 10c0/c28db60ff57223fb23180e66bd9652fb3197fb533e9360f9ee76e66c3ccb6849b292df5e8fa5897f215f6685357dd31c946511da56be549cb5de9d42ac9ea67d + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" + dependencies: + call-bound: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-byte-length@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.14" + checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-byte-offset@npm:1.0.4" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-proto: "npm:^1.2.0" + is-typed-array: "npm:^1.1.15" + reflect.getprototypeof: "npm:^1.0.9" + checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.7": + version: 1.0.7 + resolution: "typed-array-length@npm:1.0.7" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + reflect.getprototypeof: "npm:^1.0.6" + checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 10c0/6005cb31df50eef8b1f3c780eb71a17925f3038a100d82f9406ac2ad1de5eb59f8e6decbdc145b3a1f8e5836e17b0c0002fb698b9fe2516b8f9f9ff602d36412 + languageName: node + linkType: hard + +"typescript-eslint@npm:^8.3.0": + version: 8.18.2 + resolution: "typescript-eslint@npm:8.18.2" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.18.2" + "@typescript-eslint/parser": "npm:8.18.2" + "@typescript-eslint/utils": "npm:8.18.2" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <5.8.0" + checksum: 10c0/30a0314a2484bcbe286fc6eda55784d9954605c7e60ddd35281da90c6fcb75a40bd3abd84617814dff4e1504d762234407c99153fdd812dce712cef11bbb9b3f + languageName: node + linkType: hard + +"typescript@npm:^5.3.3": + version: 5.7.2 + resolution: "typescript@npm:5.7.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/a873118b5201b2ef332127ef5c63fb9d9c155e6fdbe211cbd9d8e65877283797cca76546bad742eea36ed7efbe3424a30376818f79c7318512064e8625d61622 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.3.3#optional!builtin": + version: 5.7.2 + resolution: "typescript@patch:typescript@npm%3A5.7.2#optional!builtin::version=5.7.2&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/f3b8082c9d1d1629a215245c9087df56cb784f9fb6f27b5d55577a20e68afe2a889c040aacff6d27e35be165ecf9dca66e694c42eb9a50b3b2c451b36b5675cb + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.19.3 + resolution: "uglify-js@npm:3.19.3" + bin: + uglifyjs: bin/uglifyjs + checksum: 10c0/83b0a90eca35f778e07cad9622b80c448b6aad457c9ff8e568afed978212b42930a95f9e1be943a1ffa4258a3340fbb899f41461131c05bb1d0a9c303aed8479 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.1.0": + version: 1.1.0 + resolution: "unbox-primitive@npm:1.1.0" + dependencies: + call-bound: "npm:^1.0.3" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.1.0" + which-boxed-primitive: "npm:^1.1.1" + checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982 + languageName: node + linkType: hard + +"undici-types@npm:~6.20.0": + version: 6.20.0 + resolution: "undici-types@npm:6.20.0" + checksum: 10c0/68e659a98898d6a836a9a59e6adf14a5d799707f5ea629433e025ac90d239f75e408e2e5ff086afc3cace26f8b26ee52155293564593fbb4a2f666af57fc59bf + languageName: node + linkType: hard + +"undici@npm:^5.25.4": + version: 5.28.4 + resolution: "undici@npm:5.28.4" + dependencies: + "@fastify/busboy": "npm:^2.0.0" + checksum: 10c0/08d0f2596553aa0a54ca6e8e9c7f45aef7d042c60918564e3a142d449eda165a80196f6ef19ea2ef2e6446959e293095d8e40af1236f0d67223b06afac5ecad7 + languageName: node + linkType: hard + +"unicode-emoji-modifier-base@npm:^1.0.0": + version: 1.0.0 + resolution: "unicode-emoji-modifier-base@npm:1.0.0" + checksum: 10c0/b37623fcf0162186debd20f116483e035a2d5b905b932a2c472459d9143d446ebcbefb2a494e2fe4fa7434355396e2a95ec3fc1f0c29a3bc8f2c827220e79c66 + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.1.0": + version: 0.1.0 + resolution: "unicorn-magic@npm:0.1.0" + checksum: 10c0/e4ed0de05b0a05e735c7d8a2930881e5efcfc3ec897204d5d33e7e6247f4c31eac92e383a15d9a6bccb7319b4271ee4bea946e211bf14951fec6ff2cbbb66a92 + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: 10c0/0a32a997d6c15f1c2a077a15b1c4ca6f268d574cf5b8975e778bb98e6f8db4ef4e86dfcae4e158cd4c7e38fb4dd383b93b13eefddc7f178dea13d3ac8a603271 + languageName: node + linkType: hard + +"unified-engine@npm:^11.2.0": + version: 11.2.2 + resolution: "unified-engine@npm:11.2.2" + dependencies: + "@types/concat-stream": "npm:^2.0.0" + "@types/debug": "npm:^4.0.0" + "@types/is-empty": "npm:^1.0.0" + "@types/node": "npm:^22.0.0" + "@types/unist": "npm:^3.0.0" + concat-stream: "npm:^2.0.0" + debug: "npm:^4.0.0" + extend: "npm:^3.0.0" + glob: "npm:^10.0.0" + ignore: "npm:^6.0.0" + is-empty: "npm:^1.0.0" + is-plain-obj: "npm:^4.0.0" + load-plugin: "npm:^6.0.0" + parse-json: "npm:^7.0.0" + trough: "npm:^2.0.0" + unist-util-inspect: "npm:^8.0.0" + vfile: "npm:^6.0.0" + vfile-message: "npm:^4.0.0" + vfile-reporter: "npm:^8.0.0" + vfile-statistics: "npm:^3.0.0" + yaml: "npm:^2.0.0" + checksum: 10c0/daac3b2bf18fb79a052129958e104bddfb8241ef5ea51696a214864906a61a375c4d95b42958b7ed300ebaa028172f1e8b6515f1664a0fa765eb11ca06b891ee + languageName: node + linkType: hard + +"unified@npm:^11.0.0, unified@npm:^11.0.4": + version: 11.0.5 + resolution: "unified@npm:11.0.5" + dependencies: + "@types/unist": "npm:^3.0.0" + bail: "npm:^2.0.0" + devlop: "npm:^1.0.0" + extend: "npm:^3.0.0" + is-plain-obj: "npm:^4.0.0" + trough: "npm:^2.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/53c8e685f56d11d9d458a43e0e74328a4d6386af51c8ac37a3dcabec74ce5026da21250590d4aff6733ccd7dc203116aae2b0769abc18cdf9639a54ae528dfc9 + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + +"unique-string@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-string@npm:3.0.0" + dependencies: + crypto-random-string: "npm:^4.0.0" + checksum: 10c0/b35ea034b161b2a573666ec16c93076b4b6106b8b16c2415808d747ab3a0566b5db0c4be231d4b11cfbc16d7fd915c9d8a45884bff0e2db11b799775b2e1e017 + languageName: node + linkType: hard + +"unist-util-inspect@npm:^8.0.0": + version: 8.1.0 + resolution: "unist-util-inspect@npm:8.1.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10c0/d3dff256ffd77a1e8dd583be89070dc1ab124d424794fcc1105a38c2f0bb0538afc686e592699807c7d9fa612821961033fe38e26c11ba0bb51d19e8ae7c4119 + languageName: node + linkType: hard + +"unist-util-is@npm:^6.0.0": + version: 6.0.0 + resolution: "unist-util-is@npm:6.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10c0/9419352181eaa1da35eca9490634a6df70d2217815bb5938a04af3a662c12c5607a2f1014197ec9c426fbef18834f6371bfdb6f033040fa8aa3e965300d70e7e + languageName: node + linkType: hard + +"unist-util-position-from-estree@npm:^2.0.0": + version: 2.0.0 + resolution: "unist-util-position-from-estree@npm:2.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10c0/39127bf5f0594e0a76d9241dec4f7aa26323517120ce1edd5ed91c8c1b9df7d6fb18af556e4b6250f1c7368825720ed892e2b6923be5cdc08a9bb16536dc37b3 + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^2.0.0": + version: 2.0.3 + resolution: "unist-util-stringify-position@npm:2.0.3" + dependencies: + "@types/unist": "npm:^2.0.2" + checksum: 10c0/46fa03f840df173b7f032cbfffdb502fb05b79b3fb5451681c796cf4985d9087a537833f5afb75d55e79b46bbbe4b3d81dd75a1062f9289091c526aebe201d5d + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^4.0.0": + version: 4.0.0 + resolution: "unist-util-stringify-position@npm:4.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10c0/dfe1dbe79ba31f589108cb35e523f14029b6675d741a79dea7e5f3d098785045d556d5650ec6a8338af11e9e78d2a30df12b1ee86529cded1098da3f17ee999e + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^6.0.0": + version: 6.0.1 + resolution: "unist-util-visit-parents@npm:6.0.1" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-is: "npm:^6.0.0" + checksum: 10c0/51b1a5b0aa23c97d3e03e7288f0cdf136974df2217d0999d3de573c05001ef04cccd246f51d2ebdfb9e8b0ed2704451ad90ba85ae3f3177cf9772cef67f56206 + languageName: node + linkType: hard + +"unist-util-visit@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-visit@npm:5.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-is: "npm:^6.0.0" + unist-util-visit-parents: "npm:^6.0.0" + checksum: 10c0/51434a1d80252c1540cce6271a90fd1a106dbe624997c09ed8879279667fb0b2d3a685e02e92bf66598dcbe6cdffa7a5f5fb363af8fdf90dda6c855449ae39a5 + languageName: node + linkType: hard + +"universal-user-agent@npm:^7.0.0, universal-user-agent@npm:^7.0.2": + version: 7.0.2 + resolution: "universal-user-agent@npm:7.0.2" + checksum: 10c0/e60517ee929813e6b3ac0ceb3c66deccafadc71341edca160279ff046319c684fd7090a60d63aa61cd34a06c2d2acebeb8c2f8d364244ae7bf8ab788e20cd8c8 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.1": + version: 1.1.1 + resolution: "update-browserslist-db@npm:1.1.1" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.0" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/536a2979adda2b4be81b07e311bd2f3ad5e978690987956bc5f514130ad50cac87cd22c710b686d79731e00fbee8ef43efe5fcd72baa241045209195d43dcc80 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"url-join@npm:^5.0.0": + version: 5.0.0 + resolution: "url-join@npm:5.0.0" + checksum: 10c0/ed2b166b4b5a98adcf6828a48b6bd6df1dac4c8a464a73cf4d8e2457ed410dd8da6be0d24855b86026cd7f5c5a3657c1b7b2c7a7c5b8870af17635a41387b04c + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"uvu@npm:^0.5.6": + version: 0.5.6 + resolution: "uvu@npm:0.5.6" + dependencies: + dequal: "npm:^2.0.0" + diff: "npm:^5.0.0" + kleur: "npm:^4.0.3" + sade: "npm:^1.7.3" + bin: + uvu: bin.js + checksum: 10c0/ad32eb5f7d94bdeb71f80d073003f0138e24f61ed68cecc8e15d2f30838f44c9670577bb1775c8fac894bf93d1bc1583d470a9195e49bfa6efa14cc6f4942bff + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 10c0/903e738f7387404bb72f7ac34e45d7010c877abd2803dc2d614612527927a40a6d024420033132e667b1bade94544b8a1f65c9431a4eb30d0ce0d80093cd1f74 + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^6.0.0": + version: 6.0.0 + resolution: "validate-npm-package-name@npm:6.0.0" + checksum: 10c0/35d1896d90a4f00291cfc17077b553910d45018b3562841acc6471731794eeebe39b409f678e8c1fee8ef1786e087cac8dea19abdd43649c30fd0b9c752afa2f + languageName: node + linkType: hard + +"vfile-message@npm:^4.0.0": + version: 4.0.2 + resolution: "vfile-message@npm:4.0.2" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-stringify-position: "npm:^4.0.0" + checksum: 10c0/07671d239a075f888b78f318bc1d54de02799db4e9dce322474e67c35d75ac4a5ac0aaf37b18801d91c9f8152974ea39678aa72d7198758b07f3ba04fb7d7514 + languageName: node + linkType: hard + +"vfile-reporter@npm:^8.0.0": + version: 8.1.1 + resolution: "vfile-reporter@npm:8.1.1" + dependencies: + "@types/supports-color": "npm:^8.0.0" + string-width: "npm:^6.0.0" + supports-color: "npm:^9.0.0" + unist-util-stringify-position: "npm:^4.0.0" + vfile: "npm:^6.0.0" + vfile-message: "npm:^4.0.0" + vfile-sort: "npm:^4.0.0" + vfile-statistics: "npm:^3.0.0" + checksum: 10c0/5da85c67e4a26762d64d65d0aac5ef339a413cc051470d970eea7352f07afd24577d42780c3af93c109177078df1bbbdbcc3e82adcc34e1bb96d2665f3f0c2a1 + languageName: node + linkType: hard + +"vfile-sort@npm:^4.0.0": + version: 4.0.0 + resolution: "vfile-sort@npm:4.0.0" + dependencies: + vfile: "npm:^6.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/fe1a4cbe24d03b81a7e7486be107eb029ac2631a3575e55a3f1d25cf54bcf2d60b3f76694dedf8a2f60793877e1d192234157cdfd50d1a0d18b9a4c1487cdf65 + languageName: node + linkType: hard + +"vfile-statistics@npm:^3.0.0": + version: 3.0.0 + resolution: "vfile-statistics@npm:3.0.0" + dependencies: + vfile: "npm:^6.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/3de51670329701e2cff75d979564087578844444d9b9d8619a2fdd2a904bc970bf4d05b58e7cee71e0f6f34087f1f7f2ea85cdfa5bf58f572c777432c156bd8f + languageName: node + linkType: hard + +"vfile@npm:^6.0.0, vfile@npm:^6.0.1": + version: 6.0.3 + resolution: "vfile@npm:6.0.3" + dependencies: + "@types/unist": "npm:^3.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/e5d9eb4810623f23758cfc2205323e33552fb5972e5c2e6587babe08fe4d24859866277404fb9e2a20afb71013860d96ec806cb257536ae463c87d70022ab9ef + languageName: node + linkType: hard + +"vite-node@npm:2.1.8": + version: 2.1.8 + resolution: "vite-node@npm:2.1.8" + dependencies: + cac: "npm:^6.7.14" + debug: "npm:^4.3.7" + es-module-lexer: "npm:^1.5.4" + pathe: "npm:^1.1.2" + vite: "npm:^5.0.0" + bin: + vite-node: vite-node.mjs + checksum: 10c0/cb28027a7425ba29780e216164c07d36a4ff9eb60d83afcad3bc222fd5a5f3e36030071c819edd6d910940f502d49e52f7564743617bc1c5875485b0952c72d5 + languageName: node + linkType: hard + +"vite@npm:^5.0.0": + version: 5.4.11 + resolution: "vite@npm:5.4.11" + dependencies: + esbuild: "npm:^0.21.3" + fsevents: "npm:~2.3.3" + postcss: "npm:^8.4.43" + rollup: "npm:^4.20.0" + peerDependencies: + "@types/node": ^18.0.0 || >=20.0.0 + less: "*" + lightningcss: ^1.21.0 + sass: "*" + sass-embedded: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/d536bb7af57dd0eca2a808f95f5ff1d7b7ffb8d86e17c6893087680a0448bd0d15e07475270c8a6de65cb5115592d037130a1dd979dc76bcef8c1dda202a1874 + languageName: node + linkType: hard + +"vitest@npm:^2.1.8": + version: 2.1.8 + resolution: "vitest@npm:2.1.8" + dependencies: + "@vitest/expect": "npm:2.1.8" + "@vitest/mocker": "npm:2.1.8" + "@vitest/pretty-format": "npm:^2.1.8" + "@vitest/runner": "npm:2.1.8" + "@vitest/snapshot": "npm:2.1.8" + "@vitest/spy": "npm:2.1.8" + "@vitest/utils": "npm:2.1.8" + chai: "npm:^5.1.2" + debug: "npm:^4.3.7" + expect-type: "npm:^1.1.0" + magic-string: "npm:^0.30.12" + pathe: "npm:^1.1.2" + std-env: "npm:^3.8.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^0.3.1" + tinypool: "npm:^1.0.1" + tinyrainbow: "npm:^1.2.0" + vite: "npm:^5.0.0" + vite-node: "npm:2.1.8" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.8 + "@vitest/ui": 2.1.8 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/e70631bad5662d6c60c5cf836a4baf58b890db6654fef1f608fe6a86aa49a2b9f078aac74b719d4d3c87c5c781968cc73590a7935277b48f3d8b6fb9c5b4d276 + languageName: node + linkType: hard + +"w3c-xmlserializer@npm:^5.0.0": + version: 5.0.0 + resolution: "w3c-xmlserializer@npm:5.0.0" + dependencies: + xml-name-validator: "npm:^5.0.0" + checksum: 10c0/8712774c1aeb62dec22928bf1cdfd11426c2c9383a1a63f2bcae18db87ca574165a0fbe96b312b73652149167ac6c7f4cf5409f2eb101d9c805efe0e4bae798b + languageName: node + linkType: hard + +"walk-up-path@npm:^3.0.1": + version: 3.0.1 + resolution: "walk-up-path@npm:3.0.1" + checksum: 10c0/3184738e0cf33698dd58b0ee4418285b9c811e58698f52c1f025435a85c25cbc5a63fee599f1a79cb29ca7ef09a44ec9417b16bfd906b1a37c305f7aa20ee5bc + languageName: node + linkType: hard + +"webidl-conversions@npm:^7.0.0": + version: 7.0.0 + resolution: "webidl-conversions@npm:7.0.0" + checksum: 10c0/228d8cb6d270c23b0720cb2d95c579202db3aaf8f633b4e9dd94ec2000a04e7e6e43b76a94509cdb30479bd00ae253ab2371a2da9f81446cc313f89a4213a2c4 + languageName: node + linkType: hard + +"whatwg-encoding@npm:^3.1.1": + version: 3.1.1 + resolution: "whatwg-encoding@npm:3.1.1" + dependencies: + iconv-lite: "npm:0.6.3" + checksum: 10c0/273b5f441c2f7fda3368a496c3009edbaa5e43b71b09728f90425e7f487e5cef9eb2b846a31bd760dd8077739c26faf6b5ca43a5f24033172b003b72cf61a93e + languageName: node + linkType: hard + +"whatwg-mimetype@npm:^4.0.0": + version: 4.0.0 + resolution: "whatwg-mimetype@npm:4.0.0" + checksum: 10c0/a773cdc8126b514d790bdae7052e8bf242970cebd84af62fb2f35a33411e78e981f6c0ab9ed1fe6ec5071b09d5340ac9178e05b52d35a9c4bcf558ba1b1551df + languageName: node + linkType: hard + +"whatwg-url@npm:^14.0.0": + version: 14.1.0 + resolution: "whatwg-url@npm:14.1.0" + dependencies: + tr46: "npm:^5.0.0" + webidl-conversions: "npm:^7.0.0" + checksum: 10c0/f00104f1c67ce086ba8ffedab529cbbd9aefd8c0a6555320026de7aeff31f91c38680f95818b140a7c9cc657cde3781e567835dda552ddb1e2b8faaba0ac3cb6 + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": + version: 1.1.1 + resolution: "which-boxed-primitive@npm:1.1.1" + dependencies: + is-bigint: "npm:^1.1.0" + is-boolean-object: "npm:^1.2.1" + is-number-object: "npm:^1.1.1" + is-string: "npm:^1.1.1" + is-symbol: "npm:^1.1.1" + checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.2.1": + version: 1.2.1 + resolution: "which-builtin-type@npm:1.2.1" + dependencies: + call-bound: "npm:^1.0.2" + function.prototype.name: "npm:^1.1.6" + has-tostringtag: "npm:^1.0.2" + is-async-function: "npm:^2.0.0" + is-date-object: "npm:^1.1.0" + is-finalizationregistry: "npm:^1.1.0" + is-generator-function: "npm:^1.0.10" + is-regex: "npm:^1.2.1" + is-weakref: "npm:^1.0.2" + isarray: "npm:^2.0.5" + which-boxed-primitive: "npm:^1.1.0" + which-collection: "npm:^1.0.2" + which-typed-array: "npm:^1.1.16" + checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.2": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" + dependencies: + is-map: "npm:^2.0.3" + is-set: "npm:^2.0.3" + is-weakmap: "npm:^2.0.2" + is-weakset: "npm:^2.0.3" + checksum: 10c0/3345fde20964525a04cdf7c4a96821f85f0cc198f1b2ecb4576e08096746d129eb133571998fe121c77782ac8f21cbd67745a3d35ce100d26d4e684c142ea1f2 + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18": + version: 1.1.18 + resolution: "which-typed-array@npm:1.1.18" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + for-each: "npm:^0.3.3" + gopd: "npm:^1.2.0" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 10c0/7ed2e44f3c33c5c3e3771134d2b0aee4314c9e49c749e37f464bf69f2bcdf0cbf9419ca638098e2717cff4875c47f56a007532f6111c3319f557a2ca91278e92 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrap-ansi@npm:^9.0.0": + version: 9.0.0 + resolution: "wrap-ansi@npm:9.0.0" + dependencies: + ansi-styles: "npm:^6.2.1" + string-width: "npm:^7.0.0" + strip-ansi: "npm:^7.1.0" + checksum: 10c0/a139b818da9573677548dd463bd626a5a5286271211eb6e4e82f34a4f643191d74e6d4a9bb0a3c26ec90e6f904f679e0569674ac099ea12378a8b98e20706066 + languageName: node + linkType: hard + +"write-file-atomic@npm:^6.0.0": + version: 6.0.0 + resolution: "write-file-atomic@npm:6.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: 10c0/ae2f1c27474758a9aca92037df6c1dd9cb94c4e4983451210bd686bfe341f142662f6aa5913095e572ab037df66b1bfe661ed4ce4c0369ed0e8219e28e141786 + languageName: node + linkType: hard + +"ws@npm:^8.18.0": + version: 8.18.0 + resolution: "ws@npm:8.18.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/25eb33aff17edcb90721ed6b0eb250976328533ad3cd1a28a274bd263682e7296a6591ff1436d6cbc50fa67463158b062f9d1122013b361cec99a05f84680e06 + languageName: node + linkType: hard + +"xml-name-validator@npm:^5.0.0": + version: 5.0.0 + resolution: "xml-name-validator@npm:5.0.0" + checksum: 10c0/3fcf44e7b73fb18be917fdd4ccffff3639373c7cb83f8fc35df6001fecba7942f1dbead29d91ebb8315e2f2ff786b508f0c9dc0215b6353f9983c6b7d62cb1f5 + languageName: node + linkType: hard + +"xmlchars@npm:^2.2.0": + version: 2.2.0 + resolution: "xmlchars@npm:2.2.0" + checksum: 10c0/b64b535861a6f310c5d9bfa10834cf49127c71922c297da9d4d1b45eeaae40bf9b4363275876088fbe2667e5db028d2cd4f8ee72eed9bede840a67d57dab7593 + languageName: node + linkType: hard + +"xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10c0/366ae4783eec6100f8a02dff02ac907bf29f9a00b82ac0264b4d8b832ead18306797e283cf19de776538babfdcb2101375ec5646b59f08c52128ac4ab812ed0e + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yaml@npm:^2.0.0, yaml@npm:~2.6.1": + version: 2.6.1 + resolution: "yaml@npm:2.6.1" + bin: + yaml: bin.mjs + checksum: 10c0/aebf07f61c72b38c74d2b60c3a3ccf89ee4da45bcd94b2bfb7899ba07a5257625a7c9f717c65a6fc511563d48001e01deb1d9e55f0133f3e2edf86039c8c1be7 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^16.0.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: "npm:^7.0.2" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.0" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^20.2.2" + checksum: 10c0/b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 + languageName: node + linkType: hard + +"yargs@npm:^17.0.0, yargs@npm:^17.5.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.1.1 + resolution: "yocto-queue@npm:1.1.1" + checksum: 10c0/cb287fe5e6acfa82690acb43c283de34e945c571a78a939774f6eaba7c285bacdf6c90fbc16ce530060863984c906d2b4c6ceb069c94d1e0a06d5f2b458e2a92 + languageName: node + linkType: hard + +"yoctocolors@npm:^2.0.0": + version: 2.1.1 + resolution: "yoctocolors@npm:2.1.1" + checksum: 10c0/85903f7fa96f1c70badee94789fade709f9d83dab2ec92753d612d84fcea6d34c772337a9f8914c6bed2f5fc03a428ac5d893e76fab636da5f1236ab725486d0 + languageName: node + linkType: hard + +"zwitch@npm:^2.0.0": + version: 2.0.4 + resolution: "zwitch@npm:2.0.4" + checksum: 10c0/3c7830cdd3378667e058ffdb4cf2bb78ac5711214e2725900873accb23f3dfe5f9e7e5a06dcdc5f29605da976fc45c26d9a13ca334d6eea2245a15e77b8fc06e + languageName: node + linkType: hard