pax_global_header 0000666 0000000 0000000 00000000064 15253274704 0014523 g ustar 00root root 0000000 0000000 52 comment=0b05f3f7215bed05bbca6a6a3cb1dbb6c27e7f36
sxzz-verkit-a5b7150/ 0000775 0000000 0000000 00000000000 15253274704 0014371 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/.editorconfig 0000664 0000000 0000000 00000000116 15253274704 0017044 0 ustar 00root root 0000000 0000000 root = true
[*]
indent_size = 2
end_of_line = lf
insert_final_newline = true
sxzz-verkit-a5b7150/.gitattributes 0000664 0000000 0000000 00000000023 15253274704 0017257 0 ustar 00root root 0000000 0000000 * text=auto eol=lf
sxzz-verkit-a5b7150/.github/ 0000775 0000000 0000000 00000000000 15253274704 0015731 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/.github/FUNDING.yml 0000664 0000000 0000000 00000000015 15253274704 0017542 0 ustar 00root root 0000000 0000000 github: sxzz
sxzz-verkit-a5b7150/.github/renovate.json5 0000664 0000000 0000000 00000000103 15253274704 0020526 0 ustar 00root root 0000000 0000000 {
extends: ['github>sxzz/renovate-config'],
automerge: true,
}
sxzz-verkit-a5b7150/.github/workflows/ 0000775 0000000 0000000 00000000000 15253274704 0017766 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/.github/workflows/release-commit.yml 0000664 0000000 0000000 00000000266 15253274704 0023423 0 ustar 00root root 0000000 0000000 name: Publish Any Commit
on: [push, pull_request]
permissions: {}
jobs:
release:
uses: sxzz/workflows/.github/workflows/release-commit.yml@main
with:
compact: true
sxzz-verkit-a5b7150/.github/workflows/release.yml 0000664 0000000 0000000 00000000355 15253274704 0022134 0 ustar 00root root 0000000 0000000 name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
uses: sxzz/workflows/.github/workflows/release.yml@main
with:
publish: true
stage: true
permissions:
contents: write
id-token: write
sxzz-verkit-a5b7150/.github/workflows/unit-test.yml 0000664 0000000 0000000 00000000500 15253274704 0022440 0 ustar 00root root 0000000 0000000 name: Unit Test
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions: {}
jobs:
unit-test:
uses: sxzz/workflows/.github/workflows/unit-test.yml@main
coverage:
uses: sxzz/workflows/.github/workflows/coverage.yml@main
needs: unit-test
permissions:
id-token: write
sxzz-verkit-a5b7150/.gitignore 0000664 0000000 0000000 00000000071 15253274704 0016357 0 ustar 00root root 0000000 0000000 node_modules
dist
coverage
*.log
.DS_Store
.eslintcache
sxzz-verkit-a5b7150/.vscode/ 0000775 0000000 0000000 00000000000 15253274704 0015732 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/.vscode/settings.json 0000664 0000000 0000000 00000000042 15253274704 0020461 0 ustar 00root root 0000000 0000000 {
"editor.formatOnSave": true
}
sxzz-verkit-a5b7150/LICENSE 0000664 0000000 0000000 00000002126 15253274704 0015377 0 ustar 00root root 0000000 0000000 The MIT License (MIT)
Copyright © 2026-PRESENT Kevin Deng (https://github.com/sxzz)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
sxzz-verkit-a5b7150/README.md 0000664 0000000 0000000 00000022364 15253274704 0015657 0 ustar 00root root 0000000 0000000 # verkit
[![Open on npmx][npmx-version-src]][npmx-href]
[![npm downloads][npmx-downloads-src]][npmx-href]
[![Unit Test][unit-test-src]][unit-test-href]
[![Codecov][codecov-src]][codecov-href]
Fast, zero-dependency SemVer for ESM and TypeScript, with functional,
tree-shakeable APIs.
## Features
- ✅ Complete SemVer version and range toolkit.
- 🚀 Faster than [node-semver] across tested operations.
- 📦 Pure ESM with zero runtime dependencies.
- 💙 First-class TypeScript declarations.
- 🌳 Functional, tree-shakeable named exports.
- 🔁 Mutable `SemVer` and `SemVerRange` records.
- ⚡ 26.0% smaller for full CDN imports.
- 🪶 61.4% smaller with common bundled imports.
- 🛡️ Immutable collection operations.
## Install
```bash
npm add verkit
```
## Versions
```ts
import {
coerce,
increment,
normalize,
normalizeFull,
parse,
truncate,
} from 'verkit'
const version = parse('1.2.3-rc.1+sha.abc')
const coerced = coerce('release 42.6.7.9', { rtl: true })
version.patch = 4
normalizeFull(version) // '1.2.4-rc.1+sha.abc'
normalize(version) // '1.2.4-rc.1'
increment(version, 'minor') // '1.3.0'
truncate(version, 'patch') // '1.2.4'
coerced?.major // 6
```
Version APIs accept strings or mutable `SemVer` objects returned by `parse` or
`coerce`.
`normalizeFull` keeps build metadata; normalized, incremented, and truncated
versions omit it.
## Comparison
```ts
import { compare, compareBuild, isGreaterThan, sortReversed } from 'verkit'
compare('1.0.0+one', '1.0.0+two') // 0
compareBuild('1.0.0+one', '1.0.0+two') // -1
isGreaterThan('2.0.0', '1.0.0') // true
sortReversed(['1.0.0', '2.0.0']) // ['2.0.0', '1.0.0']
```
`compare` ignores build metadata; `compareBuild` uses it as a tie-breaker.
## Ranges
```ts
import {
findMaxSatisfying,
normalizeRange,
parseRange,
satisfies,
} from 'verkit'
const range = parseRange('^1.2.3')
normalizeRange(range) // '>=1.2.3 <2.0.0-0'
satisfies('1.5.0', range) // true
findMaxSatisfying(['1.2.3', '1.5.0', '2.0.0'], range) // '1.5.0'
```
Range APIs accept strings or mutable `SemVerRange` objects. They support
comparators, unions, hyphens, wildcards, tilde, caret, loose parsing, and
prereleases.
Range options are fixed when a `SemVerRange` is created. APIs that receive a
parsed range use its stored options and do not accept another options argument:
```ts
const prereleases = parseRange('1.x', { includePrerelease: true })
satisfies('1.0.0-rc.1', prereleases) // true
```
To use different options, pass the original range string again or create
another parsed range.
## API
See the [API reference](https://npmx.dev/package-docs/verkit).
## Invalid input behavior
`parse`, `parseComparator`, and `parseRange` throw detailed `TypeError`s. Their
`tryParse*` wrappers return `null`; other safe transforms and predicates keep
their documented `null`/`false` behavior.
## Migrating from node-semver
Only renamed or reshaped [node-semver] APIs are listed; same-named functions
such as `clean`, `coerce`, `compare`, and `satisfies` are omitted.
| node-semver | verkit |
| ---------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| `SemVer` | `parse` |
| `parse` | `tryParse` |
| `valid` | `normalize` |
| `inc`, `diff` | `increment`, `difference` |
| `major`, `minor`, `patch`, `prerelease` | `getMajor`, `getMinor`, `getPatch`, `getPrerelease` |
| `rcompare`, `compareLoose`, `cmp` | `compareReversed`, `compare` with `{ loose: true }`, `compareWithOperator` |
| `eq`, `neq`, `gt`, `gte`, `lt`, `lte` | `isEqual`, `isNotEqual`, `isGreaterThan`, `isGreaterThanOrEqual`, `isLessThan`, `isLessThanOrEqual` |
| `rsort` | `sortReversed` |
| `rcompareIdentifiers` | `compareIdentifiersReversed` |
| `Comparator` | `SemVerComparator`, `parseComparator`, `tryParseComparator` |
| Comparator formatting, test, and intersection | `normalizeComparator`, `satisfiesComparator`, `comparatorsIntersect` |
| `Range` | `parseRange` |
| `toComparators`, `validRange` | `rangeToComparators`, `normalizeRange` |
| `maxSatisfying`, `minSatisfying`, `minVersion` | `findMaxSatisfying`, `findMinSatisfying`, `findMinimumForRange` |
| `outside`, `gtr`, `ltr` | `isOutsideRange`, `isGreaterThanRange`, `isLessThanRange` |
| `intersects`, `subset` | `rangesIntersect`, `isRangeSubset` |
| `RELEASE_TYPES` | `INCREMENT_TYPES` (also includes `release`) |
`valid` returns a normalized `string | null` in node-semver, so its equivalent
is `normalize`. Use `isValid` when you only need a boolean.
Use options objects such as `{ loose: true }` and `{ identifier, identifierBase }`.
Range options belong to the string-parsing step; parsed `SemVerRange` objects
already contain them.
## Differences from node-semver
verkit follows [node-semver] semantics with four user-visible differences:
- Array helpers never mutate their inputs.
- Parsed `SemVerRange` objects retain their parse-time options. node-semver
helpers may reparse a `Range` from `raw` using call-site options.
- verkit is ESM-only, with no CommonJS, CLI, or `NODE_DEBUG=semver` output.
- Error text, stack traces, and supported runtimes may differ.
## Bundle size
Full package imports, minified with Rolldown:
| Package | Minified | gzip | Brotli |
| --------------------- | -------: | ------: | ------: |
| verkit | 18,820 B | 5,914 B | 5,375 B |
| [semver][node-semver] | 24,424 B | 7,427 B | 6,765 B |
| verkit reduction | 26.0% | 20.4% | 20.5% |
Common validation, range, comparison, increment, and coercion imports,
tree-shaken and minified with Rolldown:
| Package | Minified | gzip | Brotli |
| --------------------- | -------: | ------: | ------: |
| verkit | 9,872 B | 3,401 B | 3,121 B |
| [semver][node-semver] | 25,577 B | 7,500 B | 6,835 B |
| verkit reduction | 61.4% | 54.7% | 54.3% |
Run `pnpm test:size` to reproduce the comparison.
## Benchmarks
Measured on a MacBook Pro with an Apple M1 Max and 32 GB RAM. Higher is
better.
| Operation | verkit ops/s | semver ops/s | Faster |
| ------------------------- | -----------: | -----------: | ------------ |
| Parse and normalize | 3.67M | 3.26M | verkit 1.13× |
| Compare | 3.09M | 2.36M | verkit 1.31× |
| Compare parsed versions | 40.59M | 28.62M | verkit 1.42× |
| Increment | 3.38M | 2.03M | verkit 1.66× |
| Coerce | 2.77M | 2.32M | verkit 1.19× |
| Satisfy uncached ranges | 148.5K | 122.3K | verkit 1.21× |
| Satisfy pre-parsed inputs | 22.91M | 7.20M | verkit 3.18× |
Range benchmarks either cycle through 1,001 inputs to avoid cache hits or
parse once and reuse the resulting objects.
Run runtime benchmarks with `pnpm bench`.
## Sponsors
## License
[MIT](./LICENSE) © 2026-PRESENT [Kevin Deng](https://github.com/sxzz).
Parts of the implementation and test fixtures are derived from [node-semver]
under the ISC license; see [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md).
[npmx-version-src]: https://npmx.dev/api/registry/badge/version/verkit
[npmx-downloads-src]: https://npmx.dev/api/registry/badge/downloads-month/verkit
[npmx-href]: https://npmx.dev/verkit
[node-semver]: https://github.com/npm/node-semver
[unit-test-src]: https://github.com/sxzz/verkit/actions/workflows/unit-test.yml/badge.svg
[unit-test-href]: https://github.com/sxzz/verkit/actions/workflows/unit-test.yml
[codecov-src]: https://codecov.io/gh/sxzz/verkit/graph/badge.svg?token=hBBtxizmt9
[codecov-href]: https://codecov.io/gh/sxzz/verkit
sxzz-verkit-a5b7150/THIRD_PARTY_NOTICES.md 0000664 0000000 0000000 00000001700 15253274704 0017726 0 ustar 00root root 0000000 0000000 # Third-Party Notices
verkit includes a TypeScript reimplementation derived from node-semver. The
node-semver project is distributed under the following ISC license:
> The ISC License
>
> Copyright (c) Isaac Z. Schlueter and Contributors
>
> Permission to use, copy, modify, and/or distribute this software for any
> purpose with or without fee is hereby granted, provided that the above
> copyright notice and this permission notice appear in all copies.
>
> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
> IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
sxzz-verkit-a5b7150/benchmarks/ 0000775 0000000 0000000 00000000000 15253274704 0016506 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/benchmarks/semver.bench.ts 0000664 0000000 0000000 00000006212 15253274704 0021436 0 ustar 00root root 0000000 0000000 import {
Range as NodeSemVerRange,
coerce as semverCoerce,
compare as semverCompare,
inc as semverIncrement,
parse as semverParse,
satisfies as semverSatisfies,
valid as semverValid,
} from 'semver'
import { test } from 'vitest'
import {
coerce,
compare,
increment,
normalize,
parse,
parseRange,
satisfies,
} from '../src/index.ts'
const version = '12.34.56-beta.7+sha.abcdef'
const stableVersion = '12.34.56'
const coercionInput = 'release/12.34.56-beta.7+sha.abcdef'
const complexRange = '>=10.2.0 <11 || ^12.30.0 || 14.0.0 - 16.x'
// node-semver caches up to 1000 parsed range fragments. Cycling through more
// inputs ensures its cache cannot hide the cost of parsing string ranges.
const uncachedRanges = Array.from(
{ length: 1_001 },
(_, patch) =>
`>=10.2.${patch} <11 || ^12.30.${patch} || 14.0.${patch} - 16.x`,
)
const parsedVersion = parse(version)
const parsedStableVersion = parse(stableVersion)
const parsedComplexRange = parseRange(complexRange)
const semverParsedVersion = semverParse(version)!
const semverParsedStableVersion = semverParse(stableVersion)!
const semverParsedComplexRange = new NodeSemVerRange(complexRange)
let verkitRangeIndex = 0
let semverRangeIndex = 0
test('parse and normalize', async ({ bench }) => {
await bench.compare(
bench('verkit', () => {
normalize(version)
}),
bench('semver', () => {
semverValid(version)
}),
)
})
test('compare', async ({ bench }) => {
await bench.compare(
bench('verkit', () => {
compare(version, stableVersion)
}),
bench('semver', () => {
semverCompare(version, stableVersion)
}),
)
})
test('compare parsed versions', async ({ bench }) => {
await bench.compare(
bench('verkit', () => {
compare(parsedVersion, parsedStableVersion)
}),
bench('semver', () => {
semverCompare(semverParsedVersion, semverParsedStableVersion)
}),
)
})
test('increment', async ({ bench }) => {
await bench.compare(
bench('verkit', () => {
increment(version, 'prerelease')
}),
bench('semver', () => {
semverIncrement(version, 'prerelease')
}),
)
})
test('coerce', async ({ bench }) => {
await bench.compare(
bench('verkit', () => {
coerce(coercionInput, { includePrerelease: true })
}),
bench('semver', () => {
semverCoerce(coercionInput, { includePrerelease: true })
}),
)
})
test('satisfies uncached ranges', async ({ bench }) => {
await bench.compare(
bench('verkit', () => {
const range = uncachedRanges[verkitRangeIndex]!
verkitRangeIndex = (verkitRangeIndex + 1) % uncachedRanges.length
satisfies(stableVersion, range)
}),
bench('semver', () => {
const range = uncachedRanges[semverRangeIndex]!
semverRangeIndex = (semverRangeIndex + 1) % uncachedRanges.length
semverSatisfies(stableVersion, range)
}),
)
})
test('satisfies pre-parsed inputs', async ({ bench }) => {
await bench.compare(
bench('verkit', () => {
satisfies(parsedStableVersion, parsedComplexRange)
}),
bench('semver', () => {
semverSatisfies(semverParsedStableVersion, semverParsedComplexRange)
}),
)
})
sxzz-verkit-a5b7150/eslint.config.js 0000664 0000000 0000000 00000000202 15253274704 0017463 0 ustar 00root root 0000000 0000000 import { sxzz } from '@sxzz/eslint-config'
export default sxzz().append({
rules: {
'unicorn/no-array-sort': 'off',
},
})
sxzz-verkit-a5b7150/package.json 0000664 0000000 0000000 00000004072 15253274704 0016662 0 ustar 00root root 0000000 0000000 {
"name": "verkit",
"type": "module",
"version": "0.5.0",
"description": "Fast, zero-dependency SemVer for ESM and TypeScript, with functional, tree-shakeable APIs.",
"author": "Kevin Deng ",
"license": "MIT",
"funding": "https://github.com/sponsors/sxzz",
"homepage": "https://github.com/sxzz/verkit#readme",
"repository": {
"type": "git",
"url": "git+https://github.com/sxzz/verkit.git"
},
"bugs": {
"url": "https://github.com/sxzz/verkit/issues"
},
"keywords": [
"semver",
"semantic-versioning",
"version",
"range",
"esm",
"typescript",
"functional",
"immutable"
],
"sideEffects": false,
"exports": {
".": "./dist/index.js",
"./comparator": "./dist/comparator.js",
"./range": "./dist/range.js",
"./version": "./dist/version.js",
"./package.json": "./package.json"
},
"files": [
"dist"
],
"publishConfig": {
"access": "public"
},
"engines": {
"node": ">=18.12.0"
},
"devEngines": {
"packageManager": {
"name": "pnpm",
"version": "12.4.2",
"onFail": "download"
}
},
"scripts": {
"lint": "eslint --cache .",
"lint:fix": "pnpm run lint --fix",
"build": "tsdown",
"bench": "vitest bench --run --experimental.viteModuleRunner=false",
"dev": "tsdown --watch",
"test": "vitest",
"test:size": "vitest run tests/bundle-size.test.ts",
"typecheck": "tsc --noEmit",
"format": "prettier --cache --write .",
"release": "bumpp",
"prepublishOnly": "pnpm run build"
},
"devDependencies": {
"@sxzz/eslint-config": "^8.6.0",
"@sxzz/prettier-config": "^2.3.3",
"@types/node": "^26.6.1",
"@types/semver": "^7.8.0",
"@typescript/native-preview": "npm:typescript@7.0.2",
"@vitest/coverage-v8": "^5.0.1",
"bumpp": "^12.3.0",
"eslint": "^10.10.0",
"prettier": "^3.9.8",
"rolldown": "^1.2.9",
"semver": "^7.8.5",
"tsdown": "^0.23.0",
"tsdown-preset-sxzz": "^0.7.1",
"typescript": "~6.0.3",
"vitest": "5.0.1"
},
"prettier": "@sxzz/prettier-config"
}
sxzz-verkit-a5b7150/pnpm-lock.yaml 0000664 0000000 0000000 00000501156 15253274704 0017165 0 ustar 00root root 0000000 0000000 ---
lockfileVersion: '9.0'
importers:
.:
configDependencies: {}
packageManagerDependencies:
pnpm:
specifier: 12.4.2
version: 12.4.2
packages:
'@pnpm/exe.android-arm64@12.4.2':
resolution: {integrity: sha512-E255MbcQ0V1577M2BV0ajWuP7KmTPYA0jqZnk3rK6Lq3kTvZWulMMb7iqRmnLsQbyWTkMEB2CfyM70loVDA8xg==}
cpu: [arm64]
os: [android]
'@pnpm/exe.android-x64@12.4.2':
resolution: {integrity: sha512-J1pSeCUwuKxMG70ZzpWn8JzElxiEa8NN/3N0SlZRtU2xbztChaJCKF3HaBNIj9yPfeofWzJo/lwNvDDjraQuZw==}
cpu: [x64]
os: [android]
'@pnpm/exe.darwin-arm64@12.4.2':
resolution: {integrity: sha512-A0WDo8iErfZBXgrLseQxw8i8Y9ctUpOEl/Uu+cubnTzpD8tT9ykIB548L8YTM2WD4OS+ZOHSxy8aGZcvKq8PaQ==}
cpu: [arm64]
os: [darwin]
'@pnpm/exe.darwin-x64@12.4.2':
resolution: {integrity: sha512-MSgJdovBWHcb5DEOvfPH9yNi/T5O1Xa4ess+E1ESGo/5yuty7S4JoiIjami+fsNXfnoQMlwsMUqYU4zAvBcNCw==}
cpu: [x64]
os: [darwin]
'@pnpm/exe.freebsd-x64@12.4.2':
resolution: {integrity: sha512-h2YumlQSNvgbRPv+RXwABohX65f9bOBZn+jMIt7bFDISZPCzQ+Nvpt6Awbp4ip5PwQgYxbu5iREJ1fHE39Fm8A==}
cpu: [x64]
os: [freebsd]
'@pnpm/exe.linux-arm64-musl@12.4.2':
resolution: {integrity: sha512-LwSEtSEDTv6S51YLs3YvSkPyun/QmfMic1UGICUkPWFu6ByP43RdMlkKvmVkfGhAYCpnxO057vrmyJqtfZrPCA==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@pnpm/exe.linux-arm64@12.4.2':
resolution: {integrity: sha512-2dSiDXyhx+RTHsewxex8f/jVjqQXWJ2oow4kCVHEWdZKeBpgMxvZ6fHkTAUBJXgqhbKIDHvuNlZBP7gJfUWL5A==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@pnpm/exe.linux-ppc64@12.4.2':
resolution: {integrity: sha512-8Itc+jQk+MTz04LS9D1RcH+VctAWmzM4l1cJQ+Sx7pAJNo7EKHdRMbC0Tok1jyQ7eEHNJZD5EleYneZqWfZM+g==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@pnpm/exe.linux-riscv64@12.4.2':
resolution: {integrity: sha512-hleOeqhTVpH+z9RVMGnxvU4ZnrkBUClWjCbHD9u6kwyqhGSpevoU1wTGish+CBRhmIgMAy9pAfFpqhbAKOKNfw==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@pnpm/exe.linux-s390x@12.4.2':
resolution: {integrity: sha512-LAsQRRdP9aToENR6dtcIJ9l+e1zMYOX0tQcLGpRyLPVBQcYRLlvAPcmDshsiIHQjp05SDa9FI0czX1ZQ1a7a/A==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@pnpm/exe.linux-x64-musl@12.4.2':
resolution: {integrity: sha512-kzfzH2/0BWdTABK14Yj5a1xsdkTEQUp2eXEPNakaD9jKL025lq3hyaKHIz/gIZaPDMe/1bFFK/En4ztFlbBJxw==}
cpu: [x64]
os: [linux]
libc: [musl]
'@pnpm/exe.linux-x64@12.4.2':
resolution: {integrity: sha512-/pbt0UVTa8NMDhzOWLQRfZ6G9ROKXlJPZtx845BqyWfc7hCrWXhTLBd70yO2y8+E+IWN3oHM1s/JsIQNGk1yvg==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@pnpm/exe.win32-arm64@12.4.2':
resolution: {integrity: sha512-PsW19e4dAUNpZ0cS9flaxFuAmpt2dKlH/Vvi8TZ4qyJjjQzue/CEsWm+6wKVP4CJ7IT8RdL4qh+soOPWIgF2Zw==}
cpu: [arm64]
os: [win32]
'@pnpm/exe.win32-x64@12.4.2':
resolution: {integrity: sha512-+xGoeE0g55ztWvl8i5QqdmNfW3nIrTVcoQrNshEOwxthm9Ag48oXton3uxOA3/SANyz5AXexEjj2KO20NnOrEw==}
cpu: [x64]
os: [win32]
pnpm@12.4.2:
resolution: {integrity: sha512-CK3GYTGAJ1x8ntraOdzwjJxhrU5+rzMKTzRh8QKw+QdCNFTRF/mOctR/7wYWBwZE17/8lzpqV/UJCm18NosHyQ==}
engines: {node: '>=18.*'}
hasBin: true
snapshots:
'@pnpm/exe.android-arm64@12.4.2':
optional: true
'@pnpm/exe.android-x64@12.4.2':
optional: true
'@pnpm/exe.darwin-arm64@12.4.2':
optional: true
'@pnpm/exe.darwin-x64@12.4.2':
optional: true
'@pnpm/exe.freebsd-x64@12.4.2':
optional: true
'@pnpm/exe.linux-arm64-musl@12.4.2':
optional: true
'@pnpm/exe.linux-arm64@12.4.2':
optional: true
'@pnpm/exe.linux-ppc64@12.4.2':
optional: true
'@pnpm/exe.linux-riscv64@12.4.2':
optional: true
'@pnpm/exe.linux-s390x@12.4.2':
optional: true
'@pnpm/exe.linux-x64-musl@12.4.2':
optional: true
'@pnpm/exe.linux-x64@12.4.2':
optional: true
'@pnpm/exe.win32-arm64@12.4.2':
optional: true
'@pnpm/exe.win32-x64@12.4.2':
optional: true
pnpm@12.4.2:
optionalDependencies:
'@pnpm/exe.android-arm64': 12.4.2
'@pnpm/exe.android-x64': 12.4.2
'@pnpm/exe.darwin-arm64': 12.4.2
'@pnpm/exe.darwin-x64': 12.4.2
'@pnpm/exe.freebsd-x64': 12.4.2
'@pnpm/exe.linux-arm64': 12.4.2
'@pnpm/exe.linux-arm64-musl': 12.4.2
'@pnpm/exe.linux-ppc64': 12.4.2
'@pnpm/exe.linux-riscv64': 12.4.2
'@pnpm/exe.linux-s390x': 12.4.2
'@pnpm/exe.linux-x64': 12.4.2
'@pnpm/exe.linux-x64-musl': 12.4.2
'@pnpm/exe.win32-arm64': 12.4.2
'@pnpm/exe.win32-x64': 12.4.2
---
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
devDependencies:
'@sxzz/eslint-config':
specifier: ^8.6.0
version: 8.6.0(@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.69.0(typescript@6.0.3))(@typescript-eslint/utils@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(prettier@3.9.8)(typescript@6.0.3)
'@sxzz/prettier-config':
specifier: ^2.3.3
version: 2.3.3(prettier@3.9.8)
'@types/node':
specifier: ^26.6.1
version: 26.6.1
'@types/semver':
specifier: ^7.8.0
version: 7.8.0
'@typescript/native-preview':
specifier: npm:typescript@7.0.2
version: typescript@7.0.2
'@vitest/coverage-v8':
specifier: ^5.0.1
version: 5.0.1(vitest@5.0.1)
bumpp:
specifier: ^12.3.0
version: 12.3.0
eslint:
specifier: ^10.10.0
version: 10.10.0(jiti@2.7.0)
prettier:
specifier: ^3.9.8
version: 3.9.8
rolldown:
specifier: ^1.2.9
version: 1.2.9
semver:
specifier: ^7.8.5
version: 7.8.5
tsdown:
specifier: ^0.23.0
version: 0.23.0(@arethetypeswrong/core@0.18.5)(publint@0.3.24)(typescript@6.0.3)(typescript@7.0.2)
tsdown-preset-sxzz:
specifier: ^0.7.1
version: 0.7.1(tsdown@0.23.0(@arethetypeswrong/core@0.18.5)(publint@0.3.24)(typescript@6.0.3)(typescript@7.0.2))
typescript:
specifier: ~6.0.3
version: 6.0.3
vitest:
specifier: 5.0.1
version: 5.0.1(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(vite@8.2.2(@types/node@26.6.1)(jiti@2.7.0)(yaml@2.9.0))
packages:
'@andrewbranch/untar.js@1.0.4':
resolution: {integrity: sha512-pVXSwPsLuw8IGLo2Di0EaOfsk+ntVvpkk942J/sHYIkwvtKUakEcPh7HBgZ6tuimgzKSEHgCvO4XgQ05DEbwDw==}
'@arethetypeswrong/core@0.18.5':
resolution: {integrity: sha512-9ytjzGwxjm9Uz7I9avfbt5vlQt6uk9uRRESzJjqrznl6WKvI6dwYTo+vJ3U02Wrq/mR3iql/PzhvHhKdJIAjDQ==}
engines: {node: '>=20'}
'@babel/helper-string-parser@7.29.7':
resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.29.7':
resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.29.8':
resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/types@7.29.8':
resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@1.0.2':
resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
engines: {node: '>=18'}
'@braidai/lang@1.1.2':
resolution: {integrity: sha512-qBcknbBufNHlui137Hft8xauQMTZDKdophmLFv05r2eNmdIv/MlPuP4TdUknHG68UdWLgVZwgxVe735HzJNIwA==}
'@cacheable/memory@2.2.0':
resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==}
'@cacheable/utils@2.5.0':
resolution: {integrity: sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==}
'@emnapi/core@1.11.1':
resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
'@emnapi/runtime@1.11.1':
resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
'@emnapi/wasi-threads@1.2.2':
resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
'@es-joy/jsdoccomment@0.92.0':
resolution: {integrity: sha512-WivZqV5jPTYDQJgIMp0hTsyQESKYNY6yCJr4b0l84tYtQntkAMkc6zARh2vlRQyeg4aYHPUkCUDpvr2IWAiGpQ==}
engines: {node: ^22.22.2 || >=24.15.0}
'@es-joy/jsdoccomment@0.96.0':
resolution: {integrity: sha512-nvtxrDqAJOKMPSsMHqshCnHvnCqFnJTsKpTaTSaZoUi9VxGVe2JvgQeAY/Qvh2wyqXByIAqNTgI7h9elXzn0yQ==}
engines: {node: ^22.22.2 || >=24.15.0}
'@es-joy/resolve.exports@1.2.0':
resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
engines: {node: '>=10'}
'@eslint-community/eslint-plugin-eslint-comments@4.7.2':
resolution: {integrity: sha512-LF03qURSwEWm2dz5wtdDCzNk+7Opl0X7q6I3undsaIuNsEiNvRV3BCtqu14Q/6Pzg1tBj44LcxpW2EpSLZStZw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
'@eslint-community/eslint-utils@4.10.1':
resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.12.2':
resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/compat@2.1.1':
resolution: {integrity: sha512-rMcy8GSrwNzcISX/BlTDY/GLB4eCopEuy9woIls3To+15OLxykZrxxq+WUcylCPCQ6F4MujjBM1DX5V1aqI3Vw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: ^8.40 || 9 || 10
peerDependenciesMeta:
eslint:
optional: true
'@eslint/config-array@0.23.5':
resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/config-helpers@0.5.5':
resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/config-helpers@0.7.0':
resolution: {integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/core@1.2.1':
resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/css-tree@4.1.0':
resolution: {integrity: sha512-cg0ohyrAG3swyGqt8t1K/OK97DqBw/ftDvlvyY1fmEst5B40UOmsimwLENq74z2dyw5CDM+3zJIW+CV2nFNDdA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/js@10.0.1':
resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: ^10.0.0
peerDependenciesMeta:
eslint:
optional: true
'@eslint/markdown@8.0.3':
resolution: {integrity: sha512-rBTSSShrq7e4O+PWfeE4azH4/CWPNrC+VGxBXiW00o3vYVJnznsZiDayj3KC9JztIMVRZxZHn2nrDIUau/4j7A==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/object-schema@3.0.5':
resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@eslint/plugin-kit@0.7.3':
resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@humanfs/core@0.19.2':
resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
engines: {node: '>=18.18.0'}
'@humanfs/node@0.16.8':
resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==}
engines: {node: '>=18.18.0'}
'@humanfs/types@0.15.0':
resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==}
engines: {node: '>=18.18.0'}
'@humanwhocodes/module-importer@1.0.1':
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines: {node: '>=12.22'}
'@humanwhocodes/retry@0.4.3':
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.6.0':
resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==}
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@keyv/bigmap@1.3.1':
resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==}
engines: {node: '>= 18'}
peerDependencies:
keyv: ^5.6.0
'@keyv/serialize@1.1.1':
resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
'@loaderkit/resolve@1.0.6':
resolution: {integrity: sha512-G8FdIoF5CypfwmD9rl8BXod5HDn8JqB0CCNBXDTaRZ+yRYhARrrSToX1zg1zy9jX3zLqigsELwhT4gNtkdQAUg==}
'@napi-rs/wasm-runtime@1.2.3':
resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==}
engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0}
peerDependencies:
'@emnapi/core': ^1.7.1 || ^2.0.0-alpha.4
'@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.4
'@ota-meshi/ast-token-store@0.3.0':
resolution: {integrity: sha512-XRO0zi2NIUKq2lUk3T1ecFSld1fMWRKE6naRFGkgkdeosx7IslyUKNv5Dcb5PJTja9tHJoFu0v/7yEpAkrkrTg==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
'@oxc-parser/binding-android-arm-eabi@0.139.0':
resolution: {integrity: sha512-22EsXTA3Vc7OvrF4bfT48PFln2UbxkVgrp/Tm32qLw76Dv7SmcInfClJe6yPYamnli6HiqasnESZ5ezN+X4ybg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
'@oxc-parser/binding-android-arm64@0.139.0':
resolution: {integrity: sha512-uASQkZV+CUQ6xXvoMzDQyfhd8OMusdv2FyCPfAi5ZDYptesapJlw7erhpGi1Lc+U8QjQV2JUrIh7d/3su2LzmQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
'@oxc-parser/binding-darwin-arm64@0.139.0':
resolution: {integrity: sha512-vuQOv2WF5pZCkdSPEExul98o853M3MCR24DpWsGrUoPJu5KcnGE34kLXY2yFwBwZwT+eN1x40Tt4q6ZzlEdNUA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
'@oxc-parser/binding-darwin-x64@0.139.0':
resolution: {integrity: sha512-zxZB8ChS+7XactZhcyxQ292P/DNiiBaPPKYiVUlb3RC0V/hme5bokNubjcmEmbW9uTfmqLTpveAdkbe66H3pGg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
'@oxc-parser/binding-freebsd-x64@0.139.0':
resolution: {integrity: sha512-iw2MsoCPBQwdJqywRAGsF1jEAcGoZ+DeG2LVzt5pdUvRHqajsMF46BH0rHiWoWtMwcMSia+oQYga7fHo7u7Bcw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
'@oxc-parser/binding-linux-arm-gnueabihf@0.139.0':
resolution: {integrity: sha512-SwjD/k3Y5bwGJWOH313VyaDrAuaYg1Pe+4AAXCgUKvSO5IHkj+mZ0oFcOWmB5nTuOM3uwdT+leL8h4OnFlI5hw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
'@oxc-parser/binding-linux-arm-musleabihf@0.139.0':
resolution: {integrity: sha512-qbeygDkcvailKFhphb2YGMMXsaZIynHlPtoOrcx4NZB/tRbUKraCCMbw8dPeFtEKasfS2qWh1VnReY+Lcys1zA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
'@oxc-parser/binding-linux-arm64-gnu@0.139.0':
resolution: {integrity: sha512-SrlL02KeImKlvx/9rCeopOLH7qKI3rqKKEguK6KBwVwEGLhV/A47dW4DNigf6/LFhrwoovaiayEQryjYAI86dQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@oxc-parser/binding-linux-arm64-musl@0.139.0':
resolution: {integrity: sha512-u9e884ChAVRmIZ1jr/m46S96FoDQnruFjISLi4Y0i6Wu/JUUmIiw7+umLyXILJsPfUuqnN5BJLe23t07+Y6+IA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@oxc-parser/binding-linux-ppc64-gnu@0.139.0':
resolution: {integrity: sha512-Z9tU2b3GJfAXOdirQmz4gZQkQkVjy53i77gf91l0733MQKa/qtk73KQQE2GzDtMqim+HyjpzvemmqzBtH2IJUA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@oxc-parser/binding-linux-riscv64-gnu@0.139.0':
resolution: {integrity: sha512-RyUbr7hzPK84YDWKs77PRYk9VBwWbsbuYsQzQWiSmLnARXTg2zntLPGfCH/1wpfUYdmGkp/6SsqTXSsYdw9Jgw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@oxc-parser/binding-linux-riscv64-musl@0.139.0':
resolution: {integrity: sha512-dcQhjtcDvtR8BgkUpt03Yz5SzxdzYvTigenIJOEsiSX6G2t6yybEMxGWjp0dOuYGror0BaqcZfTyXR58amCEig==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
'@oxc-parser/binding-linux-s390x-gnu@0.139.0':
resolution: {integrity: sha512-iuGrxysV4rGUymdKpn7bgZQ6Vix8Bi/6D/rp71HYIzphq6NKrsBhsGOYsSZte+uBFL43tXh7Xr7TM72sGliJNA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@oxc-parser/binding-linux-x64-gnu@0.139.0':
resolution: {integrity: sha512-NxJdZZyaa2JLLvNfH/iJQXfCNfKcPMylwY4ObMpBVmW4Nq+RyUpVVQXrMMelcQ6rwx3nuhF1Iga8n+eoAKGCIA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@oxc-parser/binding-linux-x64-musl@0.139.0':
resolution: {integrity: sha512-ePxBvvtzISmSsJ0RIj8FNikSCn58i1jtccj7XR4U9Li4iSzhkFyYlnJ51cQTUwkairz8WMTD4SpKoot8RyTnQA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@oxc-parser/binding-openharmony-arm64@0.139.0':
resolution: {integrity: sha512-b/c2+mPXMOxG5x16n8yf9cjor/ntQQScmYnSmLEWIWJ4rfXd5dokMxx0kliSLA+YAGq6DD3K9BWi+aFXHiiV1w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
'@oxc-parser/binding-wasm32-wasi@0.139.0':
resolution: {integrity: sha512-rNU0pO+/CVPC2qZ+xtX5R2cOje9Q75q3UkfgwUCPlplqxMv6Iffd5tMPGVMCLGnPINxPlmi0WPsW94HltbYvfQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [wasm32]
'@oxc-parser/binding-win32-arm64-msvc@0.139.0':
resolution: {integrity: sha512-JPEmfncZfqAFiGsAN6UZSMIBqnG8wn8buywRacFOWjP+9dZwcs03SsBp4tmyjM/4l/VoH/IuThrW1Jof3OyQUw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
'@oxc-parser/binding-win32-ia32-msvc@0.139.0':
resolution: {integrity: sha512-c06dWBwEnFHof5JN7T9/ts23uATXS9czPEBO60d4xnjH2Am29Bo7OGKdVHRmcWQnw0OBxlTg9fIEXAvtcwOBfw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
'@oxc-parser/binding-win32-x64-msvc@0.139.0':
resolution: {integrity: sha512-bI3/44urQjW/D495JPXe+c9d+4Q+ONi3DvDNnzwRZYTWHZ3hAlFdmirYK4mzhTfCZiAly02EbMYir7QGU+9O2Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
'@oxc-project/types@0.139.0':
resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==}
'@oxc-project/types@0.148.0':
resolution: {integrity: sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==}
'@oxc-project/types@0.150.0':
resolution: {integrity: sha512-rDS5/31E9HfPl/CIzGrn0DOlvBbXFseQ5URJ9sYMfstbKLD/c6Gm9vmRzRGDdAXyOIL4zmO37lc9RIwYqVruZw==}
'@pkgr/core@0.3.6':
resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==}
engines: {node: ^14.18.0 || >=16.0.0}
'@prettier/plugin-oxc@0.2.3':
resolution: {integrity: sha512-6TYRFBxthmW0IULsZjik2Gu62jc17xPILlcSIXTXfrhDH4etIcissalZ+RO5oweMWidM3jJ38QJbkD2C6J0/LA==}
engines: {node: '>=14'}
'@publint/pack@0.1.7':
resolution: {integrity: sha512-4EDEmvxWtgsCnnVeBvtFIFZtUhPPt1+bA9JrSwU4Sa//6oKtzCSlGGXYJr44OD9aGISymbieJ4mCKHUygUDU+g==}
engines: {node: '>=18'}
'@quansync/fs@1.0.0':
resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
'@rolldown/binding-android-arm-eabi@1.2.7':
resolution: {integrity: sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
'@rolldown/binding-android-arm-eabi@1.2.9':
resolution: {integrity: sha512-tNISae1QEf/vkb3xkRcjV5SEdzPE97We5IVaa2Z8jSszQPZ8U60B/YCYpw4QI7VidYsBtKavczXf+DyDs9WGxw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
'@rolldown/binding-android-arm64@1.2.7':
resolution: {integrity: sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
'@rolldown/binding-android-arm64@1.2.9':
resolution: {integrity: sha512-YC8YsI30o606GTZi0VyzYlsDKFP8W61i/QzayHDkLbNEz/IShqAmTa+hsJRj13xTHA0H+6fk4b2UmGn+Q/cMlg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
'@rolldown/binding-darwin-arm64@1.2.7':
resolution: {integrity: sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
'@rolldown/binding-darwin-arm64@1.2.9':
resolution: {integrity: sha512-IwhlH3qK5urrY8hZiEgGkHKEFN901p/p2bjxCxJlr4GyNnF7wYpUvK+Y43uaRYuC4hpfjzbR3SJC3arX1jGvmw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
'@rolldown/binding-darwin-x64@1.2.7':
resolution: {integrity: sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
'@rolldown/binding-darwin-x64@1.2.9':
resolution: {integrity: sha512-XxpJfVzFh+jilRxIXUqcfYAYcunIc/XEzIizsOL1fcJee5Sf7H3mH8WlLmfHfluz5amqR88QQo9izKtmMlavAw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
'@rolldown/binding-freebsd-x64@1.2.7':
resolution: {integrity: sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
'@rolldown/binding-freebsd-x64@1.2.9':
resolution: {integrity: sha512-kSfvhmgeWyfkbT3p/1s5vSgboogoah2zkm9fX2zjg2hHxSV7T4KhMWRUUaRk4OXNqoD3QAUeRqLcs1aZOK4U1g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
'@rolldown/binding-linux-arm-gnueabihf@1.2.7':
resolution: {integrity: sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
'@rolldown/binding-linux-arm-gnueabihf@1.2.9':
resolution: {integrity: sha512-1RVzG17pxqbTfYLC352JlLt6kKLG+6Hr30n8DlIJqsnV5luUDd2Qdx9Ayw1Cabfyb1K9k0jXEZ7evxkRoT+uiw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
'@rolldown/binding-linux-arm64-gnu@1.2.7':
resolution: {integrity: sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-arm64-gnu@1.2.9':
resolution: {integrity: sha512-BXqPvZ2drqVD+/Z8UpKwcs4Mp7grM+eGFku4CAEKrEtcbAsUpzREphK1sogCRZGreVPiMkiiBtw0n3TPteuqvw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-arm64-musl@1.2.7':
resolution: {integrity: sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rolldown/binding-linux-arm64-musl@1.2.9':
resolution: {integrity: sha512-11vWvo8YDwLzukt27J3aYDWU+gg2P7J+ZOmiJ0hkF5BXZDW7pVya7r40MXDy6ya0i9KamoENSVKIugvJNgFXIA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rolldown/binding-linux-ppc64-gnu@1.2.7':
resolution: {integrity: sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-ppc64-gnu@1.2.9':
resolution: {integrity: sha512-a1tijMkdwsIARtc0F39ApURROkf3NwqinI6TOiSSWCTR7dT96dffNvMUtDHnq64wKNTIZOIlzKrFvvFUznJiyw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-s390x-gnu@1.2.7':
resolution: {integrity: sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-s390x-gnu@1.2.9':
resolution: {integrity: sha512-x6SQNdAvv4c3hWqTMaWuawzMX9myaCs/yEmlGsxJzkdClnHW7FbrjQuSiRDhuSYzEYoEMhsaJy9qHG/XNemJPQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-x64-gnu@1.2.7':
resolution: {integrity: sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-x64-gnu@1.2.9':
resolution: {integrity: sha512-9s0AZ8BFK5/n7B/TBoa2yJE3gI3KURrbXcPBlsAsvjU4VeJKgE90y1YtNxyEUIcHPQkg6/yfF3qihUrcM/Kf0Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rolldown/binding-linux-x64-musl@1.2.7':
resolution: {integrity: sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@rolldown/binding-linux-x64-musl@1.2.9':
resolution: {integrity: sha512-P7VWAmV+WdJluH7ovnRGoiv2i8To7GAZ+kGzfGup635cyL7SyYl3lSUaA3Gp5THf0n/Co5EyEqb2zbqq+nMOHQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
'@rolldown/binding-openharmony-arm64@1.2.7':
resolution: {integrity: sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
'@rolldown/binding-openharmony-arm64@1.2.9':
resolution: {integrity: sha512-1qixtsE4BK8h+yS3BfmZ09UhA7O/N4IACva6YBr7EBvCJraByTuRcgOTaiA62Tm0vey3UcKXLOaoGHtYmNGEVg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
'@rolldown/binding-win32-arm64-msvc@1.2.7':
resolution: {integrity: sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
'@rolldown/binding-win32-arm64-msvc@1.2.9':
resolution: {integrity: sha512-ok8IQjcEPs1AKZfuEUznVBrJw+gK4soq+bx8b1X2XoMqVClarc1q5JDmVtWXY1xfr6ZuHTAsPXHTgTrqKTZeww==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
'@rolldown/binding-win32-x64-msvc@1.2.7':
resolution: {integrity: sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
'@rolldown/binding-win32-x64-msvc@1.2.9':
resolution: {integrity: sha512-Ip2mXoU0hM0boq3Rf+ekuT653OROSo6aSYcPT1VHE4q52KvyxgFkQgrgb/IEsxOuvQ2fZZbs8khJAyCEPM24/g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
'@rolldown/pluginutils@1.0.1':
resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
'@sindresorhus/base62@1.0.0':
resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==}
engines: {node: '>=18'}
'@sxzz/eslint-config@8.6.0':
resolution: {integrity: sha512-thRzAvQw2IaZf0iuGJJUX98cyPtQ5MXGG+Jc7XJM+770jSV2DML0YxvDuPUBizrl8i9mN2AjjXJsUtLY4eIE2w==}
engines: {node: ^22.23.0 || ^24.15.0 || >=26.0.0}
peerDependencies:
'@unocss/eslint-plugin': '>=65.0.0'
eslint: ^9.5.0 || ^10.0.0
eslint-plugin-astro: ^1.5.0 || ^2.0.0 || ^3.0.0
peerDependenciesMeta:
'@unocss/eslint-plugin':
optional: true
eslint-plugin-astro:
optional: true
'@sxzz/prettier-config@2.3.3':
resolution: {integrity: sha512-MFy6ysBnGzOZRcLffCyab6ZCh8WQi5WslCf5V9s0sWtahW5lSMASrIY2Hm5gmUhAgjRnILAUxRzAZo0Cm1Y3gw==}
peerDependencies:
prettier: ^3.8.0
prettier-plugin-astro: ^0.14.1
peerDependenciesMeta:
prettier-plugin-astro:
optional: true
'@tybys/wasm-util@0.10.3':
resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==}
'@types/chai@5.2.3':
resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
'@types/debug@4.1.13':
resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
'@types/esrecurse@4.3.1':
resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
'@types/estree@1.0.9':
resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
'@types/hast@3.0.5':
resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/katex@0.16.8':
resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==}
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
'@types/node@26.6.1':
resolution: {integrity: sha512-VqGJBMCtdhqkBUCcBLvywI0NJ+KLuVzgNnlBUNFOQjqVxzo2lxLUNg1DSey8+u2u6ktswSAxg+s68QLzWHNOuA==}
'@types/semver@7.8.0':
resolution: {integrity: sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
'@typescript-eslint/eslint-plugin@8.69.0':
resolution: {integrity: sha512-t5jQTKPIgVW1PE6dR6H6Qz5gm8zjMlX5/2gRaOGd9eO6V7J+tQc6iWKukEe7dY8u9HyYasQ0yfF0/FSSTEO2gA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.69.0
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/parser@8.69.0':
resolution: {integrity: sha512-l4b0DhWioGg6Gt2ebGlvfkFMOjRsauxtsnDRwUSRX1qHq3HdTfQHV8wW9zEXeciai6HfeaKOedQn2Zoofx3WBw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/project-service@8.69.0':
resolution: {integrity: sha512-yi4obFrHMmnsesWehHbkg9zMA7Jt8cXT+mKM08G999pH1yT6nqgsHx7MYm0uY1wAj8CqiBXYRJ7WAT0QdQHQXg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/scope-manager@8.69.0':
resolution: {integrity: sha512-ewfspqWvSxKSOaplqAUNbaSFO0eB6w1EtQ+esfYFRm3614Ty4uNtExkcbgd6nWsXphbqKyf9ZYdbZdv2xEoWEQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.69.0':
resolution: {integrity: sha512-xNqK7YTDZsLniQMV/4rpFR8Z5JlqeRvVjuG1YgF/mdPVH84HSD19L8CczMA0qg2RfwEV231GHH3VnToJDo4MfQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/type-utils@8.69.0':
resolution: {integrity: sha512-ZfoJAVg3JZndQEpEl9petVlxau3lRuElc4HRMuAlLCf8to04/iHz692RUSNmXKDjEuJmIL+KZ2/BsOcBc16dsA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/types@8.69.0':
resolution: {integrity: sha512-K3VrubUPhlo9VDBS6QdI8YB5j7ClpqLRdefcz6PFrhnwicehBweqQ9Evhl4l+FYz0HdDmMqIiSX0aldGRYtDCA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.69.0':
resolution: {integrity: sha512-AdFkgqck3Vudb/kWnxlyafU/4aBhHrbQ9locP2N4psXTy5mOBg0SHJumnLvx7r6g1gV4DKvUFwV2nJZBoqOD8w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/utils@8.69.0':
resolution: {integrity: sha512-tUbx60BBqQa31kXF5MCsOOLL5E/WzUuxIn7YpAvq+eaUlqvk8/NXnXMBNAdLCr0icjkzem7iUA5QqWHe/hJ1aw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
'@typescript-eslint/visitor-keys@8.69.0':
resolution: {integrity: sha512-+rmdgPA+EXkNgKYvHvFfhrs35utXbwaC5PGpDquSXcoXQDKUA5UjV0LmTucG/4JXkM31BTu4TilHtrN8IVBe8w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript/typescript-aix-ppc64@7.0.2':
resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==}
engines: {node: '>=16.20.0'}
cpu: [ppc64]
os: [aix]
'@typescript/typescript-darwin-arm64@7.0.2':
resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [darwin]
'@typescript/typescript-darwin-x64@7.0.2':
resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [darwin]
'@typescript/typescript-freebsd-arm64@7.0.2':
resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [freebsd]
'@typescript/typescript-freebsd-x64@7.0.2':
resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [freebsd]
'@typescript/typescript-linux-arm64@7.0.2':
resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [linux]
'@typescript/typescript-linux-arm@7.0.2':
resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==}
engines: {node: '>=16.20.0'}
cpu: [arm]
os: [linux]
'@typescript/typescript-linux-loong64@7.0.2':
resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==}
engines: {node: '>=16.20.0'}
cpu: [loong64]
os: [linux]
'@typescript/typescript-linux-mips64el@7.0.2':
resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==}
engines: {node: '>=16.20.0'}
cpu: [mips64el]
os: [linux]
'@typescript/typescript-linux-ppc64@7.0.2':
resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==}
engines: {node: '>=16.20.0'}
cpu: [ppc64]
os: [linux]
'@typescript/typescript-linux-riscv64@7.0.2':
resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==}
engines: {node: '>=16.20.0'}
cpu: [riscv64]
os: [linux]
'@typescript/typescript-linux-s390x@7.0.2':
resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==}
engines: {node: '>=16.20.0'}
cpu: [s390x]
os: [linux]
'@typescript/typescript-linux-x64@7.0.2':
resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [linux]
'@typescript/typescript-netbsd-arm64@7.0.2':
resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [netbsd]
'@typescript/typescript-netbsd-x64@7.0.2':
resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [netbsd]
'@typescript/typescript-openbsd-arm64@7.0.2':
resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [openbsd]
'@typescript/typescript-openbsd-x64@7.0.2':
resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [openbsd]
'@typescript/typescript-sunos-x64@7.0.2':
resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [sunos]
'@typescript/typescript-win32-arm64@7.0.2':
resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==}
engines: {node: '>=16.20.0'}
cpu: [arm64]
os: [win32]
'@typescript/typescript-win32-x64@7.0.2':
resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==}
engines: {node: '>=16.20.0'}
cpu: [x64]
os: [win32]
'@vitest/coverage-v8@5.0.1':
resolution: {integrity: sha512-FRC8ACiudC3dI6MTplzRSYWHDRnIv2IPfbzs4FdoJNsMal/35sWV8hwIfV8ZcqzSPy+uXHeMVONt9CEqtOU17w==}
peerDependencies:
'@vitest/browser': 5.0.1
vitest: 5.0.1
peerDependenciesMeta:
'@vitest/browser':
optional: true
'@vitest/istanbul-lib-coverage@1.0.1':
resolution: {integrity: sha512-k3DJZ8LhMBK9NS4SclF1ASD3OgXEWDorbIcPTRDK0/Zae6fRvu+fJRxtFdLfHsa9Y24beCdPnoNZ4LviTNstfA==}
engines: {node: '>=22'}
'@vitest/istanbul-lib-report@1.0.1':
resolution: {integrity: sha512-1EOLRfsTMnyAr3+kEAsP4o9dhaDlGPpD7H5iLBBeq//YpNB1VIahkPhB+eRp9N2Dkfw8oySROjE3yf9XDeaIkQ==}
engines: {node: '>=22'}
'@vitest/mocker@5.0.1':
resolution: {integrity: sha512-6K1DoBNAPGvuOcSsGA4D6x+5zEEff/KmOOP3uetT2TrGpVfI+HRHRnJJfKi5ib/g1vx8IYHQD8s0pbJz8WQI7Q==}
peerDependencies:
msw: ^2.4.9
vite: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
msw:
optional: true
vite:
optional: true
'@vitest/spy@5.0.1':
resolution: {integrity: sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==}
'@yuku-codegen/binding-android-arm64@0.9.3':
resolution: {integrity: sha512-viote6xAyL5cKLquV2X2wRfopSckH+msDYbaI8Hh8JAaogYs8MJZVRUbSrbsY29TaPrIFZwNRwQ8+YSxs0dkGw==}
cpu: [arm64]
os: [android]
'@yuku-codegen/binding-darwin-arm64@0.9.3':
resolution: {integrity: sha512-y2PGOLyxc724EJ+Et/5PxGfutQuV1Z2J9cxHo6W1I5CR3nk0i03J4yPrnw6rNJOfrtlISzcc7q0RrSyfPndpIg==}
cpu: [arm64]
os: [darwin]
'@yuku-codegen/binding-darwin-x64@0.9.3':
resolution: {integrity: sha512-xZ9UpXUOLmsrKVUp7MRXxWU3drNiilRC42OLpjWEhnOehIGVF1bZgzHcqRYJxVyU53RMrkRMsaxplkGd6Qo/ow==}
cpu: [x64]
os: [darwin]
'@yuku-codegen/binding-freebsd-x64@0.9.3':
resolution: {integrity: sha512-RGCYSZw3VonreVTpur9iOfnbMngR2/f7UOE7gwcDx5WoHjIhtmTK9EIq9qs78ARdMFAPzKp5OzHljl5QMaGJ7g==}
cpu: [x64]
os: [freebsd]
'@yuku-codegen/binding-linux-arm-gnu@0.9.3':
resolution: {integrity: sha512-kjIJIw39GSPTF0hnq+jnM0tR+J5WlariAAWetxMtawNskITDT1ZigaK3YF5hMhDz2mAofaM1t+63qtx+7aXjeg==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@yuku-codegen/binding-linux-arm-musl@0.9.3':
resolution: {integrity: sha512-TVHeVdzaS4ub86URrQufiy4t01ZtdyKDZ5sTPqWFKAUbQJ7rQ0o5vIT+/jCeHQbP+Yf9p5peRdmPbcZewoDNiA==}
cpu: [arm]
os: [linux]
libc: [musl]
'@yuku-codegen/binding-linux-arm64-gnu@0.9.3':
resolution: {integrity: sha512-9aQeeLh1qaCa2GcyzHnwLKGfFrsI+KOyhnh4+fICSq5kyhzCWQfXVCCK4RTEZPLcyuVwfN5Id0JEYavRN4oNTQ==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@yuku-codegen/binding-linux-arm64-musl@0.9.3':
resolution: {integrity: sha512-TLXA5Hd1nr8VSP2MtxcFddsBIHj+DPpyG5eberEGMATndgG7STlKQmle51MV0MZ8UgsdYM6CybIVpzlCPQwP9w==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@yuku-codegen/binding-linux-x64-gnu@0.9.3':
resolution: {integrity: sha512-tk0BFbF3Clb9k9biPH3qmr+Qwk24rRM26+HY91hYXmZlzlepZG0scQ6OffZFWtzwKE5JjlZpMdcWj1lTiHbEjA==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@yuku-codegen/binding-linux-x64-musl@0.9.3':
resolution: {integrity: sha512-xo+pXshsCXruEEkDMbwHqkeTyC4XHb6A6oXr6x2YK3jOMcS5kZz0e26BmTCr40J0nY/K3ysmwG9R1xHygtiuwQ==}
cpu: [x64]
os: [linux]
libc: [musl]
'@yuku-codegen/binding-win32-arm64@0.9.3':
resolution: {integrity: sha512-70gAQo6HZzMgIJTjeMZOEO2XaRj4GcNGP/n81R9tXQv0x8d4ZHnZDv+ygeWfHo+xchAUPwpnrVZA4p6RhJa3GQ==}
cpu: [arm64]
os: [win32]
'@yuku-codegen/binding-win32-x64@0.9.3':
resolution: {integrity: sha512-7Hz3NGlq6qBBR8zMEk6GMZivofNjnYZpMXSoUwUgz9Ur2LaivuP23HQh0ern+T6HVkTJEvilw4VJrg1rX1Ugcg==}
cpu: [x64]
os: [win32]
'@yuku-parser/binding-android-arm64@0.9.3':
resolution: {integrity: sha512-z3tDGTaUXD5Q4IuebFOY/QHxhR/SqujMhkMv9C5bh25upyFEXdafp0MsXQIIheWhVZzn5VMOniyxFni/7s9LgQ==}
cpu: [arm64]
os: [android]
'@yuku-parser/binding-darwin-arm64@0.9.3':
resolution: {integrity: sha512-hzKvKSKS7z3ufnu1VkQYEoxmS6A5uNnkwukKnc2atxpWdq648nLVOqut4h1jUXjbM2WcoTfuZLF6AHAGFf8cmg==}
cpu: [arm64]
os: [darwin]
'@yuku-parser/binding-darwin-x64@0.9.3':
resolution: {integrity: sha512-OM2PiVlPATvzlj/KGHNlu+t8FC3YzM5joVNjhsz/EaigQ8x2UUQ1Q0agQLiv5GZ2L8TSzrLUwBCZ7YOvP8q+tw==}
cpu: [x64]
os: [darwin]
'@yuku-parser/binding-freebsd-x64@0.9.3':
resolution: {integrity: sha512-WMn9M4LHNVysGNwsAJ9gpRPqQIW2lcPrDNGcyk0agx3IYqCJq1MQugh6Be8Otc5U08eGdE39o8Kx9YWJmXz7GA==}
cpu: [x64]
os: [freebsd]
'@yuku-parser/binding-linux-arm-gnu@0.9.3':
resolution: {integrity: sha512-vqKjwiyW1FWvbykYMEQIcAJwA17WxK3rxxqDuyCvQwcNVaLEUxI4BXiUdlF3kHucc7MnoFQhoRPkySgOzlLM+Q==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@yuku-parser/binding-linux-arm-musl@0.9.3':
resolution: {integrity: sha512-qohilhYOT+zkt2gYzym4F1T6BzRdvPqS9/sFB03pmnVV8LrvjOXVsGwEBAa3CEvzJKhAZjdTmVz7zsVdjyHWLg==}
cpu: [arm]
os: [linux]
libc: [musl]
'@yuku-parser/binding-linux-arm64-gnu@0.9.3':
resolution: {integrity: sha512-tvTIyUvTGkeee68i4JIo9o27As+Ug6LXOZvElGgFbTs6+KBdb5LGhvugaIQljdfIsm2XnIbOLG6OnQSXHMLB9w==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@yuku-parser/binding-linux-arm64-musl@0.9.3':
resolution: {integrity: sha512-OWZBHW1wuChBpFlrF+On1yiBcFPMRrj2g0VKsM/PCBGffu1OM0ORkS+vLS3Snu6wYwndM5Dd9Ctvux6eUlrQjA==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@yuku-parser/binding-linux-x64-gnu@0.9.3':
resolution: {integrity: sha512-/tbk1h0dlADOCngbiQO9V3SHwBIJkoGBq8BDEraSw2CC3nGxPEPTCCYUDp5738Ij2FxVwy1FWVuhFkHvpMrPbQ==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@yuku-parser/binding-linux-x64-musl@0.9.3':
resolution: {integrity: sha512-u3+0sCso/mcjDvtc3866D2giV7l34PDyDVBkMesAWa3DWbIWPlybehi2SSnmScgArV22ctqSSgUzdBBVJ6zYAg==}
cpu: [x64]
os: [linux]
libc: [musl]
'@yuku-parser/binding-win32-arm64@0.9.3':
resolution: {integrity: sha512-xnGEvdhyjRkXozHtpXVpEEkyGZWAxJ3RoILv7XRV5SvTEztaTCk5GQyfcOzI9An/EJtcL4ERCI8QmS0TpDPJiA==}
cpu: [arm64]
os: [win32]
'@yuku-parser/binding-win32-x64@0.9.3':
resolution: {integrity: sha512-N5eShGcuwnrXEprePFmEjtng6acZmtnC4zgazK9xxkavcx1q1uX8Nz8lU5RS973EMlNr902cIc6Cd2D4tqZDBg==}
cpu: [x64]
os: [win32]
'@yuku-toolchain/types@0.9.3':
resolution: {integrity: sha512-rFE+5P4g2wxko5C85MugJOlVjBHEQq87dIkhLkniLXLp63PEtgaFjD954i5HXlfnyzLxPcZHsSOVDVgmo1HToA==}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.18.0:
resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==}
engines: {node: '>=0.4.0'}
hasBin: true
ajv@6.15.0:
resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
are-docs-informative@0.1.1:
resolution: {integrity: sha512-sqRsNQBwbKLRX0jV5Cu5uzmtflf892n4Vukz7T659ebL4pz3mpOqCMU7lxMoBTFwnp10E3YB5ZcyHM41W5bcDA==}
engines: {node: '>=18'}
args-tokenizer@0.3.0:
resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==}
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
ast-v8-to-istanbul@1.0.5:
resolution: {integrity: sha512-UPAgKJFSEGMWSDr3LX4tqnAb4f7KGT8O40Tyx8wbYmmZ/yn58lNCm8h3svs3eXgiGd5AXxz8NDOvXWvicq+rJA==}
balanced-match@4.0.4:
resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines: {node: 18 || 20 || >=22}
baseline-browser-mapping@2.11.21:
resolution: {integrity: sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==}
engines: {node: '>=6.0.0'}
hasBin: true
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
brace-expansion@5.0.9:
resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==}
engines: {node: 20 || >=22}
browserslist@4.28.8:
resolution: {integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
builtin-modules@5.3.0:
resolution: {integrity: sha512-hMQUl2bUFG339QygPM97E+mc8OY1IAchORZxm4a/frcYwKzozMzRVDBwHW0NjOqGElLm2O37AVQE8ikxlZHrMQ==}
engines: {node: '>=18.20'}
bumpp@12.3.0:
resolution: {integrity: sha512-YgW09sgbIGQmAD/Jk7FEGP0tm0PeDz+Zgk+IAk+MOHhb/98pj/l3CgkxSjd7C1O99JPxTNwS+bPOTNaHuNh6lQ==}
engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
hasBin: true
cac@7.0.0:
resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
engines: {node: '>=20.19.0'}
cacheable@2.5.0:
resolution: {integrity: sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==}
caniuse-lite@1.0.30001810:
resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
chai@6.2.2:
resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
engines: {node: '>=18'}
change-case@5.4.4:
resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
character-entities@2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
ci-info@4.4.0:
resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==}
engines: {node: '>=8'}
cjs-module-lexer@1.4.3:
resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==}
commander@8.3.0:
resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
engines: {node: '>= 12'}
comment-parser@1.4.7:
resolution: {integrity: sha512-0h+uSNtQGW3D98eQt3jJ8L06Fves8hncB4V/PKdw/Qb8Hnk19VaKuTr55UNRYiSoVa7WwrFls+rh3ux9agmkeQ==}
engines: {node: '>= 12.0.0'}
comment-parser@1.4.8:
resolution: {integrity: sha512-rKZTGo4fzKYna8UcL0isTg5wkBNla7bxTypLwZQXjIdi++IdP1OJ41rI5Mti3/jltkPujbu4i9LIARYA+zpotQ==}
engines: {node: '>= 12.0.0'}
convert-hrtime@5.0.0:
resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==}
engines: {node: '>=12'}
core-js-compat@3.50.0:
resolution: {integrity: sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==}
engines: {node: '>=6.4.0'}
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
decode-named-character-reference@1.3.0:
resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==}
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
defu@6.1.7:
resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==}
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
detect-indent@7.0.2:
resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==}
engines: {node: '>=12.20'}
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
diff-sequences@29.6.3:
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dts-resolver@3.0.0:
resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==}
engines: {node: ^22.18.0 || >=24.0.0}
peerDependencies:
oxc-resolver: '>=11.0.0'
peerDependenciesMeta:
oxc-resolver:
optional: true
electron-to-chromium@1.5.421:
resolution: {integrity: sha512-cUhfpHQy+PGbt+X90DMcAVazDCziIZr73hpxD4LRs4BGQoJCifPzTfQWa7S6c+uhokTOBe8tot09GBSEO6c9LA==}
empathic@2.0.1:
resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==}
engines: {node: '>=14'}
enhanced-resolve@5.24.5:
resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==}
engines: {node: '>=10.13.0'}
entities@8.0.0:
resolution: {integrity: sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==}
engines: {node: '>=20.19.0'}
es-module-lexer@2.3.2:
resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==}
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
escape-string-regexp@5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
eslint-compat-utils@0.5.1:
resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
engines: {node: '>=12'}
peerDependencies:
eslint: '>=6.0.0'
eslint-config-flat-gitignore@2.4.0:
resolution: {integrity: sha512-JhYC+V7qEDiCDsbJcVP8fxNc62fk4+i91YLP/YvmVHlkaQ8Xo99olYN8MO5COdxl7onGlsrfZVONe5NYsZP1UA==}
peerDependencies:
eslint: ^9.5.0 || ^10.0.0
eslint-config-prettier@10.1.8:
resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
eslint-flat-config-utils@3.2.0:
resolution: {integrity: sha512-PHgo1X5uqIorJONLVD9BIaOSdoYFD3z/AeJljdqDPlWVRpeCYkDbK9k0AXoYVqqNJr6FEYIEr5Rm2TSktLQcHw==}
eslint-json-compat-utils@0.2.3:
resolution: {integrity: sha512-RbBmDFyu7FqnjE8F0ZxPNzx5UaptdeS9Uu50r7A+D7s/+FCX+ybiyViYEgFUaFIFqSWJgZRTpL5d8Kanxxl2lQ==}
engines: {node: '>=12'}
peerDependencies:
'@eslint/json': '*'
eslint: '*'
jsonc-eslint-parser: ^2.4.0 || ^3.0.0
peerDependenciesMeta:
'@eslint/json':
optional: true
eslint-plugin-antfu@3.2.3:
resolution: {integrity: sha512-U2fnz/H0gFPxpuC7QpaHa0Jv2AgCZ5hunp36SOP/yWo8yFzgvMh8X4pZ4uN4IKoqtBhk7G3HuVa93Urf51+sZg==}
peerDependencies:
eslint: '*'
eslint-plugin-baseline-js@0.7.1:
resolution: {integrity: sha512-A3MkhHabfzl6Yi8lIoQL266f4bKUWhzS+6ASSXBItAMMopUiTG76ygxT4HlGydPujmgxtzcM8GSKQzf0l2p18g==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
eslint: '>=9.29.0 <11'
eslint-plugin-command@4.0.0:
resolution: {integrity: sha512-mM1UdKu39YF5nUBVbA+PaVvpB3R3Niwjes8CQ8rJTTbgIThgrfQILgDqmtpAAQL1xGaolCoES1SfiwzwPVGkXQ==}
engines: {node: ^22.22.2 || >=24.15.0}
peerDependencies:
'@typescript-eslint/typescript-estree': '*'
'@typescript-eslint/utils': '*'
eslint: '*'
eslint-plugin-de-morgan@2.1.3:
resolution: {integrity: sha512-vuU/AIPvzsRhCyAfgaWwRVy0QUGvtv2pCn3N6tV4LZRFRNKPuV+Md1mYLvLuM9tORKLe8plzx5DqS9/II/3dew==}
engines: {node: ^20.0.0 || >=22.0.0}
peerDependencies:
eslint: ^8.45.0 || ^9.0.0 || ^10.0.0
eslint-plugin-es-x@7.8.0:
resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '>=8'
eslint-plugin-es-x@9.7.0:
resolution: {integrity: sha512-BT0pUw0toxtrHulYycGiUTL++qC11opyPYMuGUR7AgmuQ/N1YN1xLupF8rGxlaGqEqkqeedJuacCxxAcYgGkvg==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
eslint: '>=9.29.0'
eslint-plugin-importer@0.4.1:
resolution: {integrity: sha512-PobM0w3wXkbAQr2yw0PVOLF/7fAMEoX/m0FstaS7D6ggngcsqB8Ug9Pw6B8PK8qDbOLBib6ZRgI/68L9RaqtTA==}
engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
peerDependencies:
eslint: ^9.0.0 || ^10.0.0
eslint-plugin-jsdoc@64.3.5:
resolution: {integrity: sha512-BqRUwfREoBH+7pzDD+uIQ3aema5P7BnPYcHj3mU0DLm+p/5TEHdimkXgnQfYl0AGgB9PZxZW/Lk7D69FTJSLXw==}
engines: {node: ^22.22.2 || >=24.15.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
eslint-plugin-jsonc@3.4.2:
resolution: {integrity: sha512-q5xzjCYFQuhFomTbctXzd3STfDJ8XduvaigjQmMEbP2gzSKrc58y3Fv6D775/cIK1/sRUn+4kpljiU2iW8k0zw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: '>=9.38.0'
eslint-plugin-n@18.3.0:
resolution: {integrity: sha512-cPVguuDe6DrIPb/qUXHf8P89MaVTUmiYWwpt5gX5AILsvRIiZAxMFXcFR6QHYBksqKJpjfUBlL/RleCJUWcD7w==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: '>=8.57.1'
ts-declaration-location: ^1.0.6
typescript: '>=5.0.0'
peerDependenciesMeta:
ts-declaration-location:
optional: true
typescript:
optional: true
eslint-plugin-perfectionist@5.11.0:
resolution: {integrity: sha512-kZV1otBcu4xT5R1p+0x1N1wRv4pS+OIbxrA47n5a1fTnN3MWbexOx5eQgbQhGyCNbpvF/rqrbnpkGjumHF+Y0Q==}
engines: {node: ^20.0.0 || >=22.0.0}
peerDependencies:
eslint: ^8.45.0 || ^9.0.0 || ^10.0.0
eslint-plugin-pnpm@1.9.1:
resolution: {integrity: sha512-8++1Egww2cqc9Wylmt7P+xXNMQVCosAZ4m4W4Gc0V5lGea8HFByHTRvUI+ZvvpO8fLXGg2O4MQc90EhuI3mMdQ==}
peerDependencies:
eslint: ^9.0.0 || ^10.0.0
eslint-plugin-prettier@5.5.6:
resolution: {integrity: sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
'@types/eslint': '>=8.0.0'
eslint: '>=8.0.0'
eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0'
prettier: '>=3.0.0'
peerDependenciesMeta:
'@types/eslint':
optional: true
eslint-config-prettier:
optional: true
eslint-plugin-regexp@3.3.0:
resolution: {integrity: sha512-TT0JTQbW7CRKohntpGAsMdQ1K3MsmJK4gdAhKJtIwlJ0JvuYxauymFgJdvqxIY4lqNj0EuRZWVrymQtEdJYEFg==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
peerDependencies:
eslint: '>=9.38.0'
eslint-plugin-sxzz@0.5.0:
resolution: {integrity: sha512-RU31t0+dkBYWzlZIuYurLXvt8dIx62EpMADGiaa//aX9XtVgyYSV81boDRRK6lrNa0I0ZotTsqUm8DC6T71z+g==}
engines: {node: ^22.18.0 || >=24.0.0}
peerDependencies:
eslint: ^9.15.0 || ^10.0.0
eslint-plugin-unicorn@74.0.0:
resolution: {integrity: sha512-AGnsGi2SxHg1HEAXxn9nSnZfyjvTWkxm8E8hpd/9tD6dLjBUdcD7+D6ZN64HmmCXTSXlrwVyUqe20Uyb2CaurA==}
engines: {node: '>=22'}
peerDependencies:
eslint: '>=10.4'
eslint-plugin-unused-imports@4.4.1:
resolution: {integrity: sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==}
peerDependencies:
'@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0
eslint: ^10.0.0 || ^9.0.0 || ^8.0.0
peerDependenciesMeta:
'@typescript-eslint/eslint-plugin':
optional: true
eslint-plugin-vue@10.10.0:
resolution: {integrity: sha512-dL9x9rBHqqNcByWiLOHK6L0SB97V82/NC0cZRn9cXPjM7pCuWlpQQP9bFH4vjBv80ej1ZpzAkuD8zWH1o9bZbA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
'@typescript-eslint/parser': ^7.0.0 || ^8.0.0
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
vue-eslint-parser: ^10.3.0
peerDependenciesMeta:
'@stylistic/eslint-plugin':
optional: true
'@typescript-eslint/parser':
optional: true
eslint-plugin-yml@3.8.1:
resolution: {integrity: sha512-E/70psRwxz5EJ8dBtzrFfqSiiInuSytbdtFCjueb/GcKjsWzPBfxfhtQePImMAPjHwMA/VDurO7DJwStDJ4wWg==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0}
peerDependencies:
eslint: '>=9.38.0'
eslint-scope@9.1.2:
resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
eslint-type-tracer@0.5.2:
resolution: {integrity: sha512-YiJmgk6OD1suPB4UC3M/PB+oxahf145jQQ5gFXFk9F9Y7puWwnqGYC2BtTB+FoHqdOohImeTt0rNk0lhhECNaQ==}
engines: {node: ^18 || >=20}
peerDependencies:
eslint: '>=8'
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@5.0.1:
resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
eslint@10.10.0:
resolution: {integrity: sha512-NPXn6r5zl4uET1DAVPaOwzX3rut4c0wcmw3dWJAfOsTM5+TogXo0DDjz8pwm/hL8cyVNpHqeK4JpN0NjnyFFNw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
hasBin: true
peerDependencies:
jiti: '*'
peerDependenciesMeta:
jiti:
optional: true
espree@11.2.0:
resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
esquery@1.7.0:
resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
engines: {node: '>=0.10'}
esrecurse@4.3.0:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
esutils@2.0.3:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
expect-type@1.4.0:
resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==}
engines: {node: '>=12.0.0'}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
fast-diff@1.3.0:
resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
fault@2.0.1:
resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
fflate@0.8.3:
resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==}
file-entry-cache@11.1.5:
resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==}
find-up-simple@1.0.1:
resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
engines: {node: '>=18'}
find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
flat-cache@6.1.23:
resolution: {integrity: sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==}
flatted@3.4.4:
resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==}
format@0.2.2:
resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
engines: {node: '>=0.4.x'}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
function-timeout@1.0.2:
resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==}
engines: {node: '>=18'}
get-tsconfig@4.14.3:
resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==}
get-tsconfig@5.0.0-beta.6:
resolution: {integrity: sha512-X6fBC0pmImC70gvX2zm56go9hx0MyoGVdG0tUCkg/D+Xnh5TJsOZ7iDbOdI3PvmtrDxnu1YdDufpK2QJX1Meqw==}
engines: {node: '>=20.20.0'}
github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
glob-parent@6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
globals@15.15.0:
resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
engines: {node: '>=18'}
globals@17.12.0:
resolution: {integrity: sha512-cezEd/DTyyht9cvSSURyygXPfy04GtWO/5e6ZPvH7fCtjKz9PYOmuawphw1Ctd1f6C+5JypXfGD7ahNMXvevBA==}
engines: {node: '>=18'}
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
hashery@1.5.1:
resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==}
engines: {node: '>=20'}
hookable@6.1.1:
resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
hookified@1.15.1:
resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==}
hookified@2.2.0:
resolution: {integrity: sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==}
html-entities@2.6.0:
resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
identifier-regex@1.1.0:
resolution: {integrity: sha512-SLX4H/vtcYlYnL7XqnuJKHU7Z8517TgsW9nmQiGOgMCjQ8V/deLYu6bEmbGoXe7WMMhc9+EUGyFFneHja8KabA==}
engines: {node: '>=18'}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
ignore@7.0.8:
resolution: {integrity: sha512-YYNsSlXBjMk92SKnkwvB5LOVSa6OznlFUGcsvrFgNJbJCd0M1XKeFVRc8ZByeCqz32FivYNHJVooLmdqrmvp/Q==}
engines: {node: '>= 4'}
import-without-cache@0.4.0:
resolution: {integrity: sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==}
engines: {node: ^22.18.0 || >=24.0.0}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
indent-string@5.0.0:
resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
engines: {node: '>=12'}
is-builtin-module@5.0.0:
resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
engines: {node: '>=18.20'}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
is-identifier@1.1.0:
resolution: {integrity: sha512-NhOds0mDx9lJu+1lBRO0xbwFo5nobA7GCk/0e5xjr6+6XugX985+0OyGX35BNrTkPAsdLcIKg02HUQJOK8D8kw==}
engines: {node: '>=18'}
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
jiti@2.7.0:
resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
hasBin: true
js-tokens@10.0.0:
resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==}
jsdoc-type-pratt-parser@9.0.1:
resolution: {integrity: sha512-1LJ/negRKJxH0+ulOsJYEpUgzIs1DAOz9QctuS4In2LW/Ro3l8C4ej5al+5FU2hBGEOAY3R3SCnP6x8226JMIw==}
engines: {node: ^22.22.2 || >=24.15.0}
jsdoc-type-pratt-parser@9.2.1:
resolution: {integrity: sha512-V4Ww4EHnTcTLSOMoB0FsF72JhQvcAsriCm/LWnxJeGWoxIjEL2l9na11abQok5SYShq8m0Gl02el/xAbTCulvQ==}
engines: {node: ^22.22.2 || >=24.15.0}
jsesc@3.1.0:
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
engines: {node: '>=6'}
hasBin: true
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
jsonc-eslint-parser@3.3.0:
resolution: {integrity: sha512-hYTGkHGNRZnXOFZ1urhINADoqDrGfpy53cjw+dxk84QE0pUDujQzeUeamNs6Mz44/TKD49z2x6/GVSu4ZrtA+Q==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
jsonc-parser@3.3.1:
resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
katex@0.16.47:
resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==}
hasBin: true
keyv@5.6.0:
resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==}
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
lightningcss-android-arm64@1.33.0:
resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [android]
lightningcss-darwin-arm64@1.33.0:
resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
lightningcss-darwin-x64@1.33.0:
resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
lightningcss-freebsd-x64@1.33.0:
resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [freebsd]
lightningcss-linux-arm-gnueabihf@1.33.0:
resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
lightningcss-linux-arm64-gnu@1.33.0:
resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [glibc]
lightningcss-linux-arm64-musl@1.33.0:
resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
libc: [musl]
lightningcss-linux-x64-gnu@1.33.0:
resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [glibc]
lightningcss-linux-x64-musl@1.33.0:
resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
libc: [musl]
lightningcss-win32-arm64-msvc@1.33.0:
resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [win32]
lightningcss-win32-x64-msvc@1.33.0:
resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
lightningcss@1.33.0:
resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==}
engines: {node: '>= 12.0.0'}
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
lru-cache@11.5.2:
resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==}
engines: {node: 20 || >=22}
magic-string@1.2.3:
resolution: {integrity: sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==}
magicast@0.5.4:
resolution: {integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==}
make-asynchronous@1.1.0:
resolution: {integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==}
engines: {node: '>=18'}
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
mdast-util-find-and-replace@3.0.2:
resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
mdast-util-from-markdown@2.0.3:
resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==}
mdast-util-frontmatter@2.0.1:
resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==}
mdast-util-gfm-autolink-literal@2.0.1:
resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
mdast-util-gfm-footnote@2.1.0:
resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
mdast-util-gfm-strikethrough@2.0.0:
resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
mdast-util-gfm-table@2.0.0:
resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
mdast-util-gfm-task-list-item@2.0.0:
resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
mdast-util-gfm@3.1.0:
resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
mdast-util-math@3.0.0:
resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==}
mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
mdast-util-to-markdown@2.1.2:
resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
mdn-data@2.34.0:
resolution: {integrity: sha512-OgIlLv0NxJKVW4GTSAoEgpRGd4F2XCqGinK0MsMlBCCS/Zcm2/LsbercNWNA7PeMMcjl75NnI97eqyo7zkdxWA==}
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
micromark-extension-frontmatter@2.0.0:
resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==}
micromark-extension-gfm-autolink-literal@2.1.0:
resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
micromark-extension-gfm-footnote@2.1.0:
resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
micromark-extension-gfm-strikethrough@2.1.0:
resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
micromark-extension-gfm-table@2.1.1:
resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
micromark-extension-gfm-tagfilter@2.0.0:
resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
micromark-extension-gfm-task-list-item@2.1.0:
resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
micromark-extension-math@3.1.0:
resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==}
micromark-factory-destination@2.0.1:
resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
micromark-factory-label@2.0.1:
resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
micromark-factory-space@2.0.1:
resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
micromark-factory-title@2.0.1:
resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
micromark-factory-whitespace@2.0.1:
resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
micromark-util-character@2.1.1:
resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
micromark-util-chunked@2.0.1:
resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
micromark-util-classify-character@2.0.1:
resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
micromark-util-combine-extensions@2.0.1:
resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
micromark-util-decode-numeric-character-reference@2.0.2:
resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
micromark-util-decode-string@2.0.1:
resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
micromark-util-encode@2.0.1:
resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
micromark-util-html-tag-name@2.0.1:
resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
micromark-util-normalize-identifier@2.0.1:
resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
micromark-util-resolve-all@2.0.1:
resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
micromark-util-sanitize-uri@2.0.1:
resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
micromark-util-subtokenize@2.1.0:
resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
micromark-util-symbol@2.0.1:
resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
micromark-util-types@2.0.2:
resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
micromark@4.0.2:
resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
minimatch@10.2.6:
resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==}
engines: {node: 18 || 20 || >=22}
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
nanoid@3.3.18:
resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
natural-orderby@5.0.0:
resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==}
engines: {node: '>=18'}
node-releases@2.0.54:
resolution: {integrity: sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==}
engines: {node: '>=18'}
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
object-deep-merge@2.0.1:
resolution: {integrity: sha512-aKttDKcU3pyZqKcCkDhsMn70WmZFG2JGDQLP9EcLyTSIFQRCPWLAmBZRLJnrVUrhPG1jETEEbfdgbNtJf1LyMg==}
obug@2.1.4:
resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==}
engines: {node: '>=12.20.0'}
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
oxc-parser@0.139.0:
resolution: {integrity: sha512-cf1TKZN+zc0lwqigeyXKzKVk5+vNRe99Or2+wVJsXLdlhJgC+gsIniYDfj/ZEBzCJ8Xm21ZG6YtMbR262CcS2w==}
engines: {node: ^20.19.0 || >=22.12.0}
p-event@6.0.1:
resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==}
engines: {node: '>=16.17'}
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
p-timeout@6.1.4:
resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==}
engines: {node: '>=14.16'}
package-manager-detector@1.8.0:
resolution: {integrity: sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==}
parse-imports-exports@0.2.4:
resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
parse-statements@1.0.11:
resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
path-key@3.1.1:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
picomatch@4.0.7:
resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==}
engines: {node: '>=12'}
pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
pnpm-workspace-yaml@1.9.1:
resolution: {integrity: sha512-Xj/T2X6DNAWbtk/9UQ0/TJRswltiHZevmcMjqoL7WrpJi67lu3qaslU4+I+zJ8wtwqmuvAE0KkB8rbv2ZdogBg==}
postcss-selector-parser@7.1.6:
resolution: {integrity: sha512-7qASPzhKF2l2KLboRZux8CCTRMdGiV08vWmyKzPz22qZ7ZjQBOeY7rNzNoCLSUiftJ7HUq0GERHmxw/t0dCdMw==}
engines: {node: '>=4'}
postcss@8.5.28:
resolution: {integrity: sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
prettier-linter-helpers@1.0.1:
resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==}
engines: {node: '>=6.0.0'}
prettier@3.9.8:
resolution: {integrity: sha512-WRFq3Wn3WId7LLROfMLdH7xaFr2jR62wU8nLO6rQUOLOxNZUviyJQs1M0iIhLexSFy+L+w0ch66wtoO2jRjG0A==}
engines: {node: '>=14'}
hasBin: true
publint@0.3.24:
resolution: {integrity: sha512-9zS56KrKBoqi5Qt8h92uMP8TTM9AYZSgnmCo4u2priMqkOZvQnTsziZ2p5LJ2ywbYkAjoCDp2jda9u4cgFefIw==}
engines: {node: '>=18'}
hasBin: true
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
qified@0.10.1:
resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==}
engines: {node: '>=20'}
quansync@1.0.0:
resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
quote-js-string@0.1.0:
resolution: {integrity: sha512-Y3NoRtprEEZQD8RfxMCfS0ZTqc4e+i18OrXEXAvpM6TfC/3y+0L5rNbZiSnbBBEkDfFzbpd8o+cE8q3/anjMGA==}
engines: {node: '>=22'}
refa@0.12.1:
resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
regexp-ast-analysis@0.7.1:
resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
regjsparser@0.13.2:
resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==}
hasBin: true
reserved-identifiers@1.2.0:
resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==}
engines: {node: '>=18'}
resolve-pkg-maps@1.0.0:
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
rolldown-plugin-dts@0.28.5:
resolution: {integrity: sha512-yYd3C9CeJwqjOc9X23m0Tyxcqic491uLZlfg51szT287S8zCCqLR2uoySoElgqy2CLn7PdXcEo1dlkBs4n1WHg==}
engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
peerDependencies:
'@typescript/native-preview': '*'
'@volar/typescript': ~2.4.0
rolldown: ^1.2.0
typescript: ^5.0.0 || ^6.0.0 || ~7.0.0
vue-tsc: ~3.2.0 || ~3.3.0
peerDependenciesMeta:
'@typescript/native-preview':
optional: true
'@volar/typescript':
optional: true
typescript:
optional: true
vue-tsc:
optional: true
rolldown@1.2.7:
resolution: {integrity: sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
rolldown@1.2.9:
resolution: {integrity: sha512-hx/Pv0N1haXRb11qkfnK5MXB/iqr7i0yjWQqmO9uHqZpBgQSqzc8UsSnEpalsh+j1I8qQ2CkXAkJC8Br3dKSlg==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
sade@1.8.1:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
engines: {node: '>=6'}
scslre@0.3.0:
resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==}
engines: {node: ^14.0.0 || >=16.0.0}
semver@7.8.5:
resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==}
engines: {node: '>=10'}
hasBin: true
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
shebang-regex@3.0.0:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
spdx-exceptions@2.5.0:
resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
spdx-expression-parse@5.0.0:
resolution: {integrity: sha512-vngmw3Rgn+o2arXNbnZaj5UtOEBuWBfvaI+Wc8GFfykIhA5/vdK9/Sp/XkLv63dykz2rxKDvKEHupF5P0FORcQ==}
spdx-license-ids@3.0.23:
resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==}
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
std-env@4.2.0:
resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==}
strip-indent@4.1.1:
resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
engines: {node: '>=12'}
super-regex@1.1.0:
resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==}
engines: {node: '>=18'}
synckit@0.11.13:
resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==}
engines: {node: ^14.18.0 || >=16.0.0}
tapable@2.3.3:
resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
engines: {node: '>=6'}
time-span@5.1.0:
resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==}
engines: {node: '>=12'}
tinybench@6.1.4:
resolution: {integrity: sha512-9APumHG7r4yOk4X4WlkmE71aZcv1gvin1czO3OQ1U9iJcFA5Ja/ygyb0vPOVHTthFozUYs8CLoLUlM8grb2lTQ==}
engines: {node: '>=20.0.0'}
tinyexec@1.3.0:
resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==}
engines: {node: '>=18'}
tinyexec@1.3.1:
resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==}
engines: {node: '>=18'}
tinyglobby@0.2.17:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
tinyrainbow@3.1.1:
resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==}
engines: {node: '>=14.0.0'}
to-valid-identifier@1.0.0:
resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
engines: {node: '>=20'}
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
ts-api-utils@2.5.0:
resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
engines: {node: '>=18.12'}
peerDependencies:
typescript: '>=4.8.4'
tsdown-preset-sxzz@0.7.1:
resolution: {integrity: sha512-ZLGHoO/IncDl8yB0a/F/LvzWDjkf//e/IRDLEyhFk1200TPHuwISdciMHir2iz3HMoiuS6Z7a35B8hgd3q8o7g==}
engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
peerDependencies:
tsdown: ^0.22.0 || ^0.23.0-0
tsdown@0.23.0:
resolution: {integrity: sha512-BaT+ep1xnj5hdyICLd5r5SYYE+TXnI1ATePLykv9vcKpHpFTWUWRH+x1AF/E2qcu3YB6+vI8IdyxIIIffEqw5Q==}
engines: {node: ^22.18.0 || ^24.11.0 || >=26.0.0}
hasBin: true
peerDependencies:
'@arethetypeswrong/core': ^0.18.1
'@tsdown/css': 0.23.0
'@tsdown/exe': 0.23.0
'@vitejs/devtools': '*'
publint: ^0.3.8
tsx: '*'
typescript: ^5.0.0 || ^6.0.0 || ^7.0.0
unplugin-unused: '>=0.5.0'
unrun: '*'
peerDependenciesMeta:
'@arethetypeswrong/core':
optional: true
'@tsdown/css':
optional: true
'@tsdown/exe':
optional: true
'@vitejs/devtools':
optional: true
publint:
optional: true
tsx:
optional: true
typescript:
optional: true
unplugin-unused:
optional: true
unrun:
optional: true
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
type-fest@4.41.0:
resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
engines: {node: '>=16'}
typescript-eslint@8.69.0:
resolution: {integrity: sha512-B3MltX0VqjUBNEe3b3sSuiRbfa6XrfHFtBiPamjT5AsW/dfq+y+bc0wyuS9DxAS1LyzCxRp2+rxzpLUvqM2BvA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
typescript: '>=4.8.4 <6.1.0'
typescript@5.6.1-rc:
resolution: {integrity: sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ==}
engines: {node: '>=14.17'}
hasBin: true
typescript@6.0.3:
resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
engines: {node: '>=14.17'}
hasBin: true
typescript@7.0.2:
resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==}
engines: {node: '>=16.20.0'}
hasBin: true
unconfig-core@7.5.0:
resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
unconfig@7.5.0:
resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==}
undici-types@8.9.0:
resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==}
unist-util-is@6.0.1:
resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
unist-util-remove-position@5.0.0:
resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
unist-util-visit-parents@6.0.2:
resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
unist-util-visit@5.1.0:
resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
update-browserslist-db@1.3.2:
resolution: {integrity: sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
validate-npm-package-name@5.0.1:
resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
verkit@0.3.2:
resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==}
engines: {node: '>=18.12.0'}
verkit@0.4.0:
resolution: {integrity: sha512-sXMwN6DMHeouPfCxkxWkKAmxphWKEenHYY5H1nIBzU3PmDsmJp6kBXJdshjVdpMZuWCmL9SH7KFRx29AylpP6g==}
engines: {node: '>=18.12.0'}
vite@8.2.2:
resolution: {integrity: sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
'@types/node': ^20.19.0 || >=22.12.0
'@vitejs/devtools': ^0.4.0 || ^0.5.0
esbuild: ^0.27.0 || ^0.28.0
jiti: '>=1.21.0'
less: ^4.0.0
sass: ^1.70.0
sass-embedded: ^1.70.0
stylus: '>=0.54.8'
sugarss: ^5.0.0
terser: ^5.16.0
tsx: ^4.8.1
yaml: ^2.4.2
peerDependenciesMeta:
'@types/node':
optional: true
'@vitejs/devtools':
optional: true
esbuild:
optional: true
jiti:
optional: true
less:
optional: true
sass:
optional: true
sass-embedded:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
tsx:
optional: true
yaml:
optional: true
vitest@5.0.1:
resolution: {integrity: sha512-iA95lQbKEkvrtTkdAgnWbXfbipWiiWe/hDl2P5tMi6WFwD76G0NxXAGp/M9EOcYupeGJRr6wppMc7CoA41TQjg==}
engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0
'@types/node': ^22.0.0 || >=24.0.0
'@vitest/browser-playwright': 5.0.1
'@vitest/browser-preview': 5.0.1
'@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0
'@vitest/coverage-istanbul': 5.0.1
'@vitest/coverage-v8': 5.0.1
'@vitest/ui': 5.0.1
happy-dom: '*'
jsdom: '*'
vite: ^6.4.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
'@opentelemetry/api':
optional: true
'@types/node':
optional: true
'@vitest/browser-playwright':
optional: true
'@vitest/browser-preview':
optional: true
'@vitest/browser-webdriverio':
optional: true
'@vitest/coverage-istanbul':
optional: true
'@vitest/coverage-v8':
optional: true
'@vitest/ui':
optional: true
happy-dom:
optional: true
jsdom:
optional: true
vue-eslint-parser@10.4.1:
resolution: {integrity: sha512-Gk6gRDj0n/fkRa3C3l0bBheoBckUq/Rs0F/TvMWIS6nzzx67amAViMe9CkNgsP2tXyQONvGiHQESHwFtZ3aYDA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
web-worker@1.5.0:
resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==}
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines: {node: '>= 8'}
hasBin: true
why-is-node-running@2.3.0:
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
engines: {node: '>=8'}
hasBin: true
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
xml-name-validator@5.0.0:
resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
engines: {node: '>=18'}
yaml-eslint-parser@2.1.0:
resolution: {integrity: sha512-1zo9KRfp6vIAXBEhWAz09ex3hUwh3T+/6dGbGteHvNseA0Uk4FgQnPES55klZ6cDzSy9FpgKS0D/CoLUvCCj4w==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
yaml@2.9.0:
resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==}
engines: {node: '>= 14.6'}
hasBin: true
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
yuku-ast@0.9.3:
resolution: {integrity: sha512-Kt0PXlPCXdKF1fWFTl7N3DaxsVk6DHF8VAXHJMkwPtJnWYgbx20pYgGSweuC/86mIM7k1NUITQ4JffgOLUWTCw==}
yuku-codegen@0.9.3:
resolution: {integrity: sha512-7oTWwetHiMSyrVPFb8089lBBqkU1gaeQZyumNBJ0t5hocMQRaWhnMeSXTz7J1xm/rcw9+ePsajORdZbub2C35w==}
yuku-parser@0.9.3:
resolution: {integrity: sha512-96wPoHnwaXfkZv7UIOUkDb+s7ZH8lv8Qtg+MxdvHUV1LFa5jV9iKOaams1942YQt+krFQrWiD6lSg2ermv5kHA==}
zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
snapshots:
'@andrewbranch/untar.js@1.0.4': {}
'@arethetypeswrong/core@0.18.5':
dependencies:
'@andrewbranch/untar.js': 1.0.4
'@loaderkit/resolve': 1.0.6
cjs-module-lexer: 1.4.3
fflate: 0.8.3
lru-cache: 11.5.2
semver: 7.8.5
typescript: 5.6.1-rc
validate-npm-package-name: 5.0.1
'@babel/helper-string-parser@7.29.7': {}
'@babel/helper-validator-identifier@7.29.7': {}
'@babel/parser@7.29.8':
dependencies:
'@babel/types': 7.29.8
'@babel/types@7.29.8':
dependencies:
'@babel/helper-string-parser': 7.29.7
'@babel/helper-validator-identifier': 7.29.7
'@bcoe/v8-coverage@1.0.2': {}
'@braidai/lang@1.1.2': {}
'@cacheable/memory@2.2.0':
dependencies:
'@cacheable/utils': 2.5.0
'@keyv/bigmap': 1.3.1(keyv@5.6.0)
hookified: 1.15.1
keyv: 5.6.0
'@cacheable/utils@2.5.0':
dependencies:
hashery: 1.5.1
keyv: 5.6.0
'@emnapi/core@1.11.1':
dependencies:
'@emnapi/wasi-threads': 1.2.2
tslib: 2.8.1
optional: true
'@emnapi/runtime@1.11.1':
dependencies:
tslib: 2.8.1
optional: true
'@emnapi/wasi-threads@1.2.2':
dependencies:
tslib: 2.8.1
optional: true
'@es-joy/jsdoccomment@0.92.0':
dependencies:
'@types/estree': 1.0.9
'@typescript-eslint/types': 8.69.0
comment-parser: 1.4.7
esquery: 1.7.0
jsdoc-type-pratt-parser: 9.0.1
'@es-joy/jsdoccomment@0.96.0':
dependencies:
'@types/estree': 1.0.9
'@typescript-eslint/types': 8.69.0
comment-parser: 1.4.8
esquery: 1.7.0
jsdoc-type-pratt-parser: 9.2.1
'@es-joy/resolve.exports@1.2.0': {}
'@eslint-community/eslint-plugin-eslint-comments@4.7.2(eslint@10.10.0(jiti@2.7.0))':
dependencies:
escape-string-regexp: 4.0.0
eslint: 10.10.0(jiti@2.7.0)
ignore: 7.0.8
'@eslint-community/eslint-utils@4.10.1(eslint@10.10.0(jiti@2.7.0))':
dependencies:
eslint: 10.10.0(jiti@2.7.0)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
'@eslint/compat@2.1.1(eslint@10.10.0(jiti@2.7.0))':
dependencies:
'@eslint/core': 1.2.1
optionalDependencies:
eslint: 10.10.0(jiti@2.7.0)
'@eslint/config-array@0.23.5':
dependencies:
'@eslint/object-schema': 3.0.5
debug: 4.4.3
minimatch: 10.2.6
transitivePeerDependencies:
- supports-color
'@eslint/config-helpers@0.5.5':
dependencies:
'@eslint/core': 1.2.1
'@eslint/config-helpers@0.7.0':
dependencies:
'@eslint/core': 1.2.1
'@eslint/core@1.2.1':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/css-tree@4.1.0':
dependencies:
mdn-data: 2.34.0
source-map-js: 1.2.1
'@eslint/js@10.0.1(eslint@10.10.0(jiti@2.7.0))':
optionalDependencies:
eslint: 10.10.0(jiti@2.7.0)
'@eslint/markdown@8.0.3':
dependencies:
'@eslint/core': 1.2.1
'@eslint/plugin-kit': 0.7.3
github-slugger: 2.0.0
mdast-util-from-markdown: 2.0.3
mdast-util-frontmatter: 2.0.1
mdast-util-gfm: 3.1.0
mdast-util-math: 3.0.0
micromark-extension-frontmatter: 2.0.0
micromark-extension-gfm: 3.0.0
micromark-extension-math: 3.1.0
micromark-util-normalize-identifier: 2.0.1
transitivePeerDependencies:
- supports-color
'@eslint/object-schema@3.0.5': {}
'@eslint/plugin-kit@0.7.3':
dependencies:
'@eslint/core': 1.2.1
levn: 0.4.1
'@humanfs/core@0.19.2':
dependencies:
'@humanfs/types': 0.15.0
'@humanfs/node@0.16.8':
dependencies:
'@humanfs/core': 0.19.2
'@humanfs/types': 0.15.0
'@humanwhocodes/retry': 0.4.3
'@humanfs/types@0.15.0': {}
'@humanwhocodes/module-importer@1.0.1': {}
'@humanwhocodes/retry@0.4.3': {}
'@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/sourcemap-codec@1.6.0': {}
'@jridgewell/trace-mapping@0.3.31':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.6.0
'@keyv/bigmap@1.3.1(keyv@5.6.0)':
dependencies:
hashery: 1.5.1
hookified: 1.15.1
keyv: 5.6.0
'@keyv/serialize@1.1.1': {}
'@loaderkit/resolve@1.0.6':
dependencies:
'@braidai/lang': 1.1.2
'@napi-rs/wasm-runtime@1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
dependencies:
'@emnapi/core': 1.11.1
'@emnapi/runtime': 1.11.1
'@tybys/wasm-util': 0.10.3
optional: true
'@ota-meshi/ast-token-store@0.3.0': {}
'@oxc-parser/binding-android-arm-eabi@0.139.0':
optional: true
'@oxc-parser/binding-android-arm64@0.139.0':
optional: true
'@oxc-parser/binding-darwin-arm64@0.139.0':
optional: true
'@oxc-parser/binding-darwin-x64@0.139.0':
optional: true
'@oxc-parser/binding-freebsd-x64@0.139.0':
optional: true
'@oxc-parser/binding-linux-arm-gnueabihf@0.139.0':
optional: true
'@oxc-parser/binding-linux-arm-musleabihf@0.139.0':
optional: true
'@oxc-parser/binding-linux-arm64-gnu@0.139.0':
optional: true
'@oxc-parser/binding-linux-arm64-musl@0.139.0':
optional: true
'@oxc-parser/binding-linux-ppc64-gnu@0.139.0':
optional: true
'@oxc-parser/binding-linux-riscv64-gnu@0.139.0':
optional: true
'@oxc-parser/binding-linux-riscv64-musl@0.139.0':
optional: true
'@oxc-parser/binding-linux-s390x-gnu@0.139.0':
optional: true
'@oxc-parser/binding-linux-x64-gnu@0.139.0':
optional: true
'@oxc-parser/binding-linux-x64-musl@0.139.0':
optional: true
'@oxc-parser/binding-openharmony-arm64@0.139.0':
optional: true
'@oxc-parser/binding-wasm32-wasi@0.139.0':
dependencies:
'@emnapi/core': 1.11.1
'@emnapi/runtime': 1.11.1
'@napi-rs/wasm-runtime': 1.2.3(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
optional: true
'@oxc-parser/binding-win32-arm64-msvc@0.139.0':
optional: true
'@oxc-parser/binding-win32-ia32-msvc@0.139.0':
optional: true
'@oxc-parser/binding-win32-x64-msvc@0.139.0':
optional: true
'@oxc-project/types@0.139.0': {}
'@oxc-project/types@0.148.0': {}
'@oxc-project/types@0.150.0': {}
'@pkgr/core@0.3.6': {}
'@prettier/plugin-oxc@0.2.3':
dependencies:
oxc-parser: 0.139.0
'@publint/pack@0.1.7':
dependencies:
tinyexec: 1.3.1
'@quansync/fs@1.0.0':
dependencies:
quansync: 1.0.0
'@rolldown/binding-android-arm-eabi@1.2.7':
optional: true
'@rolldown/binding-android-arm-eabi@1.2.9':
optional: true
'@rolldown/binding-android-arm64@1.2.7':
optional: true
'@rolldown/binding-android-arm64@1.2.9':
optional: true
'@rolldown/binding-darwin-arm64@1.2.7':
optional: true
'@rolldown/binding-darwin-arm64@1.2.9':
optional: true
'@rolldown/binding-darwin-x64@1.2.7':
optional: true
'@rolldown/binding-darwin-x64@1.2.9':
optional: true
'@rolldown/binding-freebsd-x64@1.2.7':
optional: true
'@rolldown/binding-freebsd-x64@1.2.9':
optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.2.7':
optional: true
'@rolldown/binding-linux-arm-gnueabihf@1.2.9':
optional: true
'@rolldown/binding-linux-arm64-gnu@1.2.7':
optional: true
'@rolldown/binding-linux-arm64-gnu@1.2.9':
optional: true
'@rolldown/binding-linux-arm64-musl@1.2.7':
optional: true
'@rolldown/binding-linux-arm64-musl@1.2.9':
optional: true
'@rolldown/binding-linux-ppc64-gnu@1.2.7':
optional: true
'@rolldown/binding-linux-ppc64-gnu@1.2.9':
optional: true
'@rolldown/binding-linux-s390x-gnu@1.2.7':
optional: true
'@rolldown/binding-linux-s390x-gnu@1.2.9':
optional: true
'@rolldown/binding-linux-x64-gnu@1.2.7':
optional: true
'@rolldown/binding-linux-x64-gnu@1.2.9':
optional: true
'@rolldown/binding-linux-x64-musl@1.2.7':
optional: true
'@rolldown/binding-linux-x64-musl@1.2.9':
optional: true
'@rolldown/binding-openharmony-arm64@1.2.7':
optional: true
'@rolldown/binding-openharmony-arm64@1.2.9':
optional: true
'@rolldown/binding-win32-arm64-msvc@1.2.7':
optional: true
'@rolldown/binding-win32-arm64-msvc@1.2.9':
optional: true
'@rolldown/binding-win32-x64-msvc@1.2.7':
optional: true
'@rolldown/binding-win32-x64-msvc@1.2.9':
optional: true
'@rolldown/pluginutils@1.0.1': {}
'@sindresorhus/base62@1.0.0': {}
'@sxzz/eslint-config@8.6.0(@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/typescript-estree@8.69.0(typescript@6.0.3))(@typescript-eslint/utils@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(prettier@3.9.8)(typescript@6.0.3)':
dependencies:
'@eslint-community/eslint-plugin-eslint-comments': 4.7.2(eslint@10.10.0(jiti@2.7.0))
'@eslint/js': 10.0.1(eslint@10.10.0(jiti@2.7.0))
'@eslint/markdown': 8.0.3
eslint: 10.10.0(jiti@2.7.0)
eslint-config-flat-gitignore: 2.4.0(eslint@10.10.0(jiti@2.7.0))
eslint-config-prettier: 10.1.8(eslint@10.10.0(jiti@2.7.0))
eslint-flat-config-utils: 3.2.0
eslint-plugin-antfu: 3.2.3(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-baseline-js: 0.7.1(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-command: 4.0.0(@typescript-eslint/typescript-estree@8.69.0(typescript@6.0.3))(@typescript-eslint/utils@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-de-morgan: 2.1.3(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-importer: 0.4.1(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-jsdoc: 64.3.5(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
eslint-plugin-jsonc: 3.4.2(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-n: 18.3.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
eslint-plugin-perfectionist: 5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
eslint-plugin-pnpm: 1.9.1(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-prettier: 5.5.6(eslint-config-prettier@10.1.8(eslint@10.10.0(jiti@2.7.0)))(eslint@10.10.0(jiti@2.7.0))(prettier@3.9.8)
eslint-plugin-regexp: 3.3.0(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-sxzz: 0.5.0(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-unicorn: 74.0.0(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-vue: 10.10.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)))
eslint-plugin-yml: 3.8.1(eslint@10.10.0(jiti@2.7.0))
globals: 17.12.0
jsonc-eslint-parser: 3.3.0
typescript-eslint: 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
vue-eslint-parser: 10.4.1(eslint@10.10.0(jiti@2.7.0))
transitivePeerDependencies:
- '@eslint/json'
- '@stylistic/eslint-plugin'
- '@types/eslint'
- '@typescript-eslint/eslint-plugin'
- '@typescript-eslint/parser'
- '@typescript-eslint/typescript-estree'
- '@typescript-eslint/utils'
- prettier
- supports-color
- ts-declaration-location
- typescript
'@sxzz/prettier-config@2.3.3(prettier@3.9.8)':
dependencies:
'@prettier/plugin-oxc': 0.2.3
prettier: 3.9.8
'@tybys/wasm-util@0.10.3':
dependencies:
tslib: 2.8.1
optional: true
'@types/chai@5.2.3':
dependencies:
'@types/deep-eql': 4.0.2
assertion-error: 2.0.1
'@types/debug@4.1.13':
dependencies:
'@types/ms': 2.1.0
'@types/deep-eql@4.0.2': {}
'@types/esrecurse@4.3.1': {}
'@types/estree@1.0.9': {}
'@types/hast@3.0.5':
dependencies:
'@types/unist': 3.0.3
'@types/json-schema@7.0.15': {}
'@types/katex@0.16.8': {}
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.3
'@types/ms@2.1.0': {}
'@types/node@26.6.1':
dependencies:
undici-types: 8.9.0
'@types/semver@7.8.0': {}
'@types/unist@3.0.3': {}
'@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
'@typescript-eslint/parser': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
'@typescript-eslint/scope-manager': 8.69.0
'@typescript-eslint/type-utils': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
'@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
'@typescript-eslint/visitor-keys': 8.69.0
eslint: 10.10.0(jiti@2.7.0)
ignore: 7.0.8
natural-compare: 1.4.0
ts-api-utils: 2.5.0(typescript@6.0.3)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.69.0
'@typescript-eslint/types': 8.69.0
'@typescript-eslint/typescript-estree': 8.69.0(typescript@6.0.3)
'@typescript-eslint/visitor-keys': 8.69.0
debug: 4.4.3
eslint: 10.10.0(jiti@2.7.0)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/project-service@8.69.0(typescript@6.0.3)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.69.0(typescript@6.0.3)
'@typescript-eslint/types': 8.69.0
debug: 4.4.3
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.69.0':
dependencies:
'@typescript-eslint/types': 8.69.0
'@typescript-eslint/visitor-keys': 8.69.0
'@typescript-eslint/tsconfig-utils@8.69.0(typescript@6.0.3)':
dependencies:
typescript: 6.0.3
'@typescript-eslint/type-utils@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)':
dependencies:
'@typescript-eslint/types': 8.69.0
'@typescript-eslint/typescript-estree': 8.69.0(typescript@6.0.3)
'@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
debug: 4.4.3
eslint: 10.10.0(jiti@2.7.0)
ts-api-utils: 2.5.0(typescript@6.0.3)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.69.0': {}
'@typescript-eslint/typescript-estree@8.69.0(typescript@6.0.3)':
dependencies:
'@typescript-eslint/project-service': 8.69.0(typescript@6.0.3)
'@typescript-eslint/tsconfig-utils': 8.69.0(typescript@6.0.3)
'@typescript-eslint/types': 8.69.0
'@typescript-eslint/visitor-keys': 8.69.0
debug: 4.4.3
minimatch: 10.2.6
semver: 7.8.5
tinyglobby: 0.2.17
ts-api-utils: 2.5.0(typescript@6.0.3)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)':
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
'@typescript-eslint/scope-manager': 8.69.0
'@typescript-eslint/types': 8.69.0
'@typescript-eslint/typescript-estree': 8.69.0(typescript@6.0.3)
eslint: 10.10.0(jiti@2.7.0)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/visitor-keys@8.69.0':
dependencies:
'@typescript-eslint/types': 8.69.0
eslint-visitor-keys: 5.0.1
'@typescript/typescript-aix-ppc64@7.0.2':
optional: true
'@typescript/typescript-darwin-arm64@7.0.2':
optional: true
'@typescript/typescript-darwin-x64@7.0.2':
optional: true
'@typescript/typescript-freebsd-arm64@7.0.2':
optional: true
'@typescript/typescript-freebsd-x64@7.0.2':
optional: true
'@typescript/typescript-linux-arm64@7.0.2':
optional: true
'@typescript/typescript-linux-arm@7.0.2':
optional: true
'@typescript/typescript-linux-loong64@7.0.2':
optional: true
'@typescript/typescript-linux-mips64el@7.0.2':
optional: true
'@typescript/typescript-linux-ppc64@7.0.2':
optional: true
'@typescript/typescript-linux-riscv64@7.0.2':
optional: true
'@typescript/typescript-linux-s390x@7.0.2':
optional: true
'@typescript/typescript-linux-x64@7.0.2':
optional: true
'@typescript/typescript-netbsd-arm64@7.0.2':
optional: true
'@typescript/typescript-netbsd-x64@7.0.2':
optional: true
'@typescript/typescript-openbsd-arm64@7.0.2':
optional: true
'@typescript/typescript-openbsd-x64@7.0.2':
optional: true
'@typescript/typescript-sunos-x64@7.0.2':
optional: true
'@typescript/typescript-win32-arm64@7.0.2':
optional: true
'@typescript/typescript-win32-x64@7.0.2':
optional: true
'@vitest/coverage-v8@5.0.1(vitest@5.0.1)':
dependencies:
'@bcoe/v8-coverage': 1.0.2
'@vitest/istanbul-lib-coverage': 1.0.1
'@vitest/istanbul-lib-report': 1.0.1
ast-v8-to-istanbul: 1.0.5
magicast: 0.5.4
obug: 2.1.4
std-env: 4.2.0
tinyrainbow: 3.1.1
vitest: 5.0.1(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(vite@8.2.2(@types/node@26.6.1)(jiti@2.7.0)(yaml@2.9.0))
'@vitest/istanbul-lib-coverage@1.0.1': {}
'@vitest/istanbul-lib-report@1.0.1':
dependencies:
'@vitest/istanbul-lib-coverage': 1.0.1
'@vitest/mocker@5.0.1(vite@8.2.2(@types/node@26.6.1)(jiti@2.7.0)(yaml@2.9.0))':
dependencies:
'@jridgewell/trace-mapping': 0.3.31
'@vitest/spy': 5.0.1
estree-walker: 3.0.3
magic-string: 1.2.3
optionalDependencies:
vite: 8.2.2(@types/node@26.6.1)(jiti@2.7.0)(yaml@2.9.0)
'@vitest/spy@5.0.1': {}
'@yuku-codegen/binding-android-arm64@0.9.3':
optional: true
'@yuku-codegen/binding-darwin-arm64@0.9.3':
optional: true
'@yuku-codegen/binding-darwin-x64@0.9.3':
optional: true
'@yuku-codegen/binding-freebsd-x64@0.9.3':
optional: true
'@yuku-codegen/binding-linux-arm-gnu@0.9.3':
optional: true
'@yuku-codegen/binding-linux-arm-musl@0.9.3':
optional: true
'@yuku-codegen/binding-linux-arm64-gnu@0.9.3':
optional: true
'@yuku-codegen/binding-linux-arm64-musl@0.9.3':
optional: true
'@yuku-codegen/binding-linux-x64-gnu@0.9.3':
optional: true
'@yuku-codegen/binding-linux-x64-musl@0.9.3':
optional: true
'@yuku-codegen/binding-win32-arm64@0.9.3':
optional: true
'@yuku-codegen/binding-win32-x64@0.9.3':
optional: true
'@yuku-parser/binding-android-arm64@0.9.3':
optional: true
'@yuku-parser/binding-darwin-arm64@0.9.3':
optional: true
'@yuku-parser/binding-darwin-x64@0.9.3':
optional: true
'@yuku-parser/binding-freebsd-x64@0.9.3':
optional: true
'@yuku-parser/binding-linux-arm-gnu@0.9.3':
optional: true
'@yuku-parser/binding-linux-arm-musl@0.9.3':
optional: true
'@yuku-parser/binding-linux-arm64-gnu@0.9.3':
optional: true
'@yuku-parser/binding-linux-arm64-musl@0.9.3':
optional: true
'@yuku-parser/binding-linux-x64-gnu@0.9.3':
optional: true
'@yuku-parser/binding-linux-x64-musl@0.9.3':
optional: true
'@yuku-parser/binding-win32-arm64@0.9.3':
optional: true
'@yuku-parser/binding-win32-x64@0.9.3':
optional: true
'@yuku-toolchain/types@0.9.3': {}
acorn-jsx@5.3.2(acorn@8.18.0):
dependencies:
acorn: 8.18.0
acorn@8.18.0: {}
ajv@6.15.0:
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
are-docs-informative@0.1.1: {}
args-tokenizer@0.3.0: {}
assertion-error@2.0.1: {}
ast-v8-to-istanbul@1.0.5:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
estree-walker: 3.0.3
js-tokens: 10.0.0
balanced-match@4.0.4: {}
baseline-browser-mapping@2.11.21: {}
boolbase@1.0.0: {}
brace-expansion@5.0.9:
dependencies:
balanced-match: 4.0.4
browserslist@4.28.8:
dependencies:
baseline-browser-mapping: 2.11.21
caniuse-lite: 1.0.30001810
electron-to-chromium: 1.5.421
node-releases: 2.0.54
update-browserslist-db: 1.3.2(browserslist@4.28.8)
builtin-modules@5.3.0: {}
bumpp@12.3.0:
dependencies:
args-tokenizer: 0.3.0
cac: 7.0.0
jsonc-parser: 3.3.1
package-manager-detector: 1.8.0
tinyexec: 1.3.1
tinyglobby: 0.2.17
unconfig: 7.5.0
verkit: 0.4.0
yaml: 2.9.0
cac@7.0.0: {}
cacheable@2.5.0:
dependencies:
'@cacheable/memory': 2.2.0
'@cacheable/utils': 2.5.0
hookified: 1.15.1
keyv: 5.6.0
qified: 0.10.1
caniuse-lite@1.0.30001810: {}
ccount@2.0.1: {}
chai@6.2.2: {}
change-case@5.4.4: {}
character-entities@2.0.2: {}
ci-info@4.4.0: {}
cjs-module-lexer@1.4.3: {}
commander@8.3.0: {}
comment-parser@1.4.7: {}
comment-parser@1.4.8: {}
convert-hrtime@5.0.0: {}
core-js-compat@3.50.0:
dependencies:
browserslist: 4.28.8
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
shebang-command: 2.0.0
which: 2.0.2
cssesc@3.0.0: {}
debug@4.4.3:
dependencies:
ms: 2.1.3
decode-named-character-reference@1.3.0:
dependencies:
character-entities: 2.0.2
deep-is@0.1.4: {}
defu@6.1.7: {}
dequal@2.0.3: {}
detect-indent@7.0.2: {}
detect-libc@2.1.2: {}
devlop@1.1.0:
dependencies:
dequal: 2.0.3
diff-sequences@29.6.3: {}
dts-resolver@3.0.0: {}
electron-to-chromium@1.5.421: {}
empathic@2.0.1: {}
enhanced-resolve@5.24.5:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.3
entities@8.0.0: {}
es-module-lexer@2.3.2: {}
escalade@3.2.0: {}
escape-string-regexp@4.0.0: {}
escape-string-regexp@5.0.0: {}
eslint-compat-utils@0.5.1(eslint@10.10.0(jiti@2.7.0)):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
semver: 7.8.5
eslint-config-flat-gitignore@2.4.0(eslint@10.10.0(jiti@2.7.0)):
dependencies:
'@eslint/compat': 2.1.1(eslint@10.10.0(jiti@2.7.0))
eslint: 10.10.0(jiti@2.7.0)
eslint-config-prettier@10.1.8(eslint@10.10.0(jiti@2.7.0)):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
eslint-flat-config-utils@3.2.0:
dependencies:
'@eslint/config-helpers': 0.5.5
pathe: 2.0.3
eslint-json-compat-utils@0.2.3(eslint@10.10.0(jiti@2.7.0))(jsonc-eslint-parser@3.3.0):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
esquery: 1.7.0
jsonc-eslint-parser: 3.3.0
eslint-plugin-antfu@3.2.3(eslint@10.10.0(jiti@2.7.0)):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
eslint-plugin-baseline-js@0.7.1(eslint@10.10.0(jiti@2.7.0)):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
eslint-plugin-es-x: 9.7.0(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-command@4.0.0(@typescript-eslint/typescript-estree@8.69.0(typescript@6.0.3))(@typescript-eslint/utils@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0)):
dependencies:
'@es-joy/jsdoccomment': 0.92.0
'@typescript-eslint/typescript-estree': 8.69.0(typescript@6.0.3)
'@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
eslint: 10.10.0(jiti@2.7.0)
eslint-plugin-de-morgan@2.1.3(eslint@10.10.0(jiti@2.7.0)):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
eslint-plugin-es-x@7.8.0(eslint@10.10.0(jiti@2.7.0)):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
'@eslint-community/regexpp': 4.12.2
eslint: 10.10.0(jiti@2.7.0)
eslint-compat-utils: 0.5.1(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-es-x@9.7.0(eslint@10.10.0(jiti@2.7.0)):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
'@eslint-community/regexpp': 4.12.2
eslint: 10.10.0(jiti@2.7.0)
eslint-type-tracer: 0.5.2(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-importer@0.4.1(eslint@10.10.0(jiti@2.7.0)):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
eslint-plugin-jsdoc@64.3.5(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3):
dependencies:
'@es-joy/jsdoccomment': 0.96.0
'@es-joy/resolve.exports': 1.2.0
'@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
are-docs-informative: 0.1.1
comment-parser: 1.4.8
debug: 4.4.3
escape-string-regexp: 5.0.0
eslint: 10.10.0(jiti@2.7.0)
espree: 11.2.0
esquery: 1.7.0
html-entities: 2.6.0
object-deep-merge: 2.0.1
parse-imports-exports: 0.2.4
semver: 7.8.5
spdx-expression-parse: 5.0.0
to-valid-identifier: 1.0.0
transitivePeerDependencies:
- supports-color
- typescript
eslint-plugin-jsonc@3.4.2(eslint@10.10.0(jiti@2.7.0)):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
'@eslint/core': 1.2.1
'@eslint/plugin-kit': 0.7.3
'@ota-meshi/ast-token-store': 0.3.0
diff-sequences: 29.6.3
eslint: 10.10.0(jiti@2.7.0)
eslint-json-compat-utils: 0.2.3(eslint@10.10.0(jiti@2.7.0))(jsonc-eslint-parser@3.3.0)
jsonc-eslint-parser: 3.3.0
natural-compare: 1.4.0
synckit: 0.11.13
transitivePeerDependencies:
- '@eslint/json'
eslint-plugin-n@18.3.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
enhanced-resolve: 5.24.5
eslint: 10.10.0(jiti@2.7.0)
eslint-plugin-es-x: 7.8.0(eslint@10.10.0(jiti@2.7.0))
get-tsconfig: 4.14.3
globals: 15.15.0
globrex: 0.1.2
ignore: 5.3.2
semver: 7.8.5
optionalDependencies:
typescript: 6.0.3
eslint-plugin-perfectionist@5.11.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3):
dependencies:
'@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
eslint: 10.10.0(jiti@2.7.0)
natural-orderby: 5.0.0
transitivePeerDependencies:
- supports-color
- typescript
eslint-plugin-pnpm@1.9.1(eslint@10.10.0(jiti@2.7.0)):
dependencies:
empathic: 2.0.1
eslint: 10.10.0(jiti@2.7.0)
eslint-json-compat-utils: 0.2.3(eslint@10.10.0(jiti@2.7.0))(jsonc-eslint-parser@3.3.0)
jsonc-eslint-parser: 3.3.0
pathe: 2.0.3
pnpm-workspace-yaml: 1.9.1
tinyglobby: 0.2.17
yaml: 2.9.0
yaml-eslint-parser: 2.1.0
transitivePeerDependencies:
- '@eslint/json'
eslint-plugin-prettier@5.5.6(eslint-config-prettier@10.1.8(eslint@10.10.0(jiti@2.7.0)))(eslint@10.10.0(jiti@2.7.0))(prettier@3.9.8):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
prettier: 3.9.8
prettier-linter-helpers: 1.0.1
synckit: 0.11.13
optionalDependencies:
eslint-config-prettier: 10.1.8(eslint@10.10.0(jiti@2.7.0))
eslint-plugin-regexp@3.3.0(eslint@10.10.0(jiti@2.7.0)):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
'@eslint-community/regexpp': 4.12.2
comment-parser: 1.4.8
eslint: 10.10.0(jiti@2.7.0)
jsdoc-type-pratt-parser: 9.2.1
refa: 0.12.1
regexp-ast-analysis: 0.7.1
scslre: 0.3.0
eslint-plugin-sxzz@0.5.0(eslint@10.10.0(jiti@2.7.0)):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
eslint-plugin-unicorn@74.0.0(eslint@10.10.0(jiti@2.7.0)):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
'@eslint/css-tree': 4.1.0
browserslist: 4.28.8
change-case: 5.4.4
ci-info: 4.4.0
core-js-compat: 3.50.0
detect-indent: 7.0.2
entities: 8.0.0
eslint: 10.10.0(jiti@2.7.0)
find-up-simple: 1.0.1
globals: 17.12.0
indent-string: 5.0.0
is-builtin-module: 5.0.0
is-identifier: 1.1.0
pluralize: 8.0.0
quote-js-string: 0.1.0
regjsparser: 0.13.2
reserved-identifiers: 1.2.0
semver: 7.8.5
strip-indent: 4.1.1
yaml: 2.9.0
eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0)):
dependencies:
eslint: 10.10.0(jiti@2.7.0)
optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
eslint-plugin-vue@10.10.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0))):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
eslint: 10.10.0(jiti@2.7.0)
natural-compare: 1.4.0
nth-check: 2.1.1
postcss-selector-parser: 7.1.6
semver: 7.8.5
vue-eslint-parser: 10.4.1(eslint@10.10.0(jiti@2.7.0))
xml-name-validator: 5.0.0
optionalDependencies:
'@typescript-eslint/parser': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
eslint-plugin-yml@3.8.1(eslint@10.10.0(jiti@2.7.0)):
dependencies:
'@eslint/core': 1.2.1
'@eslint/plugin-kit': 0.7.3
'@ota-meshi/ast-token-store': 0.3.0
diff-sequences: 29.6.3
escape-string-regexp: 5.0.0
eslint: 10.10.0(jiti@2.7.0)
natural-compare: 1.4.0
yaml-eslint-parser: 2.1.0
eslint-scope@9.1.2:
dependencies:
'@types/esrecurse': 4.3.1
'@types/estree': 1.0.9
esrecurse: 4.3.0
estraverse: 5.3.0
eslint-type-tracer@0.5.2(eslint@10.10.0(jiti@2.7.0)):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
eslint: 10.10.0(jiti@2.7.0)
eslint-visitor-keys@3.4.3: {}
eslint-visitor-keys@5.0.1: {}
eslint@10.10.0(jiti@2.7.0):
dependencies:
'@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.23.5
'@eslint/config-helpers': 0.7.0
'@eslint/core': 1.2.1
'@eslint/plugin-kit': 0.7.3
'@humanfs/node': 0.16.8
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.9
ajv: 6.15.0
cross-spawn: 7.0.6
debug: 4.4.3
escape-string-regexp: 4.0.0
eslint-scope: 9.1.2
eslint-visitor-keys: 5.0.1
espree: 11.2.0
esquery: 1.7.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
file-entry-cache: 11.1.5
find-up: 5.0.0
glob-parent: 6.0.2
ignore: 5.3.2
imurmurhash: 0.1.4
is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1
minimatch: 10.2.6
natural-compare: 1.4.0
optionator: 0.9.4
optionalDependencies:
jiti: 2.7.0
transitivePeerDependencies:
- supports-color
espree@11.2.0:
dependencies:
acorn: 8.18.0
acorn-jsx: 5.3.2(acorn@8.18.0)
eslint-visitor-keys: 5.0.1
esquery@1.7.0:
dependencies:
estraverse: 5.3.0
esrecurse@4.3.0:
dependencies:
estraverse: 5.3.0
estraverse@5.3.0: {}
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.9
esutils@2.0.3: {}
expect-type@1.4.0: {}
fast-deep-equal@3.1.3: {}
fast-diff@1.3.0: {}
fast-json-stable-stringify@2.1.0: {}
fast-levenshtein@2.0.6: {}
fault@2.0.1:
dependencies:
format: 0.2.2
fdir@6.5.0(picomatch@4.0.7):
optionalDependencies:
picomatch: 4.0.7
fflate@0.8.3: {}
file-entry-cache@11.1.5:
dependencies:
flat-cache: 6.1.23
find-up-simple@1.0.1: {}
find-up@5.0.0:
dependencies:
locate-path: 6.0.0
path-exists: 4.0.0
flat-cache@6.1.23:
dependencies:
cacheable: 2.5.0
flatted: 3.4.4
hookified: 1.15.1
flatted@3.4.4: {}
format@0.2.2: {}
fsevents@2.3.3:
optional: true
function-timeout@1.0.2: {}
get-tsconfig@4.14.3:
dependencies:
resolve-pkg-maps: 1.0.0
get-tsconfig@5.0.0-beta.6:
dependencies:
resolve-pkg-maps: 1.0.0
github-slugger@2.0.0: {}
glob-parent@6.0.2:
dependencies:
is-glob: 4.0.3
globals@15.15.0: {}
globals@17.12.0: {}
globrex@0.1.2: {}
graceful-fs@4.2.11: {}
hashery@1.5.1:
dependencies:
hookified: 1.15.1
hookable@6.1.1: {}
hookified@1.15.1: {}
hookified@2.2.0: {}
html-entities@2.6.0: {}
identifier-regex@1.1.0:
dependencies:
reserved-identifiers: 1.2.0
ignore@5.3.2: {}
ignore@7.0.8: {}
import-without-cache@0.4.0: {}
imurmurhash@0.1.4: {}
indent-string@5.0.0: {}
is-builtin-module@5.0.0:
dependencies:
builtin-modules: 5.3.0
is-extglob@2.1.1: {}
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
is-identifier@1.1.0:
dependencies:
identifier-regex: 1.1.0
super-regex: 1.1.0
isexe@2.0.0: {}
jiti@2.7.0: {}
js-tokens@10.0.0: {}
jsdoc-type-pratt-parser@9.0.1:
dependencies:
'@types/estree': 1.0.9
jsdoc-type-pratt-parser@9.2.1:
dependencies:
'@types/estree': 1.0.9
'@types/node': 26.6.1
jsesc@3.1.0: {}
json-schema-traverse@0.4.1: {}
json-stable-stringify-without-jsonify@1.0.1: {}
jsonc-eslint-parser@3.3.0:
dependencies:
acorn: 8.18.0
eslint-visitor-keys: 5.0.1
verkit: 0.3.2
jsonc-parser@3.3.1: {}
katex@0.16.47:
dependencies:
commander: 8.3.0
keyv@5.6.0:
dependencies:
'@keyv/serialize': 1.1.1
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
type-check: 0.4.0
lightningcss-android-arm64@1.33.0:
optional: true
lightningcss-darwin-arm64@1.33.0:
optional: true
lightningcss-darwin-x64@1.33.0:
optional: true
lightningcss-freebsd-x64@1.33.0:
optional: true
lightningcss-linux-arm-gnueabihf@1.33.0:
optional: true
lightningcss-linux-arm64-gnu@1.33.0:
optional: true
lightningcss-linux-arm64-musl@1.33.0:
optional: true
lightningcss-linux-x64-gnu@1.33.0:
optional: true
lightningcss-linux-x64-musl@1.33.0:
optional: true
lightningcss-win32-arm64-msvc@1.33.0:
optional: true
lightningcss-win32-x64-msvc@1.33.0:
optional: true
lightningcss@1.33.0:
dependencies:
detect-libc: 2.1.2
optionalDependencies:
lightningcss-android-arm64: 1.33.0
lightningcss-darwin-arm64: 1.33.0
lightningcss-darwin-x64: 1.33.0
lightningcss-freebsd-x64: 1.33.0
lightningcss-linux-arm-gnueabihf: 1.33.0
lightningcss-linux-arm64-gnu: 1.33.0
lightningcss-linux-arm64-musl: 1.33.0
lightningcss-linux-x64-gnu: 1.33.0
lightningcss-linux-x64-musl: 1.33.0
lightningcss-win32-arm64-msvc: 1.33.0
lightningcss-win32-x64-msvc: 1.33.0
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
longest-streak@3.1.0: {}
lru-cache@11.5.2: {}
magic-string@1.2.3:
dependencies:
'@jridgewell/sourcemap-codec': 1.6.0
magicast@0.5.4:
dependencies:
'@babel/parser': 7.29.8
'@babel/types': 7.29.8
source-map-js: 1.2.1
make-asynchronous@1.1.0:
dependencies:
p-event: 6.0.1
type-fest: 4.41.0
web-worker: 1.5.0
markdown-table@3.0.4: {}
mdast-util-find-and-replace@3.0.2:
dependencies:
'@types/mdast': 4.0.4
escape-string-regexp: 5.0.0
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
mdast-util-from-markdown@2.0.3:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
decode-named-character-reference: 1.3.0
devlop: 1.1.0
mdast-util-to-string: 4.0.0
micromark: 4.0.2
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-decode-string: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
unist-util-stringify-position: 4.0.0
transitivePeerDependencies:
- supports-color
mdast-util-frontmatter@2.0.1:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
escape-string-regexp: 5.0.0
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
micromark-extension-frontmatter: 2.0.0
transitivePeerDependencies:
- supports-color
mdast-util-gfm-autolink-literal@2.0.1:
dependencies:
'@types/mdast': 4.0.4
ccount: 2.0.1
devlop: 1.1.0
mdast-util-find-and-replace: 3.0.2
micromark-util-character: 2.1.1
mdast-util-gfm-footnote@2.1.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
micromark-util-normalize-identifier: 2.0.1
transitivePeerDependencies:
- supports-color
mdast-util-gfm-strikethrough@2.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-table@2.0.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
markdown-table: 3.0.4
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm-task-list-item@2.0.0:
dependencies:
'@types/mdast': 4.0.4
devlop: 1.1.0
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-gfm@3.1.0:
dependencies:
mdast-util-from-markdown: 2.0.3
mdast-util-gfm-autolink-literal: 2.0.1
mdast-util-gfm-footnote: 2.1.0
mdast-util-gfm-strikethrough: 2.0.0
mdast-util-gfm-table: 2.0.0
mdast-util-gfm-task-list-item: 2.0.0
mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
mdast-util-math@3.0.0:
dependencies:
'@types/hast': 3.0.5
'@types/mdast': 4.0.4
devlop: 1.1.0
longest-streak: 3.1.0
mdast-util-from-markdown: 2.0.3
mdast-util-to-markdown: 2.1.2
unist-util-remove-position: 5.0.0
transitivePeerDependencies:
- supports-color
mdast-util-phrasing@4.1.0:
dependencies:
'@types/mdast': 4.0.4
unist-util-is: 6.0.1
mdast-util-to-markdown@2.1.2:
dependencies:
'@types/mdast': 4.0.4
'@types/unist': 3.0.3
longest-streak: 3.1.0
mdast-util-phrasing: 4.1.0
mdast-util-to-string: 4.0.0
micromark-util-classify-character: 2.0.1
micromark-util-decode-string: 2.0.1
unist-util-visit: 5.1.0
zwitch: 2.0.4
mdast-util-to-string@4.0.0:
dependencies:
'@types/mdast': 4.0.4
mdn-data@2.34.0: {}
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.3.0
devlop: 1.1.0
micromark-factory-destination: 2.0.1
micromark-factory-label: 2.0.1
micromark-factory-space: 2.0.1
micromark-factory-title: 2.0.1
micromark-factory-whitespace: 2.0.1
micromark-util-character: 2.1.1
micromark-util-chunked: 2.0.1
micromark-util-classify-character: 2.0.1
micromark-util-html-tag-name: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-subtokenize: 2.1.0
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-frontmatter@2.0.0:
dependencies:
fault: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm-autolink-literal@2.1.0:
dependencies:
micromark-util-character: 2.1.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm-footnote@2.1.0:
dependencies:
devlop: 1.1.0
micromark-core-commonmark: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.1
micromark-util-classify-character: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm-table@2.1.1:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
micromark-util-types: 2.0.2
micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
devlop: 1.1.0
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-gfm@3.0.0:
dependencies:
micromark-extension-gfm-autolink-literal: 2.1.0
micromark-extension-gfm-footnote: 2.1.0
micromark-extension-gfm-strikethrough: 2.1.0
micromark-extension-gfm-table: 2.1.1
micromark-extension-gfm-tagfilter: 2.0.0
micromark-extension-gfm-task-list-item: 2.1.0
micromark-util-combine-extensions: 2.0.1
micromark-util-types: 2.0.2
micromark-extension-math@3.1.0:
dependencies:
'@types/katex': 0.16.8
devlop: 1.1.0
katex: 0.16.47
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-destination@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-label@2.0.1:
dependencies:
devlop: 1.1.0
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-space@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-types: 2.0.2
micromark-factory-title@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-factory-whitespace@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-util-character@2.1.1:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-util-chunked@2.0.1:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-classify-character@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-util-combine-extensions@2.0.1:
dependencies:
micromark-util-chunked: 2.0.1
micromark-util-types: 2.0.2
micromark-util-decode-numeric-character-reference@2.0.2:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-decode-string@2.0.1:
dependencies:
decode-named-character-reference: 1.3.0
micromark-util-character: 2.1.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-symbol: 2.0.1
micromark-util-encode@2.0.1: {}
micromark-util-html-tag-name@2.0.1: {}
micromark-util-normalize-identifier@2.0.1:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-resolve-all@2.0.1:
dependencies:
micromark-util-types: 2.0.2
micromark-util-sanitize-uri@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-encode: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-subtokenize@2.1.0:
dependencies:
devlop: 1.1.0
micromark-util-chunked: 2.0.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
micromark-util-symbol@2.0.1: {}
micromark-util-types@2.0.2: {}
micromark@4.0.2:
dependencies:
'@types/debug': 4.1.13
debug: 4.4.3
decode-named-character-reference: 1.3.0
devlop: 1.1.0
micromark-core-commonmark: 2.0.3
micromark-factory-space: 2.0.1
micromark-util-character: 2.1.1
micromark-util-chunked: 2.0.1
micromark-util-combine-extensions: 2.0.1
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-encode: 2.0.1
micromark-util-normalize-identifier: 2.0.1
micromark-util-resolve-all: 2.0.1
micromark-util-sanitize-uri: 2.0.1
micromark-util-subtokenize: 2.1.0
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
transitivePeerDependencies:
- supports-color
minimatch@10.2.6:
dependencies:
brace-expansion: 5.0.9
mri@1.2.0: {}
ms@2.1.3: {}
nanoid@3.3.18: {}
natural-compare@1.4.0: {}
natural-orderby@5.0.0: {}
node-releases@2.0.54: {}
nth-check@2.1.1:
dependencies:
boolbase: 1.0.0
object-deep-merge@2.0.1: {}
obug@2.1.4: {}
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
fast-levenshtein: 2.0.6
levn: 0.4.1
prelude-ls: 1.2.1
type-check: 0.4.0
word-wrap: 1.2.5
oxc-parser@0.139.0:
dependencies:
'@oxc-project/types': 0.139.0
optionalDependencies:
'@oxc-parser/binding-android-arm-eabi': 0.139.0
'@oxc-parser/binding-android-arm64': 0.139.0
'@oxc-parser/binding-darwin-arm64': 0.139.0
'@oxc-parser/binding-darwin-x64': 0.139.0
'@oxc-parser/binding-freebsd-x64': 0.139.0
'@oxc-parser/binding-linux-arm-gnueabihf': 0.139.0
'@oxc-parser/binding-linux-arm-musleabihf': 0.139.0
'@oxc-parser/binding-linux-arm64-gnu': 0.139.0
'@oxc-parser/binding-linux-arm64-musl': 0.139.0
'@oxc-parser/binding-linux-ppc64-gnu': 0.139.0
'@oxc-parser/binding-linux-riscv64-gnu': 0.139.0
'@oxc-parser/binding-linux-riscv64-musl': 0.139.0
'@oxc-parser/binding-linux-s390x-gnu': 0.139.0
'@oxc-parser/binding-linux-x64-gnu': 0.139.0
'@oxc-parser/binding-linux-x64-musl': 0.139.0
'@oxc-parser/binding-openharmony-arm64': 0.139.0
'@oxc-parser/binding-wasm32-wasi': 0.139.0
'@oxc-parser/binding-win32-arm64-msvc': 0.139.0
'@oxc-parser/binding-win32-ia32-msvc': 0.139.0
'@oxc-parser/binding-win32-x64-msvc': 0.139.0
p-event@6.0.1:
dependencies:
p-timeout: 6.1.4
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
p-locate@5.0.0:
dependencies:
p-limit: 3.1.0
p-timeout@6.1.4: {}
package-manager-detector@1.8.0: {}
parse-imports-exports@0.2.4:
dependencies:
parse-statements: 1.0.11
parse-statements@1.0.11: {}
path-exists@4.0.0: {}
path-key@3.1.1: {}
pathe@2.0.3: {}
picocolors@1.1.1: {}
picomatch@4.0.7: {}
pluralize@8.0.0: {}
pnpm-workspace-yaml@1.9.1:
dependencies:
yaml: 2.9.0
postcss-selector-parser@7.1.6:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss@8.5.28:
dependencies:
nanoid: 3.3.18
picocolors: 1.1.1
source-map-js: 1.2.1
prelude-ls@1.2.1: {}
prettier-linter-helpers@1.0.1:
dependencies:
fast-diff: 1.3.0
prettier@3.9.8: {}
publint@0.3.24:
dependencies:
'@publint/pack': 0.1.7
package-manager-detector: 1.8.0
picocolors: 1.1.1
sade: 1.8.1
punycode@2.3.1: {}
qified@0.10.1:
dependencies:
hookified: 2.2.0
quansync@1.0.0: {}
quote-js-string@0.1.0: {}
refa@0.12.1:
dependencies:
'@eslint-community/regexpp': 4.12.2
regexp-ast-analysis@0.7.1:
dependencies:
'@eslint-community/regexpp': 4.12.2
refa: 0.12.1
regjsparser@0.13.2:
dependencies:
jsesc: 3.1.0
reserved-identifiers@1.2.0: {}
resolve-pkg-maps@1.0.0: {}
rolldown-plugin-dts@0.28.5(rolldown@1.2.9)(typescript@6.0.3)(typescript@7.0.2):
dependencies:
dts-resolver: 3.0.0
get-tsconfig: 5.0.0-beta.6
obug: 2.1.4
rolldown: 1.2.9
yuku-ast: 0.9.3
yuku-codegen: 0.9.3
yuku-parser: 0.9.3
optionalDependencies:
'@typescript/native-preview': typescript@7.0.2
typescript: 6.0.3
transitivePeerDependencies:
- oxc-resolver
rolldown@1.2.7:
dependencies:
'@oxc-project/types': 0.148.0
'@rolldown/pluginutils': 1.0.1
optionalDependencies:
'@rolldown/binding-android-arm-eabi': 1.2.7
'@rolldown/binding-android-arm64': 1.2.7
'@rolldown/binding-darwin-arm64': 1.2.7
'@rolldown/binding-darwin-x64': 1.2.7
'@rolldown/binding-freebsd-x64': 1.2.7
'@rolldown/binding-linux-arm-gnueabihf': 1.2.7
'@rolldown/binding-linux-arm64-gnu': 1.2.7
'@rolldown/binding-linux-arm64-musl': 1.2.7
'@rolldown/binding-linux-ppc64-gnu': 1.2.7
'@rolldown/binding-linux-s390x-gnu': 1.2.7
'@rolldown/binding-linux-x64-gnu': 1.2.7
'@rolldown/binding-linux-x64-musl': 1.2.7
'@rolldown/binding-openharmony-arm64': 1.2.7
'@rolldown/binding-win32-arm64-msvc': 1.2.7
'@rolldown/binding-win32-x64-msvc': 1.2.7
rolldown@1.2.9:
dependencies:
'@oxc-project/types': 0.150.0
'@rolldown/pluginutils': 1.0.1
optionalDependencies:
'@rolldown/binding-android-arm-eabi': 1.2.9
'@rolldown/binding-android-arm64': 1.2.9
'@rolldown/binding-darwin-arm64': 1.2.9
'@rolldown/binding-darwin-x64': 1.2.9
'@rolldown/binding-freebsd-x64': 1.2.9
'@rolldown/binding-linux-arm-gnueabihf': 1.2.9
'@rolldown/binding-linux-arm64-gnu': 1.2.9
'@rolldown/binding-linux-arm64-musl': 1.2.9
'@rolldown/binding-linux-ppc64-gnu': 1.2.9
'@rolldown/binding-linux-s390x-gnu': 1.2.9
'@rolldown/binding-linux-x64-gnu': 1.2.9
'@rolldown/binding-linux-x64-musl': 1.2.9
'@rolldown/binding-openharmony-arm64': 1.2.9
'@rolldown/binding-win32-arm64-msvc': 1.2.9
'@rolldown/binding-win32-x64-msvc': 1.2.9
sade@1.8.1:
dependencies:
mri: 1.2.0
scslre@0.3.0:
dependencies:
'@eslint-community/regexpp': 4.12.2
refa: 0.12.1
regexp-ast-analysis: 0.7.1
semver@7.8.5: {}
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
shebang-regex@3.0.0: {}
siginfo@2.0.0: {}
source-map-js@1.2.1: {}
spdx-exceptions@2.5.0: {}
spdx-expression-parse@5.0.0:
dependencies:
spdx-exceptions: 2.5.0
spdx-license-ids: 3.0.23
spdx-license-ids@3.0.23: {}
stackback@0.0.2: {}
std-env@4.2.0: {}
strip-indent@4.1.1: {}
super-regex@1.1.0:
dependencies:
function-timeout: 1.0.2
make-asynchronous: 1.1.0
time-span: 5.1.0
synckit@0.11.13:
dependencies:
'@pkgr/core': 0.3.6
tapable@2.3.3: {}
time-span@5.1.0:
dependencies:
convert-hrtime: 5.0.0
tinybench@6.1.4: {}
tinyexec@1.3.0: {}
tinyexec@1.3.1: {}
tinyglobby@0.2.17:
dependencies:
fdir: 6.5.0(picomatch@4.0.7)
picomatch: 4.0.7
tinyrainbow@3.1.1: {}
to-valid-identifier@1.0.0:
dependencies:
'@sindresorhus/base62': 1.0.0
reserved-identifiers: 1.2.0
tree-kill@1.2.2: {}
ts-api-utils@2.5.0(typescript@6.0.3):
dependencies:
typescript: 6.0.3
tsdown-preset-sxzz@0.7.1(tsdown@0.23.0(@arethetypeswrong/core@0.18.5)(publint@0.3.24)(typescript@6.0.3)(typescript@7.0.2)):
dependencies:
'@arethetypeswrong/core': 0.18.5
publint: 0.3.24
tsdown: 0.23.0(@arethetypeswrong/core@0.18.5)(publint@0.3.24)(typescript@6.0.3)(typescript@7.0.2)
tsdown@0.23.0(@arethetypeswrong/core@0.18.5)(publint@0.3.24)(typescript@6.0.3)(typescript@7.0.2):
dependencies:
cac: 7.0.0
defu: 6.1.7
empathic: 2.0.1
hookable: 6.1.1
import-without-cache: 0.4.0
obug: 2.1.4
picomatch: 4.0.7
rolldown: 1.2.9
rolldown-plugin-dts: 0.28.5(rolldown@1.2.9)(typescript@6.0.3)(typescript@7.0.2)
tinyexec: 1.3.1
tinyglobby: 0.2.17
tree-kill: 1.2.2
unconfig-core: 7.5.0
verkit: 0.4.0
optionalDependencies:
'@arethetypeswrong/core': 0.18.5
publint: 0.3.24
typescript: 6.0.3
transitivePeerDependencies:
- '@typescript/native-preview'
- '@volar/typescript'
- oxc-resolver
- vue-tsc
tslib@2.8.1:
optional: true
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
type-fest@4.41.0: {}
typescript-eslint@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3):
dependencies:
'@typescript-eslint/eslint-plugin': 8.69.0(@typescript-eslint/parser@8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
'@typescript-eslint/parser': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
'@typescript-eslint/typescript-estree': 8.69.0(typescript@6.0.3)
'@typescript-eslint/utils': 8.69.0(eslint@10.10.0(jiti@2.7.0))(typescript@6.0.3)
eslint: 10.10.0(jiti@2.7.0)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
typescript@5.6.1-rc: {}
typescript@6.0.3: {}
typescript@7.0.2:
optionalDependencies:
'@typescript/typescript-aix-ppc64': 7.0.2
'@typescript/typescript-darwin-arm64': 7.0.2
'@typescript/typescript-darwin-x64': 7.0.2
'@typescript/typescript-freebsd-arm64': 7.0.2
'@typescript/typescript-freebsd-x64': 7.0.2
'@typescript/typescript-linux-arm': 7.0.2
'@typescript/typescript-linux-arm64': 7.0.2
'@typescript/typescript-linux-loong64': 7.0.2
'@typescript/typescript-linux-mips64el': 7.0.2
'@typescript/typescript-linux-ppc64': 7.0.2
'@typescript/typescript-linux-riscv64': 7.0.2
'@typescript/typescript-linux-s390x': 7.0.2
'@typescript/typescript-linux-x64': 7.0.2
'@typescript/typescript-netbsd-arm64': 7.0.2
'@typescript/typescript-netbsd-x64': 7.0.2
'@typescript/typescript-openbsd-arm64': 7.0.2
'@typescript/typescript-openbsd-x64': 7.0.2
'@typescript/typescript-sunos-x64': 7.0.2
'@typescript/typescript-win32-arm64': 7.0.2
'@typescript/typescript-win32-x64': 7.0.2
unconfig-core@7.5.0:
dependencies:
'@quansync/fs': 1.0.0
quansync: 1.0.0
unconfig@7.5.0:
dependencies:
'@quansync/fs': 1.0.0
defu: 6.1.7
jiti: 2.7.0
quansync: 1.0.0
unconfig-core: 7.5.0
undici-types@8.9.0: {}
unist-util-is@6.0.1:
dependencies:
'@types/unist': 3.0.3
unist-util-remove-position@5.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-visit: 5.1.0
unist-util-stringify-position@4.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-visit-parents@6.0.2:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.1
unist-util-visit@5.1.0:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
update-browserslist-db@1.3.2(browserslist@4.28.8):
dependencies:
browserslist: 4.28.8
escalade: 3.2.0
picocolors: 1.1.1
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
util-deprecate@1.0.2: {}
validate-npm-package-name@5.0.1: {}
verkit@0.3.2: {}
verkit@0.4.0: {}
vite@8.2.2(@types/node@26.6.1)(jiti@2.7.0)(yaml@2.9.0):
dependencies:
lightningcss: 1.33.0
picomatch: 4.0.7
postcss: 8.5.28
rolldown: 1.2.7
tinyglobby: 0.2.17
optionalDependencies:
'@types/node': 26.6.1
fsevents: 2.3.3
jiti: 2.7.0
yaml: 2.9.0
vitest@5.0.1(@types/node@26.6.1)(@vitest/coverage-v8@5.0.1)(vite@8.2.2(@types/node@26.6.1)(jiti@2.7.0)(yaml@2.9.0)):
dependencies:
'@types/chai': 5.2.3
'@vitest/mocker': 5.0.1(vite@8.2.2(@types/node@26.6.1)(jiti@2.7.0)(yaml@2.9.0))
chai: 6.2.2
es-module-lexer: 2.3.2
expect-type: 1.4.0
magic-string: 1.2.3
obug: 2.1.4
picomatch: 4.0.7
std-env: 4.2.0
tinybench: 6.1.4
tinyexec: 1.3.0
tinyglobby: 0.2.17
vite: 8.2.2(@types/node@26.6.1)(jiti@2.7.0)(yaml@2.9.0)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 26.6.1
'@vitest/coverage-v8': 5.0.1(vitest@5.0.1)
transitivePeerDependencies:
- msw
vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)):
dependencies:
debug: 4.4.3
eslint: 10.10.0(jiti@2.7.0)
eslint-scope: 9.1.2
eslint-visitor-keys: 5.0.1
espree: 11.2.0
esquery: 1.7.0
semver: 7.8.5
transitivePeerDependencies:
- supports-color
web-worker@1.5.0: {}
which@2.0.2:
dependencies:
isexe: 2.0.0
why-is-node-running@2.3.0:
dependencies:
siginfo: 2.0.0
stackback: 0.0.2
word-wrap@1.2.5: {}
xml-name-validator@5.0.0: {}
yaml-eslint-parser@2.1.0:
dependencies:
eslint-visitor-keys: 5.0.1
yaml: 2.9.0
yaml@2.9.0: {}
yocto-queue@0.1.0: {}
yuku-ast@0.9.3:
dependencies:
'@yuku-toolchain/types': 0.9.3
yuku-codegen@0.9.3:
dependencies:
'@yuku-toolchain/types': 0.9.3
optionalDependencies:
'@yuku-codegen/binding-android-arm64': 0.9.3
'@yuku-codegen/binding-darwin-arm64': 0.9.3
'@yuku-codegen/binding-darwin-x64': 0.9.3
'@yuku-codegen/binding-freebsd-x64': 0.9.3
'@yuku-codegen/binding-linux-arm-gnu': 0.9.3
'@yuku-codegen/binding-linux-arm-musl': 0.9.3
'@yuku-codegen/binding-linux-arm64-gnu': 0.9.3
'@yuku-codegen/binding-linux-arm64-musl': 0.9.3
'@yuku-codegen/binding-linux-x64-gnu': 0.9.3
'@yuku-codegen/binding-linux-x64-musl': 0.9.3
'@yuku-codegen/binding-win32-arm64': 0.9.3
'@yuku-codegen/binding-win32-x64': 0.9.3
yuku-parser@0.9.3:
dependencies:
'@yuku-toolchain/types': 0.9.3
yuku-ast: 0.9.3
optionalDependencies:
'@yuku-parser/binding-android-arm64': 0.9.3
'@yuku-parser/binding-darwin-arm64': 0.9.3
'@yuku-parser/binding-darwin-x64': 0.9.3
'@yuku-parser/binding-freebsd-x64': 0.9.3
'@yuku-parser/binding-linux-arm-gnu': 0.9.3
'@yuku-parser/binding-linux-arm-musl': 0.9.3
'@yuku-parser/binding-linux-arm64-gnu': 0.9.3
'@yuku-parser/binding-linux-arm64-musl': 0.9.3
'@yuku-parser/binding-linux-x64-gnu': 0.9.3
'@yuku-parser/binding-linux-x64-musl': 0.9.3
'@yuku-parser/binding-win32-arm64': 0.9.3
'@yuku-parser/binding-win32-x64': 0.9.3
zwitch@2.0.4: {}
sxzz-verkit-a5b7150/pnpm-workspace.yaml 0000664 0000000 0000000 00000000215 15253274704 0020221 0 ustar 00root root 0000000 0000000 packages: []
minimumReleaseAge: 0
shellEmulator: true
trustLockfile: true
trustPolicy: no-downgrade
trustPolicyIgnoreAfter: 604800 # 7 days
sxzz-verkit-a5b7150/src/ 0000775 0000000 0000000 00000000000 15253274704 0015160 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/src/comparator.ts 0000664 0000000 0000000 00000000443 15253274704 0017700 0 ustar 00root root 0000000 0000000 export {
comparatorsIntersect,
normalizeComparator,
satisfiesComparator,
} from './comparator/operations.ts'
export { parseComparator, tryParseComparator } from './comparator/parse.ts'
export type {
ComparatorInput,
RangeOptions,
SemVerComparator,
} from './comparator/types.ts'
sxzz-verkit-a5b7150/src/comparator/ 0000775 0000000 0000000 00000000000 15253274704 0017327 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/src/comparator/operations.ts 0000664 0000000 0000000 00000003525 15253274704 0022067 0 ustar 00root root 0000000 0000000 import { formatComparator, parseComparator } from './parse.ts'
import { parsedComparatorsIntersect, testComparatorVersion } from './set.ts'
import type { VersionInput } from '../version/types.ts'
import type {
ComparatorInput,
RangeOptions,
SemVerComparator,
} from './types.ts'
function resolveComparator(
comparator: ComparatorInput,
options: RangeOptions,
): SemVerComparator {
return typeof comparator === 'string'
? parseComparator(comparator, options)
: comparator
}
export function normalizeComparator(
comparator: string,
options?: RangeOptions,
): string
export function normalizeComparator(comparator: ComparatorInput): string
export function normalizeComparator(
comparator: ComparatorInput,
options: RangeOptions = {},
): string {
return formatComparator(resolveComparator(comparator, options))
}
export function satisfiesComparator(
version: VersionInput,
comparator: string,
options?: RangeOptions,
): boolean
export function satisfiesComparator(
version: VersionInput,
comparator: ComparatorInput,
): boolean
export function satisfiesComparator(
version: VersionInput,
comparator: ComparatorInput,
options: RangeOptions = {},
): boolean {
return testComparatorVersion(resolveComparator(comparator, options), version)
}
export function comparatorsIntersect(
left: string,
right: string,
options?: RangeOptions,
): boolean
export function comparatorsIntersect(
left: ComparatorInput,
right: ComparatorInput,
): boolean
export function comparatorsIntersect(
left: ComparatorInput,
right: ComparatorInput,
options: RangeOptions = {},
): boolean {
const parsedLeft = resolveComparator(left, options)
const parsedRight = resolveComparator(right, options)
return parsedComparatorsIntersect(parsedLeft, parsedRight, {
...parsedLeft.options,
...parsedRight.options,
...options,
})
}
sxzz-verkit-a5b7150/src/comparator/parse.ts 0000664 0000000 0000000 00000003727 15253274704 0021022 0 ustar 00root root 0000000 0000000 import { formatComparableVersion, parse } from '../version/parse.ts'
import {
FULL_PLAIN,
GREATER_LESS_THAN,
LOOSE_PLAIN,
safeRegex,
} from '../version/patterns.ts'
import type {
ComparatorInput,
RangeOptions,
SemVerComparator,
} from './types.ts'
const STRICT_COMPARATOR = safeRegex(
String.raw`^${GREATER_LESS_THAN}\s*(${FULL_PLAIN})$|^$`,
)
const LOOSE_COMPARATOR = safeRegex(
String.raw`^${GREATER_LESS_THAN}\s*(${LOOSE_PLAIN})$|^$`,
)
export function formatComparator(comparator: SemVerComparator): string {
return comparator.version
? `${comparator.operator}${formatComparableVersion(comparator.version)}`
: ''
}
export function parseComparator(
comparator: string,
options?: RangeOptions,
): SemVerComparator
export function parseComparator(comparator: ComparatorInput): SemVerComparator
export function parseComparator(
comparator: ComparatorInput,
options: RangeOptions = {},
): SemVerComparator {
if (typeof comparator !== 'string') return comparator
const normalized = comparator.trim().replaceAll(/\s+/g, ' ')
const match = normalized.match(
options.loose ? LOOSE_COMPARATOR : STRICT_COMPARATOR,
)
if (!match) throw new TypeError(`Invalid comparator: ${normalized}`)
const operator = (
match[1] === '=' ? '' : match[1] || ''
) as SemVerComparator['operator']
const version = match[2] ? parse(match[2], options) : null
return {
operator,
options,
value: version ? `${operator}${formatComparableVersion(version)}` : '',
version,
}
}
export function tryParseComparator(
comparator: string,
options?: RangeOptions,
): SemVerComparator | null
export function tryParseComparator(
comparator: ComparatorInput,
): SemVerComparator | null
export function tryParseComparator(
comparator: ComparatorInput,
options: RangeOptions = {},
): SemVerComparator | null {
try {
return typeof comparator === 'string'
? parseComparator(comparator, options)
: comparator
} catch {
return null
}
}
sxzz-verkit-a5b7150/src/comparator/set.ts 0000664 0000000 0000000 00000006162 15253274704 0020477 0 ustar 00root root 0000000 0000000 import { compareParsed } from '../version/comparison.ts'
import { tryParse } from '../version/parse.ts'
import { formatComparator } from './parse.ts'
import type { SemVer, VersionInput } from '../version/types.ts'
import type { RangeOptions, SemVerComparator } from './types.ts'
export function testParsedComparator(
comparator: SemVerComparator,
version: SemVer,
): boolean {
if (!comparator.version) return true
const comparison = compareParsed(version, comparator.version)
switch (comparator.operator) {
case '':
return comparison === 0
case '>':
return comparison > 0
case '>=':
return comparison >= 0
case '<':
return comparison < 0
case '<=':
return comparison <= 0
}
}
export function testComparatorVersion(
comparator: SemVerComparator,
version: VersionInput,
): boolean {
const parsed = tryParse(version, comparator.options)
return parsed ? testParsedComparator(comparator, parsed) : false
}
export function comparatorAllowsPrerelease(
comparator: SemVerComparator,
version: SemVer,
): boolean {
const allowed = comparator.version
return (
allowed !== null &&
!!allowed.prerelease?.length &&
allowed.major === version.major &&
allowed.minor === version.minor &&
allowed.patch === version.patch
)
}
export function testComparatorSet(
set: readonly SemVerComparator[],
version: SemVer,
options: RangeOptions,
): boolean {
if (set.some((comparator) => !testParsedComparator(comparator, version))) {
return false
}
return (
!version.prerelease?.length ||
!!options.includePrerelease ||
set.some((comparator) => comparatorAllowsPrerelease(comparator, version))
)
}
export function parsedComparatorsIntersect(
left: SemVerComparator,
right: SemVerComparator,
options: RangeOptions = {},
): boolean {
if (!left.version || !right.version) return true
// An exact-version comparator admits one version, so the other side must be
// tested as a set to apply the prerelease rule.
if (left.operator === '') {
return testComparatorSet([right], left.version, options)
}
if (right.operator === '') {
return testComparatorSet([left], right.version, options)
}
const leftValue = formatComparator(left)
const rightValue = formatComparator(right)
if (
options.includePrerelease &&
(leftValue === '<0.0.0-0' || rightValue === '<0.0.0-0')
) {
return false
}
if (
!options.includePrerelease &&
(leftValue.startsWith('<0.0.0') || rightValue.startsWith('<0.0.0'))
) {
return false
}
if (left.operator.startsWith('>') && right.operator.startsWith('>')) {
return true
}
if (left.operator.startsWith('<') && right.operator.startsWith('<')) {
return true
}
const comparison = compareParsed(left.version, right.version)
if (
comparison === 0 &&
left.operator.includes('=') &&
right.operator.includes('=')
) {
return true
}
if (
comparison < 0 &&
left.operator.startsWith('>') &&
right.operator.startsWith('<')
) {
return true
}
return (
comparison > 0 &&
left.operator.startsWith('<') &&
right.operator.startsWith('>')
)
}
sxzz-verkit-a5b7150/src/comparator/types.ts 0000664 0000000 0000000 00000000544 15253274704 0021046 0 ustar 00root root 0000000 0000000 import type { SemVer, VersionOptions } from '../version/types.ts'
export interface RangeOptions extends VersionOptions {
includePrerelease?: boolean
}
export interface SemVerComparator {
operator: '' | '<' | '<=' | '>' | '>='
options: RangeOptions
value: string
version: SemVer | null
}
export type ComparatorInput = SemVerComparator | string
sxzz-verkit-a5b7150/src/index.ts 0000664 0000000 0000000 00000000130 15253274704 0016631 0 ustar 00root root 0000000 0000000 export * from './comparator.ts'
export * from './range.ts'
export * from './version.ts'
sxzz-verkit-a5b7150/src/range.ts 0000664 0000000 0000000 00000000714 15253274704 0016626 0 ustar 00root root 0000000 0000000 export {
findMaxSatisfying,
findMinimumForRange,
findMinSatisfying,
isGreaterThanRange,
isLessThanRange,
isOutsideRange,
isValidRange,
normalizeRange,
rangesIntersect,
rangeToComparators,
satisfies,
simplifyRange,
} from './range/operations.ts'
export { parseRange, tryParseRange } from './range/parse.ts'
export { isRangeSubset } from './range/subset.ts'
export type { RangeDirection, RangeInput, SemVerRange } from './range/types.ts'
sxzz-verkit-a5b7150/src/range/ 0000775 0000000 0000000 00000000000 15253274704 0016254 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/src/range/operations.ts 0000664 0000000 0000000 00000026172 15253274704 0021017 0 ustar 00root root 0000000 0000000 import { formatComparator, parseComparator } from '../comparator/parse.ts'
import { compareParsed, sort } from '../version/comparison.ts'
import { formatComparableVersion, parse, tryParse } from '../version/parse.ts'
import {
formatRange,
parsedRangesIntersect,
parseRange,
testParsedRange,
testRangeVersion,
tryParseRange,
type ParseRangeInput,
} from './parse.ts'
import type { RangeOptions } from '../comparator/types.ts'
import type { SemVer, VersionInput } from '../version/types.ts'
import type { RangeDirection, RangeInput, SemVerRange } from './types.ts'
type TryParseRangeInput = (
range: RangeInput,
options?: RangeOptions,
) => SemVerRange | null
type IsOutsideRangeInput = (
version: VersionInput,
range: RangeInput,
direction: RangeDirection,
options?: RangeOptions,
) => boolean
export function isValidRange(range: string, options?: RangeOptions): boolean
export function isValidRange(range: RangeInput): boolean
export function isValidRange(
range: RangeInput,
options: RangeOptions = {},
): boolean {
return (tryParseRange as TryParseRangeInput)(range, options) !== null
}
export function normalizeRange(
range: string,
options?: RangeOptions,
): string | null
export function normalizeRange(range: RangeInput): string | null
export function normalizeRange(
range: RangeInput,
options: RangeOptions = {},
): string | null {
const parsed = (tryParseRange as TryParseRangeInput)(range, options)
return parsed ? formatRange(parsed) || '*' : null
}
export function satisfies(
version: VersionInput,
range: string,
options?: RangeOptions,
): boolean
export function satisfies(version: VersionInput, range: RangeInput): boolean
export function satisfies(
version: VersionInput,
range: RangeInput,
options: RangeOptions = {},
): boolean {
const parsed = (tryParseRange as TryParseRangeInput)(range, options)
return parsed ? testRangeVersion(parsed, version) : false
}
export function rangeToComparators(
range: string,
options?: RangeOptions,
): string[][]
export function rangeToComparators(range: RangeInput): string[][]
export function rangeToComparators(
range: RangeInput,
options: RangeOptions = {},
): string[][] {
return (parseRange as ParseRangeInput)(range, options).sets.map((set) =>
set.map(formatComparator).join(' ').trim().split(' '),
)
}
export function findMaxSatisfying(
versions: readonly T[],
range: string,
options?: RangeOptions,
): T | null
export function findMaxSatisfying(
versions: readonly T[],
range: RangeInput,
): T | null
export function findMaxSatisfying(
versions: readonly T[],
range: RangeInput,
options: RangeOptions = {},
): T | null {
const parsedRange = (tryParseRange as TryParseRangeInput)(range, options)
if (!parsedRange) return null
let maximum: T | null = null
let maximumParsed: SemVer | null = null
for (const version of versions) {
const parsedVersion = tryParse(version, parsedRange.options)
if (!parsedVersion || !testParsedRange(parsedRange, parsedVersion)) continue
if (!maximumParsed || compareParsed(maximumParsed, parsedVersion) < 0) {
maximum = version
maximumParsed = parsedVersion
}
}
return maximum
}
export function findMinSatisfying(
versions: readonly T[],
range: string,
options?: RangeOptions,
): T | null
export function findMinSatisfying(
versions: readonly T[],
range: RangeInput,
): T | null
export function findMinSatisfying(
versions: readonly T[],
range: RangeInput,
options: RangeOptions = {},
): T | null {
const parsedRange = (tryParseRange as TryParseRangeInput)(range, options)
if (!parsedRange) return null
let minimum: T | null = null
let minimumParsed: SemVer | null = null
for (const version of versions) {
const parsedVersion = tryParse(version, parsedRange.options)
if (!parsedVersion || !testParsedRange(parsedRange, parsedVersion)) continue
if (!minimumParsed || compareParsed(minimumParsed, parsedVersion) > 0) {
minimum = version
minimumParsed = parsedVersion
}
}
return minimum
}
function nextVersionAfter(version: SemVer): SemVer {
const { prerelease } = version
return prerelease?.length
? {
major: version.major,
minor: version.minor,
patch: version.patch,
prerelease: [...prerelease, 0],
}
: {
major: version.major,
minor: version.minor,
patch: version.patch + 1,
}
}
export function findMinimumForRange(
range: string,
options?: RangeOptions,
): SemVer | null
export function findMinimumForRange(range: RangeInput): SemVer | null
export function findMinimumForRange(
range: RangeInput,
options: RangeOptions = {},
): SemVer | null {
const parsedRange = (parseRange as ParseRangeInput)(range, options)
const zero: SemVer = { major: 0, minor: 0, patch: 0 }
if (testParsedRange(parsedRange, zero)) return zero
const zeroPrerelease: SemVer = { ...zero, prerelease: [0] }
if (testParsedRange(parsedRange, zeroPrerelease)) return zeroPrerelease
let minimum: SemVer | null = null
for (const set of parsedRange.sets) {
let setMinimum: SemVer | null = null
for (const comparator of set) {
if (!comparator.version) continue
const candidate =
comparator.operator === '>'
? nextVersionAfter(comparator.version)
: comparator.operator === '' || comparator.operator === '>='
? structuredClone(comparator.version)
: null
if (
candidate &&
(!setMinimum || compareParsed(candidate, setMinimum) > 0)
) {
setMinimum = candidate
}
}
if (setMinimum && (!minimum || compareParsed(minimum, setMinimum) > 0)) {
minimum = setMinimum
}
}
return minimum && testParsedRange(parsedRange, minimum) ? minimum : null
}
function compareInDirection(
left: SemVer,
right: SemVer,
direction: RangeDirection,
): boolean {
const comparison = compareParsed(left, right)
return direction === '>' ? comparison > 0 : comparison < 0
}
function compareOppositeOrEqual(
left: SemVer,
right: SemVer,
direction: RangeDirection,
): boolean {
const comparison = compareParsed(left, right)
return direction === '>' ? comparison <= 0 : comparison >= 0
}
function compareOpposite(
left: SemVer,
right: SemVer,
direction: RangeDirection,
): boolean {
const comparison = compareParsed(left, right)
return direction === '>' ? comparison < 0 : comparison > 0
}
export function isOutsideRange(
version: VersionInput,
range: string,
direction: RangeDirection,
options?: RangeOptions,
): boolean
export function isOutsideRange(
version: VersionInput,
range: RangeInput,
direction: RangeDirection,
): boolean
export function isOutsideRange(
version: VersionInput,
range: RangeInput,
direction: RangeDirection,
options: RangeOptions = {},
): boolean {
if (direction !== '>' && direction !== '<') {
throw new TypeError('Must provide a direction of "<" or ">"')
}
const parsedRange = (parseRange as ParseRangeInput)(range, options)
const parsedVersion = parse(version, parsedRange.options)
if (testParsedRange(parsedRange, parsedVersion)) return false
const inclusiveDirection = direction === '>' ? '>=' : '<='
for (const set of parsedRange.sets) {
const concrete = set.map((comparator) =>
comparator.version ? comparator : parseComparator('>=0.0.0'),
)
let high = concrete[0]!
let low = concrete[0]!
for (const comparator of concrete) {
if (compareInDirection(comparator.version!, high.version!, direction)) {
high = comparator
} else if (
compareOpposite(comparator.version!, low.version!, direction)
) {
low = comparator
}
}
if (high.operator === direction || high.operator === inclusiveDirection) {
return false
}
if (
(!low.operator || low.operator === direction) &&
compareOppositeOrEqual(parsedVersion, low.version!, direction)
) {
return false
}
if (
low.operator === inclusiveDirection &&
compareOpposite(parsedVersion, low.version!, direction)
) {
return false
}
}
return true
}
export function isGreaterThanRange(
version: VersionInput,
range: string,
options?: RangeOptions,
): boolean
export function isGreaterThanRange(
version: VersionInput,
range: RangeInput,
): boolean
export function isGreaterThanRange(
version: VersionInput,
range: RangeInput,
options: RangeOptions = {},
): boolean {
return (isOutsideRange as IsOutsideRangeInput)(version, range, '>', options)
}
export function isLessThanRange(
version: VersionInput,
range: string,
options?: RangeOptions,
): boolean
export function isLessThanRange(
version: VersionInput,
range: RangeInput,
): boolean
export function isLessThanRange(
version: VersionInput,
range: RangeInput,
options: RangeOptions = {},
): boolean {
return (isOutsideRange as IsOutsideRangeInput)(version, range, '<', options)
}
export function rangesIntersect(
left: string,
right: string,
options?: RangeOptions,
): boolean
export function rangesIntersect(left: RangeInput, right: RangeInput): boolean
export function rangesIntersect(
left: RangeInput,
right: RangeInput,
options: RangeOptions = {},
): boolean {
const parsedLeft = (parseRange as ParseRangeInput)(left, options)
const parsedRight = (parseRange as ParseRangeInput)(right, options)
return parsedRangesIntersect(parsedLeft, parsedRight, {
...parsedLeft.options,
...parsedRight.options,
...options,
})
}
export function simplifyRange(
versions: readonly T[],
range: string,
options?: RangeOptions,
): string
export function simplifyRange(
versions: readonly T[],
range: RangeInput,
): string
export function simplifyRange(
versions: readonly T[],
range: RangeInput,
options: RangeOptions = {},
): string {
const parsedRange = (parseRange as ParseRangeInput)(range, options)
const sorted = sort(versions, parsedRange.options)
const sets: [T, T | null][] = []
let first: T | null = null
let previous: T | null = null
for (const version of sorted) {
if (testRangeVersion(parsedRange, version)) {
previous = version
first ??= version
} else if (previous) {
sets.push([first!, previous])
first = null
previous = null
}
}
if (first) sets.push([first, null])
const simplified = sets
.map(([minimum, maximum]) => {
const minimumValue = formatComparableVersion(
parse(minimum, parsedRange.options),
)
const maximumValue = maximum
? formatComparableVersion(parse(maximum, parsedRange.options))
: null
if (minimumValue === maximumValue) return minimumValue
if (!maximum && minimum === sorted[0]) return '*'
if (!maximumValue) return `>=${minimumValue}`
if (minimum === sorted[0]) return `<=${maximumValue}`
return `${minimumValue} - ${maximumValue}`
})
.join(' || ')
const original =
typeof range === 'string' ? range : formatRange(parsedRange) || '*'
return simplified.length < original.length ? simplified : original
}
sxzz-verkit-a5b7150/src/range/parse.ts 0000664 0000000 0000000 00000031660 15253274704 0017744 0 ustar 00root root 0000000 0000000 import { formatComparator, parseComparator } from '../comparator/parse.ts'
import {
parsedComparatorsIntersect,
testComparatorSet,
} from '../comparator/set.ts'
import { tryParse } from '../version/parse.ts'
import {
BUILD,
GREATER_LESS_THAN,
LONE_CARET,
LONE_TILDE,
LOOSE_PLAIN,
safeRegex,
XRANGE_PLAIN,
XRANGE_PLAIN_LOOSE,
} from '../version/patterns.ts'
import type { RangeOptions, SemVerComparator } from '../comparator/types.ts'
import type { SemVer, VersionInput } from '../version/types.ts'
import type { RangeInput, SemVerRange } from './types.ts'
export type ParseRangeInput = (
range: RangeInput,
options?: RangeOptions,
) => SemVerRange
export function formatRange(range: SemVerRange): string {
return range.sets.map((set) => set.map(formatComparator).join(' ')).join('||')
}
const BUILD_STRIP = new RegExp(BUILD, 'g')
const BUILD_SAFE = safeRegex(BUILD)
const STRICT_HYPHEN = safeRegex(
String.raw`^\s*(${XRANGE_PLAIN})\s+-\s+(${XRANGE_PLAIN})\s*$`,
)
const LOOSE_HYPHEN = safeRegex(
String.raw`^\s*(${XRANGE_PLAIN_LOOSE})\s+-\s+(${XRANGE_PLAIN_LOOSE})\s*$`,
)
const COMPARATOR_TRIM = safeRegex(
String.raw`(\s*)${GREATER_LESS_THAN}\s*(${LOOSE_PLAIN}|${XRANGE_PLAIN})`,
'g',
)
const TILDE_TRIM = safeRegex(String.raw`(\s*)${LONE_TILDE}\s+`, 'g')
const CARET_TRIM = safeRegex(String.raw`(\s*)${LONE_CARET}\s+`, 'g')
const STRICT_TILDE = safeRegex(`^${LONE_TILDE}${XRANGE_PLAIN}$`)
const LOOSE_TILDE = safeRegex(`^${LONE_TILDE}${XRANGE_PLAIN_LOOSE}$`)
const STRICT_CARET = safeRegex(`^${LONE_CARET}${XRANGE_PLAIN}$`)
const LOOSE_CARET = safeRegex(`^${LONE_CARET}${XRANGE_PLAIN_LOOSE}$`)
const STRICT_XRANGE = safeRegex(
String.raw`^${GREATER_LESS_THAN}\s*${XRANGE_PLAIN}$`,
)
const LOOSE_XRANGE = safeRegex(
String.raw`^${GREATER_LESS_THAN}\s*${XRANGE_PLAIN_LOOSE}$`,
)
const STAR = safeRegex(String.raw`(<|>)?=?\s*\*`)
const GTE_ZERO = /^\s*>=\s*0\.0\.0\s*$/
const GTE_ZERO_PRERELEASE = /^\s*>=\s*0\.0\.0-0\s*$/
const LOOSE_COMPARATOR = safeRegex(
String.raw`^${GREATER_LESS_THAN}\s*(${LOOSE_PLAIN})$|^$`,
)
function isWildcard(value: unknown): boolean {
return !value || String(value).toLowerCase() === 'x' || String(value) === '*'
}
function hasInvalidWildcardOrder(
major: string | undefined,
minor: string | undefined,
patch: string | undefined,
): boolean {
return (
(isWildcard(major) && !isWildcard(minor)) ||
(isWildcard(minor) && Boolean(patch) && !isWildcard(patch))
)
}
function replaceTilde(comparator: string, options: RangeOptions): string {
const expression = options.loose ? LOOSE_TILDE : STRICT_TILDE
const lowerPrerelease = options.includePrerelease ? '-0' : ''
return comparator.replace(
expression,
(_match, major, minor, patch, prerelease) => {
if (isWildcard(major)) return ''
if (isWildcard(minor)) {
return `>=${major}.0.0${lowerPrerelease} <${Number(major) + 1}.0.0-0`
}
if (isWildcard(patch)) {
return `>=${major}.${minor}.0${lowerPrerelease} <${major}.${Number(minor) + 1}.0-0`
}
return prerelease
? `>=${major}.${minor}.${patch}-${prerelease} <${major}.${Number(minor) + 1}.0-0`
: `>=${major}.${minor}.${patch} <${major}.${Number(minor) + 1}.0-0`
},
)
}
function replaceTildes(comparator: string, options: RangeOptions): string {
return comparator
.trim()
.split(/\s+/)
.map((part) => replaceTilde(part, options))
.join(' ')
}
function replaceCaret(comparator: string, options: RangeOptions): string {
const expression = options.loose ? LOOSE_CARET : STRICT_CARET
const lowerPrerelease = options.includePrerelease ? '-0' : ''
return comparator.replace(
expression,
(_match, major, minor, patch, prerelease) => {
if (isWildcard(major)) return ''
if (isWildcard(minor)) {
return `>=${major}.0.0${lowerPrerelease} <${Number(major) + 1}.0.0-0`
}
if (isWildcard(patch)) {
return major === '0'
? `>=${major}.${minor}.0${lowerPrerelease} <${major}.${Number(minor) + 1}.0-0`
: `>=${major}.${minor}.0${lowerPrerelease} <${Number(major) + 1}.0.0-0`
}
if (prerelease) {
return major === '0'
? minor === '0'
? `>=${major}.${minor}.${patch}-${prerelease} <${major}.${minor}.${Number(patch) + 1}-0`
: `>=${major}.${minor}.${patch}-${prerelease} <${major}.${Number(minor) + 1}.0-0`
: `>=${major}.${minor}.${patch}-${prerelease} <${Number(major) + 1}.0.0-0`
}
return major === '0'
? minor === '0'
? `>=${major}.${minor}.${patch} <${major}.${minor}.${Number(patch) + 1}-0`
: `>=${major}.${minor}.${patch} <${major}.${Number(minor) + 1}.0-0`
: `>=${major}.${minor}.${patch} <${Number(major) + 1}.0.0-0`
},
)
}
function replaceCarets(comparator: string, options: RangeOptions): string {
return comparator
.trim()
.split(/\s+/)
.map((part) => replaceCaret(part, options))
.join(' ')
}
function replaceXRange(comparator: string, options: RangeOptions): string {
const expression = options.loose ? LOOSE_XRANGE : STRICT_XRANGE
return comparator
.trim()
.replace(expression, (match, rawOperator, rawMajor, rawMinor, rawPatch) => {
let operator = rawOperator as string
let major = rawMajor as number | string
let minor = rawMinor as number | string
let patch = rawPatch as number | string
if (
hasInvalidWildcardOrder(
String(major),
minor === undefined ? undefined : String(minor),
patch === undefined ? undefined : String(patch),
)
) {
return comparator
}
const wildcardMajor = isWildcard(major)
const wildcardMinor = wildcardMajor || isWildcard(minor)
const wildcardPatch = wildcardMinor || isWildcard(patch)
if (operator === '=' && wildcardPatch) operator = ''
if (wildcardMajor) {
return operator === '>' || operator === '<' ? '<0.0.0-0' : '*'
}
let prerelease = options.includePrerelease ? '-0' : ''
if (operator && wildcardPatch) {
if (wildcardMinor) minor = 0
patch = 0
if (operator === '>') {
operator = '>='
if (wildcardMinor) {
major = Number(major) + 1
minor = 0
} else {
minor = Number(minor) + 1
}
} else if (operator === '<=') {
operator = '<'
if (wildcardMinor) major = Number(major) + 1
else minor = Number(minor) + 1
}
if (operator === '<') prerelease = '-0'
return `${operator}${major}.${minor}.${patch}${prerelease}`
}
if (wildcardMinor) {
return `>=${major}.0.0${prerelease} <${Number(major) + 1}.0.0-0`
}
if (wildcardPatch) {
return `>=${major}.${minor}.0${prerelease} <${major}.${Number(minor) + 1}.0-0`
}
return match
})
}
function replaceXRanges(comparator: string, options: RangeOptions): string {
return comparator
.split(/\s+/)
.map((part) => replaceXRange(part, options))
.join(' ')
}
function replaceHyphenRange(range: string, options: RangeOptions): string {
const expression = options.loose ? LOOSE_HYPHEN : STRICT_HYPHEN
return range.replace(
expression,
(
_match,
rawFrom,
fromMajor,
fromMinor,
fromPatch,
fromPrerelease,
_fromBuild,
rawTo,
toMajor,
toMinor,
toPatch,
toPrerelease,
) => {
let from = rawFrom as string
let to = rawTo as string
if (isWildcard(fromMajor)) from = ''
else if (isWildcard(fromMinor)) {
from = `>=${fromMajor}.0.0${options.includePrerelease ? '-0' : ''}`
} else if (isWildcard(fromPatch)) {
from = `>=${fromMajor}.${fromMinor}.0${options.includePrerelease ? '-0' : ''}`
} else if (fromPrerelease) from = `>=${from}`
else from = `>=${from}${options.includePrerelease ? '-0' : ''}`
if (isWildcard(toMajor)) to = ''
else if (isWildcard(toMinor)) to = `<${Number(toMajor) + 1}.0.0-0`
else if (isWildcard(toPatch)) {
to = `<${toMajor}.${Number(toMinor) + 1}.0-0`
} else if (toPrerelease) {
to = `<=${toMajor}.${toMinor}.${toPatch}-${toPrerelease}`
} else if (options.includePrerelease) {
to = `<${toMajor}.${toMinor}.${Number(toPatch) + 1}-0`
} else to = `<=${to}`
return `${from} ${to}`.trim()
},
)
}
function expandComparator(comparator: string, options: RangeOptions): string {
return replaceXRanges(
replaceTildes(
replaceCarets(comparator.replace(BUILD_SAFE, ''), options),
options,
),
options,
)
.trim()
.replace(STAR, '')
}
function parseSimpleRange(
input: string,
options: RangeOptions,
): SemVerComparator[] {
const range = input.replace(BUILD_STRIP, '')
const expanded = replaceHyphenRange(range, options)
.replace(COMPARATOR_TRIM, '$1$2$3')
.replace(TILDE_TRIM, '$1~')
.replace(CARET_TRIM, '$1^')
let parts = expanded
.split(' ')
.map((part) => expandComparator(part, options))
.join(' ')
.split(/\s+/)
.map((part) =>
part
.trim()
.replace(
options.includePrerelease ? GTE_ZERO_PRERELEASE : GTE_ZERO,
'',
),
)
if (options.loose) {
parts = parts.filter((part) => LOOSE_COMPARATOR.test(part))
}
const unique = new Map()
for (const comparator of parts.map((part) =>
parseComparator(part, options),
)) {
if (comparator.value === '<0.0.0-0') {
return [comparator]
}
unique.set(comparator.value, comparator)
}
if (unique.size > 1) unique.delete('')
return [...unique.values()]
}
export function parseRange(range: string, options?: RangeOptions): SemVerRange
export function parseRange(range: RangeInput): SemVerRange
export function parseRange(
range: RangeInput,
options: RangeOptions = {},
): SemVerRange {
if (typeof range !== 'string') return range
const parsedOptions = { ...options }
const normalizedRange = range.trim().replaceAll(/\s+/g, ' ')
let sets = normalizedRange
.split('||')
.map((part) => parseSimpleRange(part.trim(), parsedOptions))
.filter((set) => set.length)
if (!sets.length) {
throw new TypeError(
`Range contains no valid comparator sets: ${normalizedRange}`,
)
}
if (sets.length > 1) {
const first = sets[0]!
sets = sets.filter((set) => set[0]?.value !== '<0.0.0-0')
if (!sets.length) sets = [first]
else if (sets.length > 1) {
const any = sets.find((set) => set.length === 1 && set[0]?.value === '')
if (any) sets = [any]
}
}
return {
options: parsedOptions,
sets,
}
}
export function tryParseRange(
range: string,
options?: RangeOptions,
): SemVerRange | null
export function tryParseRange(range: RangeInput): SemVerRange | null
export function tryParseRange(
range: RangeInput,
options: RangeOptions = {},
): SemVerRange | null {
try {
return (parseRange as ParseRangeInput)(range, options)
} catch {
return null
}
}
export function testParsedRange(range: SemVerRange, version: SemVer): boolean {
return range.sets.some((set) =>
testComparatorSet(set, version, range.options),
)
}
export function testRangeVersion(
range: SemVerRange,
version: VersionInput,
): boolean {
const parsed = tryParse(version, range.options)
return parsed ? testParsedRange(range, parsed) : false
}
function exactVersion(set: readonly SemVerComparator[]): SemVer | null {
for (const comparator of set) {
if (comparator.operator === '' && comparator.version) {
return comparator.version
}
}
return null
}
function isSatisfiable(
comparators: readonly SemVerComparator[],
options: RangeOptions,
): boolean {
const exact = exactVersion(comparators)
if (exact) return testComparatorSet(comparators, exact, options)
const remaining = [...comparators]
let current = remaining.pop()
while (current && remaining.length) {
if (
remaining.some(
(other) => !parsedComparatorsIntersect(current!, other, options),
)
) {
return false
}
current = remaining.pop()
}
return true
}
function setsIntersect(
left: readonly SemVerComparator[],
right: readonly SemVerComparator[],
options: RangeOptions,
): boolean {
// The caller has already checked that both sets are satisfiable.
const leftExact = exactVersion(left)
if (leftExact) return testComparatorSet(right, leftExact, options)
const rightExact = exactVersion(right)
if (rightExact) return testComparatorSet(left, rightExact, options)
return left.every((leftComparator) =>
right.every((rightComparator) =>
parsedComparatorsIntersect(leftComparator, rightComparator, options),
),
)
}
export function parsedRangesIntersect(
left: SemVerRange,
right: SemVerRange,
options: RangeOptions = {},
): boolean {
return left.sets.some(
(leftSet) =>
isSatisfiable(leftSet, options) &&
right.sets.some(
(rightSet) =>
isSatisfiable(rightSet, options) &&
setsIntersect(leftSet, rightSet, options),
),
)
}
sxzz-verkit-a5b7150/src/range/subset.ts 0000664 0000000 0000000 00000014211 15253274704 0020130 0 ustar 00root root 0000000 0000000 import { parseComparator } from '../comparator/parse.ts'
import {
comparatorAllowsPrerelease,
testComparatorSet,
testParsedComparator,
} from '../comparator/set.ts'
import { compareParsed } from '../version/comparison.ts'
import { formatComparableVersion } from '../version/parse.ts'
import { parseRange, type ParseRangeInput } from './parse.ts'
import type { RangeOptions, SemVerComparator } from '../comparator/types.ts'
import type { SemVer } from '../version/types.ts'
import type { RangeInput } from './types.ts'
function higherLowerBound(
left: SemVerComparator | undefined,
right: SemVerComparator,
): SemVerComparator {
if (!left) return right
const comparison = compareParsed(left.version!, right.version!)
return comparison > 0
? left
: comparison < 0 || (right.operator === '>' && left.operator === '>=')
? right
: left
}
function lowerUpperBound(
left: SemVerComparator | undefined,
right: SemVerComparator,
): SemVerComparator {
if (!left) return right
const comparison = compareParsed(left.version!, right.version!)
return comparison < 0
? left
: comparison > 0 || (right.operator === '<' && left.operator === '<=')
? right
: left
}
function simpleRangeSubset(
rawSubset: readonly SemVerComparator[],
rawSuperset: readonly SemVerComparator[],
options: RangeOptions,
): boolean | null {
let subset = rawSubset
let superset = rawSuperset
const subsetAny = subset.length === 1 && !subset[0]!.version
const supersetAny = superset.length === 1 && !superset[0]!.version
if (subsetAny) {
if (supersetAny) return true
subset = [
parseComparator(options.includePrerelease ? '>=0.0.0-0' : '>=0.0.0'),
]
}
if (supersetAny) {
if (options.includePrerelease) return true
superset = [parseComparator('>=0.0.0')]
}
const equal = new Map()
let lower: SemVerComparator | undefined
let upper: SemVerComparator | undefined
for (const comparator of subset) {
if (comparator.operator === '>' || comparator.operator === '>=') {
lower = higherLowerBound(lower, comparator)
} else if (comparator.operator === '<' || comparator.operator === '<=') {
upper = lowerUpperBound(upper, comparator)
} else if (comparator.version) {
equal.set(formatComparableVersion(comparator.version), comparator.version)
}
}
if (equal.size > 1) return null
let boundsComparison: number | undefined
if (lower && upper) {
boundsComparison = compareParsed(lower.version!, upper.version!)
if (boundsComparison > 0) return null
if (
boundsComparison === 0 &&
(lower.operator !== '>=' || upper.operator !== '<=')
) {
return null
}
}
for (const version of equal.values()) {
if (lower && !testParsedComparator(lower, version)) return null
if (upper && !testParsedComparator(upper, version)) return null
// Testing each superset comparator on its own would skip the prerelease rule.
return testComparatorSet(superset, version, options)
}
let needsLowerPrerelease =
lower && !options.includePrerelease && lower.version!.prerelease?.length
? lower.version!
: null
let needsUpperPrerelease =
upper && !options.includePrerelease && upper.version!.prerelease?.length
? upper.version!
: null
const upperPrerelease = needsUpperPrerelease?.prerelease
if (
upperPrerelease?.length === 1 &&
upper?.operator === '<' &&
upperPrerelease[0] === 0
) {
needsUpperPrerelease = null
}
let hasSupersetLower = false
let hasSupersetUpper = false
for (const comparator of superset) {
hasSupersetLower ||=
comparator.operator === '>' || comparator.operator === '>='
hasSupersetUpper ||=
comparator.operator === '<' || comparator.operator === '<='
if (lower) {
if (
needsLowerPrerelease &&
comparatorAllowsPrerelease(comparator, needsLowerPrerelease)
) {
needsLowerPrerelease = null
}
if (comparator.operator === '>' || comparator.operator === '>=') {
const higher = higherLowerBound(lower, comparator)
if (higher === comparator && higher !== lower) return false
} else if (
lower.operator === '>=' &&
!testParsedComparator(comparator, lower.version!)
) {
return false
}
}
if (upper) {
if (
needsUpperPrerelease &&
comparatorAllowsPrerelease(comparator, needsUpperPrerelease)
) {
needsUpperPrerelease = null
}
if (comparator.operator === '<' || comparator.operator === '<=') {
const lowerBound = lowerUpperBound(upper, comparator)
if (lowerBound === comparator && lowerBound !== upper) return false
} else if (
upper.operator === '<=' &&
!testParsedComparator(comparator, upper.version!)
) {
return false
}
}
if (
comparator.operator === '' &&
(lower || upper) &&
boundsComparison !== 0
) {
return false
}
}
if (lower && hasSupersetUpper && !upper && boundsComparison !== 0)
return false
if (upper && hasSupersetLower && !lower && boundsComparison !== 0)
return false
return !needsLowerPrerelease && !needsUpperPrerelease
}
export function isRangeSubset(
subset: string,
superset: string,
options?: RangeOptions,
): boolean
export function isRangeSubset(subset: RangeInput, superset: RangeInput): boolean
export function isRangeSubset(
subset: RangeInput,
superset: RangeInput,
options: RangeOptions = {},
): boolean {
if (subset === superset) return true
const parsedSubset = (parseRange as ParseRangeInput)(subset, options)
const parsedSuperset = (parseRange as ParseRangeInput)(superset, options)
const effectiveOptions = {
...parsedSubset.options,
...parsedSuperset.options,
...options,
}
let sawNonNull = false
for (const subsetSet of parsedSubset.sets) {
let matched = false
for (const supersetSet of parsedSuperset.sets) {
const result = simpleRangeSubset(subsetSet, supersetSet, effectiveOptions)
sawNonNull ||= result !== null
if (result) {
matched = true
break
}
}
if (!matched && sawNonNull) return false
}
return true
}
sxzz-verkit-a5b7150/src/range/types.ts 0000664 0000000 0000000 00000000373 15253274704 0017773 0 ustar 00root root 0000000 0000000 import type { RangeOptions, SemVerComparator } from '../comparator/types.ts'
export interface SemVerRange {
options: RangeOptions
sets: SemVerComparator[][]
}
export type RangeInput = SemVerRange | string
export type RangeDirection = '<' | '>'
sxzz-verkit-a5b7150/src/version.ts 0000664 0000000 0000000 00000001744 15253274704 0017223 0 ustar 00root root 0000000 0000000 export {
compare,
compareBuild,
compareMain,
comparePrerelease,
compareReversed,
compareWithOperator,
isEqual,
isGreaterThan,
isGreaterThanOrEqual,
isLessThan,
isLessThanOrEqual,
isNotEqual,
sort,
sortReversed,
} from './version/comparison.ts'
export {
INCREMENT_TYPES,
SEMVER_SPEC_VERSION,
TRUNCATION_TYPES,
} from './version/constants.ts'
export {
compareIdentifiers,
compareIdentifiersReversed,
} from './version/identifiers.ts'
export {
clean,
coerce,
difference,
getBuild,
getMajor,
getMinor,
getPatch,
getPrerelease,
increment,
isPrerelease,
isStable,
isValid,
normalize,
normalizeFull,
truncate,
} from './version/operations.ts'
export { parse, tryParse } from './version/parse.ts'
export type {
CoerceOptions,
Comparison,
ComparisonOperator,
IncrementOptions,
IncrementType,
PrereleaseIdentifier,
SemVer,
TruncationType,
VersionDifference,
VersionInput,
VersionOptions,
} from './version/types.ts'
sxzz-verkit-a5b7150/src/version/ 0000775 0000000 0000000 00000000000 15253274704 0016645 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/src/version/comparison.ts 0000664 0000000 0000000 00000012147 15253274704 0021374 0 ustar 00root root 0000000 0000000 import { compareIdentifiers } from './identifiers.ts'
import { parse } from './parse.ts'
import type {
Comparison,
ComparisonOperator,
SemVer,
VersionInput,
VersionOptions,
} from './types.ts'
export function compareMainParsed(left: SemVer, right: SemVer): Comparison {
return left.major === right.major
? left.minor === right.minor
? left.patch === right.patch
? 0
: left.patch < right.patch
? -1
: 1
: left.minor < right.minor
? -1
: 1
: left.major < right.major
? -1
: 1
}
export function comparePrereleaseParsed(
left: SemVer,
right: SemVer,
): Comparison {
const leftPrerelease = left.prerelease
const rightPrerelease = right.prerelease
if (leftPrerelease?.length && !rightPrerelease?.length) return -1
if (!leftPrerelease?.length && rightPrerelease?.length) return 1
if (!leftPrerelease?.length && !rightPrerelease?.length) return 0
for (let index = 0; ; index++) {
const leftIdentifier = leftPrerelease?.[index]
const rightIdentifier = rightPrerelease?.[index]
if (leftIdentifier === undefined && rightIdentifier === undefined) return 0
if (rightIdentifier === undefined) return 1
if (leftIdentifier === undefined) return -1
if (leftIdentifier !== rightIdentifier) {
return compareIdentifiers(leftIdentifier, rightIdentifier)
}
}
}
export function compareParsed(left: SemVer, right: SemVer): Comparison {
return compareMainParsed(left, right) || comparePrereleaseParsed(left, right)
}
export function compareBuildParsed(left: SemVer, right: SemVer): Comparison {
const precedence = compareParsed(left, right)
if (precedence !== 0) return precedence
for (let index = 0; ; index++) {
const leftIdentifier = left.build?.[index]
const rightIdentifier = right.build?.[index]
if (leftIdentifier === undefined && rightIdentifier === undefined) return 0
if (rightIdentifier === undefined) return 1
if (leftIdentifier === undefined) return -1
if (leftIdentifier !== rightIdentifier) {
return compareIdentifiers(leftIdentifier, rightIdentifier)
}
}
}
export function compare(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): Comparison {
return compareParsed(parse(left, options), parse(right, options))
}
export function compareReversed(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): Comparison {
return compare(right, left, options)
}
export function compareMain(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): Comparison {
return compareMainParsed(parse(left, options), parse(right, options))
}
export function comparePrerelease(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): Comparison {
return comparePrereleaseParsed(parse(left, options), parse(right, options))
}
export function compareBuild(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): Comparison {
return compareBuildParsed(parse(left, options), parse(right, options))
}
export function compareWithOperator(
left: VersionInput,
operator: ComparisonOperator,
right: VersionInput,
options: VersionOptions = {},
): boolean {
if (operator === '===') return left === right
if (operator === '!==') return left !== right
const comparison = compare(left, right, options)
switch (operator) {
case '':
case '=':
case '==':
return comparison === 0
case '!=':
return comparison !== 0
case '>':
return comparison > 0
case '>=':
return comparison >= 0
case '<':
return comparison < 0
case '<=':
return comparison <= 0
default:
throw new TypeError(`Invalid operator: ${operator as string}`)
}
}
export function isEqual(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): boolean {
return compare(left, right, options) === 0
}
export function isNotEqual(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): boolean {
return compare(left, right, options) !== 0
}
export function isGreaterThan(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): boolean {
return compare(left, right, options) > 0
}
export function isGreaterThanOrEqual(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): boolean {
return compare(left, right, options) >= 0
}
export function isLessThan(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): boolean {
return compare(left, right, options) < 0
}
export function isLessThanOrEqual(
left: VersionInput,
right: VersionInput,
options: VersionOptions = {},
): boolean {
return compare(left, right, options) <= 0
}
export function sort(
versions: readonly T[],
options: VersionOptions = {},
): T[] {
return [...versions].sort((left, right) => compareBuild(left, right, options))
}
export function sortReversed(
versions: readonly T[],
options: VersionOptions = {},
): T[] {
return [...versions].sort((left, right) => compareBuild(right, left, options))
}
sxzz-verkit-a5b7150/src/version/constants.ts 0000664 0000000 0000000 00000001114 15253274704 0021226 0 ustar 00root root 0000000 0000000 import type { IncrementType, TruncationType } from './types.ts'
export const SEMVER_SPEC_VERSION: string = '2.0.0'
export const INCREMENT_TYPES: readonly IncrementType[] = [
'major',
'premajor',
'minor',
'preminor',
'patch',
'prepatch',
'prerelease',
'release',
]
export const TRUNCATION_TYPES: readonly TruncationType[] = [
'major',
'premajor',
'minor',
'preminor',
'patch',
'prepatch',
'prerelease',
]
export const MAX_LENGTH: number = 256
export const MAX_SAFE_COMPONENT_LENGTH: number = 16
export const MAX_SAFE_BUILD_LENGTH: number = MAX_LENGTH - 6
sxzz-verkit-a5b7150/src/version/identifiers.ts 0000664 0000000 0000000 00000001651 15253274704 0021525 0 ustar 00root root 0000000 0000000 import type { Comparison, PrereleaseIdentifier } from './types.ts'
const NUMERIC = /^\d+$/
export function compareIdentifiers(
left: PrereleaseIdentifier,
right: PrereleaseIdentifier,
): Comparison {
if (typeof left === 'number' && typeof right === 'number') {
return left === right ? 0 : left < right ? -1 : 1
}
const leftNumeric = NUMERIC.test(String(left))
const rightNumeric = NUMERIC.test(String(right))
const normalizedLeft = leftNumeric ? Number(left) : left
const normalizedRight = rightNumeric ? Number(right) : right
return normalizedLeft === normalizedRight
? 0
: leftNumeric && !rightNumeric
? -1
: rightNumeric && !leftNumeric
? 1
: normalizedLeft < normalizedRight
? -1
: 1
}
export function compareIdentifiersReversed(
left: PrereleaseIdentifier,
right: PrereleaseIdentifier,
): Comparison {
return compareIdentifiers(right, left)
}
sxzz-verkit-a5b7150/src/version/operations.ts 0000664 0000000 0000000 00000024434 15253274704 0021407 0 ustar 00root root 0000000 0000000 import { compareMainParsed, compareParsed } from './comparison.ts'
import { TRUNCATION_TYPES } from './constants.ts'
import { compareIdentifiers } from './identifiers.ts'
import {
formatComparableVersion,
formatFullVersion,
parse,
tryParse,
} from './parse.ts'
import {
COERCE,
COERCE_FULL,
PRERELEASE,
PRERELEASE_LOOSE,
safeRegex,
} from './patterns.ts'
import type {
CoerceOptions,
IncrementOptions,
IncrementType,
PrereleaseIdentifier,
SemVer,
TruncationType,
VersionDifference,
VersionInput,
VersionOptions,
} from './types.ts'
const COERCE_EXACT = safeRegex(COERCE)
const COERCE_FULL_EXACT = safeRegex(COERCE_FULL)
const PRERELEASE_EXACT = safeRegex(`^${PRERELEASE}$`)
const PRERELEASE_LOOSE_EXACT = safeRegex(`^${PRERELEASE_LOOSE}$`)
export function isValid(
version: VersionInput,
options: VersionOptions = {},
): boolean {
return tryParse(version, options) !== null
}
export function isPrerelease(
version: VersionInput,
options: VersionOptions = {},
): boolean | null {
const parsed = tryParse(version, options)
if (!parsed) return null
return !!parsed.prerelease?.length
}
export function isStable(
version: VersionInput,
options: VersionOptions = {},
): boolean | null {
const parsed = tryParse(version, options)
if (!parsed) return null
return !parsed.prerelease?.length
}
export function normalizeFull(
version: VersionInput,
options: VersionOptions = {},
): string | null {
const parsed = tryParse(version, options)
return parsed ? formatFullVersion(parsed) : null
}
export function normalize(
version: VersionInput,
options: VersionOptions = {},
): string | null {
const parsed = tryParse(version, options)
return parsed ? formatComparableVersion(parsed) : null
}
export function clean(
version: VersionInput,
options: VersionOptions = {},
): string | null {
if (typeof version !== 'string') {
return normalize(version, options)
}
return normalize(version.trim().replace(/^[=v]+/, ''), options)
}
export function coerce(
value: number | VersionInput,
options: CoerceOptions = {},
): SemVer | null {
if (typeof value === 'object') return value
const input = typeof value === 'number' ? String(value) : value
let match: RegExpExecArray | null = null
if (options.rtl) {
const source = options.includePrerelease ? COERCE_FULL : COERCE
const expression = safeRegex(source, 'g')
let next: RegExpExecArray | null
while (
(next = expression.exec(input)) &&
(!match || match.index + match[0].length !== input.length)
) {
if (
!match ||
next.index + next[0].length !== match.index + match[0].length
) {
match = next
}
expression.lastIndex = next.index + next[1]!.length + next[2]!.length
}
} else {
match = (options.includePrerelease ? COERCE_FULL_EXACT : COERCE_EXACT).exec(
input,
)
}
if (!match) return null
const major = match[2]
const minor = match[3] || '0'
const patch = match[4] || '0'
const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''
const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''
return tryParse(`${major}.${minor}.${patch}${prerelease}${build}`, options)
}
function isPrereleasePrefix(
prerelease: readonly PrereleaseIdentifier[],
identifier: string,
): boolean {
const identifiers = identifier.split('.')
return (
identifiers.length <= prerelease.length &&
identifiers.every(
(part, index) => compareIdentifiers(prerelease[index]!, part) === 0,
)
)
}
function incrementPrerelease(
version: SemVer,
identifier: string | undefined,
identifierBase: 0 | 1 | false | undefined,
): void {
const base = Number(identifierBase) ? 1 : 0
let prerelease = version.prerelease
if (prerelease?.length) {
let foundNumeric = false
for (let index = prerelease.length - 1; index >= 0; index--) {
if (typeof prerelease[index] === 'number') {
prerelease[index] = Number(prerelease[index]) + 1
foundNumeric = true
break
}
}
if (!foundNumeric) {
if (identifier === prerelease.join('.') && identifierBase === false) {
throw new Error('invalid increment argument: identifier already exists')
}
prerelease.push(base)
}
} else {
prerelease = [base]
version.prerelease = prerelease
}
if (!identifier) return
const reset: PrereleaseIdentifier[] =
identifierBase === false ? [identifier] : [identifier, base]
if (isPrereleasePrefix(prerelease, identifier)) {
const next = prerelease[identifier.split('.').length]
if (Number.isNaN(Number(next))) version.prerelease = reset
} else {
version.prerelease = reset
}
}
function incrementMutable(
version: SemVer,
release: IncrementType | 'pre',
identifier: string | undefined,
identifierBase: 0 | 1 | false | undefined,
): void {
switch (release) {
case 'premajor':
version.prerelease = undefined
version.patch = 0
version.minor = 0
version.major++
incrementPrerelease(version, identifier, identifierBase)
break
case 'preminor':
version.prerelease = undefined
version.patch = 0
version.minor++
incrementPrerelease(version, identifier, identifierBase)
break
case 'prepatch':
version.prerelease = undefined
incrementMutable(version, 'patch', identifier, identifierBase)
incrementPrerelease(version, identifier, identifierBase)
break
case 'prerelease':
if (!version.prerelease?.length) {
incrementMutable(version, 'patch', identifier, identifierBase)
}
incrementPrerelease(version, identifier, identifierBase)
break
case 'release':
if (!version.prerelease?.length) {
throw new Error(
`version ${formatFullVersion(version)} is not a prerelease`,
)
}
version.prerelease = undefined
break
case 'major':
if (
version.minor !== 0 ||
version.patch !== 0 ||
!version.prerelease?.length
) {
version.major++
}
version.minor = 0
version.patch = 0
version.prerelease = undefined
break
case 'minor':
if (version.patch !== 0 || !version.prerelease?.length) {
version.minor++
}
version.patch = 0
version.prerelease = undefined
break
case 'patch':
if (!version.prerelease?.length) version.patch++
version.prerelease = undefined
break
/* v8 ignore next */
case 'pre':
incrementPrerelease(version, identifier, identifierBase)
break
default:
throw new Error(`invalid increment argument: ${release as string}`)
}
}
function incrementParsedVersion(
parsed: SemVer,
release: IncrementType,
identifier?: string,
identifierBase?: 0 | 1 | false,
loose = false,
): string {
if (release.startsWith('pre')) {
if (!identifier && identifierBase === false) {
throw new Error('invalid increment argument: identifier is empty')
}
if (identifier) {
const expression = loose ? PRERELEASE_LOOSE_EXACT : PRERELEASE_EXACT
const match = `-${identifier}`.match(expression)
if (!match || match[1] !== identifier) {
throw new Error(`invalid identifier: ${identifier}`)
}
}
}
const mutable: SemVer = {
build: parsed.build ? [...parsed.build] : undefined,
major: parsed.major,
minor: parsed.minor,
patch: parsed.patch,
prerelease: parsed.prerelease ? [...parsed.prerelease] : undefined,
}
incrementMutable(mutable, release, identifier, identifierBase)
return formatComparableVersion(mutable)
}
export function increment(
version: VersionInput,
release: IncrementType,
options: IncrementOptions = {},
): string | null {
try {
return incrementParsedVersion(
parse(version, options),
release,
options.identifier,
options.identifierBase,
options.loose,
)
} catch {
return null
}
}
export function truncate(
version: VersionInput,
truncation: TruncationType,
options: VersionOptions = {},
): string | null {
if (!TRUNCATION_TYPES.includes(truncation)) return null
const parsed = tryParse(version, options)
if (!parsed) return null
if (truncation.startsWith('pre')) return formatComparableVersion(parsed)
return formatComparableVersion({
major: parsed.major,
minor: truncation === 'major' ? 0 : parsed.minor,
patch: truncation === 'major' || truncation === 'minor' ? 0 : parsed.patch,
})
}
export function difference(
left: VersionInput,
right: VersionInput,
): VersionDifference | null {
const leftVersion = parse(left)
const rightVersion = parse(right)
const comparison = compareParsed(leftVersion, rightVersion)
if (comparison === 0) return null
const high = comparison > 0 ? leftVersion : rightVersion
const low = comparison > 0 ? rightVersion : leftVersion
const highHasPrerelease = high.prerelease?.length
const lowHasPrerelease = low.prerelease?.length
if (lowHasPrerelease && !highHasPrerelease) {
if (low.patch === 0 && low.minor === 0) return 'major'
if (compareMainParsed(low, high) === 0) {
return low.minor !== 0 && low.patch === 0 ? 'minor' : 'patch'
}
}
const prefix = highHasPrerelease ? 'pre' : ''
if (leftVersion.major !== rightVersion.major) {
return `${prefix}major` as VersionDifference
}
if (leftVersion.minor !== rightVersion.minor) {
return `${prefix}minor` as VersionDifference
}
if (leftVersion.patch !== rightVersion.patch) {
return `${prefix}patch` as VersionDifference
}
return 'prerelease'
}
export function getMajor(
version: VersionInput,
options: VersionOptions = {},
): number {
return parse(version, options).major
}
export function getMinor(
version: VersionInput,
options: VersionOptions = {},
): number {
return parse(version, options).minor
}
export function getPatch(
version: VersionInput,
options: VersionOptions = {},
): number {
return parse(version, options).patch
}
export function getPrerelease(
version: VersionInput,
options: VersionOptions = {},
): PrereleaseIdentifier[] | null {
const parsed = tryParse(version, options)
return parsed ? [...(parsed.prerelease || [])] : null
}
export function getBuild(
version: VersionInput,
options: VersionOptions = {},
): string[] | null {
const parsed = tryParse(version, options)
return parsed ? [...(parsed.build || [])] : null
}
sxzz-verkit-a5b7150/src/version/parse.ts 0000664 0000000 0000000 00000004573 15253274704 0020340 0 ustar 00root root 0000000 0000000 import { MAX_LENGTH } from './constants.ts'
import { FULL_PLAIN, LOOSE_PLAIN, safeRegex } from './patterns.ts'
import type {
PrereleaseIdentifier,
SemVer,
VersionInput,
VersionOptions,
} from './types.ts'
const FULL = safeRegex(`^${FULL_PLAIN}$`)
const LOOSE = safeRegex(`^${LOOSE_PLAIN}$`)
const NUMERIC = /^\d+$/
export function formatComparableVersion(
version: Pick,
): string {
const base = `${version.major}.${version.minor}.${version.patch}`
return version.prerelease?.length
? `${base}-${version.prerelease.join('.')}`
: base
}
export function formatFullVersion(
version: Pick,
): string {
const comparable = formatComparableVersion(version)
return version.build?.length
? `${comparable}+${version.build.join('.')}`
: comparable
}
export function parse(
version: VersionInput,
options: VersionOptions = {},
): SemVer {
if (typeof version !== 'string') return version
if (version.length > MAX_LENGTH) {
throw new TypeError(
`Version exceeds the maximum length of ${MAX_LENGTH} characters`,
)
}
const match = version.trim().match(options.loose ? LOOSE : FULL)
if (!match) throw new TypeError(`Invalid version syntax: ${version}`)
const major = Number(match[1])
const minor = Number(match[2])
const patch = Number(match[3])
if (major > Number.MAX_SAFE_INTEGER || major < 0) {
throw new TypeError(`Invalid major version: ${match[1]}`)
}
if (minor > Number.MAX_SAFE_INTEGER || minor < 0) {
throw new TypeError(`Invalid minor version: ${match[2]}`)
}
if (patch > Number.MAX_SAFE_INTEGER || patch < 0) {
throw new TypeError(`Invalid patch version: ${match[3]}`)
}
const prerelease = match[4]
? match[4].split('.').map((identifier) => {
if (NUMERIC.test(identifier)) {
const numeric = Number(identifier)
if (numeric >= 0 && numeric < Number.MAX_SAFE_INTEGER) {
return numeric
}
}
return identifier
})
: undefined
const build = match[5]?.split('.')
return {
build,
major,
minor,
patch,
prerelease,
}
}
export function tryParse(
version: VersionInput,
options: VersionOptions = {},
): SemVer | null {
try {
return parse(version, options)
} catch {
return null
}
}
sxzz-verkit-a5b7150/src/version/patterns.ts 0000664 0000000 0000000 00000005771 15253274704 0021067 0 ustar 00root root 0000000 0000000 import {
MAX_LENGTH,
MAX_SAFE_BUILD_LENGTH,
MAX_SAFE_COMPONENT_LENGTH,
} from './constants.ts'
export const LETTER_DASH_NUMBER: string = '[a-zA-Z0-9-]'
export const NUMERIC_IDENTIFIER: string = String.raw`0|[1-9]\d*`
export const NUMERIC_IDENTIFIER_LOOSE: string = String.raw`\d+`
export const NON_NUMERIC_IDENTIFIER: string = String.raw`\d*[a-zA-Z-]${LETTER_DASH_NUMBER}*`
export const MAIN_VERSION: string = String.raw`(${NUMERIC_IDENTIFIER})\.(${NUMERIC_IDENTIFIER})\.(${NUMERIC_IDENTIFIER})`
export const MAIN_VERSION_LOOSE: string = String.raw`(${NUMERIC_IDENTIFIER_LOOSE})\.(${NUMERIC_IDENTIFIER_LOOSE})\.(${NUMERIC_IDENTIFIER_LOOSE})`
export const PRERELEASE_IDENTIFIER: string = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER})`
export const PRERELEASE_IDENTIFIER_LOOSE: string = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER_LOOSE})`
export const PRERELEASE: string = String.raw`(?:-(${PRERELEASE_IDENTIFIER}(?:\.${PRERELEASE_IDENTIFIER})*))`
export const PRERELEASE_LOOSE: string = String.raw`(?:-?(${PRERELEASE_IDENTIFIER_LOOSE}(?:\.${PRERELEASE_IDENTIFIER_LOOSE})*))`
export const BUILD_IDENTIFIER: string = `${LETTER_DASH_NUMBER}+`
export const BUILD: string = String.raw`(?:\+(${BUILD_IDENTIFIER}(?:\.${BUILD_IDENTIFIER})*))`
export const FULL_PLAIN: string = `v?${MAIN_VERSION}${PRERELEASE}?${BUILD}?`
export const LOOSE_PLAIN: string = String.raw`[v=\s]*${MAIN_VERSION_LOOSE}${PRERELEASE_LOOSE}?${BUILD}?`
export const GREATER_LESS_THAN: string = '((?:<|>)?=?)'
export const XRANGE_IDENTIFIER: string = String.raw`${NUMERIC_IDENTIFIER}|x|X|\*`
export const XRANGE_IDENTIFIER_LOOSE: string = String.raw`${NUMERIC_IDENTIFIER_LOOSE}|x|X|\*`
export const XRANGE_PLAIN: string = String.raw`[v=\s]*(${XRANGE_IDENTIFIER})(?:\.(${XRANGE_IDENTIFIER})(?:\.(${XRANGE_IDENTIFIER})(?:${PRERELEASE})?${BUILD}?)?)?`
export const XRANGE_PLAIN_LOOSE: string = String.raw`[v=\s]*(${XRANGE_IDENTIFIER_LOOSE})(?:\.(${XRANGE_IDENTIFIER_LOOSE})(?:\.(${XRANGE_IDENTIFIER_LOOSE})(?:${PRERELEASE_LOOSE})?${BUILD}?)?)?`
export const LONE_TILDE: string = '(?:~>?)'
export const LONE_CARET: string = String.raw`(?:\^)`
export const COERCE_PLAIN: string = String.raw`(^|[^\d])(\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\.(\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\.(\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`
export const COERCE: string = String.raw`${COERCE_PLAIN}(?:$|[^\d])`
export const COERCE_FULL: string = String.raw`${COERCE_PLAIN}(?:${PRERELEASE})?(?:${BUILD})?(?:$|[^\d])`
export function makeSafeRegexSource(source: string): string {
const replacements: readonly (readonly [string, number])[] = [
[String.raw`\s`, 1],
[String.raw`\d`, MAX_LENGTH],
[LETTER_DASH_NUMBER, MAX_SAFE_BUILD_LENGTH],
]
for (const [token, maximum] of replacements) {
source = source
.split(`${token}*`)
.join(`${token}{0,${maximum}}`)
.split(`${token}+`)
.join(`${token}{1,${maximum}}`)
}
return source
}
export function safeRegex(source: string, flags?: string): RegExp {
return new RegExp(makeSafeRegexSource(source), flags)
}
sxzz-verkit-a5b7150/src/version/types.ts 0000664 0000000 0000000 00000001754 15253274704 0020370 0 ustar 00root root 0000000 0000000 export interface VersionOptions {
loose?: boolean
}
export interface CoerceOptions extends VersionOptions {
includePrerelease?: boolean
rtl?: boolean
}
export interface IncrementOptions extends VersionOptions {
identifier?: string
identifierBase?: 0 | 1 | false
}
export type PrereleaseIdentifier = number | string
export interface SemVer {
major: number
minor: number
patch: number
prerelease?: PrereleaseIdentifier[] | undefined
build?: string[] | undefined
}
export type VersionInput = SemVer | string
export type Comparison = -1 | 0 | 1
export type ComparisonOperator =
'' | '!=' | '!==' | '<' | '<=' | '=' | '==' | '===' | '>' | '>='
export type IncrementType =
| 'major'
| 'minor'
| 'patch'
| 'premajor'
| 'preminor'
| 'prepatch'
| 'prerelease'
| 'release'
export type TruncationType = Exclude
export type VersionDifference =
| 'major'
| 'minor'
| 'patch'
| 'premajor'
| 'preminor'
| 'prepatch'
| 'prerelease'
sxzz-verkit-a5b7150/tests/ 0000775 0000000 0000000 00000000000 15253274704 0015533 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/tests/bundle-size.test.ts 0000664 0000000 0000000 00000007042 15253274704 0021305 0 ustar 00root root 0000000 0000000 import { Buffer } from 'node:buffer'
import { join } from 'node:path'
import { stdout } from 'node:process'
import { fileURLToPath } from 'node:url'
import {
brotliCompressSync,
gzipSync,
constants as zlibConstants,
} from 'node:zlib'
import { rolldown } from 'rolldown'
import { describe, expect, it } from 'vitest'
import { runCommonOperations as runSemverOperations } from './fixtures/bundle-size/semver.ts'
import { runCommonOperations as runVerkitOperations } from './fixtures/bundle-size/verkit.ts'
interface BundleSize {
readonly brotli: number
readonly gzip: number
readonly minified: number
}
const { dirname } = import.meta
const entries = {
full: {
semver: fileURLToPath(import.meta.resolve('semver')),
verkit: join(dirname, '../src/index.ts'),
},
common: {
semver: join(dirname, 'fixtures/bundle-size/semver.ts'),
verkit: join(dirname, 'fixtures/bundle-size/verkit.ts'),
},
} as const
const VERKIT_BUDGETS: Record<'common' | 'full', BundleSize> = {
common: {
brotli: 3_700,
gzip: 4_000,
minified: 12_000,
},
full: {
brotli: 5_500,
gzip: 6_000,
minified: 20_000,
},
}
async function getMinifiedBundleSize(input: string): Promise {
const bundle = await rolldown({ input, treeshake: true })
try {
// Use the exact same minification pipeline for both consumers so the
// comparison measures their tree-shaken runtime code, not build settings.
const output = await bundle.generate({ format: 'esm', minify: true })
const chunk = output.output.find((item) => item.type === 'chunk')
if (!chunk) throw new Error(`Rolldown did not emit a chunk for ${input}`)
const code = Buffer.from(chunk.code)
return {
brotli: brotliCompressSync(code, {
params: {
[zlibConstants.BROTLI_PARAM_QUALITY]: 11,
},
}).byteLength,
gzip: gzipSync(code, { level: 9 }).byteLength,
minified: code.byteLength,
}
} finally {
await bundle.close()
}
}
function formatSize(size: BundleSize): string {
return `min ${size.minified} B, gzip ${size.gzip} B, brotli ${size.brotli} B`
}
function expectSmallerAndWithinBudget(
verkit: BundleSize,
semver: BundleSize,
budget: BundleSize,
): void {
expect(verkit.minified).toBeLessThan(semver.minified)
expect(verkit.gzip).toBeLessThan(semver.gzip)
expect(verkit.brotli).toBeLessThan(semver.brotli)
expect(verkit.minified).toBeLessThanOrEqual(budget.minified)
expect(verkit.gzip).toBeLessThanOrEqual(budget.gzip)
expect(verkit.brotli).toBeLessThanOrEqual(budget.brotli)
}
describe('bundle size', () => {
it('is smaller than minified npm semver for a full import', async () => {
const [verkit, semver] = await Promise.all([
getMinifiedBundleSize(entries.full.verkit),
getMinifiedBundleSize(entries.full.semver),
])
expectSmallerAndWithinBudget(verkit, semver, VERKIT_BUDGETS.full)
stdout.write(
`\nBundle size (full/CDN) — verkit: ${formatSize(verkit)}; semver: ${formatSize(semver)}\n`,
)
})
it('is smaller than minified npm semver for common imports', async () => {
const [verkit, semver] = await Promise.all([
getMinifiedBundleSize(entries.common.verkit),
getMinifiedBundleSize(entries.common.semver),
])
expect(runVerkitOperations('1.2.3', '^1.0.0')).toEqual(
runSemverOperations('1.2.3', '^1.0.0'),
)
expectSmallerAndWithinBudget(verkit, semver, VERKIT_BUDGETS.common)
stdout.write(
`\nBundle size (common imports) — verkit: ${formatSize(verkit)}; semver: ${formatSize(semver)}\n`,
)
})
})
sxzz-verkit-a5b7150/tests/comparator.test.ts 0000664 0000000 0000000 00000006035 15253274704 0021234 0 ustar 00root root 0000000 0000000 import { describe, expect, it } from 'vitest'
import {
comparatorsIntersect,
normalizeComparator,
parseComparator,
satisfiesComparator,
tryParseComparator,
} from '../src/comparator.ts'
import { parse } from '../src/version.ts'
import comparatorIntersections from './fixtures/node-semver/comparator-intersection.ts'
type IntersectionCase = readonly [string, string, boolean, boolean?]
describe('comparators', () => {
it('parses reusable mutable comparators', () => {
const comparator = parseComparator('>=1.2.3')
expect(comparator).toEqual({
operator: '>=',
options: {},
value: '>=1.2.3',
version: parse('1.2.3'),
})
expect(parseComparator(comparator)).toBe(comparator)
expect(tryParseComparator(comparator)).toBe(comparator)
expect(tryParseComparator('not a comparator')).toBeNull()
expect(() => parseComparator('not a comparator')).toThrow(TypeError)
comparator.version!.patch = 4
expect(normalizeComparator(comparator)).toBe('>=1.2.4')
expect(satisfiesComparator('1.2.4', comparator)).toBe(true)
expect(comparatorsIntersect(comparator, parseComparator('<2.0.0'))).toBe(
true,
)
})
it('normalizes and tests strict comparators', () => {
expect(normalizeComparator(' >= 1.2.3+build ')).toBe('>=1.2.3')
expect(satisfiesComparator('1.2.3+other', '>=1.2.3')).toBe(true)
expect(satisfiesComparator('1.2.3-alpha', '>=1.2.3')).toBe(false)
expect(satisfiesComparator('not a version', '>=1.2.3')).toBe(false)
expect(satisfiesComparator(parse('1.2.3'), '>=1.2.3')).toBe(true)
expect(() => normalizeComparator('not a comparator')).toThrow(TypeError)
})
it('matches every comparator intersection fixture', () => {
for (const row of comparatorIntersections as readonly IntersectionCase[]) {
const [left, right, expected, includePrerelease = false] = row
expect(comparatorsIntersect(left, right, { includePrerelease })).toBe(
expected,
)
}
})
it('applies the prerelease rule to an exact-version comparator', () => {
const cases: readonly IntersectionCase[] = [
['1.2.3-a', '>1.0.0', false],
['1.2.3-a', '>=1.0.0', false],
['1.2.3-a', '<2.0.0', false],
['1.2.3-a', '<=2.0.0', false],
['=1.2.3-a', '<2.0.0', false],
['1.2.3-a', '>=1.2.3', false],
['>1.0.0', '1.2.3-a', false],
['<2.0.0', '1.2.3-a', false],
['>=1.2.3', '=1.2.3-a', false],
// the rule is satisfied: same tuple, and the other side is a prerelease
['1.2.3-a', '>=1.2.3-a', true],
['1.2.3-a', '<1.2.3-b', true],
['1.2.3-a', '=1.2.3-a', true],
['>=1.2.3-a', '1.2.3-a', true],
['1.2.3-a', '>1.0.0', true, true],
['1.2.3-a', '<2.0.0', true, true],
// plain versions are untouched
['1.2.3', '>1.0.0', true],
['1.2.3', '<1.0.0', false],
['>1.0.0', '1.2.3', true],
]
for (const [left, right, expected, includePrerelease = false] of cases) {
expect(comparatorsIntersect(left, right, { includePrerelease })).toBe(
expected,
)
}
})
})
sxzz-verkit-a5b7150/tests/comparator.types.ts 0000664 0000000 0000000 00000002055 15253274704 0021417 0 ustar 00root root 0000000 0000000 import {
comparatorsIntersect,
normalizeComparator,
parseComparator,
satisfiesComparator,
tryParseComparator,
type ComparatorInput,
type RangeOptions,
type SemVerComparator,
} from '../src/index.ts'
declare const input: ComparatorInput
declare const options: RangeOptions
declare const parsed: SemVerComparator
parseComparator(input)
tryParseComparator(input)
normalizeComparator(input)
satisfiesComparator('1.0.0', input)
comparatorsIntersect(input, parsed)
// @ts-expect-error A parsed comparator already contains its parsing options.
parseComparator(parsed, options)
// @ts-expect-error A parsed comparator already contains its parsing options.
tryParseComparator(parsed, options)
// @ts-expect-error A parsed comparator already contains its parsing options.
normalizeComparator(parsed, options)
// @ts-expect-error A parsed comparator already contains its parsing options.
satisfiesComparator('1.0.0', parsed, options)
// @ts-expect-error Parsed comparators already contain their parsing options.
comparatorsIntersect(parsed, '>=1.0.0', options)
sxzz-verkit-a5b7150/tests/comparison.test.ts 0000664 0000000 0000000 00000010643 15253274704 0021237 0 ustar 00root root 0000000 0000000 import { describe, expect, it } from 'vitest'
import {
compare,
compareBuild,
compareIdentifiers,
compareIdentifiersReversed,
compareMain,
comparePrerelease,
compareReversed,
compareWithOperator,
isEqual,
isGreaterThan,
isGreaterThanOrEqual,
isLessThan,
isLessThanOrEqual,
isNotEqual,
parse,
sort,
sortReversed,
type VersionOptions,
} from '../src/version.ts'
import comparisons from './fixtures/node-semver/comparisons.ts'
import equality from './fixtures/node-semver/equality.ts'
type ComparisonCase = readonly [string, string, unknown?]
function versionOptions(value: unknown): VersionOptions {
if (value === true) return { loose: true }
return value && typeof value === 'object' ? (value as VersionOptions) : {}
}
describe('version comparison', () => {
it('accepts parsed SemVer objects', () => {
const left = parse('2.0.0+two')
const right = { major: 1, minor: 0, patch: 0 }
expect(compare(left, right)).toBe(1)
expect(compareBuild(left, '2.0.0+one')).toBe(1)
expect(compareBuild(right, { ...right, build: ['one'] })).toBe(-1)
expect(isGreaterThan(left, right)).toBe(true)
})
it('orders every comparison fixture', () => {
for (const row of comparisons as readonly ComparisonCase[]) {
const [left, right, rawOptions] = row
const options = versionOptions(rawOptions)
expect(compare(left, right, options)).toBe(1)
expect(compareReversed(left, right, options)).toBe(-1)
expect(isGreaterThan(left, right, options)).toBe(true)
expect(isGreaterThanOrEqual(left, right, options)).toBe(true)
expect(isLessThan(right, left, options)).toBe(true)
expect(isLessThanOrEqual(right, left, options)).toBe(true)
expect(isNotEqual(left, right, options)).toBe(true)
}
})
it('treats every equality fixture as equivalent', () => {
for (const row of equality as readonly ComparisonCase[]) {
const [left, right, rawOptions] = row
const options = versionOptions(rawOptions)
expect(compare(left, right, options)).toBe(0)
expect(isEqual(left, right, options)).toBe(true)
expect(isGreaterThanOrEqual(left, right, options)).toBe(true)
expect(isLessThanOrEqual(left, right, options)).toBe(true)
expect(compareWithOperator(left, '=', right, options)).toBe(true)
}
})
it('compares main, prerelease, and build components independently', () => {
expect(compareMain('1.2.3-alpha', '1.2.3')).toBe(0)
expect(comparePrerelease('1.2.3-alpha', '9.9.9-beta')).toBe(-1)
expect(compare('1.2.3+2', '1.2.3+1')).toBe(0)
expect(compareBuild('1.2.3+2', '1.2.3+1')).toBe(1)
expect(compareBuild('1.2.3+one', '1.2.3+one')).toBe(0)
expect(compareBuild('1.2.3+one', '1.2.3')).toBe(1)
})
it('supports semver and identity operators', () => {
expect(compareWithOperator('1.2.3', '', '1.2.3')).toBe(true)
expect(compareWithOperator('v1.2.3', '==', '1.2.3')).toBe(true)
expect(compareWithOperator('v1.2.3', '===', '1.2.3')).toBe(false)
expect(compareWithOperator('v1.2.3', '!==', '1.2.3')).toBe(true)
expect(compareWithOperator('2.0.0', '!=', '1.0.0')).toBe(true)
expect(compareWithOperator('2.0.0', '>', '1.0.0')).toBe(true)
expect(compareWithOperator('2.0.0', '>=', '2.0.0')).toBe(true)
expect(compareWithOperator('1.0.0', '<', '2.0.0')).toBe(true)
expect(compareWithOperator('2.0.0', '<=', '2.0.0')).toBe(true)
expect(() =>
compareWithOperator('1.0.0', 'not-an-operator' as never, '1.0.0'),
).toThrow(TypeError)
})
it('compares identifiers using semver precedence', () => {
expect(compareIdentifiers(1, 1)).toBe(0)
expect(compareIdentifiers(1, 2)).toBe(-1)
expect(compareIdentifiers('2', 'alpha')).toBe(-1)
expect(compareIdentifiers('beta', 'alpha')).toBe(1)
expect(compareIdentifiersReversed('beta', 'alpha')).toBe(-1)
})
})
describe('sorting', () => {
it('preserves parsed object identities', () => {
const lower = parse('1.0.0')
const higher = parse('2.0.0')
expect(sort([higher, lower])).toEqual([lower, higher])
expect(sortReversed([lower, higher])).toEqual([higher, lower])
})
it('sorts by build-aware precedence without mutating the input', () => {
const versions = ['1.0.0+2', '2.0.0', '1.0.0+1']
const original = [...versions]
expect(sort(versions)).toEqual(['1.0.0+1', '1.0.0+2', '2.0.0'])
expect(sortReversed(versions)).toEqual(['2.0.0', '1.0.0+2', '1.0.0+1'])
expect(versions).toEqual(original)
})
})
sxzz-verkit-a5b7150/tests/fixtures/ 0000775 0000000 0000000 00000000000 15253274704 0017404 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/tests/fixtures/bundle-size/ 0000775 0000000 0000000 00000000000 15253274704 0021625 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/tests/fixtures/bundle-size/semver.ts 0000664 0000000 0000000 00000000706 15253274704 0023501 0 ustar 00root root 0000000 0000000 import { coerce, compare, inc, satisfies, valid } from 'semver'
export function runCommonOperations(
version: string,
range: string,
): readonly [string | null, boolean, number, string | null, number | null] {
return [
valid(version),
satisfies(version, range),
compare(version, '1.0.0'),
inc(version, 'patch'),
/* v8 ignore start -- @preserve */
coerce(version)?.major ?? null,
/* v8 ignore stop -- @preserve */
]
}
sxzz-verkit-a5b7150/tests/fixtures/bundle-size/verkit.ts 0000664 0000000 0000000 00000001016 15253274704 0023477 0 ustar 00root root 0000000 0000000 import {
coerce,
compare,
increment,
normalize,
satisfies,
} from '../../../src/index.ts'
export function runCommonOperations(
version: string,
range: string,
): readonly [string | null, boolean, number, string | null, number | null] {
const coerced = coerce(version)
return [
normalize(version),
satisfies(version, range),
compare(version, '1.0.0'),
increment(version, 'patch'),
/* v8 ignore start -- @preserve */
coerced?.major ?? null,
/* v8 ignore stop -- @preserve */
]
}
sxzz-verkit-a5b7150/tests/fixtures/node-semver/ 0000775 0000000 0000000 00000000000 15253274704 0021630 5 ustar 00root root 0000000 0000000 sxzz-verkit-a5b7150/tests/fixtures/node-semver/comparator-intersection.ts 0000664 0000000 0000000 00000002615 15253274704 0027057 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// c0, c1, expected intersection, includePrerelease
const fixtures: readonly (readonly unknown[])[] = [
// One is a Version
['1.3.0', '>=1.3.0', true],
['1.3.0', '>1.3.0', false],
['>=1.3.0', '1.3.0', true],
['>1.3.0', '1.3.0', false],
// Same direction increasing
['>1.3.0', '>1.2.0', true],
['>1.2.0', '>1.3.0', true],
['>=1.2.0', '>1.3.0', true],
['>1.2.0', '>=1.3.0', true],
// Same direction decreasing
['<1.3.0', '<1.2.0', true],
['<1.2.0', '<1.3.0', true],
['<=1.2.0', '<1.3.0', true],
['<1.2.0', '<=1.3.0', true],
// Different directions, same semver and inclusive operator
['>=1.3.0', '<=1.3.0', true],
['>=v1.3.0', '<=1.3.0', true],
['>=1.3.0', '>=1.3.0', true],
['<=1.3.0', '<=1.3.0', true],
['<=1.3.0', '<=v1.3.0', true],
['>1.3.0', '<=1.3.0', false],
['>=1.3.0', '<1.3.0', false],
// Opposite matching directions
['>1.0.0', '<2.0.0', true],
['>=1.0.0', '<2.0.0', true],
['>=1.0.0', '<=2.0.0', true],
['>1.0.0', '<=2.0.0', true],
['<=2.0.0', '>1.0.0', true],
['<=1.0.0', '>=2.0.0', false],
['', '', true],
['', '>1.0.0', true],
['<=2.0.0', '', true],
['<0.0.0', '<0.1.0', false],
['<0.1.0', '<0.0.0', false],
['<0.0.0-0', '<0.1.0', false],
['<0.1.0', '<0.0.0-0', false],
['<0.0.0-0', '<0.1.0', false, true],
['<0.1.0', '<0.0.0-0', false, true],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/comparisons.ts 0000664 0000000 0000000 00000002234 15253274704 0024536 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [version1, version2]
// version1 should be greater than version2
// used by the cmp, eq, gt, lt, and neq tests
const fixtures: readonly (readonly unknown[])[] = [
['0.0.0', '0.0.0-foo'],
['0.0.1', '0.0.0'],
['1.0.0', '0.9.9'],
['0.10.0', '0.9.0'],
['0.99.0', '0.10.0', {}],
['2.0.0', '1.2.3', { loose: false }],
['v0.0.0', '0.0.0-foo', true],
['v0.0.1', '0.0.0', { loose: true }],
['v1.0.0', '0.9.9', true],
['v0.10.0', '0.9.0', true],
['v0.99.0', '0.10.0', true],
['v2.0.0', '1.2.3', true],
['0.0.0', 'v0.0.0-foo', true],
['0.0.1', 'v0.0.0', true],
['1.0.0', 'v0.9.9', true],
['0.10.0', 'v0.9.0', true],
['0.99.0', 'v0.10.0', true],
['2.0.0', 'v1.2.3', true],
['1.2.3', '1.2.3-asdf'],
['1.2.3', '1.2.3-4'],
['1.2.3', '1.2.3-4-foo'],
['1.2.3-5-foo', '1.2.3-5'],
['1.2.3-5', '1.2.3-4'],
['1.2.3-5-foo', '1.2.3-5-Foo'],
['3.0.0', '2.7.2+asdf'],
['1.2.3-a.10', '1.2.3-a.5'],
['1.2.3-a.b', '1.2.3-a.5'],
['1.2.3-a.b', '1.2.3-a'],
['1.2.3-a.b.c.10.d.5', '1.2.3-a.b.c.5.d.100'],
['1.2.3-r2', '1.2.3-r100'],
['1.2.3-r100', '1.2.3-R2'],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/equality.ts 0000664 0000000 0000000 00000003013 15253274704 0024032 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [version1, version2]
// version1 should be equivalent to version2
const fixtures: readonly (readonly unknown[])[] = [
['1.2.3', 'v1.2.3', true],
['1.2.3', '=1.2.3', true],
['1.2.3', 'v 1.2.3', true],
['1.2.3', '= 1.2.3', true],
['1.2.3', ' v1.2.3', true],
['1.2.3', ' =1.2.3', true],
['1.2.3', ' v 1.2.3', true],
['1.2.3', ' = 1.2.3', true],
['1.2.3-0', 'v1.2.3-0', true],
['1.2.3-0', '=1.2.3-0', true],
['1.2.3-0', 'v 1.2.3-0', true],
['1.2.3-0', '= 1.2.3-0', true],
['1.2.3-0', ' v1.2.3-0', true],
['1.2.3-0', ' =1.2.3-0', true],
['1.2.3-0', ' v 1.2.3-0', true],
['1.2.3-0', ' = 1.2.3-0', true],
['1.2.3-1', 'v1.2.3-1', true],
['1.2.3-1', '=1.2.3-1', true],
['1.2.3-1', 'v 1.2.3-1', true],
['1.2.3-1', '= 1.2.3-1', true],
['1.2.3-1', ' v1.2.3-1', true],
['1.2.3-1', ' =1.2.3-1', true],
['1.2.3-1', ' v 1.2.3-1', true],
['1.2.3-1', ' = 1.2.3-1', true],
['1.2.3-beta', 'v1.2.3-beta', true],
['1.2.3-beta', '=1.2.3-beta', true],
['1.2.3-beta', 'v 1.2.3-beta', true],
['1.2.3-beta', '= 1.2.3-beta', true],
['1.2.3-beta', ' v1.2.3-beta', true],
['1.2.3-beta', ' =1.2.3-beta', true],
['1.2.3-beta', ' v 1.2.3-beta', true],
['1.2.3-beta', ' = 1.2.3-beta', true],
['1.2.3-beta+build', ' = 1.2.3-beta+otherbuild', true],
['1.2.3+build', ' = 1.2.3+otherbuild', true],
['1.2.3-beta+build', '1.2.3-beta+otherbuild'],
['1.2.3+build', '1.2.3+otherbuild'],
[' v1.2.3+build', '1.2.3+otherbuild'],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/increments.ts 0000664 0000000 0000000 00000020247 15253274704 0024354 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [version, inc, result, options, identifier, identifierBase]
// inc(version, inc, options, identifier, identifierBase) -> result
const fixtures: readonly (readonly unknown[])[] = [
['1.2.3', 'major', '2.0.0'],
['1.2.3', 'minor', '1.3.0'],
['1.2.3', 'patch', '1.2.4'],
['1.2.3tag', 'major', '2.0.0', true],
['1.2.3-tag', 'major', '2.0.0'],
['1.2.3', 'fake', null],
['1.2.0-0', 'patch', '1.2.0'],
['fake', 'major', null],
['1.2.3-4', 'major', '2.0.0'],
['1.2.3-4', 'minor', '1.3.0'],
['1.2.3-4', 'patch', '1.2.3'],
['1.2.3-alpha.0.beta', 'major', '2.0.0'],
['1.2.3-alpha.0.beta', 'minor', '1.3.0'],
['1.2.3-alpha.0.beta', 'patch', '1.2.3'],
['1.2.4', 'prerelease', '1.2.5-0'],
['1.2.3-0', 'prerelease', '1.2.3-1'],
['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1'],
['1.2.3-alpha.1', 'prerelease', '1.2.3-alpha.2'],
['1.2.3-alpha.2', 'prerelease', '1.2.3-alpha.3'],
['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta'],
['1.2.3-alpha.1.beta', 'prerelease', '1.2.3-alpha.2.beta'],
['1.2.3-alpha.2.beta', 'prerelease', '1.2.3-alpha.3.beta'],
['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-alpha.10.1.beta'],
['1.2.3-alpha.10.1.beta', 'prerelease', '1.2.3-alpha.10.2.beta'],
['1.2.3-alpha.10.2.beta', 'prerelease', '1.2.3-alpha.10.3.beta'],
['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-alpha.10.beta.1'],
['1.2.3-alpha.10.beta.1', 'prerelease', '1.2.3-alpha.10.beta.2'],
['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3'],
[
'3.0.0-alpha.beta.5.4',
'prerelease',
'3.0.0-alpha.beta.5.5',
false,
'alpha.beta',
],
[
'3.0.0-alpha.beta.5.4',
'prerelease',
'3.0.0-alpha.beta.5.5',
false,
'alpha.beta.5',
],
[
'3.0.0-alpha.beta.gamma',
'prerelease',
'3.0.0-alpha.beta.0',
false,
'alpha.beta',
],
['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta'],
['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta'],
['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta'],
['1.0.0', 'prepatch', '1.0.1-alpha.1.1a.0', null, 'alpha.1.1a'],
['1.2.0', 'prepatch', '1.2.1-0'],
['1.2.0-1', 'prepatch', '1.2.1-0'],
['1.2.0', 'preminor', '1.3.0-0'],
['1.2.3-1', 'preminor', '1.3.0-0'],
['1.2.0', 'premajor', '2.0.0-0'],
['1.2.3-1', 'premajor', '2.0.0-0'],
['1.2.0-1', 'minor', '1.2.0'],
['1.0.0-1', 'major', '1.0.0'],
['1.0.0-1', 'release', '1.0.0'],
['1.2.0-1', 'release', '1.2.0'],
['1.2.3-1', 'release', '1.2.3'],
['1.2.3', 'release', null],
// [version, inc, result, identifierIndex, loose, identifier]
['1.2.3', 'major', '2.0.0', false, 'dev'],
['1.2.3', 'minor', '1.3.0', false, 'dev'],
['1.2.3', 'patch', '1.2.4', false, 'dev'],
['1.2.3tag', 'major', '2.0.0', true, 'dev'],
['1.2.3-tag', 'major', '2.0.0', false, 'dev'],
['1.2.3', 'fake', null, false, 'dev'],
['1.2.0-0', 'patch', '1.2.0', false, 'dev'],
['fake', 'major', null, false, 'dev'],
['1.2.3-4', 'major', '2.0.0', false, 'dev'],
['1.2.3-4', 'minor', '1.3.0', false, 'dev'],
['1.2.3-4', 'patch', '1.2.3', false, 'dev'],
['1.2.3-alpha.0.beta', 'major', '2.0.0', false, 'dev'],
['1.2.3-alpha.0.beta', 'minor', '1.3.0', false, 'dev'],
['1.2.3-alpha.0.beta', 'patch', '1.2.3', false, 'dev'],
['1.2.4', 'prerelease', '1.2.5-dev.0', false, 'dev'],
['1.2.3-0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
['1.2.3-alpha.0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1', false, 'alpha'],
['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
['1.2.3-alpha.0.beta', 'prerelease', '1.2.3-alpha.1.beta', false, 'alpha'],
['1.2.3-alpha.10.0.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
[
'1.2.3-alpha.10.0.beta',
'prerelease',
'1.2.3-alpha.10.1.beta',
false,
'alpha',
],
[
'1.2.3-alpha.10.1.beta',
'prerelease',
'1.2.3-alpha.10.2.beta',
false,
'alpha',
],
[
'1.2.3-alpha.10.2.beta',
'prerelease',
'1.2.3-alpha.10.3.beta',
false,
'alpha',
],
['1.2.3-alpha.10.beta.0', 'prerelease', '1.2.3-dev.0', false, 'dev'],
[
'1.2.3-alpha.10.beta.0',
'prerelease',
'1.2.3-alpha.10.beta.1',
false,
'alpha',
],
[
'1.2.3-alpha.10.beta.1',
'prerelease',
'1.2.3-alpha.10.beta.2',
false,
'alpha',
],
[
'1.2.3-alpha.10.beta.2',
'prerelease',
'1.2.3-alpha.10.beta.3',
false,
'alpha',
],
[
'3.0.0-alpha.beta.5.4',
'prerelease',
'3.0.0-alpha.beta.5.5',
false,
'alpha.beta',
],
[
'3.0.0-alpha.beta.5.4',
'prerelease',
'3.0.0-alpha.beta.5.5',
false,
'alpha.beta.5',
],
[
'3.0.0-alpha.beta.gamma',
'prerelease',
'3.0.0-alpha.beta.0',
false,
'alpha.beta',
],
['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-dev.0', false, 'dev'],
['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta', false, 'alpha'],
['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta', false, 'alpha'],
['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta', false, 'alpha'],
['1.2.0', 'prepatch', '1.2.1-dev.0', false, 'dev'],
['1.2.0-1', 'prepatch', '1.2.1-dev.0', false, 'dev'],
['1.2.0', 'preminor', '1.3.0-dev.0', false, 'dev'],
['1.2.3-1', 'preminor', '1.3.0-dev.0', false, 'dev'],
['1.2.0', 'premajor', '2.0.0-dev.0', false, 'dev'],
['1.2.3-1', 'premajor', '2.0.0-dev.0', false, 'dev'],
['1.2.3-1', 'premajor', '2.0.0-dev.1', false, 'dev', 1],
['1.2.0-1', 'minor', '1.2.0', false, 'dev'],
['1.0.0-1', 'major', '1.0.0', 'dev'],
['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.0', false, 'dev'],
['1.2.3-0', 'prerelease', '1.2.3-1.0', false, '1'],
['1.2.3-1.0', 'prerelease', '1.2.3-1.1', false, '1'],
['1.2.3-1.1', 'prerelease', '1.2.3-1.2', false, '1'],
['1.2.3-1.1', 'prerelease', '1.2.3-2.0', false, '2'],
// [version, inc, result, identifierIndex, loose, identifier, identifierBase]
['1.2.0-1', 'prerelease', '1.2.0-alpha.0', false, 'alpha', '0'],
['1.2.1', 'prerelease', '1.2.2-alpha.0', false, 'alpha', '0'],
['0.2.0', 'prerelease', '0.2.1-alpha.0', false, 'alpha', '0'],
['1.2.2', 'prerelease', '1.2.3-alpha.1', false, 'alpha', '1'],
['1.2.3', 'prerelease', '1.2.4-alpha.1', false, 'alpha', '1'],
['1.2.4', 'prerelease', '1.2.5-alpha.1', false, 'alpha', '1'],
['1.2.0', 'prepatch', '1.2.1-dev.1', false, 'dev', '1'],
['1.2.0-1', 'prepatch', '1.2.1-dev.1', false, 'dev', '1'],
['1.2.0', 'premajor', '2.0.0-dev.0', false, 'dev', '0'],
['1.2.3-1', 'premajor', '2.0.0-dev.0', false, 'dev', '0'],
['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.0', false, 'dev', '0'],
['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.1', false, 'dev', '1'],
['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.bar.0', false, '', '0'],
['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.bar.1', false, '', '1'],
['1.2.0', 'preminor', '1.3.0-dev.1', false, 'dev', '1'],
['1.2.3-1', 'preminor', '1.3.0-dev.0', false, 'dev'],
['1.2.0', 'prerelease', '1.2.1-1', false, '', '1'],
['1.2.0-1', 'prerelease', '1.2.0-alpha', false, 'alpha', false],
['1.2.1', 'prerelease', '1.2.2-alpha', false, 'alpha', false],
['1.2.2', 'prerelease', '1.2.3-alpha', false, 'alpha', false],
['1.2.0', 'prepatch', '1.2.1-dev', false, 'dev', false],
['1.2.0-1', 'prepatch', '1.2.1-dev', false, 'dev', false],
['1.2.0', 'premajor', '2.0.0-dev', false, 'dev', false],
['1.2.3-1', 'premajor', '2.0.0-dev', false, 'dev', false],
['1.2.3-dev.bar', 'prerelease', '1.2.3-dev', false, 'dev', false],
['1.2.3-dev.bar', 'prerelease', '1.2.3-dev.baz', false, 'dev.baz', false],
['1.2.0', 'preminor', '1.3.0-dev', false, 'dev', false],
['1.2.3-1', 'preminor', '1.3.0-dev', false, 'dev', false],
['1.2.3-dev', 'prerelease', null, false, 'dev', false],
['1.2.0-dev', 'premajor', '2.0.0-dev', false, 'dev', false],
['1.2.0-dev', 'preminor', '1.3.0-beta', false, 'beta', false],
['1.2.0-dev', 'prepatch', '1.2.1-dev', false, 'dev', false],
['1.2.0', 'prerelease', null, false, '', false],
['1.0.0-rc.1+build.4', 'prerelease', '1.0.0-rc.2', 'rc', false],
['1.2.0', 'prerelease', null, false, 'invalid/preid'],
['1.2.0', 'prerelease', null, false, 'invalid+build'],
['1.2.0beta', 'prerelease', null, { loose: true }, 'invalid/preid'],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/invalid-versions.ts 0000664 0000000 0000000 00000001617 15253274704 0025501 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// none of these are semvers
// [value, reason, opt]
import { MAX_LENGTH } from '../../../src/version/constants.ts'
const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER
const fixtures: readonly (readonly unknown[])[] = [
[new Array(MAX_LENGTH).join('1') + '.0.0', 'too long'],
[`${MAX_SAFE_INTEGER}0.0.0`, 'too big'],
[`0.${MAX_SAFE_INTEGER}0.0`, 'too big'],
[`0.0.${MAX_SAFE_INTEGER}0`, 'too big'],
['hello, world', 'not a version'],
['hello, world', 'even loose, its still junk', true],
['xyz', 'even loose as an opt, same', { loose: true }],
[/a regexp/, 'regexp is not a string'],
[/1.2.3/, 'semver-ish regexp is not a string'],
[
{
/* v8 ignore next -- @preserve */
toString: () => {
throw new Error('never throw')
},
},
'obj with a tostring is not a string',
],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/range-exclude.ts 0000664 0000000 0000000 00000006374 15253274704 0024735 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [range, version, options]
// version should not be included by range
const fixtures: readonly (readonly unknown[])[] = [
['1.0.0 - 2.0.0', '2.2.3'],
['1.2.3+asdf - 2.4.3+asdf', '1.2.3-pre.2'],
['1.2.3+asdf - 2.4.3+asdf', '2.4.3-alpha'],
['^1.2.3+build', '2.0.0'],
['^1.2.3+build', '1.2.0'],
['^1.2.3', '1.2.3-pre'],
['^1.2', '1.2.0-pre'],
['>1.2', '1.3.0-beta'],
['<=1.2.3', '1.2.3-beta'],
['^1.2.3', '1.2.3-beta'],
['=0.7.x', '0.7.0-asdf'],
['>=0.7.x', '0.7.0-asdf'],
['<=0.7.x', '0.7.0-asdf'],
['1', '1.0.0beta', { loose: 420 }],
['<1', '1.0.0beta', true],
['< 1', '1.0.0beta', true],
['1.0.0', '1.0.1'],
['>=1.0.0', '0.0.0'],
['>=1.0.0', '0.0.1'],
['>=1.0.0', '0.1.0'],
['>1.0.0', '0.0.1'],
['>1.0.0', '0.1.0'],
['<=2.0.0', '3.0.0'],
['<=2.0.0', '2.9999.9999'],
['<=2.0.0', '2.2.9'],
['<2.0.0', '2.9999.9999'],
['<2.0.0', '2.2.9'],
['>=0.1.97', 'v0.1.93', true],
['>=0.1.97', '0.1.93'],
['0.1.20 || 1.2.4', '1.2.3'],
['>=0.2.3 || <0.0.1', '0.0.3'],
['>=0.2.3 || <0.0.1', '0.2.2'],
['2.x.x', '1.1.3', { loose: NaN }],
['2.x.x', '3.1.3'],
['1.2.x', '1.3.3'],
['1.2.x || 2.x', '3.1.3'],
['1.2.x || 2.x', '1.1.3'],
['2.*.*', '1.1.3'],
['2.*.*', '3.1.3'],
['1.2.*', '1.3.3'],
['1.2.* || 2.*', '3.1.3'],
['1.2.* || 2.*', '1.1.3'],
['2', '1.1.2'],
['2.3', '2.4.1'],
['~0.0.1', '0.1.0-alpha'],
['~0.0.1', '0.1.0'],
['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
['~2.4', '2.3.9'],
['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0
['~1', '0.2.3'], // >=1.0.0 <2.0.0
['~>1', '2.2.3'],
['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
['<1', '1.0.0'],
['>=1.2', '1.1.1'],
['1', '2.0.0beta', true],
['~v0.5.4-beta', '0.5.4-alpha'],
['=0.7.x', '0.8.2'],
['>=0.7.x', '0.6.2'],
['<0.7.x', '0.7.2'],
['<1.2.3', '1.2.3-beta'],
['=1.2.3', '1.2.3-beta'],
['>1.2', '1.2.8'],
['^0.0.1', '0.0.2-alpha'],
['^0.0.1', '0.0.2'],
['^1.2.3', '2.0.0-alpha'],
['^1.2.3', '1.2.2'],
['^1.2', '1.1.9'],
['*', 'v1.2.3-foo', true],
// invalid versions never satisfy, but shouldn't throw
['*', 'not a version'],
['>=2', 'glorp'],
['>=2', false],
['2.x', '3.0.0-pre.0', { includePrerelease: true }],
['^0.0.3', '0.0.3-alpha', { includePrerelease: true }],
['^0.2.3', '0.2.3-alpha', { includePrerelease: true }],
['^1.0.0', '1.0.0-rc1', { includePrerelease: true }],
['^1.0.0', '2.0.0-rc1', { includePrerelease: true }],
['^1.2.3-rc2', '2.0.0', { includePrerelease: true }],
['^1.0.0', '2.0.0-rc1'],
['1 - 2', '3.0.0-pre', { includePrerelease: true }],
['1 - 2', '2.0.0-pre'],
['1 - 2', '1.0.0-pre'],
['1.0 - 2', '1.0.0-pre'],
['1.1.x', '1.0.0-a'],
['1.1.x', '1.1.0-a'],
['1.1.x', '1.2.0-a'],
['1.1.x', '1.2.0-a', { includePrerelease: true }],
['1.1.x', '1.0.0-a', { includePrerelease: true }],
['1.x', '1.0.0-a'],
['1.x', '1.1.0-a'],
['1.x', '1.2.0-a'],
['1.x', '0.0.0-a', { includePrerelease: true }],
['1.x', '2.0.0-a', { includePrerelease: true }],
['>=1.0.0 <1.1.0', '1.1.0'],
['>=1.0.0 <1.1.0', '1.1.0', { includePrerelease: true }],
['>=1.0.0 <1.1.0', '1.1.0-pre'],
['>=1.0.0 <1.1.0-pre', '1.1.0-pre'],
['== 1.0.0 || foo', '2.0.0', { loose: true }],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/range-include.ts 0000664 0000000 0000000 00000010732 15253274704 0024720 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [range, version, options]
// version should be included by range
const fixtures: readonly (readonly unknown[])[] = [
['1.0.0 - 2.0.0', '1.2.3'],
['^1.2.3+build', '1.2.3'],
['^1.2.3+build', '1.3.0'],
['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3'],
['1.2.3pre+asdf - 2.4.3-pre+asdf', '1.2.3', true],
['1.2.3-pre+asdf - 2.4.3pre+asdf', '1.2.3', true],
['1.2.3pre+asdf - 2.4.3pre+asdf', '1.2.3', true],
['1.2.3-pre+asdf - 2.4.3-pre+asdf', '1.2.3-pre.2'],
['1.2.3-pre+asdf - 2.4.3-pre+asdf', '2.4.3-alpha'],
['1.2.3+asdf - 2.4.3+asdf', '1.2.3'],
['1.0.0', '1.0.0'],
['>=*', '0.2.4'],
['', '1.0.0'],
['*', '1.2.3', {}],
['*', 'v1.2.3', { loose: 123 }],
['>=1.0.0', '1.0.0', /asdf/],
['>=1.0.0', '1.0.1', { loose: null }],
['>=1.0.0', '1.1.0', { loose: 0 }],
['>1.0.0', '1.0.1', { loose: undefined }],
['>1.0.0', '1.1.0'],
['<=2.0.0', '2.0.0'],
['<=2.0.0', '1.9999.9999'],
['<=2.0.0', '0.2.9'],
['<2.0.0', '1.9999.9999'],
['<2.0.0', '0.2.9'],
['>= 1.0.0', '1.0.0'],
['>= 1.0.0', '1.0.1'],
['>= 1.0.0', '1.1.0'],
['> 1.0.0', '1.0.1'],
['> 1.0.0', '1.1.0'],
['<= 2.0.0', '2.0.0'],
['<= 2.0.0', '1.9999.9999'],
['<= 2.0.0', '0.2.9'],
['< 2.0.0', '1.9999.9999'],
['<\t2.0.0', '0.2.9'],
['>=0.1.97', 'v0.1.97', true],
['>=0.1.97', '0.1.97'],
['0.1.20 || 1.2.4', '1.2.4'],
['>=0.2.3 || <0.0.1', '0.0.0'],
['>=0.2.3 || <0.0.1', '0.2.3'],
['>=0.2.3 || <0.0.1', '0.2.4'],
['||', '1.3.4'],
['2.x.x', '2.1.3'],
['1.2.x', '1.2.3'],
['1.2.x || 2.x', '2.1.3'],
['1.2.x || 2.x', '1.2.3'],
['x', '1.2.3'],
['2.*.*', '2.1.3'],
['1.2.*', '1.2.3'],
['1.2.* || 2.*', '2.1.3'],
['1.2.* || 2.*', '1.2.3'],
['*', '1.2.3'],
['2', '2.1.2'],
['2.3', '2.3.1'],
['~0.0.1', '0.0.1'],
['~0.0.1', '0.0.2'],
['~x', '0.0.9'], // >=2.4.0 <2.5.0
['~2', '2.0.9'], // >=2.4.0 <2.5.0
['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
['~2.4', '2.4.5'],
['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0,
['~1', '1.2.3'], // >=1.0.0 <2.0.0
['~>1', '1.2.3'],
['~> 1', '1.2.3'],
['~1.0', '1.0.2'], // >=1.0.0 <1.1.0,
['~ 1.0', '1.0.2'],
['~ 1.0.3', '1.0.12'],
['~ 1.0.3alpha', '1.0.12', { loose: true }],
['>=1', '1.0.0'],
['>= 1', '1.0.0'],
['<1.2', '1.1.1'],
['< 1.2', '1.1.1'],
['~v0.5.4-pre', '0.5.5'],
['~v0.5.4-pre', '0.5.4'],
['=0.7.x', '0.7.2'],
['<=0.7.x', '0.7.2'],
['>=0.7.x', '0.7.2'],
['<=0.7.x', '0.6.2'],
['~1.2.1 >=1.2.3', '1.2.3'],
['~1.2.1 =1.2.3', '1.2.3'],
['~1.2.1 1.2.3', '1.2.3'],
['~1.2.1 >=1.2.3 1.2.3', '1.2.3'],
['~1.2.1 1.2.3 >=1.2.3', '1.2.3'],
['>=1.2.1 1.2.3', '1.2.3'],
['1.2.3 >=1.2.1', '1.2.3'],
['>=1.2.3 >=1.2.1', '1.2.3'],
['>=1.2.1 >=1.2.3', '1.2.3'],
['>=1.2', '1.2.8'],
['^1.2.3', '1.8.1'],
['^0.1.2', '0.1.2'],
['^0.1', '0.1.2'],
['^0.0.1', '0.0.1'],
['^1.2', '1.4.2'],
['^1.2 ^1', '1.4.2'],
['^1.2.3-alpha', '1.2.3-pre'],
['^1.2.0-alpha', '1.2.0-pre'],
['^0.0.1-alpha', '0.0.1-beta'],
['^0.0.1-alpha', '0.0.1'],
['^0.1.1-alpha', '0.1.1-beta'],
['^x', '1.2.3'],
['x - 1.0.0', '0.9.7'],
['x - 1.x', '0.9.7'],
['1.0.0 - x', '1.9.7'],
['1.x - x', '1.9.7'],
['<=7.x', '7.9.9'],
['2.x', '2.0.0-pre.0', { includePrerelease: true }],
['2.x', '2.1.0-pre.0', { includePrerelease: true }],
['1.1.x', '1.1.0-a', { includePrerelease: true }],
['1.1.x', '1.1.1-a', { includePrerelease: true }],
// tilde ranges are documented as equivalent to the matching x-range,
// so with includePrerelease they must accept the same prereleases. #512
['~1.1', '1.1.0-a', { includePrerelease: true }],
['~1.1.x', '1.1.0-a', { includePrerelease: true }],
['~1.1', '1.1.1-a', { includePrerelease: true }],
['~2', '2.0.0-pre.0', { includePrerelease: true }],
['~2.x', '2.0.0-pre.0', { includePrerelease: true }],
['*', '1.0.0-rc1', { includePrerelease: true }],
['^1.0.0-0', '1.0.1-rc1', { includePrerelease: true }],
['^1.0.0-rc2', '1.0.1-rc1', { includePrerelease: true }],
['^1.0.0', '1.0.1-rc1', { includePrerelease: true }],
['^1.0.0', '1.1.0-rc1', { includePrerelease: true }],
['1 - 2', '2.0.0-pre', { includePrerelease: true }],
['1 - 2', '1.0.0-pre', { includePrerelease: true }],
['1.0 - 2', '1.0.0-pre', { includePrerelease: true }],
['=0.7.x', '0.7.0-asdf', { includePrerelease: true }],
['>=0.7.x', '0.7.0-asdf', { includePrerelease: true }],
['<=0.7.x', '0.7.0-asdf', { includePrerelease: true }],
['>=1.0.0 <=1.1.0', '1.1.0-pre', { includePrerelease: true }],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/range-intersection.ts 0000664 0000000 0000000 00000004046 15253274704 0026004 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// r0, r1, expected intersection
const fixtures: readonly (readonly unknown[])[] = [
['1.3.0 || <1.0.0 >2.0.0', '1.3.0 || <1.0.0 >2.0.0', true],
['<1.0.0 >2.0.0', '>0.0.0', false],
['>0.0.0', '<1.0.0 >2.0.0', false],
['<1.0.0 >2.0.0', '>1.4.0 <1.6.0', false],
['<1.0.0 >2.0.0', '>1.4.0 <1.6.0 || 2.0.0', false],
['>1.0.0 <=2.0.0', '2.0.0', true],
['<1.0.0 >=2.0.0', '2.1.0', false],
['<1.0.0 >=2.0.0', '>1.4.0 <1.6.0 || 2.0.0', false],
['1.5.x', '<1.5.0 || >=1.6.0', false],
['<1.5.0 || >=1.6.0', '1.5.x', false],
[
'<1.6.16 || >=1.7.0 <1.7.11 || >=1.8.0 <1.8.2',
'>=1.6.16 <1.7.0 || >=1.7.11 <1.8.0 || >=1.8.2',
false,
],
[
'<=1.6.16 || >=1.7.0 <1.7.11 || >=1.8.0 <1.8.2',
'>=1.6.16 <1.7.0 || >=1.7.11 <1.8.0 || >=1.8.2',
true,
],
['>=1.0.0', '<=1.0.0', true],
['>1.0.0 <1.0.0', '<=0.0.0', false],
['*', '0.0.1', true],
['*', '>=1.0.0', true],
['*', '>1.0.0', true],
['*', '~1.0.0', true],
['*', '<1.6.0', true],
['*', '<=1.6.0', true],
['1.*', '0.0.1', false],
['1.*', '2.0.0', false],
['1.*', '1.0.0', true],
['1.*', '<2.0.0', true],
['1.*', '>1.0.0', true],
['1.*', '<=1.0.0', true],
['1.*', '^1.0.0', true],
['1.0.*', '0.0.1', false],
['1.0.*', '<0.0.1', false],
['1.0.*', '>0.0.1', true],
['*', '1.3.0 || <1.0.0 >2.0.0', true],
['1.3.0 || <1.0.0 >2.0.0', '*', true],
['1.*', '1.3.0 || <1.0.0 >2.0.0', true],
['x', '0.0.1', true],
['x', '>=1.0.0', true],
['x', '>1.0.0', true],
['x', '~1.0.0', true],
['x', '<1.6.0', true],
['x', '<=1.6.0', true],
['1.x', '0.0.1', false],
['1.x', '2.0.0', false],
['1.x', '1.0.0', true],
['1.x', '<2.0.0', true],
['1.x', '>1.0.0', true],
['1.x', '<=1.0.0', true],
['1.x', '^1.0.0', true],
['1.0.x', '0.0.1', false],
['1.0.x', '<0.0.1', false],
['1.0.x', '>0.0.1', true],
['x', '1.3.0 || <1.0.0 >2.0.0', true],
['1.3.0 || <1.0.0 >2.0.0', 'x', true],
['1.x', '1.3.0 || <1.0.0 >2.0.0', true],
['*', '*', true],
['x', '', true],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/range-parse.ts 0000664 0000000 0000000 00000014625 15253274704 0024414 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [range, canonical result, options]
// null result means it's not a valid range
// '*' is the return value from functions.validRange(), but
// new Range().range will be '' in those cases
const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER
const fixtures: readonly (readonly unknown[])[] = [
['1.0.0 - 2.0.0', '>=1.0.0 <=2.0.0'],
['1.0.0 - 2.0.0', '>=1.0.0-0 <2.0.1-0', { includePrerelease: true }],
['1 - 2', '>=1.0.0 <3.0.0-0'],
['1 - 2', '>=1.0.0-0 <3.0.0-0', { includePrerelease: true }],
['1.0 - 2.0', '>=1.0.0 <2.1.0-0'],
['1.0 - 2.0', '>=1.0.0-0 <2.1.0-0', { includePrerelease: true }],
['1.0.0', '1.0.0', { loose: false }],
['>=*', '*'],
['', '*'],
['*', '*'],
['>=1.0.0', '>=1.0.0'],
['>1.0.0', '>1.0.0'],
['<=2.0.0', '<=2.0.0'],
['1', '>=1.0.0 <2.0.0-0'],
['<2.0.0', '<2.0.0'],
['>= 1.0.0', '>=1.0.0'],
['>= 1.0.0', '>=1.0.0'],
['>= 1.0.0', '>=1.0.0'],
['> 1.0.0', '>1.0.0'],
['> 1.0.0', '>1.0.0'],
['<= 2.0.0', '<=2.0.0'],
['<= 2.0.0', '<=2.0.0'],
['<= 2.0.0', '<=2.0.0'],
['< 2.0.0', '<2.0.0'],
['<\t2.0.0', '<2.0.0'],
['>=0.1.97', '>=0.1.97'],
['0.1.20 || 1.2.4', '0.1.20||1.2.4'],
['>=0.2.3 || <0.0.1', '>=0.2.3||<0.0.1'],
['||', '*'],
['2.x.x', '>=2.0.0 <3.0.0-0'],
['1.2.x', '>=1.2.0 <1.3.0-0'],
['1.2.x || 2.x', '>=1.2.0 <1.3.0-0||>=2.0.0 <3.0.0-0'],
['1.x.5', null],
['1.*.5', null],
['1.x.5 || 2.x', null],
['x.1', null],
['x.1.2', null],
['x.x.1', null],
['x', '*'],
['2.*.*', '>=2.0.0 <3.0.0-0'],
['1.2.*', '>=1.2.0 <1.3.0-0'],
['1.2.* || 2.*', '>=1.2.0 <1.3.0-0||>=2.0.0 <3.0.0-0'],
['2', '>=2.0.0 <3.0.0-0'],
['2.3', '>=2.3.0 <2.4.0-0'],
['~2.4', '>=2.4.0 <2.5.0-0'],
['~>3.2.1', '>=3.2.1 <3.3.0-0'],
['~1', '>=1.0.0 <2.0.0-0'],
['~>1', '>=1.0.0 <2.0.0-0'],
['~> 1', '>=1.0.0 <2.0.0-0'],
['~1.0', '>=1.0.0 <1.1.0-0'],
['~ 1.0', '>=1.0.0 <1.1.0-0'],
// tilde with includePrerelease must lower-bound at -0 just like the
// equivalent x-range (e.g. ~1.2 is documented as the same as 1.2.x),
// so that prereleases such as 1.2.0-rc match. See #512.
['~1', '>=1.0.0-0 <2.0.0-0', { includePrerelease: true }],
['~1.x', '>=1.0.0-0 <2.0.0-0', { includePrerelease: true }],
['~1.2', '>=1.2.0-0 <1.3.0-0', { includePrerelease: true }],
['~1.2.x', '>=1.2.0-0 <1.3.0-0', { includePrerelease: true }],
['~0.0', '<0.1.0-0', { includePrerelease: true }],
// a fully-specified tilde keeps its exact lower bound (matches caret),
// and an explicit prerelease is preserved as-is
['~1.2.3', '>=1.2.3 <1.3.0-0', { includePrerelease: true }],
['~1.2.3-beta.4', '>=1.2.3-beta.4 <1.3.0-0', { includePrerelease: true }],
['^0', '<1.0.0-0'],
['^ 1', '>=1.0.0 <2.0.0-0'],
['^0.1', '>=0.1.0 <0.2.0-0'],
['^1.0', '>=1.0.0 <2.0.0-0'],
['^1.2', '>=1.2.0 <2.0.0-0'],
['^0.0.1', '>=0.0.1 <0.0.2-0'],
['^0.0.1-beta', '>=0.0.1-beta <0.0.2-0'],
['^0.1.2', '>=0.1.2 <0.2.0-0'],
['^1.2.3', '>=1.2.3 <2.0.0-0'],
['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0-0'],
['<1', '<1.0.0-0'],
['< 1', '<1.0.0-0'],
['>=1', '>=1.0.0'],
['>= 1', '>=1.0.0'],
['<1.2', '<1.2.0-0'],
['< 1.2', '<1.2.0-0'],
['>01.02.03', '>1.2.3', true],
['>01.02.03', null],
['~1.2.3beta', '>=1.2.3-beta <1.3.0-0', { loose: true }],
['~1.2.3beta', null],
['^ 1.2 ^ 1', '>=1.2.0 <2.0.0-0 >=1.0.0'],
['1.2 - 3.4.5', '>=1.2.0 <=3.4.5'],
['1.2.3 - 3.4', '>=1.2.3 <3.5.0-0'],
['1.2 - 3.4', '>=1.2.0 <3.5.0-0'],
['>1', '>=2.0.0'],
['>1.2', '>=1.3.0'],
['>X', '<0.0.0-0'],
['* 2.x', '<0.0.0-0'],
['>x 2.x || * || =09090', null],
['>=09090', '>=9090.0.0', true],
['>=09090-0', null, { includePrerelease: true }],
['>=09090-0', null, { loose: true, includePrerelease: true }],
[`^${MAX_SAFE_INTEGER}.0.0`, null],
[`=${MAX_SAFE_INTEGER}.0.0`, `${MAX_SAFE_INTEGER}.0.0`],
[
`^${MAX_SAFE_INTEGER - 1}.0.0`,
`>=${MAX_SAFE_INTEGER - 1}.0.0 <${MAX_SAFE_INTEGER}.0.0-0`,
],
// x-ranges with build metadata
['1.x.x+build >2.x+build', '>=1.0.0 <2.0.0-0 >=3.0.0', null],
['>=1.x+build <2.x.x+build', '>=1.0.0 <2.0.0-0', null],
['1.x.x+build || 2.x.x+build', '>=1.0.0 <2.0.0-0||>=2.0.0 <3.0.0-0', null],
['1.x+build.123', '>=1.0.0 <2.0.0-0', null],
['1.x.x+meta-data', '>=1.0.0 <2.0.0-0', null],
['1.x.x+build.123 >2.x.x+meta-data', '>=1.0.0 <2.0.0-0 >=3.0.0', null],
['1.x.x+build <2.x.x+meta', '>=1.0.0 <2.0.0-0', null],
['>1.x+build <=2.x.x+meta', '>=2.0.0 <3.0.0-0', null],
[' 1.x.x+build >2.x.x+build ', '>=1.0.0 <2.0.0-0 >=3.0.0', null],
['^1.x+build', '>=1.0.0 <2.0.0-0', null],
['^1.x.x+build', '>=1.0.0 <2.0.0-0', null],
['^1.2.x+build', '>=1.2.0 <2.0.0-0', null],
['^1.x+meta-data', '>=1.0.0 <2.0.0-0', null],
['^1.x.x+build.123', '>=1.0.0 <2.0.0-0', null],
['~1.x+build', '>=1.0.0 <2.0.0-0', null],
['~1.x.x+build', '>=1.0.0 <2.0.0-0', null],
['~1.2.x+build', '>=1.2.0 <1.3.0-0', null],
['~1.x+meta-data', '>=1.0.0 <2.0.0-0', null],
['~1.x.x+build.123', '>=1.0.0 <2.0.0-0', null],
['^1.x.x+build || ~2.x.x+meta', '>=1.0.0 <2.0.0-0||>=2.0.0 <3.0.0-0', null],
['~1.x.x+build >2.x+meta', '>=1.0.0 <2.0.0-0 >=3.0.0', null],
['^1.x+build.123 <2.x.x+meta-data', '>=1.0.0 <2.0.0-0', null],
// // x-ranges with prerelease and build
['1.x.x-alpha+build', '>=1.0.0 <2.0.0-0', null],
['>1.x.x-alpha+build', '>=2.0.0', null],
['>=1.x.x-alpha+build <2.x.x+build', '>=1.0.0 <2.0.0-0', null],
[
'1.x.x-alpha+build || 2.x.x+build',
'>=1.0.0 <2.0.0-0||>=2.0.0 <3.0.0-0',
null,
],
// long build metadata must be stripped, not bled into the version
['4.17.0+' + 'a'.repeat(250) + '3', '4.17.0', { loose: true }],
['4.17.0+' + 'a'.repeat(251), '4.17.0', { loose: true }],
['v1.0+' + 'a'.repeat(249) + 'x6', '>=1.0.0 <1.1.0-0', null],
['1.2.3+' + 'a'.repeat(251) + ' - 2.0.0', '>=1.2.3 <=2.0.0', null],
['1.2.3+' + 'a'.repeat(251) + ' - 2.0.0', '>=1.2.3 <=2.0.0', { loose: true }],
['> 1.2.3+' + 'a'.repeat(251), '>1.2.3', null],
['>= 1.2.3+' + 'a'.repeat(251), '>=1.2.3', { loose: true }],
['~1.2.3+' + 'a'.repeat(251), '>=1.2.3 <1.3.0-0', null],
['^1.2.3+' + 'a'.repeat(251), '>=1.2.3 <2.0.0-0', null],
['1.2.3+sha512.' + 'a'.repeat(251), '1.2.3', { loose: true }],
[
'1.2.3+sha256.' + 'a'.repeat(200) + '.' + 'b'.repeat(200),
'1.2.3',
{ loose: true },
],
[
'1.2.3+' + 'a'.repeat(251) + ' || 2.0.0+' + 'b'.repeat(251),
'1.2.3||2.0.0',
{ loose: true },
],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/range-subset.ts 0000664 0000000 0000000 00000006250 15253274704 0024602 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
const fixtures: readonly (readonly unknown[])[] = [
['1.2.3', '1.2.3', true],
['1.2.3', '1.x', true],
['1.2.3 1.2.4', '1.2.3', true],
['1.2.3 1.2.4', '1.2.9', true],
['1.2.3', '>1.2.0', true],
['1.2.3 2.3.4 || 2.3.4', '3', false],
['^1.2.3-pre.0', '1.x', false],
['^1.2.3-pre.0', '1.x', true, { includePrerelease: true }],
['>2 <1', '3', true],
['1 || 2 || 3', '>=1.0.0', true],
['1.2.3', '*', true],
['^1.2.3', '*', true],
['^1.2.3-pre.0', '*', false],
['^1.2.3-pre.0', '*', true, { includePrerelease: true }],
['1 || 2 || 3', '*', true],
['^1.2.3-pre.0', '>=1.0.0', false],
['^1.2.3-pre.0', '>=1.0.0', true, { includePrerelease: true }],
['^1.2.3-pre.0', '>=1.2.3-pre.0', true],
['^1.2.3-pre.0', '>=1.2.3-pre.0', true, { includePrerelease: true }],
['^10.2.0-beta.2', '^10.2.0-beta.1', true],
['>1.2.3-pre.0', '>=1.2.3-pre.0', true],
['>1.2.3-pre.0', '>1.2.3-pre.0 || 2', true],
['1 >1.2.3-pre.0', '>1.2.3-pre.0', true],
['1 <=1.2.3-pre.0', '>=1.0.0-0', false],
['1 <=1.2.3-pre.0', '>=1.0.0-0', true, { includePrerelease: true }],
['1 <=1.2.3-pre.0', '<=1.2.3-pre.0', true],
['1 <=1.2.3-pre.0', '<=1.2.3-pre.0', true, { includePrerelease: true }],
['<1.2.3-pre.0', '<=1.2.3-pre.0', true],
['<1.2.3-pre.0', '<1.2.3-pre.0 || 2', true],
['1 <1.2.3-pre.0', '<1.2.3-pre.0', true],
['*', '*', true],
['', '*', true],
['*', '', true],
['', '', true],
['*', '>=0.0.0-0', true, { includePrerelease: true }],
['*', '>=0.0.0', true],
['*', '>=0.0.0', false, { includePrerelease: true }],
['*', '>=0.0.0-0', true],
['^2 || ^3 || ^4', '>=1', true],
['^2 || ^3 || ^4', '>1', true],
['^2 || ^3 || ^4', '>=2', true],
['^2 || ^3 || ^4', '>=3', false],
['>=1', '^2 || ^3 || ^4', false],
['>1', '^2 || ^3 || ^4', false],
['>=2', '^2 || ^3 || ^4', false],
['>=3', '^2 || ^3 || ^4', false],
['^1', '^2 || ^3 || ^4', false],
['^2', '^2 || ^3 || ^4', true],
['^3', '^2 || ^3 || ^4', true],
['^4', '^2 || ^3 || ^4', true],
['1.x', '^2 || ^3 || ^4', false],
['2.x', '^2 || ^3 || ^4', true],
['3.x', '^2 || ^3 || ^4', true],
['4.x', '^2 || ^3 || ^4', true],
['>=1.0.0 <=1.0.0 || 2.0.0', '1.0.0 || 2.0.0', true],
['<=1.0.0 >=1.0.0 || 2.0.0', '1.0.0 || 2.0.0', true],
['>=1.0.0', '1.0.0', false],
['>=1.0.0 <2.0.0', '<2.0.0', true],
['>=1.0.0 <2.0.0', '>0.0.0', true],
['>=1.0.0 <=1.0.0', '1.0.0', true],
['>=1.0.0 <=1.0.0', '2.0.0', false],
['<2.0.0', '>=1.0.0 <2.0.0', false],
['>=1.0.0', '>=1.0.0 <2.0.0', false],
['>=1.0.0 <2.0.0', '<2.0.0', true],
['>=1.0.0 <2.0.0', '>=1.0.0', true],
['>=1.0.0 <2.0.0', '>1.0.0', false],
['>=1.0.0 <=2.0.0', '<2.0.0', false],
['>=1.0.0', '<1.0.0', false],
['<=1.0.0', '>1.0.0', false],
['<=1.0.0 >1.0.0', '>1.0.0', true],
['1.0.0 >1.0.0', '>1.0.0', true],
['1.0.0 <1.0.0', '>1.0.0', true],
['<1 <2 <3', '<4', true],
['<3 <2 <1', '<4', true],
['>1 >2 >3', '>0', true],
['>3 >2 >1', '>0', true],
['<=1 <=2 <=3', '<4', true],
['<=3 <=2 <=1', '<4', true],
['>=1 >=2 >=3', '>0', true],
['>=3 >=2 >=1', '>0', true],
['>=3 >=2 >=1', '>=3 >=2 >=1', true],
['>2.0.0', '>=2.0.0', true],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/truncations.ts 0000664 0000000 0000000 00000002507 15253274704 0024555 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [version, releaseType, result]
// truncate(version, type) -> result
const fixtures: readonly (readonly unknown[])[] = [
['1.2.3-foo', 'patch', '1.2.3'],
['1.2.3', 'patch', '1.2.3'],
['1.2.3', 'minor', '1.2.0'],
['1.2.3', 'major', '1.0.0'],
// invalid inputs
['1.2.3', 'fake', null],
['fake', 'major', null],
// additional pre-release, build, and pre+build inputs
['4.5.6-rc2', 'prerelease', '4.5.6-rc2'],
['4.5.6-rc2', 'prepatch', '4.5.6-rc2'],
['4.5.6-rc2', 'preminor', '4.5.6-rc2'],
['4.5.6-rc2', 'premajor', '4.5.6-rc2'],
['4.5.6-rc2', 'patch', '4.5.6'],
['4.5.6-rc2', 'minor', '4.5.0'],
['4.5.6-rc2', 'major', '4.0.0'],
['4.5.6+dadb0d', 'prerelease', '4.5.6'],
['4.5.6+dadb0d', 'prepatch', '4.5.6'],
['4.5.6+dadb0d', 'preminor', '4.5.6'],
['4.5.6+dadb0d', 'premajor', '4.5.6'],
['4.5.6+dadb0d', 'patch', '4.5.6'],
['4.5.6+dadb0d', 'minor', '4.5.0'],
['4.5.6+dadb0d', 'major', '4.0.0'],
['4.5.6-rc2+dadb0d', 'prerelease', '4.5.6-rc2'],
['4.5.6-rc2+dadb0d', 'prepatch', '4.5.6-rc2'],
['4.5.6-rc2+dadb0d', 'preminor', '4.5.6-rc2'],
['4.5.6-rc2+dadb0d', 'premajor', '4.5.6-rc2'],
['4.5.6-rc2+dadb0d', 'patch', '4.5.6'],
['4.5.6-rc2+dadb0d', 'minor', '4.5.0'],
['4.5.6-rc2+dadb0d', 'major', '4.0.0'],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/valid-versions.ts 0000664 0000000 0000000 00000002275 15253274704 0025153 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [version, major, minor, patch, prerelease[], build[]]
const fixtures: readonly (readonly unknown[])[] = [
['1.0.0', 1, 0, 0, [], []],
['2.1.0', 2, 1, 0, [], []],
['3.2.1', 3, 2, 1, [], []],
['v1.2.3', 1, 2, 3, [], []],
// prerelease
['1.2.3-0', 1, 2, 3, [0], []],
['1.2.3-123', 1, 2, 3, [123], []],
['1.2.3-1.2.3', 1, 2, 3, [1, 2, 3], []],
['1.2.3-1a', 1, 2, 3, ['1a'], []],
['1.2.3-a1', 1, 2, 3, ['a1'], []],
['1.2.3-alpha', 1, 2, 3, ['alpha'], []],
['1.2.3-alpha.1', 1, 2, 3, ['alpha', 1], []],
['1.2.3-alpha-1', 1, 2, 3, ['alpha-1'], []],
['1.2.3-alpha-.-beta', 1, 2, 3, ['alpha-', '-beta'], []],
// build
['1.2.3+456', 1, 2, 3, [], ['456']],
['1.2.3+build', 1, 2, 3, [], ['build']],
['1.2.3+new-build', 1, 2, 3, [], ['new-build']],
['1.2.3+build.1', 1, 2, 3, [], ['build', '1']],
['1.2.3+build.1a', 1, 2, 3, [], ['build', '1a']],
['1.2.3+build.a1', 1, 2, 3, [], ['build', 'a1']],
['1.2.3+build.alpha', 1, 2, 3, [], ['build', 'alpha']],
['1.2.3+build.alpha.beta', 1, 2, 3, [], ['build', 'alpha', 'beta']],
// mixed
['1.2.3-alpha+build', 1, 2, 3, ['alpha'], ['build']],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/version-gt-range.ts 0000664 0000000 0000000 00000003202 15253274704 0025364 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [range, version, options]
// Version should be greater than range
const fixtures: readonly (readonly unknown[])[] = [
['~1.2.2', '1.3.0'],
['~0.6.1-1', '0.7.1-1'],
['1.0.0 - 2.0.0', '2.0.1'],
['1.0.0', '1.0.1-beta1'],
['1.0.0', '2.0.0'],
['<=2.0.0', '2.1.1'],
['<=2.0.0', '3.2.9'],
['<2.0.0', '2.0.0'],
['0.1.20 || 1.2.4', '1.2.5'],
['2.x.x', '3.0.0'],
['1.2.x', '1.3.0'],
['1.2.x || 2.x', '3.0.0'],
['2.*.*', '5.0.1'],
['1.2.*', '1.3.3'],
['1.2.* || 2.*', '4.0.0'],
['2', '3.0.0'],
['2.3', '2.4.2'],
['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
['~2.4', '2.5.5'],
['~>3.2.1', '3.3.0'], // >=3.2.1 <3.3.0
['~1', '2.2.3'], // >=1.0.0 <2.0.0
['~>1', '2.2.4'],
['~> 1', '3.2.3'],
['~1.0', '1.1.2'], // >=1.0.0 <1.1.0
['~ 1.0', '1.1.0'],
['<1.2', '1.2.0'],
['< 1.2', '1.2.1'],
['1', '2.0.0beta', true],
['~v0.5.4-pre', '0.6.0'],
['~v0.5.4-pre', '0.6.1-pre'],
['=0.7.x', '0.8.0'],
['=0.7.x', '0.8.0-asdf'],
['<0.7.x', '0.7.0'],
['1.0.0 - 2.0.0', '2.2.3'],
['1.0.0', '1.0.1'],
['<=2.0.0', '3.0.0'],
['<=2.0.0', '2.9999.9999'],
['<=2.0.0', '2.2.9'],
['<2.0.0', '2.9999.9999'],
['<2.0.0', '2.2.9'],
['2.x.x', '3.1.3'],
['1.2.x', '1.3.3'],
['1.2.x || 2.x', '3.1.3'],
['2.*.*', '3.1.3'],
['1.2.* || 2.*', '3.1.3'],
['2', '3.1.2'],
['2.3', '2.4.1'],
['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
['~>1', '2.2.3'],
['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
['<1', '1.0.0'],
['<1', '1.0.0beta', true],
['< 1', '1.0.0beta', true],
['=0.7.x', '0.8.2'],
['<0.7.x', '0.7.2'],
['0.7.x', '0.7.2-beta'],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/version-lt-range.ts 0000664 0000000 0000000 00000003313 15253274704 0025374 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [range, version, options]
// Version should be less than range
const fixtures: readonly (readonly unknown[])[] = [
['~1.2.2', '1.2.1'],
['~0.6.1-1', '0.6.1-0'],
['1.0.0 - 2.0.0', '0.0.1'],
['1.0.0-beta.2', '1.0.0-beta.1'],
['1.0.0', '0.0.0'],
['>=2.0.0', '1.1.1'],
['>=2.0.0', '1.2.9'],
['>2.0.0', '2.0.0'],
['0.1.20 || 1.2.4', '0.1.5'],
['2.x.x', '1.0.0'],
['1.2.x', '1.1.0'],
['1.2.x || 2.x', '1.0.0'],
['2.*.*', '1.0.1'],
['1.2.*', '1.1.3'],
['1.2.* || 2.*', '1.1.9999'],
['2', '1.0.0'],
['2.3', '2.2.2'],
['~2.4', '2.3.0'], // >=2.4.0 <2.5.0
['~2.4', '2.3.5'],
['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0
['~1', '0.2.3'], // >=1.0.0 <2.0.0
['~>1', '0.2.4'],
['~> 1', '0.2.3'],
['~1.0', '0.1.2'], // >=1.0.0 <1.1.0
['~ 1.0', '0.1.0'],
['>1.2', '1.2.0'],
['> 1.2', '1.2.1'],
['1', '0.0.0beta', true],
['~v0.5.4-pre', '0.5.4-alpha'],
['=0.7.x', '0.6.0'],
['=0.7.x', '0.6.0-asdf'],
['>=0.7.x', '0.6.0'],
['1.0.0 - 2.0.0', '0.2.3'],
['1.0.0', '0.0.1'],
['>=2.0.0', '1.0.0'],
['>=2.0.0', '1.9999.9999'],
['>2.0.0', '1.2.9'],
['2.x.x', '1.1.3'],
['1.2.x', '1.1.3'],
['1.2.x || 2.x', '1.1.3'],
['2.*.*', '1.1.3'],
['1.2.* || 2.*', '1.1.3'],
['2', '1.9999.9999'],
['2.3', '2.2.1'],
['~>3.2.1', '2.3.2'], // >=3.2.1 <3.3.0
['~>1', '0.2.3'],
['~1.0', '0.0.0'], // >=1.0.0 <1.1.0
['>1', '1.0.0'],
['2', '1.0.0beta', true],
['>1', '1.0.0beta', true],
['> 1', '1.0.0beta', true],
['=0.7.x', '0.6.2'],
['=0.7.x', '0.7.0-asdf'],
['^1', '1.0.0-0'],
['>=0.7.x', '0.7.0-asdf'],
['1', '1.0.0beta', true],
['>=0.7.x', '0.6.2'],
['>1.2.3', '1.3.0-alpha'],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/version-not-gt-range.ts 0000664 0000000 0000000 00000004616 15253274704 0026174 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [range, version, options]
// Version should NOT be greater than range
const fixtures: readonly (readonly unknown[])[] = [
['~0.6.1-1', '0.6.1-1'],
['1.0.0 - 2.0.0', '1.2.3'],
['1.0.0 - 2.0.0', '0.9.9'],
['1.0.0', '1.0.0'],
['>=*', '0.2.4'],
['', '1.0.0', true],
['*', '1.2.3'],
['*', 'v1.2.3-foo'],
['>=1.0.0', '1.0.0'],
['>=1.0.0', '1.0.1'],
['>=1.0.0', '1.1.0'],
['>1.0.0', '1.0.1'],
['>1.0.0', '1.1.0'],
['<=2.0.0', '2.0.0'],
['<=2.0.0', '1.9999.9999'],
['<=2.0.0', '0.2.9'],
['<2.0.0', '1.9999.9999'],
['<2.0.0', '0.2.9'],
['>= 1.0.0', '1.0.0'],
['>= 1.0.0', '1.0.1'],
['>= 1.0.0', '1.1.0'],
['> 1.0.0', '1.0.1'],
['> 1.0.0', '1.1.0'],
['<= 2.0.0', '2.0.0'],
['<= 2.0.0', '1.9999.9999'],
['<= 2.0.0', '0.2.9'],
['< 2.0.0', '1.9999.9999'],
['<\t2.0.0', '0.2.9'],
['>=0.1.97', 'v0.1.97'],
['>=0.1.97', '0.1.97'],
['0.1.20 || 1.2.4', '1.2.4'],
['0.1.20 || >1.2.4', '1.2.4'],
['0.1.20 || 1.2.4', '1.2.3'],
['0.1.20 || 1.2.4', '0.1.20'],
['>=0.2.3 || <0.0.1', '0.0.0'],
['>=0.2.3 || <0.0.1', '0.2.3'],
['>=0.2.3 || <0.0.1', '0.2.4'],
['||', '1.3.4'],
['2.x.x', '2.1.3'],
['1.2.x', '1.2.3'],
['1.2.x || 2.x', '2.1.3'],
['1.2.x || 2.x', '1.2.3'],
['x', '1.2.3'],
['2.*.*', '2.1.3'],
['1.2.*', '1.2.3'],
['1.2.* || 2.*', '2.1.3'],
['1.2.* || 2.*', '1.2.3'],
['2', '2.1.2'],
['2.3', '2.3.1'],
['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
['~2.4', '2.4.5'],
['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
['~1', '1.2.3'], // >=1.0.0 <2.0.0
['~>1', '1.2.3'],
['~> 1', '1.2.3'],
['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
['~ 1.0', '1.0.2'],
['>=1', '1.0.0'],
['>= 1', '1.0.0'],
['<1.2', '1.1.1'],
['< 1.2', '1.1.1'],
['1', '1.0.0beta', true],
['~v0.5.4-pre', '0.5.5'],
['~v0.5.4-pre', '0.5.4'],
['=0.7.x', '0.7.2'],
['>=0.7.x', '0.7.2'],
['=0.7.x', '0.7.0-asdf'],
['>=0.7.x', '0.7.0-asdf'],
['<=0.7.x', '0.6.2'],
['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
['>=0.2.3 <=0.2.4', '0.2.4'],
['1.0.0 - 2.0.0', '2.0.0'],
['^1', '0.0.0-0'],
['^3.0.0', '2.0.0'],
['^1.0.0 || ~2.0.1', '2.0.0'],
['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'],
['0.7.x', '0.7.2-beta', { includePrerelease: true }],
]
export default fixtures
sxzz-verkit-a5b7150/tests/fixtures/node-semver/version-not-lt-range.ts 0000664 0000000 0000000 00000005027 15253274704 0026176 0 ustar 00root root 0000000 0000000 // Derived from node-semver v7.8.5 under the ISC license.
// [range, version, options]
// Version should NOT be less than range
const fixtures: readonly (readonly unknown[])[] = [
['~ 1.0', '1.1.0'],
['~0.6.1-1', '0.6.1-1'],
['1.0.0 - 2.0.0', '1.2.3'],
['1.0.0 - 2.0.0', '2.9.9'],
['1.0.0', '1.0.0'],
['>=*', '0.2.4'],
['', '1.0.0', true],
['*', '1.2.3'],
['>=1.0.0', '1.0.0'],
['>=1.0.0', '1.0.1'],
['>=1.0.0', '1.1.0'],
['>1.0.0', '1.0.1'],
['>1.0.0', '1.1.0'],
['<=2.0.0', '2.0.0'],
['<=2.0.0', '1.9999.9999'],
['<=2.0.0', '0.2.9'],
['<2.0.0', '1.9999.9999'],
['<2.0.0', '0.2.9'],
['>= 1.0.0', '1.0.0'],
['>= 1.0.0', '1.0.1'],
['>= 1.0.0', '1.1.0'],
['> 1.0.0', '1.0.1'],
['> 1.0.0', '1.1.0'],
['<= 2.0.0', '2.0.0'],
['<= 2.0.0', '1.9999.9999'],
['<= 2.0.0', '0.2.9'],
['< 2.0.0', '1.9999.9999'],
['<\t2.0.0', '0.2.9'],
['>=0.1.97', 'v0.1.97'],
['>=0.1.97', '0.1.97'],
['0.1.20 || 1.2.4', '1.2.4'],
['0.1.20 || >1.2.4', '1.2.4'],
['0.1.20 || 1.2.4', '1.2.3'],
['0.1.20 || 1.2.4', '0.1.20'],
['>=0.2.3 || <0.0.1', '0.0.0'],
['>=0.2.3 || <0.0.1', '0.2.3'],
['>=0.2.3 || <0.0.1', '0.2.4'],
['||', '1.3.4'],
['2.x.x', '2.1.3'],
['1.2.x', '1.2.3'],
['1.2.x || 2.x', '2.1.3'],
['1.2.x || 2.x', '1.2.3'],
['x', '1.2.3'],
['2.*.*', '2.1.3'],
['1.2.*', '1.2.3'],
['1.2.* || 2.*', '2.1.3'],
['1.2.* || 2.*', '1.2.3'],
['2', '2.1.2'],
['2.3', '2.3.1'],
['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
['~2.4', '2.4.5'],
['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
['~1', '1.2.3'], // >=1.0.0 <2.0.0
['~>1', '1.2.3'],
['~> 1', '1.2.3'],
['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
['~ 1.0', '1.0.2'],
['>=1', '1.0.0'],
['>= 1', '1.0.0'],
['<1.2', '1.1.1'],
['< 1.2', '1.1.1'],
['~v0.5.4-pre', '0.5.5'],
['~v0.5.4-pre', '0.5.4'],
['=0.7.x', '0.7.2'],
['>=0.7.x', '0.7.2'],
['<=0.7.x', '0.6.2'],
['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
['>=0.2.3 <=0.2.4', '0.2.4'],
['1.0.0 - 2.0.0', '2.0.0'],
['^3.0.0', '4.0.0'],
['^1.0.0 || ~2.0.1', '2.0.0'],
['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0'],
['^1.0.0alpha', '1.0.0beta', true],
['~1.0.0alpha', '1.0.0beta', true],
['^1.0.0-alpha', '1.0.0beta', true],
['~1.0.0-alpha', '1.0.0beta', true],
['^1.0.0-alpha', '1.0.0-beta'],
['~1.0.0-alpha', '1.0.0-beta'],
['=0.1.0', '1.0.0'],
['>1.2.3', '1.3.0-alpha', { includePrerelease: true }],
]
export default fixtures
sxzz-verkit-a5b7150/tests/range.test.ts 0000664 0000000 0000000 00000035353 15253274704 0020166 0 ustar 00root root 0000000 0000000 import { describe, expect, it } from 'vitest'
import { parseComparator, type RangeOptions } from '../src/comparator.ts'
import {
findMaxSatisfying,
findMinimumForRange,
findMinSatisfying,
isGreaterThanRange,
isLessThanRange,
isOutsideRange,
isRangeSubset,
isValidRange,
normalizeRange,
parseRange,
rangesIntersect,
rangeToComparators,
satisfies,
simplifyRange,
tryParseRange,
} from '../src/range.ts'
import { normalize, parse } from '../src/version.ts'
import rangeExclude from './fixtures/node-semver/range-exclude.ts'
import rangeInclude from './fixtures/node-semver/range-include.ts'
import rangeIntersections from './fixtures/node-semver/range-intersection.ts'
import rangeParse from './fixtures/node-semver/range-parse.ts'
import rangeSubsets from './fixtures/node-semver/range-subset.ts'
import versionGtRange from './fixtures/node-semver/version-gt-range.ts'
import versionLtRange from './fixtures/node-semver/version-lt-range.ts'
import versionNotGtRange from './fixtures/node-semver/version-not-gt-range.ts'
import versionNotLtRange from './fixtures/node-semver/version-not-lt-range.ts'
type RangeCase = readonly [string, string, unknown?]
type RangeParseCase = readonly [string, string | null, unknown?]
type RangeIntersectionCase = readonly [string, string, boolean, unknown?]
type RangeSubsetCase = readonly [string, string, boolean, unknown?]
function rangeOptions(value: unknown): RangeOptions {
if (value === true) return { loose: true }
return value && typeof value === 'object' ? (value as RangeOptions) : {}
}
function minimumValue(range: string): string | null {
const minimum = findMinimumForRange(range)
return minimum ? normalize(minimum) : null
}
describe('range parsing and satisfaction', () => {
it('parses reusable SemVerRange objects', () => {
const range = parseRange('^1.2.3')
expect(parseRange(range)).toBe(range)
expect(() => parseRange('not a range')).toThrow('Invalid comparator: not')
expect(tryParseRange('not a range')).toBeNull()
expect(isValidRange(range)).toBe(true)
expect(normalizeRange(range)).toBe('>=1.2.3 <2.0.0-0')
expect(satisfies('1.5.0', range)).toBe(true)
expect(rangeToComparators(range)).toEqual([['>=1.2.3', '<2.0.0-0']])
expect(normalize(findMinimumForRange(range)!)).toBe('1.2.3')
expect(rangesIntersect(range, '>=1.5.0')).toBe(true)
expect(isRangeSubset(range, '1.x')).toBe(true)
})
it('fixes range options at parse time', () => {
const version = '1.0.0-rc.1'
const range = parseRange('1.x', { includePrerelease: true })
expect(range.options.includePrerelease).toBe(true)
expect(normalizeRange(range)).toBe('>=1.0.0-0 <2.0.0-0')
expect(satisfies(version, range)).toBe(true)
expect(findMaxSatisfying([version], range)).toBe(version)
})
it('returns independent mutable SemVerRange objects', () => {
const options: RangeOptions = {}
const first = parseRange('^1.2.3', options)
const second = parseRange('^1.2.3', options)
expect(first.sets).not.toBe(second.sets)
expect(first.sets[0]).not.toBe(second.sets[0])
expect(first.sets[0]![0]!.version).not.toBe(second.sets[0]![0]!.version)
first.options.includePrerelease = true
first.sets[0]![0]!.operator = '>'
first.sets[0]![0]!.version!.patch = 9
expect(second.options.includePrerelease).toBeUndefined()
expect(options.includePrerelease).toBeUndefined()
expect(second.sets[0]![0]!.operator).toBe('>=')
expect(second.sets[0]![0]!.value).toBe('>=1.2.3')
expect(second.sets[0]![0]!.version!.patch).toBe(3)
expect(normalizeRange(first)).toBe('>1.2.9 <2.0.0-0')
})
it('accepts SemVer objects with optional identifier arrays', () => {
expect(satisfies({ major: 1, minor: 5, patch: 0 }, '^1.2.3')).toBe(true)
expect(
satisfies(
{ major: 1, minor: 5, patch: 0, prerelease: ['rc', 1] },
'^1.2.3',
),
).toBe(false)
})
it('normalizes every range fixture', () => {
for (const row of rangeParse as readonly RangeParseCase[]) {
const [range, expected, rawOptions] = row
const options = rangeOptions(rawOptions)
expect(normalizeRange(range, options)).toBe(expected)
expect(isValidRange(range, options)).toBe(expected !== null)
}
})
it('includes every positive range fixture', () => {
for (const row of rangeInclude as readonly RangeCase[]) {
const [range, version, rawOptions] = row
expect(satisfies(version, range, rangeOptions(rawOptions))).toBe(true)
}
})
it('excludes every negative range fixture', () => {
for (const row of rangeExclude as readonly RangeCase[]) {
const [range, version, rawOptions] = row
expect(satisfies(version, range, rangeOptions(rawOptions))).toBe(false)
}
})
it('converts disjunctions to comparator sets', () => {
expect(rangeToComparators('^1.2.3 || ~2.0')).toEqual([
['>=1.2.3', '<2.0.0-0'],
['>=2.0.0', '<2.1.0-0'],
])
expect(() => rangeToComparators('not a range')).toThrow(TypeError)
expect(satisfies('1.0.0', 'not a range')).toBe(false)
})
})
describe('range sets', () => {
it('matches every range intersection fixture', () => {
for (const row of rangeIntersections as readonly RangeIntersectionCase[]) {
const [left, right, expected, rawOptions] = row
expect(rangesIntersect(left, right, rangeOptions(rawOptions))).toBe(
expected,
)
}
})
it('finds satisfying extrema and theoretical minimums', () => {
const versions = ['1.2.3', '1.5.0', '2.0.0', '1.4.0']
expect(findMaxSatisfying(versions, '^1.2.0')).toBe('1.5.0')
expect(findMinSatisfying(versions, '^1.2.0')).toBe('1.2.3')
expect(findMaxSatisfying(versions, 'invalid')).toBeNull()
expect(findMinSatisfying(versions, 'invalid')).toBeNull()
expect(minimumValue('>1.2.3')).toBe('1.2.4')
expect(minimumValue('>1.2.3-alpha.1')).toBe('1.2.3-alpha.1.0')
expect(findMinimumForRange('<0.0.0')).toBeNull()
})
it('returns parsed extrema by identity', () => {
const lower = parse('1.2.3')
const higher = parse('1.5.0')
const outside = parse('2.0.0')
const versions = [higher, outside, lower]
expect(findMaxSatisfying(versions, '^1.0.0')).toBe(higher)
expect(findMinSatisfying(versions, '^1.0.0')).toBe(lower)
expect(isGreaterThanRange(outside, '^1.0.0')).toBe(true)
expect(simplifyRange(versions, '>=1.0.0 <2.0.0')).toBe('<=1.5.0')
})
it('matches every minimum-version behavior case', () => {
const cases: readonly (readonly [string, string | null])[] = [
['*', '0.0.0'],
['* || >=2', '0.0.0'],
['>=2 || *', '0.0.0'],
['>2 || *', '0.0.0'],
['1.0.0', '1.0.0'],
['1.0', '1.0.0'],
['1.0.x', '1.0.0'],
['1.0.*', '1.0.0'],
['1', '1.0.0'],
['1.x.x', '1.0.0'],
['1.*.x', '1.0.0'],
['1.x.*', '1.0.0'],
['1.x', '1.0.0'],
['1.*', '1.0.0'],
['=1.0.0', '1.0.0'],
['~1.1.1', '1.1.1'],
['~1.1.1-beta', '1.1.1-beta'],
['~1.1.1 || >=2', '1.1.1'],
['^1.1.1', '1.1.1'],
['^1.1.1-beta', '1.1.1-beta'],
['^1.1.1 || >=2', '1.1.1'],
['^2.16.2 ^2.16', '2.16.2'],
['1.1.1 - 1.8.0', '1.1.1'],
['1.1 - 1.8.0', '1.1.0'],
['<2', '0.0.0'],
['<0.0.0-beta', '0.0.0-0'],
['<0.0.1-beta', '0.0.0'],
['<2 || >4', '0.0.0'],
['>4 || <2', '0.0.0'],
['<=2 || >=4', '0.0.0'],
['>=4 || <=2', '0.0.0'],
['<0.0.0-beta >0.0.0-alpha', '0.0.0-alpha.0'],
['>0.0.0-alpha <0.0.0-beta', '0.0.0-alpha.0'],
['>=1.1.1 <2 || >=2.2.2 <2', '1.1.1'],
['>=2.2.2 <2 || >=1.1.1 <2', '1.1.1'],
['>1.0.0', '1.0.1'],
['>1.0.0-0', '1.0.0-0.0'],
['>1.0.0-beta', '1.0.0-beta.0'],
['>2 || >1.0.0', '1.0.1'],
['>2 || >1.0.0-0', '1.0.0-0.0'],
['>2 || >1.0.0-beta', '1.0.0-beta.0'],
['>4 <3', null],
]
for (const [range, expected] of cases) {
expect(minimumValue(range)).toBe(expected)
}
})
it('returns an independent mutable minimum version', () => {
const range = parseRange('>=1.2.3')
const comparatorVersion = range.sets[0]![0]!.version!
const minimum = findMinimumForRange(range)!
expect(minimum).toEqual(comparatorVersion)
expect(minimum).not.toBe(comparatorVersion)
minimum.patch = 4
expect(comparatorVersion.patch).toBe(3)
})
it('ignores wildcard comparators in mutable parsed ranges', () => {
const range = parseRange('>1.2.3')
range.sets[0]!.unshift(parseComparator(''))
expect(normalize(findMinimumForRange(range)!)).toBe('1.2.4')
expect(isRangeSubset(range, '>1.0.0')).toBe(true)
})
it('matches every subset behavior fixture', () => {
for (const row of rangeSubsets as readonly RangeSubsetCase[]) {
const [subset, superset, expected, rawOptions] = row
expect(isRangeSubset(subset, superset, rangeOptions(rawOptions))).toBe(
expected,
)
}
expect(isRangeSubset('<2.0.0', '1.0.0')).toBe(false)
})
it('simplifies over a copied array', () => {
const versions = [
'1.0.0',
'1.0.1',
'1.0.2',
'1.0.3',
'1.0.4',
'1.1.0',
'1.1.1',
'1.1.2',
'1.2.0',
'1.2.1',
'1.2.2',
'1.2.3',
'1.2.4',
'1.2.5',
'2.0.0',
'2.0.1',
'2.1.0',
'2.1.1',
'2.1.2',
'2.2.0',
'2.2.1',
'2.2.2',
'2.3.0',
'2.3.1',
'2.4.0',
'3.0.0',
'3.1.0',
'3.2.0',
'3.3.0',
]
const original = [...versions]
expect(simplifyRange(versions, '1.x')).toBe('1.x')
expect(
simplifyRange(versions, '1.0.0 || 1.0.1 || 1.0.2 || 1.0.3 || 1.0.4'),
).toBe('<=1.0.4')
expect(simplifyRange(versions, '>=3.0.0 <3.1.0')).toBe('3.0.0')
expect(simplifyRange(versions, '3.0.0 || 3.1 || 3.2 || 3.3')).toBe(
'>=3.0.0',
)
expect(simplifyRange(versions, '1 || 2 || 3')).toBe('*')
expect(simplifyRange(versions, '2.1 || 2.2 || 2.3')).toBe('2.1.0 - 2.3.1')
const parsedRange = parseRange('1.x')
parsedRange.sets = parseRange('>=3.0.0').sets
expect(simplifyRange(versions, parsedRange)).toBe('>=3.0.0')
expect(simplifyRange(versions, parseRange('*'))).toBe('*')
expect(versions).toEqual(original)
})
})
describe('exact-version range algebra', () => {
it('applies the prerelease rule on the exact-version path', () => {
// subset, superset, isRangeSubset, rangesIntersect (defaults to the former)
type Case = readonly [string, string, boolean, boolean?]
const cases: readonly Case[] = [
['1.2.3-a', '*', false],
['1.2.3-a', 'x', false],
['1.2.3-a', '>=0.0.0', false],
['1.2.3-a', '>=0.0.0-0', false],
['1.2.3-a', '>1.0.0', false],
['1.2.3-a', '>=1.0.0', false],
['1.2.3-a', '<2.0.0', false],
['1.2.3-a', '<=2.0.0', false],
['1.2.3-a', '1.x', false],
['1.2.3-a', '1.2.x', false],
['1.2.3-a', '^1.0.0', false],
['1.2.3-a', '~1.2.0', false],
['1.2.3-a', '1.0.0 - 2.0.0', false],
['1.2.3-a', '>=1.0.0 <2.0.0', false],
['=1.2.3-a', '<2.0.0', false],
['1.2.3-a 1.2.3-a', '>1.0.0', false],
// an exact comparator can coexist with other comparators in the set
['1.2.3-a <=2.0.0', '*', false],
['=2.0.0-rc.1', '1.0.0 - 3.0.0', false],
// only the prerelease branch of the union is excluded
['1.2.3-a || 2.0.0', '>1.0.0', false, true],
['2.0.0 || 1.2.3-a', '>1.0.0', false, true],
// the superset names a prerelease at the same tuple, so it is admitted
['1.2.3-a', '^1.2.3-a', true],
['1.2.3-a', '~1.2.3-a', true],
['1.2.3-a', '>=1.2.3-a <1.2.4', true],
['1.2.3-a', '1.2.3-a - 1.2.3-b', true],
['1.2.3-a', '1.2.3-a', true],
['1.2.3-a', '1.2.3-a || 2.0.0', true],
['1.2.3', '>1.0.0', true],
['1.2.3', '1.x', true],
]
for (const [subset, superset, expected, intersects = expected] of cases) {
expect(isRangeSubset(subset, superset)).toBe(expected)
expect(rangesIntersect(subset, superset)).toBe(intersects)
expect(rangesIntersect(superset, subset)).toBe(intersects)
expect(isRangeSubset(subset, superset, { includePrerelease: true })).toBe(
true,
)
}
})
it('keeps subset and intersection in step with satisfies', () => {
// A bare exact version is a range with a single member, so both answers are
// decided by satisfies() and need no reference implementation.
const versions = [
'1.2.3',
'1.2.3-a',
'1.2.3-a.0',
'1.2.3-0',
'1.2.3+build',
'1.2.3-a+build',
'2.0.0',
'2.0.0-rc.1',
'0.0.0-0',
'1.0.0-alpha.beta',
]
const ranges = [
'',
'*',
'x',
'>=0.0.0',
'>=0.0.0-0',
'<0.0.0-0',
'>1.0.0',
'>=1.0.0',
'<2.0.0',
'<=2.0.0',
'<1.2.4',
'>1.2.3-a',
'>=1.2.3-a',
'<=1.2.3-a',
'^1.0.0',
'^1.2.3',
'^1.2.3-a',
'~1.2.0',
'~1.2.3-a',
'1.x',
'1.2.x',
'1.0.0 - 2.0.0',
'1.2.3-a - 1.2.3-b',
'>=1.0.0 <2.0.0',
'>=1.2.3-a <1.2.4',
'1.2.3',
'1.2.3-a',
'=1.2.3-a',
'2.0.0',
'1.2.3-a || 2.0.0',
'<1.0.0 || >2.0.0',
'^1.0.0 || ^2.0.0',
]
const optionSets: readonly RangeOptions[] = [
{},
{ includePrerelease: true },
{ loose: true },
]
for (const options of optionSets) {
for (const version of versions) {
for (const range of ranges) {
const expected = satisfies(version, range, options)
expect(isRangeSubset(version, range, options)).toBe(expected)
expect(rangesIntersect(version, range, options)).toBe(expected)
expect(rangesIntersect(range, version, options)).toBe(expected)
}
}
}
})
})
describe('outside ranges', () => {
it('matches every greater-than fixture', () => {
for (const row of versionGtRange as readonly RangeCase[]) {
const [range, version, rawOptions] = row
expect(isGreaterThanRange(version, range, rangeOptions(rawOptions))).toBe(
true,
)
}
for (const row of versionNotGtRange as readonly RangeCase[]) {
const [range, version, rawOptions] = row
expect(isGreaterThanRange(version, range, rangeOptions(rawOptions))).toBe(
false,
)
}
})
it('matches every less-than fixture', () => {
for (const row of versionLtRange as readonly RangeCase[]) {
const [range, version, rawOptions] = row
expect(isLessThanRange(version, range, rangeOptions(rawOptions))).toBe(
true,
)
}
for (const row of versionNotLtRange as readonly RangeCase[]) {
const [range, version, rawOptions] = row
expect(isLessThanRange(version, range, rangeOptions(rawOptions))).toBe(
false,
)
}
})
it('rejects an invalid direction', () => {
expect(() => isOutsideRange('1.0.0', '*', '?' as never)).toThrow(TypeError)
})
})
sxzz-verkit-a5b7150/tests/range.types.ts 0000664 0000000 0000000 00000005013 15253274704 0020341 0 ustar 00root root 0000000 0000000 import {
findMaxSatisfying,
findMinimumForRange,
findMinSatisfying,
isGreaterThanRange,
isLessThanRange,
isOutsideRange,
isRangeSubset,
isValidRange,
normalizeRange,
parseRange,
rangesIntersect,
rangeToComparators,
satisfies,
simplifyRange,
tryParseRange,
type RangeOptions,
type SemVerRange,
} from '../src/index.ts'
declare const options: RangeOptions
declare const parsed: SemVerRange
declare const versions: readonly string[]
parseRange(parsed)
tryParseRange(parsed)
isValidRange(parsed)
normalizeRange(parsed)
satisfies('1.0.0', parsed)
rangeToComparators(parsed)
findMaxSatisfying(versions, parsed)
findMinSatisfying(versions, parsed)
findMinimumForRange(parsed)
isOutsideRange('1.0.0', parsed, '>')
isGreaterThanRange('1.0.0', parsed)
isLessThanRange('1.0.0', parsed)
rangesIntersect(parsed, '1.x')
simplifyRange(versions, parsed)
isRangeSubset(parsed, '1.x')
// @ts-expect-error A parsed range already contains its parsing options.
parseRange(parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
tryParseRange(parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
isValidRange(parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
normalizeRange(parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
satisfies('1.0.0', parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
rangeToComparators(parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
findMaxSatisfying(versions, parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
findMinSatisfying(versions, parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
findMinimumForRange(parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
isOutsideRange('1.0.0', parsed, '>', options)
// @ts-expect-error A parsed range already contains its parsing options.
isGreaterThanRange('1.0.0', parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
isLessThanRange('1.0.0', parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
rangesIntersect(parsed, '1.x', options)
// @ts-expect-error A parsed range already contains its parsing options.
simplifyRange(versions, parsed, options)
// @ts-expect-error A parsed range already contains its parsing options.
isRangeSubset(parsed, '1.x', options)
sxzz-verkit-a5b7150/tests/readme.test.ts 0000664 0000000 0000000 00000002403 15253274704 0020315 0 ustar 00root root 0000000 0000000 import { describe, expect, it } from 'vitest'
import {
coerce,
compare,
compareBuild,
findMaxSatisfying,
increment,
isGreaterThan,
normalize,
normalizeFull,
normalizeRange,
parse,
parseRange,
satisfies,
sortReversed,
truncate,
} from '../src/index.ts'
describe('README examples', () => {
it('keeps version operation examples executable', () => {
const version = parse('1.2.3-rc.1+sha.abc')
version.patch = 4
expect(normalizeFull(version)).toBe('1.2.4-rc.1+sha.abc')
expect(normalize(version)).toBe('1.2.4-rc.1')
expect(increment(version, 'minor')).toBe('1.3.0')
expect(truncate(version, 'patch')).toBe('1.2.4')
expect(coerce('release 42.6.7.9', { rtl: true })?.major).toBe(6)
})
it('keeps comparison and range examples executable', () => {
expect(compare('1.0.0+one', '1.0.0+two')).toBe(0)
expect(compareBuild('1.0.0+one', '1.0.0+two')).toBe(-1)
expect(isGreaterThan('2.0.0', '1.0.0')).toBe(true)
expect(sortReversed(['1.0.0', '2.0.0'])).toEqual(['2.0.0', '1.0.0'])
const range = parseRange('^1.2.3')
expect(normalizeRange(range)).toBe('>=1.2.3 <2.0.0-0')
expect(satisfies('1.5.0', range)).toBe(true)
expect(findMaxSatisfying(['1.2.3', '1.5.0', '2.0.0'], range)).toBe('1.5.0')
})
})
sxzz-verkit-a5b7150/tests/version.test.ts 0000664 0000000 0000000 00000022305 15253274704 0020550 0 ustar 00root root 0000000 0000000 import { describe, expect, it } from 'vitest'
import {
clean,
coerce,
difference,
getBuild,
getMajor,
getMinor,
getPatch,
getPrerelease,
increment,
isPrerelease,
isStable,
isValid,
normalize,
normalizeFull,
parse,
truncate,
tryParse,
type IncrementOptions,
type IncrementType,
type PrereleaseIdentifier,
type SemVer,
type TruncationType,
type VersionDifference,
type VersionOptions,
} from '../src/version.ts'
import increments from './fixtures/node-semver/increments.ts'
import invalidVersions from './fixtures/node-semver/invalid-versions.ts'
import truncations from './fixtures/node-semver/truncations.ts'
import validVersions from './fixtures/node-semver/valid-versions.ts'
type ValidVersionCase = readonly [
string,
number,
number,
number,
readonly PrereleaseIdentifier[],
readonly string[],
]
type InvalidVersionCase = readonly [unknown, string, unknown?]
type IncrementCase = readonly [
string,
string,
string | null,
unknown?,
unknown?,
unknown?,
]
type TruncationCase = readonly [string, string, string | null]
function versionOptions(value: unknown): VersionOptions {
if (value === true) return { loose: true }
return value && typeof value === 'object' ? (value as VersionOptions) : {}
}
function incrementOptions(
rawOptions: unknown,
rawIdentifier: unknown,
rawBase: unknown,
): IncrementOptions {
if (typeof rawOptions === 'string') {
return {
identifier: rawOptions,
identifierBase: normalizeIdentifierBase(rawIdentifier),
}
}
return {
...versionOptions(rawOptions),
identifier: typeof rawIdentifier === 'string' ? rawIdentifier : undefined,
identifierBase: normalizeIdentifierBase(rawBase),
}
}
function normalizeIdentifierBase(value: unknown): 0 | 1 | false | undefined {
if (value === false) return false
if (value === 0 || value === '0') return 0
if (value === 1 || value === '1') return 1
return undefined
}
describe('version parsing and accessors', () => {
it('parses reusable mutable SemVer objects', () => {
const version = parse('1.2.3-rc.1+build.7')
expect(version).toEqual({
build: ['build', '7'],
major: 1,
minor: 2,
patch: 3,
prerelease: ['rc', 1],
})
expect(parse(version)).toBe(version)
expect(() => parse('not a version')).toThrow(
'Invalid version syntax: not a version',
)
expect(() => parse('9007199254740992.0.0')).toThrow(
'Invalid major version: 9007199254740992',
)
expect(parse('1.2.3-9007199254740991').prerelease).toEqual([
'9007199254740991',
])
expect(() => parse(`1.2.3+${'x'.repeat(256)}`)).toThrow(
'Version exceeds the maximum length of 256 characters',
)
expect(tryParse('not a version')).toBeNull()
version.patch = 4
version.prerelease![0] = 'beta'
version.build = ['next']
expect(isValid(version)).toBe(true)
expect(isPrerelease(version)).toBe(true)
expect(isStable(version)).toBe(false)
expect(normalizeFull(version)).toBe('1.2.4-beta.1+next')
expect(normalize(version)).toBe('1.2.4-beta.1')
expect(clean(version)).toBe('1.2.4-beta.1')
expect(coerce(version)).toBe(version)
expect(increment(version, 'minor')).toBe('1.3.0')
expect(truncate(version, 'patch')).toBe('1.2.4')
expect(getMajor(version)).toBe(1)
expect(getMinor(version)).toBe(2)
expect(getPatch(version)).toBe(4)
expect(getPrerelease(version)).toEqual(['beta', 1])
expect(getBuild(version)).toEqual(['next'])
})
it('accepts SemVer objects without empty identifier arrays', () => {
const version: SemVer = { major: 1, minor: 2, patch: 3 }
const parsed = parse('1.2.3')
expect(parse(version)).toBe(version)
expect(parsed.prerelease).toBeUndefined()
expect(parsed.build).toBeUndefined()
expect(normalizeFull(version)).toBe('1.2.3')
expect(increment(version, 'patch')).toBe('1.2.4')
expect(getPrerelease(version)).toEqual([])
expect(getBuild(version)).toEqual([])
expect(isPrerelease(version)).toBe(false)
expect(isStable(version)).toBe(true)
})
it('accepts every valid node-semver fixture', () => {
for (const row of validVersions as readonly ValidVersionCase[]) {
const [version, major, minor, patch, prerelease, build] = row
const comparable = `${major}.${minor}.${patch}${prerelease.length ? `-${prerelease.join('.')}` : ''}`
const full = `${comparable}${build.length ? `+${build.join('.')}` : ''}`
expect(isValid(version)).toBe(true)
expect(isPrerelease(version)).toBe(prerelease.length > 0)
expect(isStable(version)).toBe(prerelease.length === 0)
expect(normalizeFull(version)).toBe(full)
expect(normalize(version)).toBe(comparable)
expect(getMajor(version)).toBe(major)
expect(getMinor(version)).toBe(minor)
expect(getPatch(version)).toBe(patch)
expect(getPrerelease(version)).toEqual(prerelease)
expect(getBuild(version)).toEqual(build)
}
})
it('rejects every invalid node-semver fixture', () => {
for (const row of invalidVersions as readonly InvalidVersionCase[]) {
const [version, , rawOptions] = row
if (typeof version !== 'string') continue
const options = versionOptions(rawOptions)
expect(isValid(version, options)).toBe(false)
expect(isPrerelease(version, options)).toBeNull()
expect(isStable(version, options)).toBeNull()
expect(normalizeFull(version, options)).toBeNull()
expect(normalize(version, options)).toBeNull()
}
})
it('keeps full and comparable normalization distinct', () => {
expect(normalizeFull('v1.2.3-rc.1+sha.abc')).toBe('1.2.3-rc.1+sha.abc')
expect(normalize('v1.2.3-rc.1+sha.abc')).toBe('1.2.3-rc.1')
expect(clean(' =v1.2.3+build ')).toBe('1.2.3')
})
it('uses strict accessors for invalid input', () => {
expect(() => getMajor('not a version')).toThrow(TypeError)
expect(() => getMinor('not a version')).toThrow(TypeError)
expect(() => getPatch('not a version')).toThrow(TypeError)
expect(getPrerelease('not a version')).toBeNull()
expect(getBuild('not a version')).toBeNull()
expect(() => difference('1.0.0', 'nope')).toThrow(TypeError)
})
})
describe('version operations', () => {
it('matches every increment fixture', () => {
for (const row of increments as readonly IncrementCase[]) {
const [version, release, expected, options, identifier, base] = row
expect(
increment(
version,
release as IncrementType,
incrementOptions(options, identifier, base),
),
).toBe(expected)
}
})
it('matches every truncation fixture', () => {
for (const row of truncations as readonly TruncationCase[]) {
const [version, truncation, expected] = row
expect(truncate(version, truncation as TruncationType)).toBe(expected)
}
})
it('coerces left-to-right, right-to-left, and prerelease forms', () => {
expect(coerce(123)).toEqual(parse('123.0.0'))
expect(coerce('release 1.2.3.4')).toEqual(parse('1.2.3'))
expect(coerce('release 1.2.3.4', { rtl: true })).toEqual(parse('2.3.4'))
expect(coerce('1.2.3-ignored', { rtl: true })).toEqual(parse('1.2.3'))
expect(coerce('v2')).toEqual(parse('2.0.0'))
expect(coerce('1.2.3-rc.1+build.7', { includePrerelease: true })).toEqual(
parse('1.2.3-rc.1+build.7'),
)
expect(
coerce('release 1.2.3-rc.1+build.7', {
includePrerelease: true,
rtl: true,
}),
).toEqual(parse('1.2.3-rc.1+build.7'))
expect(coerce('not a version')).toBeNull()
expect(coerce('9'.repeat(17))).toBeNull()
})
it('reports node-semver-compatible differences', () => {
const cases: readonly (readonly [
string,
string,
VersionDifference | null,
])[] = [
['1.2.3', '0.2.3', 'major'],
['0.2.3', '1.2.3', 'major'],
['1.4.5', '0.2.3', 'major'],
['1.2.3', '2.0.0-pre', 'premajor'],
['2.0.0-pre', '1.2.3', 'premajor'],
['1.2.3', '1.3.3', 'minor'],
['1.0.1', '1.1.0-pre', 'preminor'],
['1.2.3', '1.2.4', 'patch'],
['1.2.3', '1.2.4-pre', 'prepatch'],
['0.0.1', '0.0.1-pre', 'patch'],
['0.0.1', '0.0.1-pre-2', 'patch'],
['1.1.0', '1.1.0-pre', 'minor'],
['1.1.0-pre-1', '1.1.0-pre-2', 'prerelease'],
['1.0.0', '1.0.0', null],
['1.0.0-1', '1.0.0-1', null],
['0.0.2-1', '0.0.2', 'patch'],
['0.0.2-1', '0.0.3', 'patch'],
['0.0.2-1', '0.1.0', 'minor'],
['0.0.2-1', '1.0.0', 'major'],
['0.1.0-1', '0.1.0', 'minor'],
['1.0.0-1', '1.0.0', 'major'],
['1.0.0-1', '1.1.1', 'major'],
['1.0.0-1', '2.1.1', 'major'],
['1.0.1-1', '1.0.1', 'patch'],
['0.0.0-1', '0.0.0', 'major'],
['1.0.0-1', '2.0.0', 'major'],
['1.0.0-1', '2.0.0-1', 'premajor'],
['1.0.0-1', '1.1.0-1', 'preminor'],
['1.0.0-1', '1.0.1-1', 'prepatch'],
['1.7.2-1', '1.8.1', 'minor'],
['1.1.1-pre', '2.1.1-pre', 'premajor'],
['1.1.1-pre', '2.1.1', 'major'],
['1.2.3-1', '1.2.3', 'patch'],
['1.4.0-1', '2.3.5', 'major'],
['1.6.1-5', '1.7.2', 'minor'],
['2.0.0-1', '2.1.1', 'major'],
['1.2.3+one', '1.2.3+two', null],
]
for (const [left, right, expected] of cases) {
expect(difference(left, right)).toBe(expected)
}
})
})
sxzz-verkit-a5b7150/tsconfig.json 0000664 0000000 0000000 00000001113 15253274704 0017074 0 ustar 00root root 0000000 0000000 {
"compilerOptions": {
"target": "esnext",
"lib": ["es2022"],
"moduleDetection": "force",
"module": "nodenext",
"moduleResolution": "nodenext",
"resolveJsonModule": true,
"types": ["node"],
"allowImportingTsExtensions": true,
"strict": true,
"noUnusedLocals": true,
"declaration": true,
"noEmit": true,
"esModuleInterop": true,
"isolatedDeclarations": true,
"isolatedModules": true,
"verbatimModuleSyntax": true,
"erasableSyntaxOnly": true,
"skipLibCheck": true
},
"include": ["benchmarks", "src", "tests"]
}
sxzz-verkit-a5b7150/tsdown.config.ts 0000664 0000000 0000000 00000000126 15253274704 0017522 0 ustar 00root root 0000000 0000000 import { lib } from 'tsdown-preset-sxzz'
export default lib({
entry: 'shallow',
})