diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
index 5e5980b..05ef27e 100644
--- a/.github/workflows/ci.yaml
+++ b/.github/workflows/ci.yaml
@@ -10,7 +10,7 @@ permissions:
contents: read
jobs:
- lint_and_typecheck:
+ check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
@@ -19,15 +19,13 @@ jobs:
- run: pnpm i
- - run: pnpm run lint
-
- - run: pnpm run type:check
+ - run: pnpm run check
test_node_matrix:
runs-on: ubuntu-latest
strategy:
matrix:
- node-version: [26, 24, 22, 20]
+ node-version: [26, 24, 22]
fail-fast: false
steps:
- uses: actions/checkout@v7
@@ -59,6 +57,4 @@ jobs:
- run: pnpm i
- - run: pnpm --filter='./packages/*' run -r build
-
- run: pnpm exec pkg-pr-new publish './packages/*' --pnpm --compact --template './playgrounds/*'
diff --git a/.github/workflows/codspeed.yaml b/.github/workflows/codspeed.yaml
index de63dc4..f2ce0ad 100644
--- a/.github/workflows/codspeed.yaml
+++ b/.github/workflows/codspeed.yaml
@@ -1,13 +1,13 @@
name: CodSpeed
on:
- push:
- branches: [main]
- pull_request:
- branches: [main]
+ # push:
+ # branches: [main]
+ # pull_request:
+ # branches: [main]
# `workflow_dispatch` allows CodSpeed to trigger backtest
# performance analysis in order to generate initial data.
- workflow_dispatch:
+ # workflow_dispatch:
permissions:
contents: read
diff --git a/.github/workflows/pullfrog.yml b/.github/workflows/pullfrog.yml
index 68fbdca..c84c88c 100644
--- a/.github/workflows/pullfrog.yml
+++ b/.github/workflows/pullfrog.yml
@@ -34,8 +34,7 @@ jobs:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- GOOGLE_GENERATIVE_AI_API_KEY:
- ${{ secrets.GOOGLE_GENERATIVE_AI_API_KEY }}
+ GOOGLE_GENERATIVE_AI_API_KEY: ${{ secrets.GOOGLE_GENERATIVE_AI_API_KEY }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index ae25301..e439ed8 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -78,6 +78,4 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - run: pnpm --filter='./packages/*' run -r build
-
- run: pnpm --filter='./packages/*' publish -r --provenance --access=public --tag=${{ github.event.inputs.tag || steps.version.outputs.preid || 'latest' }} ${{ github.event.inputs.skip_git_check == 'true' && '--no-git-checks' || '' }}
diff --git a/.gitignore b/.gitignore
index 4ede76d..e1b5334 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,8 @@
!.vscode/
!.github/
!.zed/
+!.oxfmtrc.json
+!.oxlintrc.json
# Common generated folders
logs/
diff --git a/.oxfmtrc.json b/.oxfmtrc.json
new file mode 100644
index 0000000..809cad8
--- /dev/null
+++ b/.oxfmtrc.json
@@ -0,0 +1,7 @@
+{
+ "$schema": "./node_modules/oxfmt/configuration_schema.json",
+ "semi": false,
+ "singleQuote": true,
+ "arrowParens": "avoid",
+ "printWidth": 120
+}
diff --git a/.oxlintrc.json b/.oxlintrc.json
new file mode 100644
index 0000000..627b819
--- /dev/null
+++ b/.oxlintrc.json
@@ -0,0 +1,12 @@
+{
+ "$schema": "./node_modules/oxlint/configuration_schema.json",
+ "plugins": ["typescript", "unicorn", "oxc", "import"],
+ "categories": {
+ "correctness": "error",
+ "suspicious": "warn"
+ },
+ "rules": {
+ // `Array#toSorted` is ES2023, the repo targets ES2022.
+ "unicorn/no-array-sort": "off"
+ }
+}
diff --git a/.zed/settings.json b/.zed/settings.json
index 73d48d2..3abbcbb 100644
--- a/.zed/settings.json
+++ b/.zed/settings.json
@@ -1,55 +1,13 @@
{
"format_on_save": "on",
- // Use ESLint's --fix:
- "code_actions_on_format": {
- "source.fixAll.eslint": true
- },
- "formatter": [],
- // Enable eslint for all supported languages
- // Defaults only include https://github.com/search?q=repo%3Azed-industries%2Fzed%20eslint_languages&type=code
- "languages": {
- "HTML": {
- "language_servers": ["...", "eslint"]
- },
- "Markdown": {
- "language_servers": ["...", "eslint"]
- },
- "Markdown-Inline": {
- "language_servers": ["...", "eslint"]
- },
- "JSON": {
- "language_servers": ["...", "eslint"]
- },
- "JSONC": {
- "language_servers": ["...", "eslint"]
- },
- "YAML": {
- "language_servers": ["...", "eslint"]
- },
- "CSS": {
- "language_servers": ["...", "eslint"]
+ "formatter": {
+ "external": {
+ "command": "./node_modules/.bin/oxfmt",
+ "arguments": ["--stdin-filepath", "{buffer_path}"]
}
- // Add other languages as needed
},
- "lsp": {
- "eslint": {
- "settings": {
- "workingDirectories": ["./"],
-
- // Silent the stylistic rules in your IDE, but still auto fix them
- "rulesCustomizations": [
- { "rule": "style/*", "severity": "off", "fixable": true },
- { "rule": "format/*", "severity": "off", "fixable": true },
- { "rule": "*-indent", "severity": "off", "fixable": true },
- { "rule": "*-spacing", "severity": "off", "fixable": true },
- { "rule": "*-spaces", "severity": "off", "fixable": true },
- { "rule": "*-order", "severity": "off", "fixable": true },
- { "rule": "*-dangle", "severity": "off", "fixable": true },
- { "rule": "*-newline", "severity": "off", "fixable": true },
- { "rule": "*quotes", "severity": "off", "fixable": true },
- { "rule": "*semi", "severity": "off", "fixable": true }
- ]
- }
- }
+ // Apply oxlint's auto fixes on save:
+ "code_actions_on_format": {
+ "source.fixAll.oxc": true
}
}
diff --git a/eslint.config.js b/eslint.config.js
deleted file mode 100644
index 34db9a0..0000000
--- a/eslint.config.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import antfu from '@antfu/eslint-config'
-
-export default antfu({
- formatters: true,
- rules: {
- 'yaml/sort-keys': 'off',
- 'pnpm/json-enforce-catalog': 'off',
- 'pnpm/yaml-enforce-settings': 'off',
- 'ts/method-signature-style': 'off',
- 'guard-for-in': 'error',
- },
-}, {
- files: ['**/*.test.ts', '**/*.test.tsx', '**/*.test-d.ts', '**/*.test-d.tsx', 'playgrounds/**', 'packages/*/playground/**'],
- rules: {
- 'unused-imports/no-unused-vars': 'off',
- 'antfu/no-top-level-await': 'off',
- 'no-alert': 'off',
- 'ban/ban': 'off',
- 'no-restricted-globals': 'off',
- 'no-console': 'off',
- },
-})
diff --git a/package.json b/package.json
index 33ebb2a..c00f94f 100644
--- a/package.json
+++ b/package.json
@@ -1,48 +1,51 @@
{
"name": "@uncheck/repo",
- "type": "module",
"version": "0.0.1",
"private": true,
"license": "MIT",
- "devEngines": {
- "packageManager": {
- "name": "pnpm",
- "version": "12.5.1",
- "onFail": "download"
- }
- },
+ "type": "module",
"scripts": {
"prepare": "simple-git-hooks",
- "type:check": "pnpm -r run type:check && tsc",
+ "check": "pnpm exec --filter=./packages/uncheck unbuild --stub && uncheck",
+ "fix": "pnpm run check --fix",
"test": "pnpm run -r test && vitest run",
"test:coverage": "pnpm run -r test && vitest run --coverage",
"bench": "vitest bench --run",
- "lint": "eslint .",
- "lint:fix": "eslint --fix .",
"repo:fix": "sherif --fix",
- "sponsors:sync": "node scripts/sync-sponsors.ts && eslint --fix **/README.md"
+ "sponsors:sync": "node scripts/sync-sponsors.ts && pnpm check:fix '**/README.md'"
},
"devDependencies": {
- "@antfu/eslint-config": "^9.5.1",
"@codspeed/vitest-plugin": "^5.7.1",
"@types/node": "^26.6.2",
+ "@typescript/typescript6": "^6.0.2",
"@vitest/coverage-v8": "^5.0.1",
"bumpp": "^12.3.0",
"changelogithub": "^15.0.5",
- "eslint": "^10.11.0",
- "eslint-plugin-format": "^2.0.1",
"lint-staged": "^17.5.1",
+ "oxfmt": "^0.68.0",
+ "oxlint": "^1.83.0",
"pkg-pr-new": "^0.0.88",
"sherif": "^1.13.0",
"simple-git-hooks": "^2.14.0",
- "typescript": "^6.0.3",
+ "typescript": "^7.0.2",
"unbuild": "^3.6.1",
+ "uncheck": "workspace:*",
"vitest": "^5.0.1"
},
"simple-git-hooks": {
"pre-commit": "pnpm lint-staged"
},
"lint-staged": {
- "*": "eslint --no-warn-ignored --fix"
+ "*": "uncheck --fix"
+ },
+ "devEngines": {
+ "packageManager": {
+ "name": "pnpm",
+ "version": "12.5.1",
+ "onFail": "download"
+ }
+ },
+ "engines": {
+ "node": ">=22.20 <23 || >=24.8"
}
}
diff --git a/packages/uncheck/README.md b/packages/uncheck/README.md
index a27c4f9..9679f88 100644
--- a/packages/uncheck/README.md
+++ b/packages/uncheck/README.md
@@ -5,7 +5,7 @@
-
+
@@ -23,6 +23,58 @@
`uncheck` is a single command that lints, formats, and type checks your project. It detects which tools the project already has — [`oxlint` and `oxfmt`](https://oxc.rs) for linting and formatting, `tsc` for types — and runs them together, so humans and coding agents have one command to remember instead of three.
+## Usage
+
+```sh
+npm i -D uncheck # Node 22.20+ or 24.8+, for stable path.matchesGlob
+
+npx uncheck # oxlint, oxfmt --check and tsc for everything under the current directory
+npx uncheck --fix # oxlint --fix, then rewrite formatting with oxfmt
+npx uncheck src/app # check some files: paths, directories, globs and !exclusions
+npx uncheck --skip=tsc # skip a check that would otherwise run
+npx uncheck --require=oxfmt # require a check: fail when it cannot run instead of skipping it
+npx uncheck --cwd packages/app # run in another directory, paths are relative to it
+```
+
+Checks run in order and every check runs even if an earlier one fails, so one run reports everything. The exit code is non-zero when any check fails.
+
+| Check | Runs when | Command |
+| -------- | ------------------------------------- | -------------------------------------------------------------- |
+| `oxlint` | `oxlint` is installed | `oxlint [--fix] [files...]` |
+| `oxfmt` | `oxfmt` is installed | `oxfmt --check [files...]`, or `oxfmt [files...]` with `--fix` |
+| `tsc` | at least one `tsconfig.json` is found | `tsc -b` for projects using references, `tsc -p` for the rest |
+
+Paths given on the command line are resolved by `uncheck` itself into one list of files that every tool receives, so tools never disagree about what a directory or glob means: a file must exist, a directory expands to the project files below it (ignored files stay out, like `git ls-files`), globs use the usual `**`/`*` syntax and `!pattern` excludes. A path that matches nothing fails the run, unless `--no-error-on-unmatched-pattern` is passed.
+
+Tools are resolved from `node_modules` the way Node does, so the versions your project already depends on are used. A `tsconfig.json` without `typescript` installed is reported as a failure rather than silently skipped.
+
+### Typecheck in monorepos
+
+Every `tsconfig.json` in the project is discovered (through `git ls-files`, so ignored folders are skipped) and its `references` are followed recursively to build the project graph:
+
+- Projects that use `references`, or are referenced, are built with `tsc -b` on the roots of that graph. `tsc` builds the referenced projects first, in dependency order, exactly like running `tsc -b` in each package.
+- Remaining standalone projects (for example a root `tsconfig.json` that only covers tests and scripts) are checked afterwards with `tsc -p`.
+- Circular references are reported as an error.
+
+When files are given, `tsc` runs only the projects it would actually check for them: a file selects the projects whose `files`, `include` and `exclude` (with `extends` applied) take it as input, so a test file excluded by its package config but included by the root config runs the root project only. Files `tsc` never checks, such as Markdown or CSS, select no project.
+
+## Agent hooks
+
+```sh
+npx uncheck hooks install # pick agents interactively
+npx uncheck hooks install claude cursor # or name them: claude, codebuddy, cursor, windsurf, copilot
+```
+
+This writes the agent's hook config (`.claude/settings.json`, `.codebuddy/settings.json`, `.cursor/hooks.json`, `.windsurf/hooks.json` or `.github/hooks/uncheck.json`), merging into an existing file so other hooks are kept. Whenever the agent finishes a turn, the hook runs:
+
+```sh
+uncheck hooks run --fix
+```
+
+through your package manager (`pnpm exec`, `yarn`, `bunx` or `npx`, detected from the lockfile). It runs every check on the files changed since the last commit (modified, staged and untracked, everything under the directory outside git), applies fixes, and prints the report on stderr. When problems remain, the agent is sent back to fix them before it finishes: Claude Code and CodeBuddy through exit code 2, Cursor through a follow-up message, Copilot through a `block` decision. That happens at most once per turn, so an agent that cannot fix something is never trapped in a loop. Windsurf only shows the report.
+
+Running once per turn instead of after every edit keeps the agent fast: a typecheck costs seconds, and one run per turn covers everything the agent touched.
+
## Sponsors
Like what we build over at [middleapi](https://github.com/middleapi)? You can help keep it going through [GitHub Sponsors](https://github.com/sponsors/dinwwwh) or [Open Collective](https://opencollective.com/middleapi). Every bit helps! 🚀
diff --git a/packages/uncheck/build.config.ts b/packages/uncheck/build.config.ts
new file mode 100644
index 0000000..6143714
--- /dev/null
+++ b/packages/uncheck/build.config.ts
@@ -0,0 +1,7 @@
+import { defineBuildConfig } from 'unbuild'
+
+export default defineBuildConfig({
+ rollup: {
+ inlineDependencies: true,
+ },
+})
diff --git a/packages/uncheck/package.json b/packages/uncheck/package.json
index e287111..9c33e80 100644
--- a/packages/uncheck/package.json
+++ b/packages/uncheck/package.json
@@ -1,47 +1,62 @@
{
"name": "uncheck",
- "type": "module",
"version": "0.0.1",
- "description": "Internal types and utilities shared across the Standard Server ecosystem",
- "license": "MIT",
- "funding": [
- "https://github.com/sponsors/dinwwwh",
- "https://opencollective.com/middleapi"
+ "description": "One command to lint, format check and typecheck a project with oxlint, oxfmt and tsc",
+ "keywords": [
+ "oxc",
+ "oxfmt",
+ "oxlint",
+ "tsc",
+ "typecheck",
+ "uncheck",
+ "unified check command"
],
+ "license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/middleapi/uncheck.git",
"directory": "packages/uncheck"
},
- "keywords": [
- "uncheck",
- "unified check command",
- "oxc",
- "oxlint",
- "oxfmt",
- "tsc",
- "typecheck"
+ "funding": [
+ "https://github.com/sponsors/dinwwwh",
+ "https://opencollective.com/middleapi"
],
- "sideEffects": false,
- "publishConfig": {
- "exports": {
- "./package.json": "./package.json",
- ".": {
- "types": "./dist/index.d.mts",
- "import": "./dist/index.mjs",
- "default": "./dist/index.mjs"
- }
- }
- },
- "exports": {
- "./package.json": "./package.json",
- ".": "./src/index.ts"
+ "bin": {
+ "uncheck": "./dist/bin.mjs"
},
"files": [
"dist"
],
+ "type": "module",
+ "sideEffects": false,
"scripts": {
- "build": "unbuild",
- "type:check": "tsc -b"
+ "prepack": "unbuild"
+ },
+ "devDependencies": {
+ "@effect/platform-node": "^4.0.0-rc.116",
+ "effect": "^4.0.0-rc.116",
+ "jsonc-parser": "^3.3.1",
+ "oxfmt": "^0.68.0",
+ "oxlint": "^1.83.0",
+ "typescript": "^7.0.2"
+ },
+ "peerDependencies": {
+ "oxfmt": "*",
+ "oxlint": "*",
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "oxfmt": {
+ "optional": true
+ },
+ "oxlint": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ },
+ "engines": {
+ "node": ">=22.20 <23 || >=24.8"
}
}
diff --git a/packages/uncheck/src/bin.ts b/packages/uncheck/src/bin.ts
new file mode 100644
index 0000000..f34d2a0
--- /dev/null
+++ b/packages/uncheck/src/bin.ts
@@ -0,0 +1,23 @@
+#!/usr/bin/env node
+import process from 'node:process'
+import { NodeRuntime, NodeServices } from '@effect/platform-node'
+import { Effect } from 'effect'
+import { Command } from 'effect/unstable/cli'
+import pkg from '../package.json'
+import { hooks } from './commands/hooks'
+import { uncheck } from './commands/uncheck'
+
+Command.run(uncheck.pipe(Command.withSubcommands([hooks])), { version: pkg.version }).pipe(
+ Effect.catchTag('CheckFailed', () =>
+ Effect.sync(() => {
+ process.exitCode = 1
+ }),
+ ),
+ Effect.catchTag('StopBlocked', () =>
+ Effect.sync(() => {
+ process.exitCode = 2
+ }),
+ ),
+ Effect.provide(NodeServices.layer),
+ NodeRuntime.runMain,
+)
diff --git a/packages/uncheck/src/checks/oxfmt.ts b/packages/uncheck/src/checks/oxfmt.ts
new file mode 100644
index 0000000..9b0e6ee
--- /dev/null
+++ b/packages/uncheck/src/checks/oxfmt.ts
@@ -0,0 +1,25 @@
+import type { Check } from '../types'
+import { Effect } from 'effect'
+import { NothingToCheck } from '../errors'
+import { argvBatches, resolveBin } from '../tool'
+
+export const oxfmt: Check = {
+ name: 'oxfmt',
+ fixes: true,
+ plan: Effect.fn(function* ({ cwd, fix, files }) {
+ const bin = yield* resolveBin('oxfmt', cwd)
+
+ if (bin === undefined) {
+ return yield* Effect.fail(new NothingToCheck({ reason: 'not installed' }))
+ }
+
+ const args = fix ? [] : ['--check']
+
+ if (files === undefined) {
+ return [{ bin, args }]
+ }
+
+ // Given files may include ones oxfmt does not handle (a Markdown file), which is not a failure.
+ return argvBatches(files).map(batch => ({ bin, args: [...args, '--no-error-on-unmatched-pattern'], files: batch }))
+ }),
+}
diff --git a/packages/uncheck/src/checks/oxlint.ts b/packages/uncheck/src/checks/oxlint.ts
new file mode 100644
index 0000000..49b7d22
--- /dev/null
+++ b/packages/uncheck/src/checks/oxlint.ts
@@ -0,0 +1,25 @@
+import type { Check } from '../types'
+import { Effect } from 'effect'
+import { NothingToCheck } from '../errors'
+import { argvBatches, resolveBin } from '../tool'
+
+export const oxlint: Check = {
+ name: 'oxlint',
+ fixes: true,
+ plan: Effect.fn(function* ({ cwd, fix, files }) {
+ const bin = yield* resolveBin('oxlint', cwd)
+
+ if (bin === undefined) {
+ return yield* Effect.fail(new NothingToCheck({ reason: 'not installed' }))
+ }
+
+ const args = fix ? ['--fix'] : []
+
+ if (files === undefined) {
+ return [{ bin, args }]
+ }
+
+ // Given files may include ones oxlint does not handle (a Markdown file), which is not a failure.
+ return argvBatches(files).map(batch => ({ bin, args: [...args, '--no-error-on-unmatched-pattern'], files: batch }))
+ }),
+}
diff --git a/packages/uncheck/src/checks/tsc.ts b/packages/uncheck/src/checks/tsc.ts
new file mode 100644
index 0000000..e60f3c5
--- /dev/null
+++ b/packages/uncheck/src/checks/tsc.ts
@@ -0,0 +1,469 @@
+import type { Check, CheckCommand } from '../types'
+import { posix } from 'node:path'
+import process from 'node:process'
+import { Data, Effect, FileSystem, Graph, Option, Path, Predicate } from 'effect'
+import { parse as parseJsonc } from 'jsonc-parser'
+import { ancestors, readJson } from '../files'
+import { CannotCheck, NothingToCheck } from '../errors'
+import { resolveBin } from '../tool'
+
+export const tsc: Check = {
+ name: 'tsc',
+ fixes: false,
+ plan: Effect.fn(function* ({ cwd, files, projectFiles }) {
+ const fs = yield* FileSystem.FileSystem
+ const path = yield* Path.Path
+
+ const targets = files
+ ?.map(file => path.resolve(cwd, file))
+ .filter(file => CHECKABLE_EXTENSIONS.has(posix.extname(file).toLowerCase()))
+
+ if (targets !== undefined && targets.length === 0) {
+ return yield* Effect.fail(new NothingToCheck({ reason: 'no tsconfig.json covers the given files' }))
+ }
+
+ const [typescript, tsconfigs] = yield* Effect.all(
+ [
+ resolveBin('typescript', cwd, 'tsc'),
+ Effect.flatMap(projectFiles, all =>
+ // Tracked files can be deleted from the working tree without being staged yet.
+ Effect.filter(
+ all.filter(file => path.basename(file) === 'tsconfig.json').map(file => path.resolve(cwd, file)),
+ candidate => fs.exists(candidate),
+ { concurrency: 'unbounded' },
+ ),
+ ),
+ ],
+ { concurrency: 'unbounded' },
+ )
+
+ if (tsconfigs.length === 0) {
+ return yield* Effect.fail(new NothingToCheck({ reason: 'no tsconfig.json found' }))
+ }
+
+ const selected = targets === undefined ? tsconfigs : yield* selectTsconfigs(tsconfigs, targets)
+
+ if (selected.length === 0) {
+ return yield* Effect.fail(new NothingToCheck({ reason: 'no tsconfig.json covers the given files' }))
+ }
+
+ if (typescript === undefined) {
+ return yield* Effect.fail(
+ new CannotCheck({ reason: `found ${selected.length} tsconfig.json but typescript is not installed` }),
+ )
+ }
+
+ const bin = typescript
+
+ const projects = new Map()
+ const queue = [...selected]
+
+ while (queue.length > 0) {
+ const configPath = queue.pop()!
+
+ if (!projects.has(configPath)) {
+ const references = yield* readReferences(configPath)
+
+ projects.set(configPath, { path: configPath, references })
+ queue.push(...references)
+ }
+ }
+
+ const plan = yield* planTypecheck(selected, projects).pipe(
+ Effect.catchTag('CircularProjectReferences', error => {
+ const cycle = error.projects.map(configPath => path.relative(cwd, configPath) || '.').join(', ')
+ return Effect.fail(new CannotCheck({ reason: `circular project references between ${cycle}` }))
+ }),
+ )
+
+ const commands: CheckCommand[] = []
+
+ if (plan.build.length > 0) {
+ commands.push({ bin, args: ['-b', ...plan.build.map(configPath => path.relative(cwd, configPath) || '.')] })
+ }
+
+ for (const configPath of plan.check) {
+ commands.push({ bin, args: ['-p', path.relative(cwd, configPath) || '.'] })
+ }
+
+ return commands
+ }),
+}
+
+const CHECKABLE_EXTENSIONS = new Set(['.ts', '.tsx', '.mts', '.cts', '.js', '.jsx', '.mjs', '.cjs', '.json'])
+
+interface TsProject {
+ readonly path: string
+ readonly references: ReadonlyArray
+}
+
+interface TypecheckPlan {
+ readonly build: ReadonlyArray
+ readonly check: ReadonlyArray
+}
+
+class CircularProjectReferences extends Data.TaggedError('CircularProjectReferences')<{
+ readonly projects: ReadonlyArray
+}> {}
+
+/**
+ * Splits the discovered `entries` into what `tsc -b` must build and what `tsc -p` can check on its own.
+ *
+ * Every project that has references, or is referenced, belongs to the build graph.
+ * Only the graph's roots are passed to `tsc -b` since it builds their references transitively.
+ */
+function planTypecheck(
+ entries: ReadonlyArray,
+ projects: ReadonlyMap,
+): Effect.Effect {
+ const members = new Set()
+ const referenced = new Set()
+
+ for (const project of projects.values()) {
+ if (project.references.length === 0) {
+ continue
+ }
+
+ members.add(project.path)
+
+ for (const reference of project.references) {
+ members.add(reference)
+ referenced.add(reference)
+ }
+ }
+
+ const nodes = [...members].sort()
+
+ const graph = Graph.directed(mutable => {
+ const indexes = new Map(nodes.map(node => [node, Graph.addNode(mutable, node)] as const))
+
+ for (const node of nodes) {
+ for (const reference of projects.get(node)?.references ?? []) {
+ Graph.addEdge(mutable, indexes.get(node)!, indexes.get(reference)!, null)
+ }
+ }
+ })
+
+ const cycle = Graph.findCycle(graph)
+
+ if (Option.isSome(cycle)) {
+ // The path closes on its first node, drop that repetition.
+ const path = cycle.value.path.slice(0, -1).map(index => Option.getOrThrow(Graph.getNode(graph, index)))
+
+ return Effect.fail(new CircularProjectReferences({ projects: path }))
+ }
+
+ return Effect.succeed({
+ build: nodes.filter(member => !referenced.has(member)),
+ check: entries.filter(entry => !members.has(entry)).sort(),
+ })
+}
+
+function selectTsconfigs(
+ entries: ReadonlyArray,
+ files: ReadonlyArray,
+): Effect.Effect, never, FileSystem.FileSystem | Path.Path> {
+ return Effect.filter(
+ entries,
+ entry => Effect.map(loadTsconfigInputs(entry), inputs => files.some(file => includesFile(inputs, file))),
+ { concurrency: 'unbounded' },
+ ).pipe(Effect.map(selected => [...selected].sort()))
+}
+
+interface RawTsconfig {
+ readonly extends?: unknown
+ readonly files?: unknown
+ readonly include?: unknown
+ readonly exclude?: unknown
+ readonly references?: unknown
+ readonly compilerOptions?: unknown
+}
+
+/** Parses a config file as JSONC. Unreadable or malformed files read as empty and are left for `tsc` to report. */
+const readTsconfig = Effect.fn(
+ function* (configPath: string) {
+ const fs = yield* FileSystem.FileSystem
+ const value: unknown = parseJsonc(yield* fs.readFileString(configPath), undefined, { allowTrailingComma: true })
+
+ return Predicate.isObject(value) ? value : {}
+ },
+ Effect.orElseSucceed((): RawTsconfig => ({})),
+)
+
+/** `references` are never inherited through `extends`, so only the file itself is read. */
+const readReferences = Effect.fn(function* (configPath: string) {
+ const path = yield* Path.Path
+ const configDir = path.dirname(configPath)
+ const { references } = yield* readTsconfig(configPath)
+
+ return (Array.isArray(references) ? references : []).flatMap((reference: unknown) => {
+ if (!Predicate.isObject(reference) || typeof reference.path !== 'string') {
+ return []
+ }
+
+ const target = path.resolve(configDir, reference.path.replaceAll('${configDir}', configDir))
+
+ return [target.endsWith('.json') ? target : path.join(target, 'tsconfig.json')]
+ })
+})
+
+interface InputPattern {
+ readonly spec: string
+ readonly regex: RegExp
+}
+
+interface TsconfigInputs {
+ readonly dir: string
+ readonly files: ReadonlyArray
+ readonly include: ReadonlyArray
+ readonly exclude: ReadonlyArray
+ readonly extensions: ReadonlySet
+}
+
+const TS_EXTENSIONS = ['.ts', '.tsx', '.mts', '.cts']
+const JS_EXTENSIONS = ['.js', '.jsx', '.mjs', '.cjs']
+const DEFAULT_EXCLUDES = ['node_modules', 'bower_components', 'jspm_packages']
+
+interface Specs {
+ readonly dir: string
+ readonly specs: ReadonlyArray
+}
+
+/**
+ * Resolves `files`, `include`, `exclude` and the relevant compiler options of a config the way
+ * `tsc` does: each field comes from the last config in the `extends` chain that sets it, relative
+ * paths resolve against the config that set them, and `${configDir}` means the leaf config's folder.
+ */
+const loadTsconfigInputs = Effect.fn(function* (configPath: string) {
+ const path = yield* Path.Path
+ const chain = yield* loadExtendsChain(configPath, new Set())
+ const leafDir = path.dirname(configPath)
+
+ let files: Specs | undefined
+ let include: Specs | undefined
+ let exclude: Specs | undefined
+ let outDir: Specs | undefined
+ let allowJs = false
+
+ for (const { dir, raw } of chain) {
+ if (isStringArray(raw.files)) {
+ files = { dir, specs: raw.files }
+ }
+
+ if (isStringArray(raw.include)) {
+ include = { dir, specs: raw.include }
+ }
+
+ if (isStringArray(raw.exclude)) {
+ exclude = { dir, specs: raw.exclude }
+ }
+
+ if (Predicate.isObject(raw.compilerOptions)) {
+ const { compilerOptions } = raw
+
+ if (typeof compilerOptions.allowJs === 'boolean') {
+ allowJs = compilerOptions.allowJs
+ }
+
+ if (compilerOptions.checkJs === true) {
+ allowJs = true
+ }
+
+ if (typeof compilerOptions.outDir === 'string') {
+ outDir = { dir, specs: [compilerOptions.outDir] }
+ }
+ }
+ }
+
+ const resolve = (specs: Specs | undefined): string[] =>
+ specs?.specs.map(spec => path.resolve(specs.dir, spec.replaceAll('${configDir}', leafDir)).replaceAll('\\', '/')) ??
+ []
+
+ const includeSpecs =
+ include === undefined && files === undefined ? [`${leafDir.replaceAll('\\', '/')}/**/*`] : resolve(include)
+
+ const excludeSpecs =
+ exclude === undefined
+ ? [...DEFAULT_EXCLUDES.map(name => `${leafDir.replaceAll('\\', '/')}/${name}`), ...resolve(outDir)]
+ : resolve(exclude)
+
+ return {
+ dir: leafDir,
+ files: resolve(files),
+ include: includeSpecs.flatMap(spec => {
+ const regex = compileGlob(spec, 'files')
+ return regex === undefined ? [] : [{ spec, regex }]
+ }),
+ exclude: excludeSpecs.map(spec => ({ spec, regex: compileGlob(spec, 'exclude')! })),
+ extensions: new Set(allowJs ? [...TS_EXTENSIONS, ...JS_EXTENSIONS] : TS_EXTENSIONS),
+ }
+})
+
+function includesFile(inputs: TsconfigInputs, file: string): boolean {
+ const target = file.replaceAll('\\', '/')
+
+ if (inputs.files.includes(target)) {
+ return true
+ }
+
+ const extension = posix.extname(target).toLowerCase()
+ const json = extension === '.json'
+
+ if (!json && !inputs.extensions.has(extension)) {
+ return false
+ }
+
+ if (inputs.exclude.some(pattern => pattern.regex.test(target))) {
+ return false
+ }
+
+ // JSON files only come in through an `include` that names the extension explicitly.
+ return inputs.include.some(pattern => pattern.regex.test(target) && (!json || pattern.spec.endsWith('.json')))
+}
+
+interface ChainEntry {
+ readonly dir: string
+ readonly raw: RawTsconfig
+}
+
+const loadExtendsChain = Effect.fn(function* (
+ configPath: string,
+ visited: Set,
+): Effect.fn.Return, never, FileSystem.FileSystem | Path.Path> {
+ if (visited.has(configPath)) {
+ return []
+ }
+
+ visited.add(configPath)
+
+ const path = yield* Path.Path
+ const raw = yield* readTsconfig(configPath)
+ const dir = path.dirname(configPath)
+ const specs = typeof raw.extends === 'string' ? [raw.extends] : isStringArray(raw.extends) ? raw.extends : []
+
+ const bases = yield* Effect.forEach(specs, spec =>
+ resolveExtends(spec, dir).pipe(
+ Effect.flatMap(
+ Option.match({
+ onNone: () => Effect.succeed>([]),
+ onSome: base => loadExtendsChain(base, visited),
+ }),
+ ),
+ ),
+ )
+
+ return [...bases.flat(), { dir, raw }]
+})
+
+const resolveExtends = Effect.fn(function* (spec: string, dir: string) {
+ const fs = yield* FileSystem.FileSystem
+ const path = yield* Path.Path
+
+ const kind = (target: string) =>
+ fs.stat(target).pipe(
+ Effect.map(info => info.type),
+ Effect.orElseSucceed(() => undefined),
+ )
+
+ const firstFile = (candidates: ReadonlyArray) =>
+ Effect.findFirst(candidates, candidate => Effect.map(kind(candidate), type => type === 'File'))
+
+ if (spec.startsWith('./') || spec.startsWith('../') || path.isAbsolute(spec)) {
+ const target = path.resolve(dir, spec)
+ return yield* firstFile([target, `${target}.json`])
+ }
+
+ for (const current of ancestors(path, dir)) {
+ const base = path.join(current, 'node_modules', spec)
+ const baseKind = yield* kind(base)
+
+ if (baseKind === 'File') {
+ return Option.some(base)
+ }
+
+ const candidates = [`${base}.json`]
+
+ if (baseKind === 'Directory') {
+ const manifest = yield* readJson(path.join(base, 'package.json'))
+ candidates.push(path.resolve(base, typeof manifest?.tsconfig === 'string' ? manifest.tsconfig : 'tsconfig.json'))
+ }
+
+ const found = yield* firstFile(candidates)
+
+ if (Option.isSome(found)) {
+ return found
+ }
+ }
+
+ return Option.none()
+})
+
+const IMPLICIT_EXCLUDE = '(?!(?:node_modules|bower_components|jspm_packages)(?:/|$))'
+const FILES_DOUBLE_ASTERISK = `(?:/${IMPLICIT_EXCLUDE}[^/.][^/]*)*?`
+const EXCLUDE_DOUBLE_ASTERISK = '(?:/.+?)?'
+const CASE_INSENSITIVE = process.platform === 'win32' || process.platform === 'darwin'
+
+/**
+ * Turns an absolute `include` or `exclude` pattern into the regular expression `tsc` uses for it:
+ * `*` and `?` never cross a directory, a leading wildcard never matches a dot file, `**` skips
+ * `node_modules` and dot folders, and a pattern without extension or wildcard means the whole folder.
+ * `exclude` patterns also match every path below them.
+ */
+function compileGlob(pattern: string, usage: 'files' | 'exclude'): RegExp | undefined {
+ const components = pattern.replace(/\/+$/, '').split('/')
+ const last = components[components.length - 1]!
+
+ if (usage === 'files' && last === '**') {
+ return undefined
+ }
+
+ if (!/[*?.]/.test(last)) {
+ components.push('**', '*')
+ }
+
+ let source = ''
+ let written = false
+
+ for (const component of components) {
+ if (component === '**') {
+ source += usage === 'files' ? FILES_DOUBLE_ASTERISK : EXCLUDE_DOUBLE_ASTERISK
+ } else {
+ if (written) {
+ source += '/'
+ }
+
+ source += usage === 'files' ? filesComponent(component) : wildcards(component)
+ }
+
+ written = true
+ }
+
+ return new RegExp(`^${source}${usage === 'exclude' ? '(?:$|/)' : '$'}`, CASE_INSENSITIVE ? 'i' : '')
+}
+
+function filesComponent(component: string): string {
+ let source = ''
+ let rest = component
+
+ if (rest.startsWith('*')) {
+ source += '(?:[^./][^/]*)?'
+ rest = rest.slice(1)
+ } else if (rest.startsWith('?')) {
+ source += '[^./]'
+ rest = rest.slice(1)
+ }
+
+ source += wildcards(rest)
+
+ return /[*?]/.test(component) ? IMPLICIT_EXCLUDE + source : source
+}
+
+function wildcards(component: string): string {
+ return component.replace(/[.*?+^${}()|[\]\\]/g, char =>
+ char === '*' ? '[^/]*' : char === '?' ? '[^/]' : `\\${char}`,
+ )
+}
+
+function isStringArray(value: unknown): value is ReadonlyArray {
+ return Array.isArray(value) && value.every(item => typeof item === 'string')
+}
diff --git a/packages/uncheck/src/commands/hooks/index.ts b/packages/uncheck/src/commands/hooks/index.ts
new file mode 100644
index 0000000..6829019
--- /dev/null
+++ b/packages/uncheck/src/commands/hooks/index.ts
@@ -0,0 +1,8 @@
+import { Command } from 'effect/unstable/cli'
+import { install } from './install'
+import { run } from './run'
+
+export const hooks = Command.make('hooks').pipe(
+ Command.withDescription('Agent hooks: `install` writes the configs, `run` is what they execute'),
+ Command.withSubcommands([install, run]),
+)
diff --git a/packages/uncheck/src/commands/hooks/install.ts b/packages/uncheck/src/commands/hooks/install.ts
new file mode 100644
index 0000000..9b436b6
--- /dev/null
+++ b/packages/uncheck/src/commands/hooks/install.ts
@@ -0,0 +1,160 @@
+import { Console, Effect, FileSystem, Option, Path, Predicate, Stdio } from 'effect'
+import { Argument, CliError, Command, Prompt } from 'effect/unstable/cli'
+import { parse as parseJsonc } from 'jsonc-parser'
+import { ancestors, readJson } from '../../files'
+import { bold, dim, green } from '../../style'
+import { cwdFlag } from '../uncheck'
+
+const AGENTS = [
+ {
+ id: 'claude',
+ name: 'Claude Code',
+ path: '.claude/settings.json',
+ content: (command: string) => ({ hooks: { Stop: [{ hooks: [{ type: 'command', command }] }] } }),
+ },
+ {
+ id: 'codebuddy',
+ name: 'CodeBuddy',
+ path: '.codebuddy/settings.json',
+ content: (command: string) => ({ hooks: { Stop: [{ hooks: [{ type: 'command', command }] }] } }),
+ },
+ {
+ id: 'cursor',
+ name: 'Cursor',
+ path: '.cursor/hooks.json',
+ content: (command: string) => ({ version: 1, hooks: { stop: [{ command }] } }),
+ },
+ {
+ id: 'windsurf',
+ name: 'Windsurf',
+ path: '.windsurf/hooks.json',
+ content: (command: string) => ({ hooks: { post_cascade_response: [{ command, show_output: true }] } }),
+ },
+ {
+ id: 'copilot',
+ name: 'GitHub Copilot',
+ path: '.github/hooks/uncheck.json',
+ content: (command: string) => ({
+ version: 1,
+ hooks: { agentStop: [{ type: 'command', bash: command, powershell: command }] },
+ }),
+ },
+] as const
+
+const AGENT_IDS = AGENTS.map(agent => agent.id)
+
+const EXEC_BY_PACKAGE_MANAGER: Readonly> = {
+ pnpm: 'pnpm exec',
+ yarn: 'yarn',
+ bun: 'bunx',
+ npm: 'npx',
+}
+
+const EXEC_BY_LOCKFILE: ReadonlyArray = [
+ ['pnpm-lock.yaml', 'pnpm exec'],
+ ['yarn.lock', 'yarn'],
+ ['bun.lock', 'bunx'],
+ ['bun.lockb', 'bunx'],
+ ['package-lock.json', 'npx'],
+]
+
+export const install = Command.make(
+ 'install',
+ {
+ cwd: cwdFlag,
+ agents: Argument.Literals('agents', AGENT_IDS).pipe(
+ Argument.variadic(),
+ Argument.withDescription(`Agents to configure: ${AGENT_IDS.join(', ')}. Prompts for a selection when omitted.`),
+ ),
+ },
+ Effect.fn(function* ({ cwd, agents }) {
+ const fs = yield* FileSystem.FileSystem
+ const path = yield* Path.Path
+ const stdio = yield* Stdio.Stdio
+
+ let selected: ReadonlyArray<(typeof AGENT_IDS)[number]> = agents
+
+ if (selected.length === 0) {
+ if (!(yield* stdio.stdinIsTerminal)) {
+ const userMessage = `Pass the agents to configure, for example: uncheck hooks install ${AGENT_IDS.join(' ')}`
+ return yield* Effect.fail(new CliError.UserError({ cause: new Error(userMessage), userMessage }))
+ }
+
+ selected = yield* Prompt.run(
+ Prompt.MultiSelect({
+ message: 'Which agents should run uncheck when they finish a turn?',
+ choices: AGENTS.map(agent => ({ title: agent.name, value: agent.id })),
+ min: 1,
+ }),
+ )
+ }
+
+ let exec = 'npx'
+
+ for (const dir of ancestors(path, cwd)) {
+ const manifest = yield* readJson(path.join(dir, 'package.json'))
+ const declared =
+ typeof manifest?.packageManager === 'string'
+ ? EXEC_BY_PACKAGE_MANAGER[manifest.packageManager.split('@')[0] ?? '']
+ : undefined
+
+ const lockfile = yield* Effect.findFirst(EXEC_BY_LOCKFILE, ([file]) =>
+ fs.exists(path.join(dir, file)).pipe(Effect.orElseSucceed(() => false)),
+ )
+
+ if (declared !== undefined || Option.isSome(lockfile)) {
+ exec = declared ?? Option.getOrThrow(lockfile)[1]
+ break
+ }
+ }
+
+ const command = `${exec} uncheck hooks run --fix`
+
+ for (const agent of AGENTS) {
+ if (!selected.includes(agent.id)) {
+ continue
+ }
+
+ const file = path.join(cwd, agent.path)
+ const existing = yield* fs.readFileString(file).pipe(Effect.option)
+ let result: 'created' | 'updated' | 'unchanged'
+
+ if (Option.isNone(existing)) {
+ yield* fs.makeDirectory(path.dirname(file), { recursive: true })
+ yield* fs.writeFileString(file, `${JSON.stringify(agent.content(command), null, 2)}\n`)
+ result = 'created'
+ } else if (existing.value.includes('uncheck')) {
+ result = 'unchanged'
+ } else {
+ const current: unknown = parseJsonc(existing.value, undefined, { allowTrailingComma: true })
+ const merged = mergeJson(Predicate.isObject(current) ? current : {}, agent.content(command))
+
+ yield* fs.writeFileString(file, `${JSON.stringify(merged, null, 2)}\n`)
+ result = 'updated'
+ }
+
+ yield* Console.log(`${green('✔')} ${bold(agent.name)} ${dim(`${agent.path} ${result}`)}`)
+ }
+
+ yield* Console.log('')
+ yield* Console.log(`${dim('The hook runs')} ${bold(command)} ${dim('whenever the agent finishes a turn.')}`)
+ }),
+).pipe(Command.withDescription('Write the agent hook configs that run `uncheck hooks run` after every agent turn'))
+
+function mergeJson(base: unknown, addition: unknown): unknown {
+ if (Array.isArray(base) && Array.isArray(addition)) {
+ return [...base, ...addition]
+ }
+
+ if (Predicate.isObject(base) && Predicate.isObject(addition)) {
+ const merged: Record = { ...base }
+
+ for (const [key, value] of Object.entries(addition)) {
+ merged[key] = key in base ? mergeJson(base[key], value) : value
+ }
+
+ return merged
+ }
+
+ return addition
+}
diff --git a/packages/uncheck/src/commands/hooks/run.ts b/packages/uncheck/src/commands/hooks/run.ts
new file mode 100644
index 0000000..242e3f2
--- /dev/null
+++ b/packages/uncheck/src/commands/hooks/run.ts
@@ -0,0 +1,78 @@
+import { stripVTControlCharacters } from 'node:util'
+import { Console, Effect, Predicate, Stdio, Stream } from 'effect'
+import { CliError, Command } from 'effect/unstable/cli'
+import { listChangedFiles } from '../../files'
+import { StopBlocked } from '../../errors'
+import { cwdFlag, fixFlag, requireFlag, runChecks, skipFlag } from '../uncheck'
+
+export const run = Command.make(
+ 'run',
+ { cwd: cwdFlag, fix: fixFlag, required: requireFlag, skipped: skipFlag },
+ Effect.fn(function* ({ cwd, ...settings }) {
+ const stdio = yield* Stdio.Stdio
+
+ if (yield* stdio.stdinIsTerminal) {
+ const userMessage = '`uncheck hooks run` expects the agent hook payload as JSON on stdin'
+ return yield* Effect.fail(new CliError.UserError({ cause: new Error(userMessage), userMessage }))
+ }
+
+ const payload = yield* Stream.mkString(Stream.decodeText(stdio.stdin)).pipe(
+ Effect.flatMap(text => Effect.try((): unknown => JSON.parse(text))),
+ Effect.map(value => (Predicate.isObject(value) ? value : {})),
+ Effect.orElseSucceed((): Record => ({})),
+ )
+
+ const changed = yield* listChangedFiles(cwd)
+
+ if (changed?.length === 0) {
+ return
+ }
+
+ const lines: string[] = []
+
+ const capture: Console.Console = Object.assign(Object.create(globalThis.console), {
+ log: (...parts: ReadonlyArray) => {
+ lines.push(parts.join(' '))
+ },
+ })
+
+ const failed = yield* runChecks(changed ?? [], { ...settings, cwd, allowUnmatched: true }).pipe(
+ Effect.map(() => false),
+ Effect.catchTag('CheckFailed', () => Effect.succeed(true)),
+ Effect.provideService(Console.Console, capture),
+ )
+
+ const report = stripVTControlCharacters(lines.join('\n'))
+
+ yield* Console.error(report)
+
+ // Send the agent back at most once per turn, in the way its family understands. Claude Code and
+ // CodeBuddy block on exit code 2 with stderr as the message and set `stop_hook_active` once they
+ // are already continuing; Cursor continues on a follow-up message and counts them in `loop_count`;
+ // Copilot continues on a block decision and also sets `stop_hook_active`. Windsurf only shows the report.
+ const alreadyContinued =
+ payload.stop_hook_active === true || (typeof payload.loop_count === 'number' && payload.loop_count > 0)
+
+ if (!failed || alreadyContinued) {
+ return
+ }
+
+ const reason = `uncheck found problems, fix them before finishing:\n\n${report}`
+
+ if (payload.hook_event_name === 'Stop') {
+ return yield* Effect.fail(new StopBlocked())
+ }
+
+ if (payload.hook_event_name === 'stop') {
+ return yield* Console.log(JSON.stringify({ followup_message: reason }))
+ }
+
+ if (typeof payload.stopReason === 'string') {
+ return yield* Console.log(JSON.stringify({ decision: 'block', reason }))
+ }
+ }),
+).pipe(
+ Command.withDescription(
+ 'Run as an agent stop hook: check the files changed since the last commit, report on stderr and send the agent back to fix what remains',
+ ),
+)
diff --git a/packages/uncheck/src/commands/uncheck.ts b/packages/uncheck/src/commands/uncheck.ts
new file mode 100644
index 0000000..273d833
--- /dev/null
+++ b/packages/uncheck/src/commands/uncheck.ts
@@ -0,0 +1,190 @@
+import type { Check, CheckCommand, CheckName, CheckOutcome } from '../types'
+import path from 'node:path'
+import process from 'node:process'
+import { Console, Duration, Effect } from 'effect'
+import { Argument, CliError, Command, Flag } from 'effect/unstable/cli'
+import { oxfmt } from '../checks/oxfmt'
+import { oxlint } from '../checks/oxlint'
+import { tsc } from '../checks/tsc'
+import { CheckFailed } from '../errors'
+import { listProjectFiles, resolvePaths } from '../files'
+import { bold, dim, green, red } from '../style'
+import { execute } from '../tool'
+
+const CHECKS: ReadonlyArray = [oxlint, oxfmt, tsc]
+
+export const cwdFlag = Flag.Directory('cwd', { mustExist: true }).pipe(
+ Flag.withDefault(Effect.sync(() => process.cwd())),
+ Flag.withDescription('Directory to run in. Defaults to the current one'),
+)
+
+export const fixFlag = Flag.Boolean('fix').pipe(
+ Flag.withDescription('Apply lint fixes (oxlint --fix) and rewrite formatting (oxfmt) instead of only reporting'),
+ Flag.withDefault(false),
+)
+
+const CHECK_NAMES = CHECKS.map(check => check.name)
+
+export const requireFlag = Flag.Literals('require', CHECK_NAMES).pipe(
+ Flag.atLeast(0),
+ Flag.withDescription('Require a check: fail when it cannot run instead of skipping it. Repeatable'),
+)
+
+export const skipFlag = Flag.Literals('skip', CHECK_NAMES).pipe(
+ Flag.atLeast(0),
+ Flag.withDescription('Skip a check even when it could run. Repeatable'),
+)
+
+export interface RunSettings {
+ readonly cwd: string
+ readonly fix: boolean
+ readonly required: ReadonlyArray
+ readonly skipped: ReadonlyArray
+ readonly allowUnmatched: boolean
+}
+
+type CheckPlan =
+ | { readonly name: CheckName; readonly status: 'run'; readonly commands: ReadonlyArray }
+ | (CheckOutcome & { readonly status: 'skipped' | 'failed'; readonly reason: string })
+
+export const runChecks = Effect.fn(function* (paths: ReadonlyArray, settings: RunSettings) {
+ const { fix, required, skipped, allowUnmatched } = settings
+ const contradiction = required.find(name => skipped.includes(name))
+
+ if (contradiction !== undefined) {
+ const userMessage = `--require=${contradiction} and --skip=${contradiction} contradict each other.`
+ return yield* Effect.fail(new CliError.UserError({ cause: new Error(userMessage), userMessage }))
+ }
+
+ const cwd = path.resolve(settings.cwd)
+ const projectFiles = yield* Effect.cached(listProjectFiles(cwd))
+
+ yield* Console.log(dim(`uncheck in ${cwd}`))
+
+ let files: ReadonlyArray | undefined
+
+ if (paths.length > 0) {
+ const resolved = yield* resolvePaths(paths, cwd, projectFiles)
+
+ if (resolved.unmatched.length > 0 && !allowUnmatched) {
+ const userMessage = `No files match ${resolved.unmatched.join(', ')}. Pass --no-error-on-unmatched-pattern to run with whatever matched.`
+ return yield* Effect.fail(new CliError.UserError({ cause: new Error(userMessage), userMessage }))
+ }
+
+ if (resolved.files.length === 0) {
+ yield* Console.log(`${dim('○')} nothing to check, no files match ${paths.join(' ')}`)
+ return
+ }
+
+ files = resolved.files
+ }
+
+ const plans = yield* Effect.all(
+ CHECKS.map(({ name, plan }) =>
+ skipped.includes(name)
+ ? Effect.succeed({ name, status: 'skipped', reason: `disabled with --skip=${name}` })
+ : plan({ cwd, fix, files, projectFiles }).pipe(
+ Effect.map((commands): CheckPlan => ({ name, status: 'run', commands })),
+ Effect.catchTag('NothingToCheck', ({ reason }) =>
+ Effect.succeed({ name, status: required.includes(name) ? 'failed' : 'skipped', reason }),
+ ),
+ Effect.catchTag('CannotCheck', ({ reason }) =>
+ Effect.succeed({ name, status: 'failed', reason }),
+ ),
+ ),
+ ),
+ { concurrency: 'unbounded' },
+ )
+
+ const outcomes = yield* Effect.forEach(plans, plan => runCheck(plan, cwd))
+
+ const ran = outcomes.filter(outcome => outcome.status !== 'skipped')
+ const failed = outcomes.filter(outcome => outcome.status === 'failed')
+
+ yield* Console.log('')
+
+ if (ran.length === 0) {
+ const reasons = outcomes.map(outcome => `${outcome.name} ${outcome.reason}`).join(', ')
+
+ yield* Console.log(`${red('✘')} nothing to check: ${reasons}`)
+ return yield* Effect.fail(new CheckFailed({ outcomes }))
+ }
+
+ if (failed.length > 0) {
+ yield* Console.log(
+ `${red('✘')} ${failed.length} of ${ran.length} checks failed: ${failed.map(outcome => outcome.name).join(', ')}`,
+ )
+
+ if (
+ !fix &&
+ failed.some(outcome => outcome.reason === undefined && CHECKS.find(check => check.name === outcome.name)?.fixes)
+ ) {
+ yield* Console.log(dim(' run `uncheck --fix` to apply oxlint and oxfmt fixes'))
+ }
+
+ return yield* Effect.fail(new CheckFailed({ outcomes }))
+ }
+
+ yield* Console.log(`${green('✔')} all checks passed (${ran.map(outcome => outcome.name).join(', ')})`)
+})
+
+const runCheck = Effect.fn(function* (plan: CheckPlan, cwd: string) {
+ if (plan.status !== 'run') {
+ yield* Console.log(
+ plan.status === 'skipped'
+ ? `${dim('○')} ${bold(plan.name)} ${dim(`skipped, ${plan.reason}`)}`
+ : `${red('✘')} ${bold(plan.name)} ${red(plan.reason)}`,
+ )
+ return plan
+ }
+
+ const [duration, exitCodes] = yield* Effect.timed(
+ Effect.forEach(plan.commands, invocation => {
+ const { bin, args, files } = invocation
+ const tail = files === undefined ? [] : files.length <= 3 ? files : [`[${files.length} files]`]
+
+ return Console.log(`${dim('▶')} ${bold(bin.name)} ${dim([...args, ...tail].join(' '))}`.trimEnd()).pipe(
+ Effect.flatMap(() => execute(invocation, cwd)),
+ )
+ }),
+ )
+
+ const failed = exitCodes.some(exitCode => exitCode !== 0)
+ const ms = Duration.toMillis(duration)
+ const elapsed = dim(ms < 1000 ? `${Math.round(ms)}ms` : `${(ms / 1000).toFixed(1)}s`)
+
+ yield* Console.log(
+ failed
+ ? `${red('✘')} ${bold(plan.name)} ${red('failed')} ${elapsed}`
+ : `${green('✔')} ${bold(plan.name)} ${green('passed')} ${elapsed}`,
+ )
+
+ const outcome: CheckOutcome = { name: plan.name, status: failed ? 'failed' : 'passed' }
+
+ return outcome
+})
+
+export const uncheck = Command.make(
+ 'uncheck',
+ {
+ cwd: cwdFlag,
+ fix: fixFlag,
+ allowUnmatched: Flag.Boolean('no-error-on-unmatched-pattern').pipe(
+ Flag.withDefault(false),
+ Flag.withDescription('Run with whatever matched instead of failing when a given path or pattern matches no file'),
+ ),
+ required: requireFlag,
+ skipped: skipFlag,
+ paths: Argument.String('paths').pipe(
+ Argument.variadic(),
+ Argument.withDescription(
+ 'Files, directories or glob patterns, `!pattern` excludes. uncheck resolves them to one file list that every tool checks, so tools never disagree on what a pattern means. Defaults to everything under the current directory.',
+ ),
+ ),
+ },
+ ({ paths, ...settings }) => runChecks(paths, settings),
+).pipe(
+ Command.withDescription(
+ 'Lint (oxlint), format check (oxfmt) and typecheck (tsc) a project with one command. Each check runs only when the project uses that tool.',
+ ),
+)
diff --git a/packages/uncheck/src/errors.ts b/packages/uncheck/src/errors.ts
new file mode 100644
index 0000000..12ea422
--- /dev/null
+++ b/packages/uncheck/src/errors.ts
@@ -0,0 +1,16 @@
+import type { CheckOutcome } from './types'
+import { Data } from 'effect'
+
+export class NothingToCheck extends Data.TaggedError('NothingToCheck')<{
+ readonly reason: string
+}> {}
+
+export class CannotCheck extends Data.TaggedError('CannotCheck')<{
+ readonly reason: string
+}> {}
+
+export class CheckFailed extends Data.TaggedError('CheckFailed')<{
+ readonly outcomes: ReadonlyArray
+}> {}
+
+export class StopBlocked extends Data.TaggedError('StopBlocked')<{}> {}
diff --git a/packages/uncheck/src/files.ts b/packages/uncheck/src/files.ts
new file mode 100644
index 0000000..c94faf3
--- /dev/null
+++ b/packages/uncheck/src/files.ts
@@ -0,0 +1,197 @@
+import type { PlatformError } from 'effect'
+import { posix } from 'node:path'
+import { Effect, FileSystem, Path, Predicate, Stream } from 'effect'
+import { ChildProcess, ChildProcessSpawner } from 'effect/unstable/process'
+
+export type ProjectFiles = Effect.Effect<
+ ReadonlyArray,
+ PlatformError.PlatformError,
+ FileSystem.FileSystem | Path.Path | ChildProcessSpawner.ChildProcessSpawner
+>
+
+/**
+ * Every file in the project, relative to `cwd` with forward slashes.
+ *
+ * Prefers `git ls-files` so ignored files stay out and untracked ones count, exactly like the user
+ * configured, and falls back to a plain directory walk outside git repositories.
+ */
+export function listProjectFiles(cwd: string): ProjectFiles {
+ return git(cwd, ['ls-files', '--cached', '--others', '--exclude-standard', '-z']).pipe(
+ Effect.map(files => files.filter(file => !file.split('/').includes('node_modules'))),
+ Effect.catch(() => walk(cwd)),
+ Effect.map(files => [...files].sort()),
+ )
+}
+
+/**
+ * The files changed since the last commit, relative to `cwd`: modified or staged tracked files plus
+ * untracked ones, ignored files excluded. `undefined` outside a git repository or before the first
+ * commit, which callers treat as "everything under `cwd`".
+ */
+export function listChangedFiles(
+ cwd: string,
+): Effect.Effect | undefined, never, ChildProcessSpawner.ChildProcessSpawner> {
+ return Effect.all([
+ git(cwd, ['diff', '--name-only', '--relative', '-z', 'HEAD']),
+ git(cwd, ['ls-files', '--others', '--exclude-standard', '-z']),
+ ]).pipe(
+ Effect.map(([tracked, untracked]) => [...new Set([...tracked, ...untracked])].sort()),
+ Effect.orElseSucceed(() => undefined),
+ )
+}
+
+export interface ResolvedPaths {
+ readonly files: ReadonlyArray
+ readonly unmatched: ReadonlyArray
+}
+
+/** Turns the given paths into the project files they name, so every tool checks the same files. */
+export const resolvePaths = Effect.fn(function* (
+ patterns: ReadonlyArray,
+ cwd: string,
+ projectFiles: ProjectFiles,
+) {
+ const fs = yield* FileSystem.FileSystem
+ const path = yield* Path.Path
+ const relative = (pattern: string) => path.relative(cwd, path.resolve(cwd, pattern)).replaceAll('\\', '/')
+
+ const matched = new Set()
+ const unmatched: string[] = []
+ let universe: ReadonlyArray | undefined
+
+ for (const pattern of patterns) {
+ if (pattern.startsWith('!')) {
+ continue
+ }
+
+ const target = relative(pattern)
+
+ if (GLOB_CHARACTERS.test(target)) {
+ universe ??= yield* projectFiles
+ const hits = universe.filter(file => posix.matchesGlob(file, target))
+
+ if (hits.length === 0) {
+ unmatched.push(pattern)
+ }
+
+ for (const hit of hits) {
+ matched.add(hit)
+ }
+
+ continue
+ }
+
+ const kind = yield* fs.stat(path.resolve(cwd, pattern)).pipe(
+ Effect.map(info => info.type),
+ Effect.orElseSucceed(() => undefined),
+ )
+
+ if (kind === 'File') {
+ matched.add(target)
+ continue
+ }
+
+ if (kind === 'Directory') {
+ universe ??= yield* projectFiles
+ const inside = target === '' ? universe : universe.filter(file => file.startsWith(`${target}/`))
+
+ if (inside.length > 0) {
+ for (const file of inside) {
+ matched.add(file)
+ }
+
+ continue
+ }
+ }
+
+ unmatched.push(pattern)
+ }
+
+ const excludes = patterns.filter(pattern => pattern.startsWith('!')).map(pattern => relative(pattern.slice(1)))
+ const excluded = (file: string) =>
+ excludes.some(exclude => file === exclude || file.startsWith(`${exclude}/`) || posix.matchesGlob(file, exclude))
+
+ const files = yield* Effect.filter(
+ [...matched].filter(file => !excluded(file)),
+ file => fs.exists(path.resolve(cwd, file)).pipe(Effect.orElseSucceed(() => false)),
+ { concurrency: 'unbounded' },
+ )
+
+ return { files: files.sort(), unmatched }
+})
+
+const GLOB_CHARACTERS = /[*?[\]{}()]/
+
+export function ancestors(path: Path.Path, from: string): string[] {
+ const dirs = [path.resolve(from)]
+
+ for (let parent = path.dirname(dirs[0]!); parent !== dirs[dirs.length - 1]; parent = path.dirname(parent)) {
+ dirs.push(parent)
+ }
+
+ return dirs
+}
+
+export const readJson = Effect.fn(
+ function* (file: string) {
+ const fs = yield* FileSystem.FileSystem
+ const text = yield* fs.readFileString(file)
+ const value: unknown = yield* Effect.try(() => JSON.parse(text))
+
+ return Predicate.isObject(value) ? value : undefined
+ },
+ Effect.orElseSucceed(() => undefined),
+)
+
+const git = Effect.fn(function* (cwd: string, args: ReadonlyArray) {
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner
+
+ const handle = yield* spawner.spawn(ChildProcess.make('git', args, { cwd, stdin: 'ignore', stderr: 'ignore' }))
+
+ const stdout = yield* Stream.mkString(Stream.decodeText(handle.stdout))
+ const exitCode = yield* handle.exitCode
+
+ if (exitCode !== 0) {
+ return yield* Effect.fail(exitCode)
+ }
+
+ return stdout.split('\0').filter(file => file !== '')
+}, Effect.scoped)
+
+/** The folders `tsc` itself never looks into. */
+const SKIPPED_DIRECTORIES = new Set(['node_modules', 'bower_components', 'jspm_packages'])
+
+const walk = Effect.fn(function* (cwd: string) {
+ const fs = yield* FileSystem.FileSystem
+ const path = yield* Path.Path
+ const root = path.resolve(cwd)
+ const found: string[] = []
+
+ const visit = Effect.fn(function* (dir: string): Effect.fn.Return {
+ const names = yield* fs.readDirectory(dir)
+
+ yield* Effect.forEach(names, name => visitEntry(dir, name), { concurrency: 16, discard: true })
+ })
+
+ const visitEntry = Effect.fn(function* (
+ dir: string,
+ name: string,
+ ): Effect.fn.Return {
+ if (name.startsWith('.') || SKIPPED_DIRECTORIES.has(name)) {
+ return
+ }
+
+ const full = path.join(dir, name)
+ const info = yield* fs.stat(full).pipe(Effect.orElseSucceed(() => undefined))
+
+ if (info?.type === 'Directory') {
+ yield* visit(full)
+ } else if (info?.type === 'File') {
+ found.push(path.relative(root, full).replaceAll('\\', '/'))
+ }
+ })
+
+ yield* visit(root)
+
+ return found
+})
diff --git a/packages/uncheck/src/index.ts b/packages/uncheck/src/index.ts
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/uncheck/src/style.ts b/packages/uncheck/src/style.ts
new file mode 100644
index 0000000..43cbbfa
--- /dev/null
+++ b/packages/uncheck/src/style.ts
@@ -0,0 +1,14 @@
+import process from 'node:process'
+import { styleText } from 'node:util'
+
+export const colors =
+ !('NO_COLOR' in process.env) &&
+ ((process.env.FORCE_COLOR !== undefined && process.env.FORCE_COLOR !== '0') || process.stdout.isTTY === true)
+
+const paint = (style: Parameters[0]) => (text: string) =>
+ colors ? styleText(style, text, { validateStream: false }) : text
+
+export const bold = paint('bold')
+export const dim = paint('dim')
+export const red = paint('red')
+export const green = paint('green')
diff --git a/packages/uncheck/src/tool.ts b/packages/uncheck/src/tool.ts
new file mode 100644
index 0000000..b83770c
--- /dev/null
+++ b/packages/uncheck/src/tool.ts
@@ -0,0 +1,79 @@
+import type { CheckCommand } from './types'
+import process from 'node:process'
+import { Console, Effect, Path, Predicate, Stream } from 'effect'
+import { ChildProcess, ChildProcessSpawner } from 'effect/unstable/process'
+import { ancestors, readJson } from './files'
+import { colors } from './style'
+
+export interface Bin {
+ readonly name: string
+ readonly entry: string
+}
+
+/**
+ * Locates the `binName` executable of `pkg` the way Node resolves packages from `cwd`: the nearest
+ * `node_modules/`. Reading its manifest directly (instead of `require.resolve`) keeps this
+ * independent from the package's `exports` map.
+ */
+export const resolveBin = Effect.fn(function* (pkg: string, cwd: string, binName: string = pkg) {
+ const path = yield* Path.Path
+
+ for (const dir of ancestors(path, cwd)) {
+ const pkgDir = path.join(dir, 'node_modules', pkg)
+ const manifest = yield* readJson(path.join(pkgDir, 'package.json'))
+
+ if (manifest === undefined) {
+ continue
+ }
+
+ const bin =
+ typeof manifest.bin === 'string'
+ ? manifest.bin
+ : Predicate.isObject(manifest.bin)
+ ? manifest.bin[binName]
+ : undefined
+
+ return typeof bin === 'string' ? { name: binName, entry: path.resolve(pkgDir, bin) } : undefined
+ }
+
+ return undefined
+})
+
+/** Command lines stay well below every platform's argument limit. */
+const MAX_ARGV_LENGTH = 65_536
+
+export function argvBatches(args: ReadonlyArray): ReadonlyArray> {
+ const batches: string[][] = [[]]
+ let length = 0
+
+ for (const arg of args) {
+ if (length + arg.length + 1 > MAX_ARGV_LENGTH) {
+ batches.push([])
+ length = 0
+ }
+
+ batches[batches.length - 1]!.push(arg)
+ length += arg.length + 1
+ }
+
+ return batches
+}
+
+/** Output goes through `Console` so it stays in order with uncheck's own lines and can be captured in hook mode. */
+export const execute = Effect.fn(function* ({ bin, args, files = [] }: CheckCommand, cwd: string) {
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner
+
+ const handle = yield* spawner.spawn(
+ ChildProcess.make(process.execPath, [bin.entry, ...args, ...files], {
+ cwd,
+ stdin: 'ignore',
+ // A piped tool cannot see the terminal, so tell it when colors are wanted.
+ env: colors ? { FORCE_COLOR: '1' } : {},
+ extendEnv: true,
+ }),
+ )
+
+ yield* Stream.runForEach(Stream.splitLines(Stream.decodeText(handle.all)), text => Console.log(text))
+
+ return yield* handle.exitCode
+}, Effect.scoped)
diff --git a/packages/uncheck/src/types.ts b/packages/uncheck/src/types.ts
new file mode 100644
index 0000000..ee7054d
--- /dev/null
+++ b/packages/uncheck/src/types.ts
@@ -0,0 +1,40 @@
+import type { PlatformError } from 'effect'
+import type { Effect, FileSystem, Path } from 'effect'
+import type { ChildProcessSpawner } from 'effect/unstable/process'
+import type { CannotCheck, NothingToCheck } from './errors'
+import type { ProjectFiles } from './files'
+import type { Bin } from './tool'
+
+export type CheckName = 'oxlint' | 'oxfmt' | 'tsc'
+
+export interface CheckOutcome {
+ readonly name: CheckName
+ readonly status: 'passed' | 'failed' | 'skipped'
+ readonly reason?: string
+}
+
+export interface CheckCommand {
+ readonly bin: Bin
+ readonly args: ReadonlyArray
+ readonly files?: ReadonlyArray
+}
+
+export interface CheckInput {
+ readonly cwd: string
+ readonly fix: boolean
+ /** Files to check, relative to `cwd`, or `undefined` for everything under it. */
+ readonly files: ReadonlyArray | undefined
+ readonly projectFiles: ProjectFiles
+}
+
+export interface Check {
+ readonly name: CheckName
+ readonly fixes: boolean
+ readonly plan: (
+ input: CheckInput,
+ ) => Effect.Effect<
+ ReadonlyArray,
+ NothingToCheck | CannotCheck | PlatformError.PlatformError,
+ FileSystem.FileSystem | Path.Path | ChildProcessSpawner.ChildProcessSpawner
+ >
+}
diff --git a/packages/uncheck/tests/command.test.ts b/packages/uncheck/tests/command.test.ts
new file mode 100644
index 0000000..8d4f4b8
--- /dev/null
+++ b/packages/uncheck/tests/command.test.ts
@@ -0,0 +1,498 @@
+import { execFileSync } from 'node:child_process'
+import { readFileSync, writeFileSync } from 'node:fs'
+import { join } from 'node:path'
+import { stripVTControlCharacters } from 'node:util'
+import { NodeServices } from '@effect/platform-node'
+import { Console, Effect, Stdio, Stream } from 'effect'
+import { Command } from 'effect/unstable/cli'
+import { fixture } from './fixture'
+import { hooks } from '../src/commands/hooks'
+import { uncheck } from '../src/commands/uncheck'
+import { CheckFailed } from '../src/errors'
+
+const cli = uncheck.pipe(Command.withSubcommands([hooks]))
+
+interface RunResult {
+ readonly result: 'ok' | 'blocked' | CheckFailed
+ /** Everything logged, one line each, without ANSI styling. */
+ readonly stdout: string
+ readonly stderr: string
+}
+
+/** Runs the CLI in `cwd`; the flag goes after the subcommand names so it lands on the command that runs. */
+async function run(cwd: string, args: ReadonlyArray = [], stdin = ''): Promise {
+ const verbs = args[0] === 'hooks' ? 2 : 0
+ const argv = [...args.slice(0, verbs), '--cwd', cwd, ...args.slice(verbs)]
+ const stdout: string[] = []
+ const stderr: string[] = []
+
+ const capture: Console.Console = Object.assign(Object.create(globalThis.console), {
+ log: (...parts: ReadonlyArray) => {
+ stdout.push(parts.join(' '))
+ },
+ error: (...parts: ReadonlyArray) => {
+ stderr.push(parts.join(' '))
+ },
+ })
+
+ const result = await Effect.runPromise(
+ Command.runWith(cli, { version: '0.0.0' })(argv).pipe(
+ Effect.map(() => 'ok' as const),
+ Effect.catchTag('CheckFailed', error => Effect.succeed(error)),
+ Effect.catchTag('StopBlocked', () => Effect.succeed('blocked' as const)),
+ Effect.provideService(Console.Console, capture),
+ Effect.provide(Stdio.layerTest({ stdin: Stream.make(new TextEncoder().encode(stdin)) })),
+ Effect.provide(NodeServices.layer),
+ ),
+ )
+
+ return { result, stdout: text(stdout), stderr: text(stderr) }
+}
+
+/** Joins captured lines the way a terminal would show them, without ANSI styling. */
+function text(lines: string[]): string {
+ return stripVTControlCharacters(lines.map(line => `${line}\n`).join(''))
+}
+
+const oxlintrc = { rules: { 'no-var': 'error' } }
+
+const standaloneTsconfig = {
+ compilerOptions: { noEmit: true, strict: true, module: 'esnext', moduleResolution: 'bundler', types: [] },
+ include: ['src', 'scripts'],
+}
+
+function compositeTsconfig(references: string[] = []) {
+ return {
+ compilerOptions: {
+ composite: true,
+ declaration: true,
+ emitDeclarationOnly: true,
+ outDir: 'dist',
+ rootDir: 'src',
+ strict: true,
+ module: 'esnext',
+ moduleResolution: 'bundler',
+ types: [],
+ },
+ references: references.map(path => ({ path })),
+ include: ['src'],
+ }
+}
+
+describe('uncheck', { timeout: 120_000 }, () => {
+ it('reports oxlint and oxfmt failures, fixes them with --fix, then passes', async () => {
+ const dir = fixture({
+ '.oxlintrc.json': oxlintrc,
+ 'tsconfig.json': standaloneTsconfig,
+ 'src/legacy.ts': 'var count = 1;\nexport { count };\n',
+ 'src/ugly.ts': 'export const ugly = {a:1,\n b:2}\n',
+ })
+
+ const check = await run(dir)
+
+ expect(check.result).toBeInstanceOf(CheckFailed)
+ expect((check.result as CheckFailed).outcomes).toEqual([
+ { name: 'oxlint', status: 'failed' },
+ { name: 'oxfmt', status: 'failed' },
+ { name: 'tsc', status: 'passed' },
+ ])
+ expect(check.stdout).toContain('no-var')
+ expect(check.stdout).toContain('✘ 2 of 3 checks failed: oxlint, oxfmt')
+ expect(check.stdout).toContain('run `uncheck --fix` to apply oxlint and oxfmt fixes')
+
+ const fix = await run(dir, ['--fix'])
+
+ expect(fix.result).toBe('ok')
+ expect(fix.stdout).toContain('▶ oxlint --fix\n')
+ expect(fix.stdout).toContain('▶ oxfmt\n')
+ expect(readFileSync(join(dir, 'src/legacy.ts'), 'utf8')).toBe('const count = 1;\nexport { count };\n')
+ expect(readFileSync(join(dir, 'src/ugly.ts'), 'utf8')).toBe('export const ugly = { a: 1, b: 2 };\n')
+
+ const clean = await run(dir)
+
+ expect(clean.result).toBe('ok')
+ expect(clean.stdout.startsWith(`uncheck in ${dir}\n▶ oxlint\n`)).toBe(true)
+ expect(clean.stdout).toContain('▶ oxlint\n')
+ expect(clean.stdout).toContain('▶ oxfmt --check\n')
+ expect(clean.stdout).toContain('▶ tsc -p tsconfig.json\n')
+ expect(clean.stdout).toContain('✔ all checks passed (oxlint, oxfmt, tsc)')
+ })
+
+ it('builds referenced projects with tsc -b before checking standalone ones with tsc -p', async () => {
+ const dir = fixture({
+ '.oxlintrc.json': oxlintrc,
+ 'tsconfig.json': standaloneTsconfig,
+ 'scripts/hello.ts': 'export const greeting = "hi";\n',
+ 'packages/lib/tsconfig.json': compositeTsconfig(),
+ 'packages/lib/src/index.ts': 'export const answer: number = 42;\n',
+ 'packages/app/tsconfig.json': compositeTsconfig(['../lib']),
+ 'packages/app/src/index.ts':
+ 'import { answer } from "../../lib/src/index";\n\nexport const double: number = answer * 2;\n',
+ })
+
+ const { result, stdout } = await run(dir)
+
+ expect(result).toBe('ok')
+ expect(stdout).toContain('▶ tsc -b packages/app/tsconfig.json\n▶ tsc -p tsconfig.json\n')
+ expect(stdout).not.toContain('packages/lib/tsconfig.json')
+
+ writeFileSync(join(dir, 'packages/lib/src/index.ts'), 'export const answer: number = "42";\n')
+
+ const broken = await run(dir)
+
+ expect(broken.result).toBeInstanceOf(CheckFailed)
+ expect((broken.result as CheckFailed).outcomes).toEqual([
+ { name: 'oxlint', status: 'passed' },
+ { name: 'oxfmt', status: 'passed' },
+ { name: 'tsc', status: 'failed' },
+ ])
+ expect(broken.stdout).toContain('packages/lib/src/index.ts')
+ expect(broken.stdout).toContain('TS2322')
+ })
+
+ it('forwards paths to oxlint and oxfmt and narrows tsc to the projects containing them', async () => {
+ const dir = fixture({
+ '.oxlintrc.json': oxlintrc,
+ 'tsconfig.json': standaloneTsconfig,
+ 'scripts/hello.ts': 'export const greeting = "hi";\n',
+ 'scripts/legacy.ts': 'var count = 1;\nexport { count };\n',
+ 'README.md': '# Hi\n',
+ 'packages/lib/tsconfig.json': compositeTsconfig(),
+ 'packages/lib/src/index.ts': 'export const answer: number = 42;\n',
+ 'packages/app/tsconfig.json': compositeTsconfig(['../lib']),
+ 'packages/app/src/index.ts':
+ 'import { answer } from "../../lib/src/index";\n\nexport const double: number = answer * 2;\n',
+ })
+
+ const scoped = await run(dir, ['packages/app'])
+
+ expect(scoped.result).toBe('ok')
+ expect(scoped.stdout).not.toContain('no-var')
+ expect(scoped.stdout).toContain(
+ '▶ oxlint --no-error-on-unmatched-pattern packages/app/src/index.ts packages/app/tsconfig.json\n',
+ )
+ expect(scoped.stdout).toContain(
+ '▶ oxfmt --check --no-error-on-unmatched-pattern packages/app/src/index.ts packages/app/tsconfig.json\n',
+ )
+ // The root project's inputs (src, scripts) do not reach into packages/app, so only app is built.
+ expect(scoped.stdout).toContain('▶ tsc -b packages/app/tsconfig.json\n✔ tsc')
+ expect(scoped.stdout).not.toContain('tsc -p tsconfig.json')
+
+ const single = await run(dir, ['--fix', 'scripts/hello.ts'])
+
+ expect(single.result).toBe('ok')
+ expect(single.stdout).toContain('▶ oxlint --fix --no-error-on-unmatched-pattern scripts/hello.ts\n')
+ expect(single.stdout).toContain('▶ oxfmt --no-error-on-unmatched-pattern scripts/hello.ts\n')
+ expect(single.stdout).toContain('▶ tsc -p tsconfig.json\n')
+ expect(single.stdout).not.toContain('tsc -b')
+
+ const all = await run(dir, ['.'])
+
+ expect(all.stdout).toMatch(/▶ oxlint --no-error-on-unmatched-pattern \[\d+ files\]\n/)
+ expect(all.stdout).toMatch(/▶ oxfmt --check --no-error-on-unmatched-pattern \[\d+ files\]\n/)
+
+ const docs = await run(dir, ['README.md'])
+
+ expect(docs.result).toBe('ok')
+ expect(docs.stdout).toContain('▶ oxlint --no-error-on-unmatched-pattern README.md\n')
+ expect(docs.stdout).toContain('○ tsc skipped, no tsconfig.json covers the given files\n')
+ expect(docs.stdout).toContain('✔ all checks passed (oxlint, oxfmt)')
+ })
+
+ it('fails on paths that match nothing unless told otherwise', async () => {
+ const dir = fixture({
+ '.oxlintrc.json': oxlintrc,
+ 'tsconfig.json': standaloneTsconfig,
+ 'src/index.ts': 'export const answer: number = 42;\n',
+ })
+
+ await expect(run(dir, ['src/index.ts', 'missing.ts', 'lib/**'])).rejects.toThrow(
+ /No files match missing.ts, lib\/\*\*/,
+ )
+
+ const lenient = await run(dir, ['--no-error-on-unmatched-pattern', 'src/index.ts', 'missing.ts'])
+
+ expect(lenient.result).toBe('ok')
+ expect(lenient.stdout).toContain('▶ oxlint --no-error-on-unmatched-pattern src/index.ts\n')
+
+ const nothing = await run(dir, ['--no-error-on-unmatched-pattern', 'missing.ts'])
+
+ expect(nothing.result).toBe('ok')
+ expect(nothing.stdout).toBe(`uncheck in ${dir}\n○ nothing to check, no files match missing.ts\n`)
+ })
+
+ it('discovers tsconfig files through git so ignored folders are skipped', async () => {
+ const files = {
+ '.gitignore': 'node_modules\ndist\nignored\n',
+ 'tsconfig.json': standaloneTsconfig,
+ 'src/index.ts': 'export const answer: number = 42;\n',
+ 'ignored/tsconfig.json': standaloneTsconfig,
+ 'ignored/src/index.ts': 'export const answer: number = "42";\n',
+ }
+
+ const plain = fixture(files, ['typescript'])
+ const walked = await run(plain)
+
+ expect(walked.result).toBeInstanceOf(CheckFailed)
+ expect(walked.stdout).toContain('▶ tsc -p ignored/tsconfig.json\n')
+
+ const repo = fixture(files, ['typescript'])
+ execFileSync('git', ['init', '--quiet'], { cwd: repo })
+ const tracked = await run(repo)
+
+ expect(tracked.result).toBe('ok')
+ expect(tracked.stdout).not.toContain('ignored/tsconfig.json')
+ expect(tracked.stdout).toContain('○ oxlint skipped, not installed\n')
+ expect(tracked.stdout).toContain('○ oxfmt skipped, not installed\n')
+ })
+
+ it('fails on circular project references', async () => {
+ const dir = fixture(
+ {
+ 'packages/a/tsconfig.json': compositeTsconfig(['../b']),
+ 'packages/a/src/index.ts': 'export const a = 1;\n',
+ 'packages/b/tsconfig.json': compositeTsconfig(['../a']),
+ 'packages/b/src/index.ts': 'export const b = 2;\n',
+ },
+ ['typescript'],
+ )
+
+ const { result, stdout } = await run(dir)
+
+ expect(result).toBeInstanceOf(CheckFailed)
+ expect(stdout).toContain(
+ '✘ tsc circular project references between packages/a/tsconfig.json, packages/b/tsconfig.json\n',
+ )
+ })
+
+ it('fails when a tsconfig.json exists but typescript is not installed', async () => {
+ const dir = fixture({ 'tsconfig.json': standaloneTsconfig, 'src/index.ts': 'export const answer = 42;\n' }, [])
+
+ const { result, stdout } = await run(dir)
+
+ expect(result).toBeInstanceOf(CheckFailed)
+ expect((result as CheckFailed).outcomes.map(outcome => outcome.status)).toEqual(['skipped', 'skipped', 'failed'])
+ expect(stdout).toContain('found 1 tsconfig.json but typescript is not installed')
+ })
+
+ it('fails when there is nothing to check', async () => {
+ const dir = fixture({ 'package.json': '{}\n' }, [])
+
+ const { result, stdout } = await run(dir)
+
+ expect(result).toBeInstanceOf(CheckFailed)
+ expect((result as CheckFailed).outcomes.map(outcome => outcome.status)).toEqual(['skipped', 'skipped', 'skipped'])
+ expect(stdout).toContain('nothing to check: oxlint not installed, oxfmt not installed, tsc no tsconfig.json found')
+ })
+})
+
+describe('uncheck check flags', { timeout: 120_000 }, () => {
+ it('skips a check with --skip and requires it with --require', async () => {
+ const dir = fixture(
+ {
+ '.oxlintrc.json': oxlintrc,
+ 'tsconfig.json': standaloneTsconfig,
+ 'src/index.ts': 'export const answer: string = 1;\n',
+ },
+ ['oxlint', 'typescript'],
+ )
+
+ const skipped = await run(dir, ['--skip=tsc'])
+
+ expect(skipped.result).toBe('ok')
+ expect(skipped.stdout).toContain('○ oxfmt skipped, not installed\n')
+ expect(skipped.stdout).toContain('○ tsc skipped, disabled with --skip=tsc\n')
+ expect(skipped.stdout).toContain('✔ all checks passed (oxlint)')
+
+ const required = await run(dir, ['--require=oxfmt', '--skip=tsc'])
+
+ expect(required.result).toBeInstanceOf(CheckFailed)
+ expect(required.stdout).toContain('✘ oxfmt not installed\n')
+ expect(required.stdout).toContain('✘ 1 of 2 checks failed: oxfmt')
+
+ await expect(run(dir, ['--require=tsc', '--skip=tsc'])).rejects.toThrow(/--require=tsc and --skip=tsc/)
+
+ const none = await run(dir, ['--skip=oxlint', '--skip=oxfmt', '--skip=tsc'])
+
+ expect(none.result).toBeInstanceOf(CheckFailed)
+ expect(none.stdout).toContain(
+ 'nothing to check: oxlint disabled with --skip=oxlint, oxfmt disabled with --skip=oxfmt, tsc disabled with --skip=tsc',
+ )
+ })
+})
+
+describe('uncheck hooks install', { timeout: 120_000 }, () => {
+ it('writes stop hook configs for the named agents through the detected package manager', async () => {
+ const dir = fixture({ 'package.json': '{}\n', 'pnpm-lock.yaml': '' }, [])
+
+ const { result, stdout } = await run(dir, ['hooks', 'install', 'claude', 'cursor', 'windsurf', 'copilot'])
+
+ expect(result).toBe('ok')
+ expect(stdout).toContain('✔ Claude Code .claude/settings.json created\n')
+ expect(stdout).toContain('✔ Cursor .cursor/hooks.json created\n')
+ expect(stdout).toContain('pnpm exec uncheck hooks run --fix')
+
+ const hook = 'pnpm exec uncheck hooks run --fix'
+
+ expect(JSON.parse(readFileSync(join(dir, '.claude/settings.json'), 'utf8'))).toEqual({
+ hooks: { Stop: [{ hooks: [{ type: 'command', command: hook }] }] },
+ })
+ expect(JSON.parse(readFileSync(join(dir, '.cursor/hooks.json'), 'utf8'))).toEqual({
+ version: 1,
+ hooks: { stop: [{ command: hook }] },
+ })
+ expect(JSON.parse(readFileSync(join(dir, '.windsurf/hooks.json'), 'utf8'))).toEqual({
+ hooks: { post_cascade_response: [{ command: hook, show_output: true }] },
+ })
+ expect(JSON.parse(readFileSync(join(dir, '.github/hooks/uncheck.json'), 'utf8'))).toEqual({
+ version: 1,
+ hooks: { agentStop: [{ type: 'command', bash: hook, powershell: hook }] },
+ })
+
+ const again = await run(dir, ['hooks', 'install', 'claude'])
+
+ expect(again.result).toBe('ok')
+ expect(again.stdout).toContain('✔ Claude Code .claude/settings.json unchanged\n')
+ })
+
+ it('merges into existing settings and keeps other hooks', async () => {
+ const dir = fixture(
+ {
+ 'package.json': '{}\n',
+ '.claude/settings.json': `{
+ // keep me
+ "permissions": { "allow": ["Bash(pnpm test)"] },
+ "hooks": { "PostToolUse": [{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "echo done" }] }] },
+}
+`,
+ },
+ [],
+ )
+
+ const { result, stdout } = await run(dir, ['hooks', 'install', 'codebuddy', 'claude'])
+
+ expect(result).toBe('ok')
+ expect(stdout).toContain('✔ Claude Code .claude/settings.json updated\n')
+ expect(stdout).toContain('✔ CodeBuddy .codebuddy/settings.json created\n')
+ expect(stdout).toContain('npx uncheck hooks run --fix')
+
+ expect(JSON.parse(readFileSync(join(dir, '.claude/settings.json'), 'utf8'))).toEqual({
+ permissions: { allow: ['Bash(pnpm test)'] },
+ hooks: {
+ PostToolUse: [{ matcher: 'Bash', hooks: [{ type: 'command', command: 'echo done' }] }],
+ Stop: [{ hooks: [{ type: 'command', command: 'npx uncheck hooks run --fix' }] }],
+ },
+ })
+ })
+
+ it('rejects unknown agents', async () => {
+ const dir = fixture({ 'package.json': '{}\n' }, [])
+
+ await expect(run(dir, ['hooks', 'install', 'emacs'])).rejects.toThrow()
+ })
+})
+
+/** A git repository with one clean commit, so later edits show up as working-tree changes. */
+function committed(files: Record) {
+ const dir = fixture(files)
+ const git = (...args: string[]) =>
+ execFileSync('git', ['-c', 'user.name=uncheck', '-c', 'user.email=uncheck@example.com', ...args], { cwd: dir })
+
+ git('init', '--quiet')
+ git('add', '.')
+ git('commit', '--quiet', '-m', 'init')
+
+ return dir
+}
+
+describe('uncheck hooks run', { timeout: 120_000 }, () => {
+ const clean = {
+ '.oxlintrc.json': oxlintrc,
+ 'tsconfig.json': standaloneTsconfig,
+ 'src/index.ts': 'export const answer: number = 42;\n',
+ 'src/other.ts': 'export const other = 2;\n',
+ }
+
+ it('checks the files changed since the last commit and sends the agent back once', async () => {
+ const dir = committed(clean)
+ writeFileSync(join(dir, 'src/index.ts'), 'export const answer: string = 1\n')
+ writeFileSync(join(dir, 'src/fresh.ts'), 'export const fresh = 3;\n')
+
+ const claude = await run(
+ dir,
+ ['hooks', 'run', '--fix'],
+ JSON.stringify({ hook_event_name: 'Stop', stop_hook_active: false }),
+ )
+
+ expect(claude.result).toBe('blocked')
+ expect(claude.stdout).toBe('')
+ expect(claude.stderr).toContain('▶ oxlint --fix --no-error-on-unmatched-pattern src/fresh.ts src/index.ts\n')
+ expect(claude.stderr).toContain('▶ tsc -p tsconfig.json\n')
+ expect(claude.stderr).toContain('TS2322')
+ expect(claude.stderr).toContain('✘ 1 of 3 checks failed: tsc')
+ expect(readFileSync(join(dir, 'src/index.ts'), 'utf8')).toBe('export const answer: string = 1;\n')
+
+ const continuing = await run(
+ dir,
+ ['hooks', 'run', '--fix'],
+ JSON.stringify({ hook_event_name: 'Stop', stop_hook_active: true }),
+ )
+
+ expect(continuing.result).toBe('ok')
+ expect(continuing.stdout).toBe('')
+ expect(continuing.stderr).toContain('TS2322')
+
+ const cursor = await run(dir, ['hooks', 'run', '--fix'], JSON.stringify({ hook_event_name: 'stop', loop_count: 0 }))
+
+ expect(cursor.result).toBe('ok')
+ expect((JSON.parse(cursor.stdout) as { followup_message: string }).followup_message).toContain('TS2322')
+
+ const copilot = await run(
+ dir,
+ ['hooks', 'run', '--fix'],
+ JSON.stringify({ stopReason: 'end_turn', stop_hook_active: false }),
+ )
+
+ expect(copilot.result).toBe('ok')
+ expect(JSON.parse(copilot.stdout)).toMatchObject({ decision: 'block' })
+
+ const windsurf = await run(
+ dir,
+ ['hooks', 'run', '--fix'],
+ JSON.stringify({ agent_action_name: 'post_cascade_response' }),
+ )
+
+ expect(windsurf.result).toBe('ok')
+ expect(windsurf.stdout).toBe('')
+ expect(windsurf.stderr).toContain('TS2322')
+ })
+
+ it('stays silent when nothing changed and passes quietly when the changes are clean', async () => {
+ const dir = committed(clean)
+
+ const nothing = await run(dir, ['hooks', 'run', '--fix'], JSON.stringify({ hook_event_name: 'Stop' }))
+
+ expect(nothing.result).toBe('ok')
+ expect(nothing.stdout).toBe('')
+ expect(nothing.stderr).toBe('')
+
+ writeFileSync(join(dir, 'src/other.ts'), 'export const other = 3;\n')
+
+ const ok = await run(dir, ['hooks', 'run', '--fix'], JSON.stringify({ hook_event_name: 'Stop' }))
+
+ expect(ok.result).toBe('ok')
+ expect(ok.stdout).toBe('')
+ expect(ok.stderr).toContain('▶ oxlint --fix --no-error-on-unmatched-pattern src/other.ts\n')
+ expect(ok.stderr).toContain('✔ all checks passed (oxlint, oxfmt, tsc)')
+ })
+
+ it('checks everything under the directory outside a git repository', async () => {
+ const dir = fixture(clean)
+
+ const { result, stderr } = await run(dir, ['hooks', 'run'], '{}')
+
+ expect(result).toBe('ok')
+ expect(stderr).toContain('▶ oxlint\n')
+ expect(stderr).toContain('✔ all checks passed (oxlint, oxfmt, tsc)')
+ })
+})
diff --git a/packages/uncheck/tests/files.test.ts b/packages/uncheck/tests/files.test.ts
new file mode 100644
index 0000000..c446e03
--- /dev/null
+++ b/packages/uncheck/tests/files.test.ts
@@ -0,0 +1,65 @@
+import { execFileSync } from 'node:child_process'
+import { NodeServices } from '@effect/platform-node'
+import { Effect } from 'effect'
+import { fixture } from './fixture'
+import { listProjectFiles, resolvePaths } from '../src/files'
+
+const project = {
+ '.gitignore': 'node_modules\ndist\n',
+ 'src/a.ts': '',
+ 'src/b.ts': '',
+ 'src/sub/c.ts': '',
+ 'docs/readme.md': '',
+ 'dist/out.js': '',
+}
+
+function resolve(dir: string, paths: string[]) {
+ return Effect.runPromise(
+ Effect.provide(
+ Effect.flatMap(Effect.cached(listProjectFiles(dir)), projectFiles => resolvePaths(paths, dir, projectFiles)),
+ NodeServices.layer,
+ ),
+ )
+}
+
+describe('resolvePaths', () => {
+ it('turns files, directories, globs and negations into one file list', async () => {
+ const dir = fixture(project, [])
+ execFileSync('git', ['init', '--quiet'], { cwd: dir })
+
+ expect(await resolve(dir, ['src/a.ts'])).toEqual({ files: ['src/a.ts'], unmatched: [] })
+ expect(await resolve(dir, ['src'])).toEqual({ files: ['src/a.ts', 'src/b.ts', 'src/sub/c.ts'], unmatched: [] })
+ expect(await resolve(dir, ['./src/', 'src/a.ts'])).toEqual({
+ files: ['src/a.ts', 'src/b.ts', 'src/sub/c.ts'],
+ unmatched: [],
+ })
+ expect(await resolve(dir, ['src/**/*.ts', '!src/sub'])).toEqual({ files: ['src/a.ts', 'src/b.ts'], unmatched: [] })
+ expect(await resolve(dir, ['**/*.md'])).toEqual({ files: ['docs/readme.md'], unmatched: [] })
+ expect(await resolve(dir, ['.'])).toEqual({
+ files: ['.gitignore', '.prettierignore', 'docs/readme.md', 'src/a.ts', 'src/b.ts', 'src/sub/c.ts'],
+ unmatched: [],
+ })
+ })
+
+ it('reports patterns that match nothing and keeps ignored files out unless named', async () => {
+ const dir = fixture(project, [])
+ execFileSync('git', ['init', '--quiet'], { cwd: dir })
+
+ expect(await resolve(dir, ['nope.ts', 'src/**/*.tsx', 'dist'])).toEqual({
+ files: [],
+ unmatched: ['nope.ts', 'src/**/*.tsx', 'dist'],
+ })
+ expect(await resolve(dir, ['src/a.ts', 'missing/'])).toEqual({ files: ['src/a.ts'], unmatched: ['missing/'] })
+ // An explicitly named file counts even when git ignores it.
+ expect(await resolve(dir, ['dist/out.js'])).toEqual({ files: ['dist/out.js'], unmatched: [] })
+ })
+
+ it('walks the tree outside a git repository', async () => {
+ const dir = fixture(project, [])
+
+ expect(await resolve(dir, ['src', 'dist/**'])).toEqual({
+ files: ['dist/out.js', 'src/a.ts', 'src/b.ts', 'src/sub/c.ts'],
+ unmatched: [],
+ })
+ })
+})
diff --git a/packages/uncheck/tests/fixture.ts b/packages/uncheck/tests/fixture.ts
new file mode 100644
index 0000000..bd337de
--- /dev/null
+++ b/packages/uncheck/tests/fixture.ts
@@ -0,0 +1,48 @@
+import { mkdirSync, mkdtempSync, realpathSync, rmSync, symlinkSync, writeFileSync } from 'node:fs'
+import { tmpdir } from 'node:os'
+import { dirname, join } from 'node:path'
+import { fileURLToPath } from 'node:url'
+
+export const TOOLS = ['oxlint', 'oxfmt', 'typescript'] as const
+
+const packageNodeModules = fileURLToPath(new URL('../node_modules', import.meta.url))
+const fixtures: string[] = []
+
+afterAll(() => {
+ for (const dir of fixtures) {
+ rmSync(dir, { recursive: true, force: true })
+ }
+})
+
+/**
+ * Creates a throwaway project in the OS temp dir. Objects are written as JSON, the requested tools
+ * are symlinked into `node_modules` so they resolve like a regular install, and config files are
+ * kept out of the format check so tests only see the formatting issues they put in.
+ */
+export function fixture(
+ files: Record,
+ tools: ReadonlyArray<(typeof TOOLS)[number]> = TOOLS,
+): string {
+ const dir = mkdtempSync(join(tmpdir(), 'uncheck-'))
+ fixtures.push(dir)
+
+ if (tools.length > 0) {
+ mkdirSync(join(dir, 'node_modules'))
+
+ for (const tool of tools) {
+ symlinkSync(realpathSync(join(packageNodeModules, tool)), join(dir, 'node_modules', tool))
+ }
+ }
+
+ const defaults = {
+ '.gitignore': 'node_modules\ndist\n',
+ '.prettierignore': 'tsconfig.json\n.oxlintrc.json\n',
+ }
+
+ for (const [relative, content] of Object.entries({ ...defaults, ...files })) {
+ mkdirSync(dirname(join(dir, relative)), { recursive: true })
+ writeFileSync(join(dir, relative), typeof content === 'string' ? content : JSON.stringify(content))
+ }
+
+ return dir
+}
diff --git a/packages/uncheck/tests/tsc.test.ts b/packages/uncheck/tests/tsc.test.ts
new file mode 100644
index 0000000..0692719
--- /dev/null
+++ b/packages/uncheck/tests/tsc.test.ts
@@ -0,0 +1,179 @@
+import { NodeServices } from '@effect/platform-node'
+import { Effect } from 'effect'
+import { tsc } from '../src/checks/tsc'
+import { listProjectFiles } from '../src/files'
+import { fixture } from './fixture'
+
+/** Plans the tsc check in `dir`: the tsc command lines it would run, or the reason it does not run. */
+function plan(dir: string, files?: string[]): Promise {
+ return Effect.runPromise(
+ Effect.provide(
+ tsc.plan({ cwd: dir, fix: false, files, projectFiles: listProjectFiles(dir) }).pipe(
+ Effect.map(commands => commands.map(command => command.args.join(' '))),
+ Effect.catchTag('NothingToCheck', error => Effect.succeed(error.reason)),
+ Effect.catchTag('CannotCheck', error => Effect.succeed(error.reason)),
+ ),
+ NodeServices.layer,
+ ),
+ )
+}
+
+const NOT_COVERED = 'no tsconfig.json covers the given files'
+
+describe('tsc project references', () => {
+ it('checks standalone projects with tsc -p', async () => {
+ const dir = fixture({ 'tsconfig.json': {}, 'packages/a/tsconfig.json': {} })
+
+ expect(await plan(dir)).toEqual(['-p packages/a/tsconfig.json', '-p tsconfig.json'])
+ })
+
+ it('builds only the roots of the reference graph and leaves the rest to tsc -b', async () => {
+ const dir = fixture({
+ 'tsconfig.json': {},
+ 'packages/shared/tsconfig.json': {},
+ 'packages/client/tsconfig.json': { references: [{ path: '../shared' }] },
+ 'packages/server/tsconfig.json': { references: [{ path: '../client' }, { path: '../shared' }] },
+ 'packages/nest/tsconfig.json': { references: [{ path: '../server/tsconfig.json' }] },
+ })
+
+ expect(await plan(dir)).toEqual(['-b packages/nest/tsconfig.json', '-p tsconfig.json'])
+ })
+
+ it('builds a solution-style root that references configs not named tsconfig.json', async () => {
+ const dir = fixture({
+ 'tsconfig.json': { references: [{ path: './tsconfig.app.json' }, { path: './tsconfig.node.json' }] },
+ 'tsconfig.app.json': {},
+ 'tsconfig.node.json': {},
+ })
+
+ expect(await plan(dir)).toEqual(['-b tsconfig.json'])
+ })
+
+ it('keeps a root with references in build mode even when it is not composite', async () => {
+ const dir = fixture({
+ 'tsconfig.json': { references: [{ path: './packages/a' }, { path: './packages/b' }] },
+ 'packages/a/tsconfig.json': {},
+ 'packages/b/tsconfig.json': { references: [{ path: '../a' }] },
+ })
+
+ expect(await plan(dir)).toEqual(['-b tsconfig.json'])
+ })
+
+ it('handles diamonds and multiple roots', async () => {
+ const dir = fixture({
+ 'a/tsconfig.json': {},
+ 'b/tsconfig.json': { references: [{ path: '../a' }] },
+ 'c/tsconfig.json': { references: [{ path: '../a' }] },
+ 'd/tsconfig.json': { references: [{ path: '../b' }, { path: '../c' }] },
+ 'e/tsconfig.json': { references: [{ path: '../a' }] },
+ })
+
+ expect(await plan(dir)).toEqual(['-b d/tsconfig.json e/tsconfig.json'])
+ })
+
+ it('fails on circular references instead of silently skipping them', async () => {
+ const dir = fixture({
+ 'a/tsconfig.json': { references: [{ path: '../b' }] },
+ 'b/tsconfig.json': { references: [{ path: '../a' }] },
+ 'c/tsconfig.json': {},
+ })
+
+ expect(await plan(dir)).toBe('circular project references between a/tsconfig.json, b/tsconfig.json')
+ })
+
+ it('reports only the cyclic part when a root also exists', async () => {
+ const dir = fixture({
+ 'a/tsconfig.json': { references: [{ path: '../b' }] },
+ 'b/tsconfig.json': { references: [{ path: '../c' }] },
+ 'c/tsconfig.json': { references: [{ path: '../b' }] },
+ })
+
+ expect(await plan(dir)).toBe('circular project references between b/tsconfig.json, c/tsconfig.json')
+ })
+})
+
+describe('tsc project selection', () => {
+ it('matches files like tsc: include folders, wildcards, extensions and default excludes', async () => {
+ const dir = fixture({
+ 'tsconfig.json': { include: ['src', 'scripts/*.ts', 'config/*.json', '*/*/*'], exclude: ['src/legacy'] },
+ })
+ const covers = (file: string) => plan(dir, [file]).then(Array.isArray)
+
+ expect(await covers('src/index.ts')).toBe(true)
+ expect(await covers('src/deep/nested/component.tsx')).toBe(true)
+ expect(await covers('src/types.d.ts')).toBe(true)
+ expect(await covers('src/index.js')).toBe(false)
+ expect(await covers('src/README.md')).toBe(false)
+ expect(await covers('src/.hidden/index.ts')).toBe(false)
+ expect(await covers('src/node_modules/dep/index.ts')).toBe(false)
+ expect(await covers('src/legacy/old.ts')).toBe(false)
+ expect(await covers('scripts/build.ts')).toBe(true)
+ expect(await covers('scripts/nested/deep/build.ts')).toBe(false)
+ expect(await covers('config/app.json')).toBe(true)
+ expect(await covers('src/data.json')).toBe(false)
+ expect(await covers('packages/app/build.config.ts')).toBe(true)
+ expect(await covers('packages/app/src/index.ts')).toBe(false)
+ expect(await covers('node_modules/dep/index.ts')).toBe(false)
+ })
+
+ it('falls back to everything, minus node_modules and outDir, when nothing is configured', async () => {
+ const dir = fixture({ 'tsconfig.json': { compilerOptions: { outDir: 'dist' } } })
+ const covers = (file: string) => plan(dir, [file]).then(Array.isArray)
+
+ expect(await covers('index.ts')).toBe(true)
+ expect(await covers('deep/index.ts')).toBe(true)
+ expect(await covers('dist/index.d.ts')).toBe(false)
+ expect(await covers('node_modules/dep/index.d.ts')).toBe(false)
+ expect(await covers('.git/hooks/pre-commit.ts')).toBe(false)
+ })
+
+ it('inherits files, include, exclude and allowJs through extends, relative to the defining config', async () => {
+ const dir = fixture({
+ 'node_modules/@shared/tsconfig/package.json': { tsconfig: './base.json' },
+ 'node_modules/@shared/tsconfig/base.json': {
+ compilerOptions: { allowJs: true },
+ include: ['${configDir}/lib'],
+ exclude: ['${configDir}/lib/vendor'],
+ },
+ 'tsconfig.lib.json': { extends: '@shared/tsconfig', include: ['src'] },
+ 'packages/a/tsconfig.json': { extends: ['../../tsconfig.lib', './tsconfig.files.json'] },
+ 'packages/a/tsconfig.files.json': { files: ['entry.ts'], compilerOptions: { allowJs: false } },
+ 'packages/b/tsconfig.json': { extends: '@shared/tsconfig' },
+ })
+ const a = ['-p packages/a/tsconfig.json']
+ const b = ['-p packages/b/tsconfig.json']
+
+ // `files` comes from the last extends entry, `include` from tsconfig.lib.json and resolves next to it.
+ expect(await plan(dir, ['packages/a/entry.ts'])).toEqual(a)
+ expect(await plan(dir, ['src/index.ts'])).toEqual(a)
+ expect(await plan(dir, ['packages/a/src/index.ts'])).toBe(NOT_COVERED)
+ expect(await plan(dir, ['src/index.js'])).toBe(NOT_COVERED)
+
+ // The base's `${configDir}` include and exclude point at the leaf config's folder.
+ expect(await plan(dir, ['packages/b/lib/util.ts'])).toEqual(b)
+ expect(await plan(dir, ['packages/b/lib/util.js'])).toEqual(b)
+ expect(await plan(dir, ['packages/b/lib/vendor/x.ts'])).toBe(NOT_COVERED)
+ expect(await plan(dir, ['packages/b/src/index.ts'])).toBe(NOT_COVERED)
+ })
+
+ it('selects only the projects whose inputs contain a given file', async () => {
+ const lib = { extends: '../../tsconfig.base.json', include: ['src'], exclude: ['**/*.test.*'] }
+ const dir = fixture({
+ 'tsconfig.base.json': { compilerOptions: { strict: true } },
+ 'tsconfig.json': { include: ['scripts', '*', '*/*/src/**/*.test.*', '*/*/*'] },
+ 'packages/a/tsconfig.json': lib,
+ 'packages/b/tsconfig.json': lib,
+ })
+
+ expect(await plan(dir, ['packages/a/src/index.ts'])).toEqual(['-p packages/a/tsconfig.json'])
+ // Tests are excluded by the package and picked up by the root instead.
+ expect(await plan(dir, ['packages/a/src/index.test.ts'])).toEqual(['-p tsconfig.json'])
+ expect(await plan(dir, ['packages/a/build.config.ts'])).toEqual(['-p tsconfig.json'])
+ expect(await plan(dir, ['scripts/release.ts'])).toEqual(['-p tsconfig.json'])
+ expect(await plan(dir, ['packages/a/src/index.ts', 'packages/b/src/index.ts'])).toEqual([
+ '-p packages/a/tsconfig.json',
+ '-p packages/b/tsconfig.json',
+ ])
+ expect(await plan(dir, ['README.md', 'packages/a/styles.css'])).toBe(NOT_COVERED)
+ })
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 88a9bc2..d267ff7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -166,15 +166,15 @@ importers:
.:
devDependencies:
- '@antfu/eslint-config':
- specifier: ^9.5.1
- version: 9.5.1(@typescript-eslint/typescript-estree@8.70.0(typescript@6.0.3))(@typescript-eslint/utils@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.43)(eslint-plugin-format@2.0.1(eslint@10.11.0(jiti@2.7.0)))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)(vitest@5.0.1)
'@codspeed/vitest-plugin':
specifier: ^5.7.1
version: 5.7.1(debug@4.4.3)(tinybench@6.1.4)(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(yaml@2.9.1))(vitest@5.0.1)
'@types/node':
specifier: ^26.6.2
version: 26.6.2
+ '@typescript/typescript6':
+ specifier: ^6.0.2
+ version: 6.0.2
'@vitest/coverage-v8':
specifier: ^5.0.1
version: 5.0.1(vitest@5.0.1)
@@ -184,15 +184,15 @@ importers:
changelogithub:
specifier: ^15.0.5
version: 15.0.5
- eslint:
- specifier: ^10.11.0
- version: 10.11.0(jiti@2.7.0)
- eslint-plugin-format:
- specifier: ^2.0.1
- version: 2.0.1(eslint@10.11.0(jiti@2.7.0))
lint-staged:
specifier: ^17.5.1
version: 17.5.1
+ oxfmt:
+ specifier: ^0.68.0
+ version: 0.68.0
+ oxlint:
+ specifier: ^1.83.0
+ version: 1.83.0
pkg-pr-new:
specifier: ^0.0.88
version: 0.0.88
@@ -203,92 +203,41 @@ importers:
specifier: ^2.14.0
version: 2.14.0
typescript:
- specifier: ^6.0.3
- version: 6.0.3
+ specifier: ^7.0.2
+ version: 7.0.2
unbuild:
specifier: ^3.6.1
- version: 3.6.1(typescript@6.0.3)
+ version: 3.6.1(@typescript/typescript6@6.0.2)(typescript@7.0.2)
+ uncheck:
+ specifier: workspace:*
+ version: link:packages/uncheck
vitest:
specifier: ^5.0.1
version: 5.0.1(@types/node@26.6.2)(@vitest/coverage-v8@5.0.1)(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(yaml@2.9.1))
- packages/uncheck: {}
+ packages/uncheck:
+ devDependencies:
+ '@effect/platform-node':
+ specifier: ^4.0.0-rc.116
+ version: 4.0.0-rc.116(effect@4.0.0-rc.116)(redis@6.2.1)
+ effect:
+ specifier: ^4.0.0-rc.116
+ version: 4.0.0-rc.116
+ jsonc-parser:
+ specifier: ^3.3.1
+ version: 3.3.1
+ oxfmt:
+ specifier: ^0.68.0
+ version: 0.68.0
+ oxlint:
+ specifier: ^1.83.0
+ version: 1.83.0
+ typescript:
+ specifier: ^7.0.2
+ version: 7.0.2
packages:
- '@antfu/eslint-config@9.5.1':
- resolution: {integrity: sha512-BoQGe5lY9spYmGqtUOC6hWohxob4SNn+7o5nHsOXoLn+9vJqNGqC/2/vRoXbcOa3dT4Rx/ZV/Qkr6uf72KTbxQ==}
- hasBin: true
- peerDependencies:
- '@angular-eslint/eslint-plugin': ^21.1.0
- '@angular-eslint/eslint-plugin-template': ^21.1.0
- '@angular-eslint/template-parser': ^21.1.0
- '@eslint-react/eslint-plugin': ^5.6.0
- '@next/eslint-plugin-next': '>=15.0.0'
- '@prettier/plugin-xml': ^3.4.1
- '@unocss/eslint-plugin': '>=0.50.0'
- astro-eslint-parser: '>=1.0.2'
- eslint: ^9.10.0 || ^10.0.0
- eslint-plugin-astro: '>=1.2.0'
- eslint-plugin-erasable-syntax-only: ^0.7.1
- eslint-plugin-format: '>=0.1.0'
- eslint-plugin-jsx-a11y: '>=6.10.2'
- eslint-plugin-react-refresh: ^0.5.0
- eslint-plugin-slop: '>=0.1.1'
- eslint-plugin-solid: ^0.17.0
- eslint-plugin-sonarjs: '>=4.0.0'
- eslint-plugin-svelte: '>=2.35.1'
- eslint-plugin-vuejs-accessibility: ^2.4.1
- prettier-plugin-astro: ^0.14.0
- prettier-plugin-slidev: ^1.0.5
- svelte-eslint-parser: '>=0.37.0'
- peerDependenciesMeta:
- '@angular-eslint/eslint-plugin':
- optional: true
- '@angular-eslint/eslint-plugin-template':
- optional: true
- '@angular-eslint/template-parser':
- optional: true
- '@eslint-react/eslint-plugin':
- optional: true
- '@next/eslint-plugin-next':
- optional: true
- '@prettier/plugin-xml':
- optional: true
- '@unocss/eslint-plugin':
- optional: true
- astro-eslint-parser:
- optional: true
- eslint-plugin-astro:
- optional: true
- eslint-plugin-erasable-syntax-only:
- optional: true
- eslint-plugin-format:
- optional: true
- eslint-plugin-jsx-a11y:
- optional: true
- eslint-plugin-react-refresh:
- optional: true
- eslint-plugin-slop:
- optional: true
- eslint-plugin-solid:
- optional: true
- eslint-plugin-sonarjs:
- optional: true
- eslint-plugin-svelte:
- optional: true
- eslint-plugin-vuejs-accessibility:
- optional: true
- prettier-plugin-astro:
- optional: true
- prettier-plugin-slidev:
- optional: true
- svelte-eslint-parser:
- optional: true
-
- '@antfu/install-pkg@2.1.0':
- resolution: {integrity: sha512-sdg9NxU3zR4Mnawfbc/x6GB5Wf17WYud5qOuEuxXjaKpYpMkISSJEjItGebXJ2bQ4DIcly4NYH23mtkGJjvKUw==}
-
'@babel/code-frame@8.0.6':
resolution: {integrity: sha512-uMHhvmDmwFiLuiozaoRYTZHqMFuu3fem/X9JY78lohAuLoh8LSGGC8JqUzo2cVuBsBxkjMZNk56CE7ock8Xxkw==}
engines: {node: ^22.18.0 || >=24.11.0}
@@ -318,20 +267,6 @@ packages:
resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
engines: {node: '>=18'}
- '@cacheable/memory@2.2.0':
- resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==}
-
- '@cacheable/utils@2.5.0':
- resolution: {integrity: sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==}
-
- '@clack/core@1.5.1':
- resolution: {integrity: sha512-iHTrHA8MtVuLl2TfZySmcKv1qO2PoyC9Z7pfSDozEuV5vtY3/wcOPKJXlqJ5Oq2Cx5DDGQGAMVx6HZfRRoVEbQ==}
- engines: {node: '>= 20.12.0'}
-
- '@clack/prompts@1.8.1':
- resolution: {integrity: sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ==}
- engines: {node: '>= 20.12.0'}
-
'@codspeed/core@5.7.1':
resolution: {integrity: sha512-7mrFkqaY14rXu3XHv3o7bK3btLK0LFRxfeK3bQC8dLduI/Ty9eq8Hv8rx04FAY/onQbRTx3rUUQg5xprYHpATQ==}
@@ -345,37 +280,18 @@ packages:
'@colordx/core@5.8.0':
resolution: {integrity: sha512-cG0QJAO6VkaRUlIb0zOzX9gfJgs1pjoOL9gZ/PK1kfvBs0GCkADu5oQh6gPxXgQnZ3gV575h+lQRC0NlMDTclA==}
- '@dprint/formatter@0.5.1':
- resolution: {integrity: sha512-cdZUrm0iv/FnnY3CKE2dEcVhNEzrC551aE2h2mTFwQCRBrqyARLDnb7D+3PlXTUVp3s34ftlnGOVCmhLT9DeKA==}
-
- '@dprint/markdown@0.21.1':
- resolution: {integrity: sha512-XbZ/R7vRrBaZFYXG6vAvLvtaMVXHu8XB+xwie7OYrG+dPoGDP8UADGirIbzUyX8TmrAZcl6QBmalipTGlpzRmQ==}
-
- '@dprint/toml@0.7.0':
- resolution: {integrity: sha512-eFaQTcfxKHB+YyTh83x7GEv+gDPuj9q5NFOTaoj5rZmQTbj6OgjjMxUicmS1R8zYcx8YAq5oA9J3YFa5U6x2gA==}
-
- '@e18e/eslint-plugin@0.8.1':
- resolution: {integrity: sha512-OV3T7l0r52/IglskdAuoO+BJyzsCs7AcIHpwpBMlIMO0+3RHskM2h5MuHdLuesIhSRhwCURGMKtp/XwnfXrfxg==}
+ '@effect/platform-node-shared@4.0.0-rc.116':
+ resolution: {integrity: sha512-4FB6UriGqArWFUaFqVchhfCRmmtOVzmD/k/bH6LErlKY8a9amt5dk6c3Arsi7AvUpChsdO+3jsG+P85HsxMkNA==}
+ engines: {node: '>=18.0.0'}
peerDependencies:
- eslint: ^9.0.0 || ^10.0.0
- oxlint: ^1.72.0
- peerDependenciesMeta:
- eslint:
- optional: true
- oxlint:
- optional: true
-
- '@es-joy/jsdoccomment@0.92.0':
- resolution: {integrity: sha512-WivZqV5jPTYDQJgIMp0hTsyQESKYNY6yCJr4b0l84tYtQntkAMkc6zARh2vlRQyeg4aYHPUkCUDpvr2IWAiGpQ==}
- engines: {node: ^22.22.2 || >=24.15.0}
-
- '@es-joy/jsdoccomment@0.98.0':
- resolution: {integrity: sha512-QS+b7I2aaSM+gZfDz1b9E4B367JJ2qTjFXRKF289iKkh9sYdZ21Q5MiF/Duzouy3J0C4VhM3I/8f2F4+zT8gYQ==}
- engines: {node: ^22.22.2 || >=24.15.0}
+ effect: ^4.0.0-rc.116
- '@es-joy/resolve.exports@1.2.0':
- resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
- engines: {node: '>=10'}
+ '@effect/platform-node@4.0.0-rc.116':
+ resolution: {integrity: sha512-uA66Nh998OcChBVX83tQDkBDvQQcVaMXodP9gNGWVeIwWWquy7bzIkAq/fMZGKs/BVFhFQ0XCp3VIqYjnXu5ng==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ effect: ^4.0.0-rc.116
+ redis: '>=5.0.0 <7.0.0'
'@esbuild/aix-ppc64@0.25.12':
resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
@@ -689,248 +605,312 @@ packages:
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-plugin-eslint-comments@4.8.1':
- resolution: {integrity: sha512-vafrdi15JHBFh1qWOAucyJwlEEuhdoMof28jOdKdgnwZ7bXwd6v4wzHYSmAVLwnx0yc7bqAtfJ0EZQV1WAzV/Q==}
- 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
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
- '@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
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
- '@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}
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.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
+ '@jridgewell/sourcemap-codec@1.6.0':
+ resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==}
- '@eslint/config-array@0.23.5':
- resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
- '@eslint/config-helpers@0.5.5':
- resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@napi-rs/lzma-linux-x64-gnu@1.5.1':
+ resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==}
+ engines: {node: ^22.20 || ^24.12 || >=25}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@eslint/config-helpers@0.7.0':
- resolution: {integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@oxfmt/binding-android-arm-eabi@0.68.0':
+ resolution: {integrity: sha512-dhfYPbzv/h9JgHjNkl2R6sOjUfxDyLGOZVb3g8/ScaTNwwJcYgmHh8kcYFDUhinuy1QAoANCWUvw1jlk+z6gAg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
- '@eslint/core@1.2.1':
- resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@oxfmt/binding-android-arm64@0.68.0':
+ resolution: {integrity: sha512-v3Njdi6qY0O/5eGfg01ww2w6gTn2mUvZ72Bnx1/UN53A9wruh3Nk6otc3WkgJLkXD4Qgz1SOcVQieH1oD03V9Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
- '@eslint/css-tree@4.1.1':
- resolution: {integrity: sha512-A+s89eP+yDAPkKjnIOfjlkGifg5J7GPn01nWx14UjBVWktfkxOU4975F9ZZ13xNxkGiblNcBaAqgKhnQrW6SWA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@oxfmt/binding-darwin-arm64@0.68.0':
+ resolution: {integrity: sha512-ei4MCMzHFREmZwPJ7KuWUB4kBuHdsgDrnXGJVcEAopU7fj7S42I8BChdFILWdHvhFqR08FLJtOfbZIr2CDw0cA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
- '@eslint/markdown@8.0.3':
- resolution: {integrity: sha512-rBTSSShrq7e4O+PWfeE4azH4/CWPNrC+VGxBXiW00o3vYVJnznsZiDayj3KC9JztIMVRZxZHn2nrDIUau/4j7A==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@oxfmt/binding-darwin-x64@0.68.0':
+ resolution: {integrity: sha512-UrKgzZxYhwB9DSvTX+vdgl9M32wLUNKJcAKIoiyx/Kzn/zveqi7W6kYVcRroFMhS3Kwz0KhTk3WBeSuQn4YCTg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
- '@eslint/object-schema@3.0.5':
- resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@oxfmt/binding-freebsd-x64@0.68.0':
+ resolution: {integrity: sha512-6jrEKgpJbilM1QaRv7hEtKXr4p4AK4jvvyOtajwyhu0kOz3e0O7OLnSTk6tBotRqCcUC4ehZRJ1Zx+Y99wieLw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
- '@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}
+ '@oxfmt/binding-linux-arm-gnueabihf@0.68.0':
+ resolution: {integrity: sha512-YOIVnKOBaLeGullskS179N12hjSAdFYnzLjOaKiLhAKNWgnShq9w4xRdtmUm6BlnP65l2/EA9Aw/KlftNxDM7Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
- '@humanfs/core@0.19.2':
- resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
- engines: {node: '>=18.18.0'}
+ '@oxfmt/binding-linux-arm-musleabihf@0.68.0':
+ resolution: {integrity: sha512-xW5XoEHVNqydPBv2KXvk9lmEzyAlOQHVEazKoXUuAacqekjya+OdiaFjjEBl0oJD02raG8g3TRl9OVCh9PDIHA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
- '@humanfs/node@0.16.8':
- resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==}
- engines: {node: '>=18.18.0'}
+ '@oxfmt/binding-linux-arm64-gnu@0.68.0':
+ resolution: {integrity: sha512-QCvYwVVQieu6oyJglAgV9vH/YMDxZyR4cwVSYtoq9oOXd5N+D3TDUBjNwxFrLn5AdcJZOcvn/7IB17vJGp+2Og==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
- '@humanfs/types@0.15.0':
- resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==}
- engines: {node: '>=18.18.0'}
+ '@oxfmt/binding-linux-arm64-musl@0.68.0':
+ resolution: {integrity: sha512-4TVz5iFQ8ndrHnhX50UXiz9BIWAtUSOHJ6Nus4qWFfJBXq/Ed/krXbF/ehJu42BXM5tIvBs99jNIM22s9agY5A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
- '@humanwhocodes/module-importer@1.0.1':
- resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
- engines: {node: '>=12.22'}
+ '@oxfmt/binding-linux-ppc64-gnu@0.68.0':
+ resolution: {integrity: sha512-qLe3ao0RP84bnPxBvRI+GnlK/jybo538NWu0Xrm+zYeTmJtpzqLhnnd5BH21NafqKnplbGZjtN1cnrOlWF73lw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
- '@humanwhocodes/retry@0.4.3':
- resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
- engines: {node: '>=18.18'}
+ '@oxfmt/binding-linux-riscv64-gnu@0.68.0':
+ resolution: {integrity: sha512-Yvyl7a6gbb0vM6r925KW2dO+/CmXySO5TVbcX7o/uZJ+d108HFOG0TxIyHApmn5USuj5mhDPxzhiVwOlGP7uSA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
- '@jridgewell/gen-mapping@0.3.13':
- resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+ '@oxfmt/binding-linux-riscv64-musl@0.68.0':
+ resolution: {integrity: sha512-mJlFuFVCxzrYM5sFStN433D/s/mb6Wq4aCQAM02vs/OudHywnaSAd2rb1vlYUJtqdYIciJtiasuxvfbYkv5fLg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
- '@jridgewell/remapping@2.3.5':
- resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+ '@oxfmt/binding-linux-s390x-gnu@0.68.0':
+ resolution: {integrity: sha512-RlfSg++qs1hbKltRR6lYvV9EoI3MdlfSQD9w1hdHVYjHqjIn1tkH4FWOpMSmjKGN20zr+nI+W9o4ARogCDudGQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
+ '@oxfmt/binding-linux-x64-gnu@0.68.0':
+ resolution: {integrity: sha512-nyzRB9U+dlYUKu3pMo3afHzZBUv/oTHZMG36ZfJViNVfOIzp70Q4GS8FFRGgYJ/p0zcyDCgpBvYISOdJOMh+jQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
- '@jridgewell/sourcemap-codec@1.6.0':
- resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==}
+ '@oxfmt/binding-linux-x64-musl@0.68.0':
+ resolution: {integrity: sha512-iCx3sbZRIvGrL1RafphEiUKBaW1lc0/tAjKOIB/Wjw2+STRBEdu5+fH1Gc1faEWEmc2k5Ks4iUUV54Zd5C9a1A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
- '@jridgewell/trace-mapping@0.3.31':
- resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@oxfmt/binding-openharmony-arm64@0.68.0':
+ resolution: {integrity: sha512-x2X5AZez7OgyLLFpwIgItoXBUqudDM7yiaTsxv8R8vKQ6e81l0jVw0NFeUCXzcl1sAJq8h+tC8N4mY8EiMeL4w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
- '@keyv/bigmap@1.3.1':
- resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==}
- engines: {node: '>= 18'}
- peerDependencies:
- keyv: ^5.6.0
+ '@oxfmt/binding-win32-arm64-msvc@0.68.0':
+ resolution: {integrity: sha512-AHVPjXkenLPQUh6kB8zSC8pX2ct9r4T1Edk9r/RNJyov6wPsS5uAfYtipwG4chn6+3bPFG5rI/3DxEeH8vib1w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
- '@keyv/serialize@1.1.1':
- resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
+ '@oxfmt/binding-win32-ia32-msvc@0.68.0':
+ resolution: {integrity: sha512-n09SjEk5VH7z8Hl4WVP7hho+cCwGViENkQFiM45vbW85dJd7kEhWaHRUobaPzEmrWyu6uumd4EuNfNyDKLtzDA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
- '@napi-rs/lzma-linux-x64-gnu@1.5.1':
- resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==}
- engines: {node: ^22.20 || ^24.12 || >=25}
+ '@oxfmt/binding-win32-x64-msvc@0.68.0':
+ resolution: {integrity: sha512-gPe+dJLXaPuWPWqlpklDAJp0k+K9KhQPYiQLHfb+i2rmFuUGfJ/5Qlj6tr1mO6of5g0DiLjG/XCFHIaPhotqqA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@ota-meshi/ast-token-store@0.3.0':
- resolution: {integrity: sha512-XRO0zi2NIUKq2lUk3T1ecFSld1fMWRKE6naRFGkgkdeosx7IslyUKNv5Dcb5PJTja9tHJoFu0v/7yEpAkrkrTg==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ os: [win32]
- '@oxfmt/binding-android-arm-eabi@0.35.0':
- resolution: {integrity: sha512-BaRKlM3DyG81y/xWTsE6gZiv89F/3pHe2BqX2H4JbiB8HNVlWWtplzgATAE5IDSdwChdeuWLDTQzJ92Lglw3ZA==}
+ '@oxlint/binding-android-arm-eabi@1.83.0':
+ resolution: {integrity: sha512-0yGY24EwsLk5YDe6F+VkmZyRHSwJDALa3nIrPpq7FXmp2lV2d0TzvBCGeZk+wgiULRGr5blhyr4QMp5KCXJUqA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxfmt/binding-android-arm64@0.35.0':
- resolution: {integrity: sha512-/O+EbuAJYs6nde/anv+aID6uHsGQApyE9JtYBo/79KyU8e6RBN3DMbT0ix97y1SOnCglurmL2iZ+hlohjP2PnQ==}
+ '@oxlint/binding-android-arm64@1.83.0':
+ resolution: {integrity: sha512-hHfJ0vc17A4iUjH5p9BsTUPYbYRNxGpvD2lbu1aBRk54bzNIx9o5TtYF39QPZcV95DagZd+4DEAw2RH3G2ZsMg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@oxfmt/binding-darwin-arm64@0.35.0':
- resolution: {integrity: sha512-pGqRtqlNdn9d4VrmGUWVyQjkw79ryhI6je9y2jfqNUIZCfqceob+R97YYAoG7C5TFyt8ILdLVoN+L2vw/hSFyA==}
+ '@oxlint/binding-darwin-arm64@1.83.0':
+ resolution: {integrity: sha512-hsOjYjszLb/3zym/TkzUMPAoQlTJcuzSyEPOAyA+skXJIX9M0o+4JfOtqopX/Vf4hSLrJ98j0nvFo23gzk8auQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@oxfmt/binding-darwin-x64@0.35.0':
- resolution: {integrity: sha512-8GmsDcSozTPjrCJeGpp+sCmS9+9V5yRrdEZ1p/sTWxPG5nYeAfSLuS0nuEYjXSO+CtdSbStIW6dxa+4NM58yRw==}
+ '@oxlint/binding-darwin-x64@1.83.0':
+ resolution: {integrity: sha512-mjh5oH2EA+wl5yRJYT9K9G61O2zFlpuv+yf2JwZOi0+dq2FnTUtm1h8i+5Ik0fXPWIu/k84I1psZR9aQsLAnyA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@oxfmt/binding-freebsd-x64@0.35.0':
- resolution: {integrity: sha512-QyfKfTe0ytHpFKHAcHCGQEzN45QSqq1AHJOYYxQMgLM3KY4xu8OsXHpCnINjDsV4XGnQzczJDU9e04Zmd8XqIQ==}
+ '@oxlint/binding-freebsd-x64@1.83.0':
+ resolution: {integrity: sha512-fNHr64/YaO8YssuoDVC8+F4Uk5enR86q5uxfHkQrjAPs1dbAILOrD2uaud+J7MO8Fx774g44ERLD0IGIvZE48w==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@oxfmt/binding-linux-arm-gnueabihf@0.35.0':
- resolution: {integrity: sha512-u+kv3JD6P3J38oOyUaiCqgY5TNESzBRZJ5lyZQ6c2czUW2v5SIN9E/KWWa9vxoc+P8AFXQFUVrdzGy1tK+nbPQ==}
+ '@oxlint/binding-linux-arm-gnueabihf@1.83.0':
+ resolution: {integrity: sha512-Qpwy3zzAwMj+8/lyYItHmkSMwbkprFNWTK7jPYDOxSyxEhaSLOWYUTCMkjF334J8/WD0nznCCsoBbIH6hpsuIw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxfmt/binding-linux-arm-musleabihf@0.35.0':
- resolution: {integrity: sha512-1NiZroCiV57I7Pf8kOH4XGR366kW5zir3VfSMBU2D0V14GpYjiYmPYFAoJboZvp8ACnZKUReWyMkNKSa5ad58A==}
+ '@oxlint/binding-linux-arm-musleabihf@1.83.0':
+ resolution: {integrity: sha512-s+BirYLFq7JL2k9sP0XI3ZXJ9dYvJ8sX3jLCLoag7tt+zrSHpZxP0jqznfL+Gdgwu7ay0dYgGYJXrQvq3iWloA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxfmt/binding-linux-arm64-gnu@0.35.0':
- resolution: {integrity: sha512-7Q0Xeg7ZnW2nxnZ4R7aF6DEbCFls4skgHZg+I63XitpNvJCbVIU8MFOTZlvZGRsY9+rPgWPQGeUpLHlyx0wvMA==}
+ '@oxlint/binding-linux-arm64-gnu@1.83.0':
+ resolution: {integrity: sha512-7lihXt3vKr+GIyapNbHrnFHm/biiW30le6Zv/DExbAFPF6YwCQXVFlONPFehxs0CpGO4CBfYPM9rdDT+XMoIlg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-arm64-musl@0.35.0':
- resolution: {integrity: sha512-5Okqi+uhYFxwKz8hcnUftNNwdm8BCkf6GSCbcz9xJxYMm87k1E4p7PEmAAbhLTk7cjSdDre6TDL0pDzNX+Y22Q==}
+ '@oxlint/binding-linux-arm64-musl@1.83.0':
+ resolution: {integrity: sha512-q63JalLYVkZiZvls1z3PPUnpmQluOMXp0khqQMznCeAPLGydfNY8JhvuA4WlK57JfrvikU8wB5lPVveqpIXvew==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@oxfmt/binding-linux-ppc64-gnu@0.35.0':
- resolution: {integrity: sha512-9k66pbZQXM/lBJWys3Xbc5yhl4JexyfqkEf/tvtq8976VIJnLAAL3M127xHA3ifYSqxdVHfVGTg84eiBHCGcNw==}
+ '@oxlint/binding-linux-ppc64-gnu@1.83.0':
+ resolution: {integrity: sha512-krQmDF+dRbxvdqVPV88ZuOoPPu8X5BuqDA8Hd+qcS4YMRQCb+nexA57DazgGsc/rGdKBe3QmV0mnv0bdpW/p5g==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-riscv64-gnu@0.35.0':
- resolution: {integrity: sha512-aUcY9ofKPtjO52idT6t0SAQvEF6ctjzUQa1lLp7GDsRpSBvuTrBQGeq0rYKz3gN8dMIQ7mtMdGD9tT4LhR8jAQ==}
+ '@oxlint/binding-linux-riscv64-gnu@1.83.0':
+ resolution: {integrity: sha512-MmOl8Y6txEAXZU1RG8Rr264jQ6D7VPmqFsU/45x/FeWsGe32hklTqGrLE6UxHzp5Rjt0wP+20tY8YXKgSFB3mw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-riscv64-musl@0.35.0':
- resolution: {integrity: sha512-C6yhY5Hvc2sGM+mCPek9ZLe5xRUOC/BvhAt2qIWFAeXMn4il04EYIjl3DsWiJr0xDMTJhvMOmD55xTRPlNp39w==}
+ '@oxlint/binding-linux-riscv64-musl@1.83.0':
+ resolution: {integrity: sha512-u1rMymh0W3JZkq370kzQsYPULGWqhE09pZRqnZvUSoYaI9pVO5yVX+iYIslmWuEgwuzH9YAaOsScJiobWCHoOw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxfmt/binding-linux-s390x-gnu@0.35.0':
- resolution: {integrity: sha512-RG2hlvOMK4OMZpO3mt8MpxLQ0AAezlFqhn5mI/g5YrVbPFyoCv9a34AAvbSJS501ocOxlFIRcKEuw5hFvddf9g==}
+ '@oxlint/binding-linux-s390x-gnu@1.83.0':
+ resolution: {integrity: sha512-y0zK3HNwGysu7rqtE+BQG/d0bx5gh/KwlOtghN8oWeK1KcWzeaLqtZrbm8owqdma1lFyrce/hTO5ismuNu+INQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-x64-gnu@0.35.0':
- resolution: {integrity: sha512-wzmh90Pwvqj9xOKHJjkQYBpydRkaXG77ZvDz+iFDRRQpnqIEqGm5gmim2s6vnZIkDGsvKCuTdtxm0GFmBjM1+w==}
+ '@oxlint/binding-linux-x64-gnu@1.83.0':
+ resolution: {integrity: sha512-rS5gM0NgD7ngmuJmbIehsidtrOwKkLFwCQbKEeb9KuyQrrWNq5Zkn0uV6AYdXOMJ0grrWEiLwBuvMxt8w5vsNw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@oxfmt/binding-linux-x64-musl@0.35.0':
- resolution: {integrity: sha512-+HCqYCJPCUy5I+b2cf+gUVaApfgtoQT3HdnSg/l7NIcLHOhKstlYaGyrFZLmUpQt4WkFbpGKZZayG6zjRU0KFA==}
+ '@oxlint/binding-linux-x64-musl@1.83.0':
+ resolution: {integrity: sha512-W2IH4EtpcPaWcvNGCA95YoDg4vxqE/ZiPCi3arrxEEpsK7+JQN9WYwrlYFx9pcdP6KPXqRqkv3zdQPHcx7b6YQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@oxfmt/binding-openharmony-arm64@0.35.0':
- resolution: {integrity: sha512-kFYmWfR9YL78XyO5ws+1dsxNvZoD973qfVMNFOS4e9bcHXGF7DvGC2tY5UDFwyMCeB33t3sDIuGONKggnVNSJA==}
+ '@oxlint/binding-openharmony-arm64@1.83.0':
+ resolution: {integrity: sha512-6LyKkUyoajssTPLlZmDbZIbu4IZ5B4bGuRUnBgCGpEvHP3FQMaYITncHA/unPUo7q+Z+pIu2HhdkQ+8d1SG7iA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@oxfmt/binding-win32-arm64-msvc@0.35.0':
- resolution: {integrity: sha512-uD/NGdM65eKNCDGyTGdO8e9n3IHX+wwuorBvEYrPJXhDXL9qz6gzddmXH8EN04ejUXUujlq4FsoSeCfbg0Y+Jg==}
+ '@oxlint/binding-win32-arm64-msvc@1.83.0':
+ resolution: {integrity: sha512-Uz/fObEtF0jmNJQJ8CGRBKfefYstS0/wjD3s6IGzP8nUwsJykHQJBiN3npHwKiGRGn/vvBEgNr4B3cCzmmatvg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@oxfmt/binding-win32-ia32-msvc@0.35.0':
- resolution: {integrity: sha512-oSRD2k8J2uxYDEKR2nAE/YTY9PobOEnhZgCmspHu0+yBQ665yH8lFErQVSTE7fcGJmJp/cC6322/gc8VFuQf7g==}
+ '@oxlint/binding-win32-ia32-msvc@1.83.0':
+ resolution: {integrity: sha512-u7XcvPW6Bk58tY5iWs2ESb0vJjoE/kuSpHxopbwp/p3ZtWVQXZ6wor5w3ssVTHOqd/v8b+QdhSFWQ4grEUNWpA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@oxfmt/binding-win32-x64-msvc@0.35.0':
- resolution: {integrity: sha512-WCDJjlS95NboR0ugI2BEwzt1tYvRDorDRM9Lvctls1SLyKYuNRCyrPwp1urUPFBnwgBNn9p2/gnmo7gFMySRoQ==}
+ '@oxlint/binding-win32-x64-msvc@1.83.0':
+ resolution: {integrity: sha512-LZRubd7ph13QmAg4fFecTYVZkiYbROR2Htaxh/ufWRkDhPOm2wrwaEYR89e0YpPFD3dqBrPoxS7myBw5hmYA7Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
- '@pkgr/core@0.3.6':
- resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==}
- engines: {node: ^14.18.0 || >=16.0.0}
-
'@quansync/fs@1.1.0':
resolution: {integrity: sha512-qAPG/t3HqML1TlN7sY/pTbEjzFVAKsMjNNMGheyDosro+kT4iw2KCUoHcVdmliwWjorm4elZbgNQyU2eD97eDg==}
+ '@redis/bloom@6.2.1':
+ resolution: {integrity: sha512-huQgNLaCIZfQ9SeLn4q9124uOUd8HbZDYHwwUzNcRgHqCHiHKl2dDxMqJCeWh8cMqZAoWuHR8XnWbDMIf+o7ag==}
+ engines: {node: '>= 20.0.0'}
+ peerDependencies:
+ '@redis/client': ^6.2.1
+
+ '@redis/client@6.2.1':
+ resolution: {integrity: sha512-LzxBY7SIBvvJiyCgcaJZZakE3fJrZZ++i24+EDW9fKpCl68D35uJcKFpZZwCfOoG9WZTbyZlMzMeM0gtOAMU9Q==}
+ engines: {node: '>= 20.0.0'}
+ peerDependencies:
+ '@node-rs/xxhash': ^1.1.0
+ '@opentelemetry/api': '>=1 <2'
+ peerDependenciesMeta:
+ '@node-rs/xxhash':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+
+ '@redis/json@6.2.1':
+ resolution: {integrity: sha512-AFIUJ8Gj0DaaSBHYuSt8+O0oYWM+50OK1c0OmodB7XERIA8+BbyV3O4v76f9iccWasd1/7qjfZTpuzexUaZtrQ==}
+ engines: {node: '>= 20.0.0'}
+ peerDependencies:
+ '@redis/client': ^6.2.1
+
+ '@redis/search@6.2.1':
+ resolution: {integrity: sha512-2vfOAOyYFE7UUw3sBBlkqqruBtOUS4HRY5MtW4hp83llrwvtrTE4r22CEqXddlV+54zkLxBE4nmsIJ/dpezQrQ==}
+ engines: {node: '>= 20.0.0'}
+ peerDependencies:
+ '@redis/client': ^6.2.1
+
+ '@redis/time-series@6.2.1':
+ resolution: {integrity: sha512-kiYniph04dJOole+L359B6C9E+jYS2uDP7hca6Onj0xF38ZIpyxARO0Iq0W4ZRn1e8Q6vqW00QFZVSMRA/2Ijw==}
+ engines: {node: '>= 20.0.0'}
+ peerDependencies:
+ '@redis/client': ^6.2.1
+
'@rollup/plugin-alias@5.1.1':
resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
engines: {node: '>=14.0.0'}
@@ -1123,113 +1103,147 @@ packages:
cpu: [x64]
os: [win32]
- '@sindresorhus/base62@1.0.0':
- resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==}
- engines: {node: '>=18'}
-
- '@stylistic/eslint-plugin@5.10.0':
- resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^9.0.0 || ^10.0.0
-
'@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/node@26.6.2':
+ resolution: {integrity: sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==}
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ '@types/resolve@1.20.2':
+ resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
- '@types/katex@0.16.8':
- resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==}
+ '@types/ws@8.18.1':
+ resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
- '@types/mdast@4.0.4':
- resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+ '@typescript/typescript-aix-ppc64@7.0.2':
+ resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [ppc64]
+ os: [aix]
- '@types/ms@2.1.0':
- resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+ '@typescript/typescript-darwin-arm64@7.0.2':
+ resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [darwin]
- '@types/node@26.6.2':
- resolution: {integrity: sha512-X1P21scMv4zGKLYqjdGjaKa7COa0RKVYYZZN/NfvLQ1JegxFhdhpZG/Lyn8AXx6CDUavKAd11v6BvfpkDByK8g==}
+ '@typescript/typescript-darwin-x64@7.0.2':
+ resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [darwin]
- '@types/resolve@1.20.2':
- resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
+ '@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]
- '@types/unist@3.0.3':
- resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+ '@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-eslint/eslint-plugin@8.70.0':
- resolution: {integrity: sha512-/v8HZt6RlyIZxB3ntehELOcUcfxKPVGWXnQdJuHRmzrqgF8nQypcC/oxGW+Ot4VGKDq81XugPKxx0n5PBtf9PA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- '@typescript-eslint/parser': ^8.70.0
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.1.0'
+ '@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-eslint/parser@8.70.0':
- resolution: {integrity: sha512-zYvrmj9Yxd63UGaXw+kdt6A0F0s0qveJyuatIM77bYC2DE4pgmg7a50u8LR7PRtXd0x+h+Tl3eXabGm06SWd3Q==}
- 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/typescript-linux-arm@7.0.2':
+ resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm]
+ os: [linux]
- '@typescript-eslint/project-service@8.70.0':
- resolution: {integrity: sha512-hFHbTNqhU9G+2eKFXCBVb1tjFT/LceiJ4+HfLO4pTpDI0KHi6iajpcFFkaSQ9gXmCh7n82A0PthaayEdN6mspQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.1.0'
+ '@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-eslint/scope-manager@8.70.0':
- resolution: {integrity: sha512-8nP3Kwh5hlgZ4FicGvmznAmJe8UL4sdU8tLukrPaMuQmDuk4Y8xYfzu/aYZW4xT2JCgc7H/TpDI5cGlxcWJSqQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@typescript/typescript-linux-ppc64@7.0.2':
+ resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [ppc64]
+ os: [linux]
- '@typescript-eslint/tsconfig-utils@8.70.0':
- resolution: {integrity: sha512-adnkeeNq9Sq1sUf4+FRVc0KdgYghzsgFpZSQVZVvY0LCuUuN0FnQgyGzCJeC4fW1cdXseBAjU2EOqUIjbNcZUw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.1.0'
+ '@typescript/typescript-linux-riscv64@7.0.2':
+ resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==}
+ engines: {node: '>=16.20.0'}
+ cpu: [riscv64]
+ os: [linux]
- '@typescript-eslint/type-utils@8.70.0':
- resolution: {integrity: sha512-NUMKIhYVaVIVLnRL9CRt+VVcuLgSHUCpXn4/+K8wql+vdInUzvx8BjUO1oJ7cG9shjFJKtF8F8Hh2kCh3/KBVw==}
- 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/typescript-linux-s390x@7.0.2':
+ resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==}
+ engines: {node: '>=16.20.0'}
+ cpu: [s390x]
+ os: [linux]
- '@typescript-eslint/types@8.70.0':
- resolution: {integrity: sha512-asTOIYhDg4zdzOScCyaytrsV3cR6B4ecPQlXw/dJIm7J/MZTtCtfVII9JD8Geh4jTCrK/Xe6cg5UevoleMcoJQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@typescript/typescript-linux-x64@7.0.2':
+ resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==}
+ engines: {node: '>=16.20.0'}
+ cpu: [x64]
+ os: [linux]
- '@typescript-eslint/typescript-estree@8.70.0':
- resolution: {integrity: sha512-d9NmHMPEKQ7QCLLm1jI3zmoQBwT5KwFYjXBJ9ymZfKCUU+5rmTRykKAFvH5Qn/ZCds3CEAFS9OC9M/jkl0X2bA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.1.0'
+ '@typescript/typescript-netbsd-arm64@7.0.2':
+ resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==}
+ engines: {node: '>=16.20.0'}
+ cpu: [arm64]
+ os: [netbsd]
- '@typescript-eslint/utils@8.70.0':
- resolution: {integrity: sha512-oZmtKJz/4fufZ2p3+Cn3ijEojcdfR+1zYDH2xKYrEly0dR/Q/1xUPRCOlKGxod78nWlU2UnDe09GZ3TaknBFGA==}
- 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/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]
- '@typescript-eslint/visitor-keys@8.70.0':
- resolution: {integrity: sha512-BoC8PiO4Hkdo0TVJh9Ntxr5MxPDI7/oFsrygN5ADelFSeXG/qgNuucIGA+L5Z6JpPTE/uRfcTWtscjbUaufepQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@typescript/typescript6@6.0.2':
+ resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==}
+ hasBin: true
'@vitest/coverage-v8@5.0.1':
resolution: {integrity: sha512-FRC8ACiudC3dI6MTplzRSYWHDRnIv2IPfbzs4FdoJNsMal/35sWV8hwIfV8ZcqzSPy+uXHeMVONt9CEqtOU17w==}
@@ -1240,22 +1254,6 @@ packages:
'@vitest/browser':
optional: true
- '@vitest/eslint-plugin@1.6.27':
- resolution: {integrity: sha512-X1RCAfwbatG4GFbJ/1PIHP9MSZMt0JJThqbYID+vS4L783k6QGlLPe421wQE8dHXuGCcenVLsydiM4qzsYWxhg==}
- engines: {node: '>=18'}
- peerDependencies:
- '@typescript-eslint/eslint-plugin': '*'
- eslint: '>=8.57.0'
- typescript: '>=5.0.0'
- vitest: '*'
- peerDependenciesMeta:
- '@typescript-eslint/eslint-plugin':
- optional: true
- typescript:
- optional: true
- vitest:
- optional: true
-
'@vitest/istanbul-lib-coverage@1.0.1':
resolution: {integrity: sha512-k3DJZ8LhMBK9NS4SclF1ASD3OgXEWDorbIcPTRDK0/Zae6fRvu+fJRxtFdLfHsa9Y24beCdPnoNZ4LviTNstfA==}
engines: {node: '>=22'}
@@ -1278,26 +1276,6 @@ packages:
'@vitest/spy@5.0.1':
resolution: {integrity: sha512-rbto/mF/SGERxEgYOek7Xm6B9b+y+mVoo+f4b2LymYO8zM1b7uB5nHuhVMTP2hxdzgxvGiZYGxGIaMvL5y180Q==}
- '@vue/compiler-core@3.5.43':
- resolution: {integrity: sha512-zdiLhnbe1QQqgDT8xZMpNmyqZ3qlI+/Q/FHQco57Kwl/b05HhCzN6eVGN9QU9rbga4CrS0H5SYY8VGHZCt/1Hg==}
-
- '@vue/compiler-dom@3.5.43':
- resolution: {integrity: sha512-PEZoAk3NQmsn/ejMzSOCyTYqwGqczrWm70PuhBKjjv1+TCoQAaO/zOqNwjV+honlNstT5ILxtc+8r8UUfj+iEQ==}
-
- '@vue/compiler-sfc@3.5.43':
- resolution: {integrity: sha512-FCbrG3XNCRl+js3huuKx4IVHBLTvMkJhVepjbxSPu1gn4yWLaYtGNQdjJGZaMytXB6qb76qQDDmDSLy/vkmleQ==}
-
- '@vue/compiler-ssr@3.5.43':
- resolution: {integrity: sha512-GF62orf7KiJX9RqrHNGrYBudsQGD0OhJ5nDs90O8UiDuS40+YMYomiXu6w6EuvtXuRDc3MSNis3EaaSKAVSWpg==}
-
- '@vue/shared@3.5.43':
- resolution: {integrity: sha512-uksS7YGMR5NZyr4JNq0Rp+QyLns0ueaz20KwzIPW9R0LH1Vnt4E+XUM29PNseEbf1www2gOuhuDi5AKOIXag9Q==}
-
- 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'}
@@ -1307,9 +1285,6 @@ packages:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
- ajv@6.15.0:
- resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
-
ansis@4.4.0:
resolution: {integrity: sha512-9k3v7xcHwgdO/DruxGIg4HtjvlAZlcnsX/mzqUb1t3NkYnl9kK2UJ+Gq0io+vQf7iT//BD/HB/NBkUR1LWxoeA==}
engines: {node: '>=14'}
@@ -1318,10 +1293,6 @@ packages:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
- are-docs-informative@0.1.1:
- resolution: {integrity: sha512-sqRsNQBwbKLRX0jV5Cu5uzmtflf892n4Vukz7T659ebL4pz3mpOqCMU7lxMoBTFwnp10E3YB5ZcyHM41W5bcDA==}
- engines: {node: '>=18'}
-
args-tokenizer@0.3.0:
resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==}
@@ -1345,10 +1316,6 @@ packages:
axios@1.20.0:
resolution: {integrity: sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==}
- balanced-match@4.0.4:
- resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
- engines: {node: 18 || 20 || >=22}
-
baseline-browser-mapping@2.11.25:
resolution: {integrity: sha512-gMmEShwwq7FJqMwvfRwvCl00v4kN+KOfJqXn+f4nrufak5gNHJOksd/60Dvjuz7sI8Y5WiSFBa8FEYr+zoyqCw==}
engines: {node: '>=6.0.0'}
@@ -1361,10 +1328,6 @@ packages:
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
- brace-expansion@5.0.12:
- resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==}
- engines: {node: 20 || >=22}
-
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
@@ -1374,10 +1337,6 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- builtin-modules@5.4.0:
- resolution: {integrity: sha512-JCWSCdun+4Ovd9BhM/Vtlmwb7oD6Wl4YiPRXXwhAuwlPhW1un/MKgXn7GZoFm53ginnoNzus69V8JWx0K393jg==}
- 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}
@@ -1407,9 +1366,6 @@ packages:
resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
engines: {node: '>=20.19.0'}
- cacheable@2.5.0:
- resolution: {integrity: sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==}
-
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -1420,16 +1376,10 @@ packages:
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==}
-
changelogen@0.5.7:
resolution: {integrity: sha512-cTZXBcJMl3pudE40WENOakXkcVtrbBpbkmSkM20NdRiUqa4+VYRdXdEsgQ0BNQ6JBE2YymTNWtPKVF7UCTN5+g==}
hasBin: true
@@ -1439,9 +1389,6 @@ packages:
engines: {node: ^22.19.0 || ^24.11.0 || >=26.0.0}
hasBin: true
- character-entities@2.0.2:
- resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
-
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -1454,13 +1401,13 @@ packages:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
- ci-info@4.4.0:
- resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==}
- engines: {node: '>=8'}
-
citty@0.1.6:
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
+ cluster-key-slot@1.1.2:
+ resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
+ engines: {node: '>=0.10.0'}
+
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
@@ -1472,18 +1419,6 @@ packages:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
- 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.9:
- resolution: {integrity: sha512-+2AvZKjJaNq9GQljm3tr0utwrig5BL+jgJGvz5rDpGKNIp+ojcRXWUwBbh/sGIi1QCprR6PsKFakub+w1v+4hQ==}
- engines: {node: '>= 12.0.0'}
-
commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
@@ -1503,21 +1438,9 @@ packages:
convert-gitmoji@0.1.5:
resolution: {integrity: sha512-4wqOafJdk2tqZC++cjcbGcaJ13BZ3kwldf06PTiAQRAB76Z1KJwZNL1SaRZMi2w1FM9RYTgZ6QErS8NUl/GBmQ==}
- convert-hrtime@5.0.0:
- resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==}
- engines: {node: '>=12'}
-
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- 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'}
-
css-declaration-sorter@7.4.0:
resolution: {integrity: sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==}
engines: {node: ^14 || ^16 || >=18}
@@ -1575,12 +1498,6 @@ packages:
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==}
-
deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
@@ -1604,24 +1521,9 @@ packages:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
- dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
-
destr@2.0.5:
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
- detect-indent@7.0.2:
- resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==}
- engines: {node: '>=12.20'}
-
- 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}
-
dom-serializer@2.0.0:
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
@@ -1647,29 +1549,16 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ effect@4.0.0-rc.116:
+ resolution: {integrity: sha512-nawqJHSjHV8XIBRZNZ+D7cLZpN3kkSjzy6aiT9ofKENsl7xAMFKEoDa0itN5JFl3GUQ1PIN1T1HNlva5+xyO/A==}
+
electron-to-chromium@1.5.433:
resolution: {integrity: sha512-5lCAbyZBjtmUt/RAGHRqrL2q0oEFRThDAsZHHDn9XHa89Qw7gMYOeSicBTy+AHfvo0r6vwsZvqNJTQIQy1BLzA==}
- empathic@2.1.0:
- resolution: {integrity: sha512-AnfC1ATldl49/cvZdLPDjBfrRNwbDO05aibiOtzQu3qtlbJtomNLhF30HEtn/7iBz50dlMECqATo3fG0LrdEgw==}
- engines: {node: '>=14'}
-
- enhanced-resolve@5.25.1:
- resolution: {integrity: sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==}
- engines: {node: '>=10.13.0'}
-
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
- entities@7.0.1:
- resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
- engines: {node: '>=0.12'}
-
- entities@8.1.0:
- resolution: {integrity: sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==}
- engines: {node: '>=20.19.0'}
-
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -1703,235 +1592,12 @@ packages:
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-flat-config-utils@3.2.0:
- resolution: {integrity: sha512-PHgo1X5uqIorJONLVD9BIaOSdoYFD3z/AeJljdqDPlWVRpeCYkDbK9k0AXoYVqqNJr6FEYIEr5Rm2TSktLQcHw==}
-
- eslint-formatting-reporter@0.0.0:
- resolution: {integrity: sha512-k9RdyTqxqN/wNYVaTk/ds5B5rA8lgoAmvceYN7bcZMBwU7TuXx5ntewJv81eF3pIL/CiJE+pJZm36llG8yhyyw==}
- peerDependencies:
- eslint: '>=8.40.0'
-
- 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-merge-processors@2.0.0:
- resolution: {integrity: sha512-sUuhSf3IrJdGooquEUB5TNpGNpBoQccbnaLHsb1XkBLUPPqCNivCpY05ZcpCOiV9uHwO2yxXEWVczVclzMxYlA==}
- peerDependencies:
- eslint: '*'
-
- eslint-parser-plain@0.1.1:
- resolution: {integrity: sha512-KRgd6wuxH4U8kczqPp+Oyk4irThIhHWxgFgLDtpgjUGVIS3wGrJntvZW/p6hHq1T4FOwnOtCNkvAI4Kr+mQ/Hw==}
-
- eslint-plugin-antfu@3.2.3:
- resolution: {integrity: sha512-U2fnz/H0gFPxpuC7QpaHa0Jv2AgCZ5hunp36SOP/yWo8yFzgvMh8X4pZ4uN4IKoqtBhk7G3HuVa93Urf51+sZg==}
- peerDependencies:
- eslint: '*'
-
- 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-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-format@2.0.1:
- resolution: {integrity: sha512-0BA65p5DAiuKtx5MmMJfPk9WaTjoHHbyVW7ZXRhaZoA1fdiMHhay9QRiDL2wr0hJWZxdF7CRThOK/70VUKVg2g==}
- peerDependencies:
- eslint: ^8.40.0 || ^9.0.0 || ^10.0.0
-
- eslint-plugin-import-lite@0.6.0:
- resolution: {integrity: sha512-80vevx2A7i3H7n1/6pqDO8cc5wRz6OwLDvIyVl9UflBV1N1f46e9Ihzi65IOLYoSxM6YykK2fTw1xm0Ixx6aTQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^9.0.0 || ^10.0.0
-
- eslint-plugin-jsdoc@64.5.4:
- resolution: {integrity: sha512-xfRhXPSSWT612muJ6XTvxuVJ8zYHv99qNgBqPVqF28aSqoy4s4XbSkrWXnYA2hl5ejC02yEpk6fqkj3BmJ6Xbg==}
- engines: {node: ^22.22.2 || >=24.15.0}
- peerDependencies:
- eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- 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-no-only-tests@3.4.0:
- resolution: {integrity: sha512-4S3/9Nb7A2tiMcpzEQE9bQSlpeOz6WJkgryBuou/SA8W2x2c8Zf4j0NvTKBjv6qNhF9T79tmkecm/0CHqV0UGg==}
- engines: {node: '>=5.0.0'}
-
- eslint-plugin-perfectionist@5.11.1:
- resolution: {integrity: sha512-xloHScnOpin9Jy3CegfzoBeY33ASk0spLyM2sJs0LyNHQjv9m0osUD2PYNT7NrJieZbUR2Ebn4A5Q0+0dOcv+A==}
- 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-regexp@3.3.0:
- resolution: {integrity: sha512-TT0JTQbW7CRKohntpGAsMdQ1K3MsmJK4gdAhKJtIwlJ0JvuYxauymFgJdvqxIY4lqNj0EuRZWVrymQtEdJYEFg==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- peerDependencies:
- eslint: '>=9.38.0'
-
- eslint-plugin-toml@1.5.0:
- resolution: {integrity: sha512-qBjRywEkKxO2uYOjus//6GVF1r+Hg5QDkRO8RTY6XcaXgWfBU0DhwpFmJa2Ljf0Sz49r7DdZlpKwwHmJ4nmH1Q==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- peerDependencies:
- eslint: '>=9.38.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.11.0:
- resolution: {integrity: sha512-fGt38SsaPCZ2FmA3bX/3vOW2qdsPNx0/9x+7Aab6NMX++PhynMtK4LWC4vzXgfQBCqpUAler18H38GA+NBAd0Q==}
- 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-processor-vue-blocks@2.0.0:
- resolution: {integrity: sha512-u4W0CJwGoWY3bjXAuFpc/b6eK3NQEI8MoeW7ritKj3G3z/WtHrKjkqf+wk8mPEy5rlMGS+k6AZYOw2XBoN/02Q==}
- peerDependencies:
- '@vue/compiler-sfc': ^3.3.0
- eslint: '>=9.0.0'
-
- eslint-scope@9.1.2:
- resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- 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@4.2.1:
- resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.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.11.0:
- resolution: {integrity: sha512-P7a6UEEqb9G95MYAtqkmsTbVXIYyzIfl6NGOIJk162PaahFxFyeGcrlXYFSiagECg4sEm8IseJdZBKR3rx6MsQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- hasBin: true
- peerDependencies:
- jiti: '*'
- peerDependenciesMeta:
- jiti:
- optional: true
-
- espree@10.4.0:
- resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- 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@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
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'}
@@ -1939,30 +1605,6 @@ packages:
exsolve@1.1.1:
resolution: {integrity: sha512-9U/jZUgjnSGyntRr6y5Muu1MJcwFl6kPu7k8qLF0IMNfLqvw0NZ4nnVDq0RVoZ0RvCyumib4Ez3KYrVfilrw+g==}
- 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==}
-
- fast-string-truncated-width@3.0.3:
- resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==}
-
- fast-string-width@3.0.2:
- resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==}
-
- fast-wrap-ansi@0.2.2:
- resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==}
-
- fault@2.0.1:
- resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
-
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -1972,21 +1614,10 @@ packages:
picomatch:
optional: true
- file-entry-cache@11.1.5:
- resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==}
-
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
- 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'}
-
find-up@6.3.0:
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -1994,12 +1625,6 @@ packages:
fix-dts-default-cjs-exports@1.0.1:
resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==}
- flat-cache@6.1.23:
- resolution: {integrity: sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==}
-
- flatted@3.4.4:
- resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==}
-
follow-redirects@1.16.0:
resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==}
engines: {node: '>=4.0'}
@@ -2013,10 +1638,6 @@ packages:
resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==}
engines: {node: '>= 6'}
- format@0.2.2:
- resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
- engines: {node: '>=0.4.x'}
-
fraction.js@5.3.4:
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
@@ -2032,10 +1653,6 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- function-timeout@1.0.2:
- resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==}
- engines: {node: '>=18'}
-
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
@@ -2044,9 +1661,6 @@ packages:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
- get-tsconfig@4.14.3:
- resolution: {integrity: sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==}
-
giget@1.2.5:
resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==}
hasBin: true
@@ -2055,35 +1669,14 @@ packages:
resolution: {integrity: sha512-r+mvuDjrjMpsdw46Kmeydb8bdHm7wOKw8wNBtTndkjbPjgAp5oUJUxRE76wZFknxIPokfWvep2qSXK37aXE6zg==}
hasBin: true
- github-slugger@2.0.0:
- resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
-
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
- 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==}
-
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
has-symbols@1.1.0:
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines: {node: '>= 0.4'}
@@ -2092,10 +1685,6 @@ packages:
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines: {node: '>= 0.4'}
- hashery@1.5.1:
- resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==}
- engines: {node: '>=20'}
-
hasown@2.0.4:
resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
engines: {node: '>= 0.4'}
@@ -2103,47 +1692,14 @@ packages:
hookable@5.5.3:
resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
- 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==}
-
https-proxy-agent@5.0.1:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
- 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.9:
- resolution: {integrity: sha512-brTTsvFRt5C1gGHtPst/281UjPD5t9fBqbgoMPlVWy11ZLTPfu7HxK4ZYqO9H7o/yC9rSTCI85EaQ4OoY12qYw==}
- engines: {node: '>= 4'}
-
- 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-binary-path@2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
- is-builtin-module@5.0.0:
- resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
- engines: {node: '>=18.20'}
-
is-core-module@2.17.0:
resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==}
engines: {node: '>= 0.4'}
@@ -2161,10 +1717,6 @@ packages:
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'}
-
is-inside-container@1.0.0:
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
engines: {node: '>=14.16'}
@@ -2184,9 +1736,6 @@ packages:
resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
engines: {node: '>=16'}
- isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
jiti@1.21.7:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
hasBin: true
@@ -2198,46 +1747,12 @@ packages:
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.2:
- resolution: {integrity: sha512-eFY7Rlscvv/BpY6UsVsjKwMhu1tJO/F4U/vC9g3yeRy/JqszuO1UP6Vdq+85G+3FP6fEw/sWR8a5ftPFY86csw==}
- 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==}
-
knitwork@1.3.0:
resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==}
- levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
-
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
@@ -2247,14 +1762,6 @@ packages:
engines: {node: '>=22.22.1'}
hasBin: true
- local-pkg@1.2.1:
- resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==}
- engines: {node: '>=14'}
-
- locate-path@6.0.0:
- resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
- engines: {node: '>=10'}
-
locate-path@7.2.0:
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -2265,9 +1772,6 @@ packages:
lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
- longest-streak@3.1.0:
- resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
-
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
@@ -2277,155 +1781,16 @@ packages:
magicast@0.5.5:
resolution: {integrity: sha512-UicdXN8zQ3JHlxVq+28afMXPr1z7WNY6+7EJnzTdQWkTAlMLF5fNCCKxJHBQwGaNGR11581EiQmQzx73+MvszA==}
- 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==}
-
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
- 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.0.28:
resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
mdn-data@2.27.1:
resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==}
- mdn-data@2.35.0:
- resolution: {integrity: sha512-k+1+dEIm2z/BEfdvYzT/fIyAGeDBo/1AJNJI4ilFXJRYoxP/3Ds+GP8shAOIq8jYXY9N5nGB3Ag104NsagmLAA==}
-
- 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.2:
- resolution: {integrity: sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==}
-
- 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==}
-
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
@@ -2434,10 +1799,6 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
- minimatch@10.2.6:
- resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==}
- engines: {node: 18 || 20 || >=22}
-
minipass@3.3.6:
resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
engines: {node: '>=8'}
@@ -2479,9 +1840,6 @@ packages:
mlly@1.8.2:
resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
- module-replacements@3.3.0:
- resolution: {integrity: sha512-AVZL23uePazQOZlb/QMGwxsUa1oWA62Cfe6ApPzgasUoF4cdCWAiRPVq4KkaQzXbIDAlpLhLG61Jx8Lju4wjTg==}
-
mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
@@ -2494,13 +1852,6 @@ packages:
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-fetch-native@1.6.7:
resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
@@ -2524,9 +1875,6 @@ packages:
engines: {node: ^14.16.0 || >=16.10.0}
hasBin: true
- object-deep-merge@2.0.1:
- resolution: {integrity: sha512-aKttDKcU3pyZqKcCkDhsMn70WmZFG2JGDQLP9EcLyTSIFQRCPWLAmBZRLJnrVUrhPG1jETEEbfdgbNtJf1LyMg==}
-
obug@2.2.1:
resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==}
engines: {node: '>=12.20.0'}
@@ -2544,64 +1892,47 @@ packages:
resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
engines: {node: '>=18'}
- optionator@0.9.4:
- resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
- engines: {node: '>= 0.8.0'}
-
- oxfmt@0.35.0:
- resolution: {integrity: sha512-QYeXWkP+aLt7utt5SLivNIk09glWx9QE235ODjgcEZ3sd1VMaUBSpLymh6ZRCA76gD2rMP4bXanUz/fx+nLM9Q==}
+ oxfmt@0.68.0:
+ resolution: {integrity: sha512-Z0XMofcXCGUXbcpBHnWyUiX93BGiw1B+lcHNbQDWEtOhX06ewoFfu4zXkyiLhRrNnMq0twqXRHUcJetf+GsiQQ==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
+ peerDependencies:
+ svelte: ^5.0.0
+ vite-plus: '*'
+ peerDependenciesMeta:
+ svelte:
+ optional: true
+ vite-plus:
+ optional: true
- 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'}
+ oxlint@1.83.0:
+ resolution: {integrity: sha512-cyDzSzaw3uzP0TeCeq3lLRPPoaUxkbB4ZOXj+kn+5r+BX9V+4bNVGk9lxer+WrgcpebH4JxLlJ3KQjveVztOLQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ oxlint-tsgolint: '>=7.0.2001'
+ vite-plus: '*'
+ peerDependenciesMeta:
+ oxlint-tsgolint:
+ optional: true
+ vite-plus:
+ optional: true
p-limit@4.0.0:
resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- p-locate@5.0.0:
- resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
- engines: {node: '>=10'}
-
p-locate@6.0.0:
resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- 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-gitignore@2.0.0:
- resolution: {integrity: sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==}
- engines: {node: '>=14'}
-
- 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-exists@5.0.0:
resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
@@ -2638,13 +1969,6 @@ packages:
pkg-types@2.3.3:
resolution: {integrity: sha512-j/lCFdcppV0JxWpCEITdbDltBxPP6cHT+yNJ6Go2OgoSA9518X847X9z0p6LtA4Nc16+eQzCZjRrWanTGvHJ5w==}
- 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-calc@10.1.1:
resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==}
engines: {node: ^18.12 || ^20.9 || >=22.0}
@@ -2824,19 +2148,6 @@ packages:
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
-
pretty-bytes@7.1.3:
resolution: {integrity: sha512-U2KZ675nqba6XSBppSjU2pRgc9Ffx9+uUtd/RTWYmOawVkZuUbBYuwdtFZQmLv+yMgQ2TQxWWuOpyNje67J9tg==}
engines: {node: '>=20'}
@@ -2845,24 +2156,9 @@ packages:
resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
engines: {node: '>=10'}
- 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@0.2.11:
- resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
-
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'}
-
rc9@2.1.2:
resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
@@ -2877,24 +2173,9 @@ packages:
resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==}
engines: {node: '>= 20.19.0'}
- 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.3:
- resolution: {integrity: sha512-ycwFAS14Jw4mppvmK4GR/J6u3WpWpjkEApehuHtLc/8VpPNpDMbQ4WjqwplXifGeyKOzHSFLmSPqzksDQE2Sfg==}
- 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==}
+ redis@6.2.1:
+ resolution: {integrity: sha512-Z9VHtgYs48PiQC77X9O2Er8Hj4T+5BtFjT91/vi5Is1D04N72cA946ZslM1ImJw8ZctFBZWAVjM7S5wJNeHMpg==}
+ engines: {node: '>= 20.0.0'}
resolve@1.22.12:
resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==}
@@ -2925,10 +2206,6 @@ packages:
resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==}
engines: {node: '>=11.0.0'}
- scslre@0.3.0:
- resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==}
- engines: {node: ^14.0.0 || >=16.0.0}
-
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
@@ -2937,14 +2214,6 @@ packages:
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'}
-
sherif-darwin-arm64@1.13.0:
resolution: {integrity: sha512-k38jpGpZIEWS5dpSRLSvVi53LZuGO3hDqB88jgdLMDN11LZM6yTDcP0GytnQ8OpE6Br/Js6bDCLsdWDarZdV9g==}
cpu: [arm64]
@@ -3000,22 +2269,10 @@ packages:
resolution: {integrity: sha512-kkTORPAuxQz2g1QUuN0J8yGWT28tjGBfPOdJ4xT7Vbeu30veKUZQIoID2qGgCDAakaQn59UeZJJ4cFGB8PVP2A==}
hasBin: true
- sisteransi@1.0.5:
- resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
-
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.24:
- resolution: {integrity: sha512-cLS9TtWkIQFyLkJ3/5aFQAOHOSKTlOs/7WDut/XPSdjom1fJhUdkepeJAKXa9Y05+FabHd0sti+Et559vDtkpQ==}
-
stack-trace@1.0.0-pre2:
resolution: {integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==}
engines: {node: '>=16'}
@@ -3033,20 +2290,12 @@ packages:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
- strip-indent@4.1.1:
- resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
- engines: {node: '>=12'}
-
stylehacks@7.0.11:
resolution: {integrity: sha512-iODNfhXVLqc5LADs+Y6Oh5wJuK5ZcHbVng8aiK3y9pjMQdc5hLrBW0eFU6FtnpNrE6PoEg/MmFTU4waotj5WNg==}
engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
peerDependencies:
postcss: ^8.5.13
- super-regex@1.1.0:
- resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==}
- engines: {node: '>=18'}
-
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
@@ -3056,23 +2305,11 @@ packages:
engines: {node: '>=16'}
hasBin: true
- 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'}
-
tar@6.2.1:
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
- 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'}
@@ -3092,8 +2329,8 @@ packages:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
- tinypool@2.1.0:
- resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==}
+ tinypool@2.1.2:
+ resolution: {integrity: sha512-9YodfrxS9g9IbFr/KOjE5bAeJ0p61n3bW6mqvy0jtoeKd1kTW1Cxm0oulm6KX2lyM9Gl6WIe8nEbY7LWv5ZJww==}
engines: {node: ^20.0.0 || >=22.0.0}
tinyrainbow@3.1.1:
@@ -3104,33 +2341,16 @@ packages:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
- to-valid-identifier@1.0.0:
- resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
- engines: {node: '>=20'}
-
- toml-eslint-parser@1.0.3:
- resolution: {integrity: sha512-A5F0cM6+mDleacLIEUkmfpkBbnHJFV1d2rprHU2MXNk7mlxHq2zGojA+SRvQD1RoMo9gqjZPWEaKG4v1BQ48lw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- ts-api-utils@2.5.0:
- resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
- engines: {node: '>=18.12'}
- peerDependencies:
- typescript: '>=4.8.4'
-
- 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@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
+
ufo@1.6.4:
resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==}
@@ -3152,20 +2372,9 @@ packages:
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==}
+ undici@8.10.2:
+ resolution: {integrity: sha512-/y4/bH9YNU5hi9NIrpOuvGXFcxrj3CMrV+/AYpowAYTpHn8gX/XPFjNy766FPoYY0miQhdW977JFWKGNhBdwyQ==}
+ engines: {node: '>=22.19.0'}
untyped@2.0.0:
resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==}
@@ -3177,16 +2386,9 @@ packages:
peerDependencies:
browserslist: '>= 4.21.0'
- uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- verkit@0.3.2:
- resolution: {integrity: sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==}
- engines: {node: '>=18.12.0'}
-
verkit@0.4.1:
resolution: {integrity: sha512-mMVzj0TXExtVdlDEq+Mzp0eyOuyznNpFobNM3uAqe3HVm/Ps2c+u17BligMkZjZCA6EiXpoon8iRTer3iu40SQ==}
engines: {node: '>=18.12.0'}
@@ -3272,119 +2474,41 @@ packages:
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'}
+ ws@8.21.3:
+ resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
wsl-utils@0.1.0:
resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
engines: {node: '>=18'}
- xml-name-validator@5.0.0:
- resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
- engines: {node: '>=18'}
-
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
- yaml-eslint-parser@2.1.0:
- resolution: {integrity: sha512-1zo9KRfp6vIAXBEhWAz09ex3hUwh3T+/6dGbGteHvNseA0Uk4FgQnPES55klZ6cDzSy9FpgKS0D/CoLUvCCj4w==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
yaml@2.9.1:
resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==}
engines: {node: '>= 14.6'}
hasBin: true
- yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
-
yocto-queue@1.2.2:
resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
engines: {node: '>=12.20'}
- zwitch@2.0.4:
- resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
-
snapshots:
- '@antfu/eslint-config@9.5.1(@typescript-eslint/typescript-estree@8.70.0(typescript@6.0.3))(@typescript-eslint/utils@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.43)(eslint-plugin-format@2.0.1(eslint@10.11.0(jiti@2.7.0)))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)(vitest@5.0.1)':
- dependencies:
- '@antfu/install-pkg': 2.1.0
- '@clack/prompts': 1.8.1
- '@e18e/eslint-plugin': 0.8.1(eslint@10.11.0(jiti@2.7.0))
- '@eslint-community/eslint-plugin-eslint-comments': 4.8.1(eslint@10.11.0(jiti@2.7.0))
- '@eslint/markdown': 8.0.3
- '@stylistic/eslint-plugin': 5.10.0(eslint@10.11.0(jiti@2.7.0))
- '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- '@typescript-eslint/parser': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- '@vitest/eslint-plugin': 1.6.27(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)(vitest@5.0.1)
- ansis: 4.4.0
- cac: 7.0.0
- eslint: 10.11.0(jiti@2.7.0)
- eslint-config-flat-gitignore: 2.4.0(eslint@10.11.0(jiti@2.7.0))
- eslint-flat-config-utils: 3.2.0
- eslint-merge-processors: 2.0.0(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-antfu: 3.2.3(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-command: 4.0.0(@typescript-eslint/typescript-estree@8.70.0(typescript@6.0.3))(@typescript-eslint/utils@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-import-lite: 0.6.0(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-jsdoc: 64.5.4(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- eslint-plugin-jsonc: 3.4.2(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-n: 18.3.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- eslint-plugin-no-only-tests: 3.4.0
- eslint-plugin-perfectionist: 5.11.1(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- eslint-plugin-pnpm: 1.9.1(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-regexp: 3.3.0(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-toml: 1.5.0(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-unicorn: 74.0.0(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))
- eslint-plugin-vue: 10.11.0(@stylistic/eslint-plugin@5.10.0(eslint@10.11.0(jiti@2.7.0)))(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.11.0(jiti@2.7.0)))
- eslint-plugin-yml: 3.8.1(eslint@10.11.0(jiti@2.7.0))
- eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.43)(eslint@10.11.0(jiti@2.7.0))
- globals: 17.12.0
- local-pkg: 1.2.1
- parse-gitignore: 2.0.0
- toml-eslint-parser: 1.0.3
- vue-eslint-parser: 10.4.1(eslint@10.11.0(jiti@2.7.0))
- yaml-eslint-parser: 2.1.0
- optionalDependencies:
- eslint-plugin-format: 2.0.1(eslint@10.11.0(jiti@2.7.0))
- transitivePeerDependencies:
- - '@eslint/json'
- - '@typescript-eslint/typescript-estree'
- - '@typescript-eslint/utils'
- - '@vue/compiler-sfc'
- - oxlint
- - supports-color
- - ts-declaration-location
- - typescript
- - vitest
-
- '@antfu/install-pkg@2.1.0':
- dependencies:
- package-manager-detector: 1.8.0
- tinyexec: 1.3.1
-
'@babel/code-frame@8.0.6':
dependencies:
'@babel/helper-validator-identifier': 8.0.6
@@ -3409,30 +2533,6 @@ snapshots:
'@bcoe/v8-coverage@1.0.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
-
- '@clack/core@1.5.1':
- dependencies:
- fast-wrap-ansi: 0.2.2
- sisteransi: 1.0.5
-
- '@clack/prompts@1.8.1':
- dependencies:
- '@clack/core': 1.5.1
- fast-string-width: 3.0.2
- fast-wrap-ansi: 0.2.2
- sisteransi: 1.0.5
-
'@codspeed/core@5.7.1(debug@4.4.3)':
dependencies:
axios: 1.20.0(debug@4.4.3)
@@ -3456,37 +2556,24 @@ snapshots:
'@colordx/core@5.8.0': {}
- '@dprint/formatter@0.5.1': {}
-
- '@dprint/markdown@0.21.1': {}
-
- '@dprint/toml@0.7.0': {}
-
- '@e18e/eslint-plugin@0.8.1(eslint@10.11.0(jiti@2.7.0))':
+ '@effect/platform-node-shared@4.0.0-rc.116(effect@4.0.0-rc.116)':
dependencies:
- empathic: 2.1.0
- module-replacements: 3.3.0
- verkit: 0.4.1
- optionalDependencies:
- eslint: 10.11.0(jiti@2.7.0)
-
- '@es-joy/jsdoccomment@0.92.0':
- dependencies:
- '@types/estree': 1.0.9
- '@typescript-eslint/types': 8.70.0
- comment-parser: 1.4.7
- esquery: 1.7.0
- jsdoc-type-pratt-parser: 9.0.1
+ '@types/ws': 8.18.1
+ effect: 4.0.0-rc.116
+ ws: 8.21.3
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
- '@es-joy/jsdoccomment@0.98.0':
+ '@effect/platform-node@4.0.0-rc.116(effect@4.0.0-rc.116)(redis@6.2.1)':
dependencies:
- '@types/estree': 1.0.9
- '@typescript-eslint/types': 8.70.0
- comment-parser: 1.4.9
- esquery: 1.7.0
- jsdoc-type-pratt-parser: 9.2.2
-
- '@es-joy/resolve.exports@1.2.0': {}
+ '@effect/platform-node-shared': 4.0.0-rc.116(effect@4.0.0-rc.116)
+ effect: 4.0.0-rc.116
+ redis: 6.2.1
+ undici: 8.10.2
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
'@esbuild/aix-ppc64@0.25.12':
optional: true
@@ -3644,184 +2731,166 @@ snapshots:
'@esbuild/win32-x64@0.28.2':
optional: true
- '@eslint-community/eslint-plugin-eslint-comments@4.8.1(eslint@10.11.0(jiti@2.7.0))':
- dependencies:
- escape-string-regexp: 4.0.0
- eslint: 10.11.0(jiti@2.7.0)
- ignore: 7.0.9
-
- '@eslint-community/eslint-utils@4.10.1(eslint@10.11.0(jiti@2.7.0))':
+ '@jridgewell/gen-mapping@0.3.13':
dependencies:
- eslint: 10.11.0(jiti@2.7.0)
- eslint-visitor-keys: 3.4.3
-
- '@eslint-community/regexpp@4.12.2': {}
+ '@jridgewell/sourcemap-codec': 1.6.0
+ '@jridgewell/trace-mapping': 0.3.31
- '@eslint/compat@2.1.1(eslint@10.11.0(jiti@2.7.0))':
+ '@jridgewell/remapping@2.3.5':
dependencies:
- '@eslint/core': 1.2.1
- optionalDependencies:
- eslint: 10.11.0(jiti@2.7.0)
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
- '@eslint/config-array@0.23.5':
- dependencies:
- '@eslint/object-schema': 3.0.5
- debug: 4.4.3
- minimatch: 10.2.6
- transitivePeerDependencies:
- - supports-color
+ '@jridgewell/resolve-uri@3.1.2': {}
- '@eslint/config-helpers@0.5.5':
- dependencies:
- '@eslint/core': 1.2.1
+ '@jridgewell/sourcemap-codec@1.6.0': {}
- '@eslint/config-helpers@0.7.0':
+ '@jridgewell/trace-mapping@0.3.31':
dependencies:
- '@eslint/core': 1.2.1
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.6.0
- '@eslint/core@1.2.1':
- dependencies:
- '@types/json-schema': 7.0.15
+ '@napi-rs/lzma-linux-x64-gnu@1.5.1':
+ optional: true
- '@eslint/css-tree@4.1.1':
- dependencies:
- mdn-data: 2.35.0
- source-map-js: 1.2.1
+ '@oxfmt/binding-android-arm-eabi@0.68.0':
+ optional: true
- '@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
+ '@oxfmt/binding-android-arm64@0.68.0':
+ optional: true
- '@eslint/object-schema@3.0.5': {}
+ '@oxfmt/binding-darwin-arm64@0.68.0':
+ optional: true
- '@eslint/plugin-kit@0.7.3':
- dependencies:
- '@eslint/core': 1.2.1
- levn: 0.4.1
+ '@oxfmt/binding-darwin-x64@0.68.0':
+ optional: true
- '@humanfs/core@0.19.2':
- dependencies:
- '@humanfs/types': 0.15.0
+ '@oxfmt/binding-freebsd-x64@0.68.0':
+ optional: true
- '@humanfs/node@0.16.8':
- dependencies:
- '@humanfs/core': 0.19.2
- '@humanfs/types': 0.15.0
- '@humanwhocodes/retry': 0.4.3
+ '@oxfmt/binding-linux-arm-gnueabihf@0.68.0':
+ optional: true
- '@humanfs/types@0.15.0': {}
+ '@oxfmt/binding-linux-arm-musleabihf@0.68.0':
+ optional: true
- '@humanwhocodes/module-importer@1.0.1': {}
+ '@oxfmt/binding-linux-arm64-gnu@0.68.0':
+ optional: true
- '@humanwhocodes/retry@0.4.3': {}
+ '@oxfmt/binding-linux-arm64-musl@0.68.0':
+ optional: true
- '@jridgewell/gen-mapping@0.3.13':
- dependencies:
- '@jridgewell/sourcemap-codec': 1.6.0
- '@jridgewell/trace-mapping': 0.3.31
+ '@oxfmt/binding-linux-ppc64-gnu@0.68.0':
+ optional: true
- '@jridgewell/remapping@2.3.5':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
+ '@oxfmt/binding-linux-riscv64-gnu@0.68.0':
+ optional: true
- '@jridgewell/resolve-uri@3.1.2': {}
+ '@oxfmt/binding-linux-riscv64-musl@0.68.0':
+ optional: true
- '@jridgewell/sourcemap-codec@1.6.0': {}
+ '@oxfmt/binding-linux-s390x-gnu@0.68.0':
+ optional: true
- '@jridgewell/trace-mapping@0.3.31':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.6.0
+ '@oxfmt/binding-linux-x64-gnu@0.68.0':
+ optional: true
- '@keyv/bigmap@1.3.1(keyv@5.6.0)':
- dependencies:
- hashery: 1.5.1
- hookified: 1.15.1
- keyv: 5.6.0
+ '@oxfmt/binding-linux-x64-musl@0.68.0':
+ optional: true
- '@keyv/serialize@1.1.1': {}
+ '@oxfmt/binding-openharmony-arm64@0.68.0':
+ optional: true
- '@napi-rs/lzma-linux-x64-gnu@1.5.1':
+ '@oxfmt/binding-win32-arm64-msvc@0.68.0':
optional: true
- '@ota-meshi/ast-token-store@0.3.0': {}
+ '@oxfmt/binding-win32-ia32-msvc@0.68.0':
+ optional: true
- '@oxfmt/binding-android-arm-eabi@0.35.0':
+ '@oxfmt/binding-win32-x64-msvc@0.68.0':
optional: true
- '@oxfmt/binding-android-arm64@0.35.0':
+ '@oxlint/binding-android-arm-eabi@1.83.0':
optional: true
- '@oxfmt/binding-darwin-arm64@0.35.0':
+ '@oxlint/binding-android-arm64@1.83.0':
optional: true
- '@oxfmt/binding-darwin-x64@0.35.0':
+ '@oxlint/binding-darwin-arm64@1.83.0':
optional: true
- '@oxfmt/binding-freebsd-x64@0.35.0':
+ '@oxlint/binding-darwin-x64@1.83.0':
optional: true
- '@oxfmt/binding-linux-arm-gnueabihf@0.35.0':
+ '@oxlint/binding-freebsd-x64@1.83.0':
optional: true
- '@oxfmt/binding-linux-arm-musleabihf@0.35.0':
+ '@oxlint/binding-linux-arm-gnueabihf@1.83.0':
optional: true
- '@oxfmt/binding-linux-arm64-gnu@0.35.0':
+ '@oxlint/binding-linux-arm-musleabihf@1.83.0':
optional: true
- '@oxfmt/binding-linux-arm64-musl@0.35.0':
+ '@oxlint/binding-linux-arm64-gnu@1.83.0':
optional: true
- '@oxfmt/binding-linux-ppc64-gnu@0.35.0':
+ '@oxlint/binding-linux-arm64-musl@1.83.0':
optional: true
- '@oxfmt/binding-linux-riscv64-gnu@0.35.0':
+ '@oxlint/binding-linux-ppc64-gnu@1.83.0':
optional: true
- '@oxfmt/binding-linux-riscv64-musl@0.35.0':
+ '@oxlint/binding-linux-riscv64-gnu@1.83.0':
optional: true
- '@oxfmt/binding-linux-s390x-gnu@0.35.0':
+ '@oxlint/binding-linux-riscv64-musl@1.83.0':
optional: true
- '@oxfmt/binding-linux-x64-gnu@0.35.0':
+ '@oxlint/binding-linux-s390x-gnu@1.83.0':
optional: true
- '@oxfmt/binding-linux-x64-musl@0.35.0':
+ '@oxlint/binding-linux-x64-gnu@1.83.0':
optional: true
- '@oxfmt/binding-openharmony-arm64@0.35.0':
+ '@oxlint/binding-linux-x64-musl@1.83.0':
optional: true
- '@oxfmt/binding-win32-arm64-msvc@0.35.0':
+ '@oxlint/binding-openharmony-arm64@1.83.0':
optional: true
- '@oxfmt/binding-win32-ia32-msvc@0.35.0':
+ '@oxlint/binding-win32-arm64-msvc@1.83.0':
optional: true
- '@oxfmt/binding-win32-x64-msvc@0.35.0':
+ '@oxlint/binding-win32-ia32-msvc@1.83.0':
optional: true
- '@pkgr/core@0.3.6': {}
+ '@oxlint/binding-win32-x64-msvc@1.83.0':
+ optional: true
'@quansync/fs@1.1.0':
dependencies:
quansync: 1.0.0
+ '@redis/bloom@6.2.1(@redis/client@6.2.1)':
+ dependencies:
+ '@redis/client': 6.2.1
+
+ '@redis/client@6.2.1':
+ dependencies:
+ cluster-key-slot: 1.1.2
+
+ '@redis/json@6.2.1(@redis/client@6.2.1)':
+ dependencies:
+ '@redis/client': 6.2.1
+
+ '@redis/search@6.2.1(@redis/client@6.2.1)':
+ dependencies:
+ '@redis/client': 6.2.1
+
+ '@redis/time-series@6.2.1(@redis/client@6.2.1)':
+ dependencies:
+ '@redis/client': 6.2.1
+
'@rollup/plugin-alias@5.1.1(rollup@4.63.4)':
optionalDependencies:
rollup: 4.63.4
@@ -3944,145 +3013,88 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.63.4':
optional: true
- '@sindresorhus/base62@1.0.0': {}
-
- '@stylistic/eslint-plugin@5.10.0(eslint@10.11.0(jiti@2.7.0))':
- dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0))
- '@typescript-eslint/types': 8.70.0
- eslint: 10.11.0(jiti@2.7.0)
- eslint-visitor-keys: 4.2.1
- espree: 10.4.0
- estraverse: 5.3.0
- picomatch: 4.0.7
-
'@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':
+ '@types/node@26.6.2':
dependencies:
- '@types/unist': 3.0.3
-
- '@types/json-schema@7.0.15': {}
+ undici-types: 8.9.0
- '@types/katex@0.16.8': {}
+ '@types/resolve@1.20.2': {}
- '@types/mdast@4.0.4':
+ '@types/ws@8.18.1':
dependencies:
- '@types/unist': 3.0.3
+ '@types/node': 26.6.2
- '@types/ms@2.1.0': {}
+ '@typescript/typescript-aix-ppc64@7.0.2':
+ optional: true
- '@types/node@26.6.2':
- dependencies:
- undici-types: 8.9.0
+ '@typescript/typescript-darwin-arm64@7.0.2':
+ optional: true
- '@types/resolve@1.20.2': {}
+ '@typescript/typescript-darwin-x64@7.0.2':
+ optional: true
- '@types/unist@3.0.3': {}
-
- '@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)':
- dependencies:
- '@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- '@typescript-eslint/scope-manager': 8.70.0
- '@typescript-eslint/type-utils': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- '@typescript-eslint/utils': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- '@typescript-eslint/visitor-keys': 8.70.0
- eslint: 10.11.0(jiti@2.7.0)
- ignore: 7.0.9
- natural-compare: 1.4.0
- ts-api-utils: 2.5.0(typescript@6.0.3)
- typescript: 6.0.3
- transitivePeerDependencies:
- - supports-color
+ '@typescript/typescript-freebsd-arm64@7.0.2':
+ optional: true
- '@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)':
- dependencies:
- '@typescript-eslint/scope-manager': 8.70.0
- '@typescript-eslint/types': 8.70.0
- '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.3)
- '@typescript-eslint/visitor-keys': 8.70.0
- debug: 4.4.3
- eslint: 10.11.0(jiti@2.7.0)
- typescript: 6.0.3
- transitivePeerDependencies:
- - supports-color
+ '@typescript/typescript-freebsd-x64@7.0.2':
+ optional: true
- '@typescript-eslint/project-service@8.70.0(typescript@6.0.3)':
- dependencies:
- '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@6.0.3)
- '@typescript-eslint/types': 8.70.0
- debug: 4.4.3
- typescript: 6.0.3
- transitivePeerDependencies:
- - supports-color
+ '@typescript/typescript-linux-arm64@7.0.2':
+ optional: true
- '@typescript-eslint/scope-manager@8.70.0':
- dependencies:
- '@typescript-eslint/types': 8.70.0
- '@typescript-eslint/visitor-keys': 8.70.0
+ '@typescript/typescript-linux-arm@7.0.2':
+ optional: true
- '@typescript-eslint/tsconfig-utils@8.70.0(typescript@6.0.3)':
- dependencies:
- typescript: 6.0.3
+ '@typescript/typescript-linux-loong64@7.0.2':
+ optional: true
- '@typescript-eslint/type-utils@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)':
- dependencies:
- '@typescript-eslint/types': 8.70.0
- '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.3)
- '@typescript-eslint/utils': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- debug: 4.4.3
- eslint: 10.11.0(jiti@2.7.0)
- ts-api-utils: 2.5.0(typescript@6.0.3)
- typescript: 6.0.3
- transitivePeerDependencies:
- - supports-color
+ '@typescript/typescript-linux-mips64el@7.0.2':
+ optional: true
- '@typescript-eslint/types@8.70.0': {}
+ '@typescript/typescript-linux-ppc64@7.0.2':
+ optional: true
- '@typescript-eslint/typescript-estree@8.70.0(typescript@6.0.3)':
- dependencies:
- '@typescript-eslint/project-service': 8.70.0(typescript@6.0.3)
- '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@6.0.3)
- '@typescript-eslint/types': 8.70.0
- '@typescript-eslint/visitor-keys': 8.70.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/typescript-linux-riscv64@7.0.2':
+ optional: true
- '@typescript-eslint/utils@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)':
- dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0))
- '@typescript-eslint/scope-manager': 8.70.0
- '@typescript-eslint/types': 8.70.0
- '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.3)
- eslint: 10.11.0(jiti@2.7.0)
- typescript: 6.0.3
- transitivePeerDependencies:
- - supports-color
+ '@typescript/typescript-linux-s390x@7.0.2':
+ optional: true
- '@typescript-eslint/visitor-keys@8.70.0':
+ '@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
+
+ '@typescript/typescript6@6.0.2':
dependencies:
- '@typescript-eslint/types': 8.70.0
- eslint-visitor-keys: 5.0.1
+ '@typescript/old': typescript@6.0.3
'@vitest/coverage-v8@5.0.1(vitest@5.0.1)':
dependencies:
@@ -4096,18 +3108,6 @@ snapshots:
tinyrainbow: 3.1.1
vitest: 5.0.1(@types/node@26.6.2)(@vitest/coverage-v8@5.0.1)(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(yaml@2.9.1))
- '@vitest/eslint-plugin@1.6.27(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)(vitest@5.0.1)':
- dependencies:
- '@typescript-eslint/scope-manager': 8.70.0
- '@typescript-eslint/utils': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- eslint: 10.11.0(jiti@2.7.0)
- optionalDependencies:
- '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- typescript: 6.0.3
- vitest: 5.0.1(@types/node@26.6.2)(@vitest/coverage-v8@5.0.1)(vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(yaml@2.9.1))
- transitivePeerDependencies:
- - supports-color
-
'@vitest/istanbul-lib-coverage@1.0.1': {}
'@vitest/istanbul-lib-report@1.0.1':
@@ -4125,42 +3125,6 @@ snapshots:
'@vitest/spy@5.0.1': {}
- '@vue/compiler-core@3.5.43':
- dependencies:
- '@babel/parser': 7.29.9
- '@vue/shared': 3.5.43
- entities: 7.0.1
- estree-walker: 2.0.2
- source-map-js: 1.2.1
-
- '@vue/compiler-dom@3.5.43':
- dependencies:
- '@vue/compiler-core': 3.5.43
- '@vue/shared': 3.5.43
-
- '@vue/compiler-sfc@3.5.43':
- dependencies:
- '@babel/parser': 7.29.9
- '@vue/compiler-core': 3.5.43
- '@vue/compiler-dom': 3.5.43
- '@vue/compiler-ssr': 3.5.43
- '@vue/shared': 3.5.43
- estree-walker: 2.0.2
- magic-string: 0.30.21
- postcss: 8.5.28
- source-map-js: 1.2.1
-
- '@vue/compiler-ssr@3.5.43':
- dependencies:
- '@vue/compiler-dom': 3.5.43
- '@vue/shared': 3.5.43
-
- '@vue/shared@3.5.43': {}
-
- acorn-jsx@5.3.2(acorn@8.18.0):
- dependencies:
- acorn: 8.18.0
-
acorn@8.18.0: {}
agent-base@6.0.2:
@@ -4169,13 +3133,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- 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
-
ansis@4.4.0: {}
anymatch@3.1.3:
@@ -4183,8 +3140,6 @@ snapshots:
normalize-path: 3.0.0
picomatch: 2.3.2
- are-docs-informative@0.1.1: {}
-
args-tokenizer@0.3.0: {}
assertion-error@2.0.1: {}
@@ -4216,18 +3171,12 @@ snapshots:
- debug
- supports-color
- balanced-match@4.0.4: {}
-
baseline-browser-mapping@2.11.25: {}
binary-extensions@2.3.0: {}
boolbase@1.0.0: {}
- brace-expansion@5.0.12:
- dependencies:
- balanced-match: 4.0.4
-
braces@3.0.3:
dependencies:
fill-range: 7.1.1
@@ -4240,8 +3189,6 @@ snapshots:
node-releases: 2.0.56
update-browserslist-db: 1.3.3(browserslist@4.29.0)
- builtin-modules@5.4.0: {}
-
bumpp@12.3.0:
dependencies:
args-tokenizer: 0.3.0
@@ -4290,14 +3237,6 @@ snapshots:
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
-
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -4312,12 +3251,8 @@ snapshots:
caniuse-lite@1.0.30001810: {}
- ccount@2.0.1: {}
-
chai@6.2.2: {}
- change-case@5.4.4: {}
-
changelogen@0.5.7:
dependencies:
c12: 1.11.2
@@ -4351,8 +3286,6 @@ snapshots:
transitivePeerDependencies:
- magicast
- character-entities@2.0.2: {}
-
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
@@ -4371,12 +3304,12 @@ snapshots:
chownr@2.0.0: {}
- ci-info@4.4.0: {}
-
citty@0.1.6:
dependencies:
consola: 3.4.2
+ cluster-key-slot@1.1.2: {}
+
colorette@2.0.20: {}
combined-stream@1.0.8:
@@ -4385,12 +3318,6 @@ snapshots:
commander@11.1.0: {}
- commander@8.3.0: {}
-
- comment-parser@1.4.7: {}
-
- comment-parser@1.4.9: {}
-
commondir@1.0.1: {}
confbox@0.1.8: {}
@@ -4403,20 +3330,8 @@ snapshots:
convert-gitmoji@0.1.5: {}
- convert-hrtime@5.0.0: {}
-
convert-source-map@2.0.0: {}
- core-js-compat@3.50.0:
- dependencies:
- browserslist: 4.29.0
-
- cross-spawn@7.0.6:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
-
css-declaration-sorter@7.4.0(postcss@8.5.28):
dependencies:
postcss: 8.5.28
@@ -4495,12 +3410,6 @@ snapshots:
dependencies:
ms: 2.1.3
- decode-named-character-reference@1.3.0:
- dependencies:
- character-entities: 2.0.2
-
- deep-is@0.1.4: {}
-
deepmerge@4.3.1: {}
default-browser-id@5.0.1: {}
@@ -4516,18 +3425,8 @@ snapshots:
delayed-stream@1.0.0: {}
- dequal@2.0.3: {}
-
destr@2.0.5: {}
- detect-indent@7.0.2: {}
-
- devlop@1.1.0:
- dependencies:
- dequal: 2.0.3
-
- diff-sequences@29.6.3: {}
-
dom-serializer@2.0.0:
dependencies:
domelementtype: 2.3.0
@@ -4556,21 +3455,12 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
- electron-to-chromium@1.5.433: {}
-
- empathic@2.1.0: {}
+ effect@4.0.0-rc.116: {}
- enhanced-resolve@5.25.1:
- dependencies:
- graceful-fs: 4.2.11
- tapable: 2.3.3
+ electron-to-chromium@1.5.433: {}
entities@4.5.0: {}
- entities@7.0.1: {}
-
- entities@8.1.0: {}
-
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
@@ -4648,361 +3538,24 @@ snapshots:
escalade@3.2.0: {}
- escape-string-regexp@4.0.0: {}
-
- escape-string-regexp@5.0.0: {}
-
- eslint-compat-utils@0.5.1(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- eslint: 10.11.0(jiti@2.7.0)
- semver: 7.8.5
-
- eslint-config-flat-gitignore@2.4.0(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- '@eslint/compat': 2.1.1(eslint@10.11.0(jiti@2.7.0))
- eslint: 10.11.0(jiti@2.7.0)
-
- eslint-flat-config-utils@3.2.0:
- dependencies:
- '@eslint/config-helpers': 0.5.5
- pathe: 2.0.3
-
- eslint-formatting-reporter@0.0.0(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- eslint: 10.11.0(jiti@2.7.0)
- prettier-linter-helpers: 1.0.1
-
- eslint-json-compat-utils@0.2.3(eslint@10.11.0(jiti@2.7.0))(jsonc-eslint-parser@3.3.0):
- dependencies:
- eslint: 10.11.0(jiti@2.7.0)
- esquery: 1.7.0
- jsonc-eslint-parser: 3.3.0
-
- eslint-merge-processors@2.0.0(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- eslint: 10.11.0(jiti@2.7.0)
-
- eslint-parser-plain@0.1.1: {}
-
- eslint-plugin-antfu@3.2.3(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- eslint: 10.11.0(jiti@2.7.0)
-
- eslint-plugin-command@4.0.0(@typescript-eslint/typescript-estree@8.70.0(typescript@6.0.3))(@typescript-eslint/utils@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- '@es-joy/jsdoccomment': 0.92.0
- '@typescript-eslint/typescript-estree': 8.70.0(typescript@6.0.3)
- '@typescript-eslint/utils': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- eslint: 10.11.0(jiti@2.7.0)
-
- eslint-plugin-es-x@7.8.0(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0))
- '@eslint-community/regexpp': 4.12.2
- eslint: 10.11.0(jiti@2.7.0)
- eslint-compat-utils: 0.5.1(eslint@10.11.0(jiti@2.7.0))
-
- eslint-plugin-format@2.0.1(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- '@dprint/formatter': 0.5.1
- '@dprint/markdown': 0.21.1
- '@dprint/toml': 0.7.0
- eslint: 10.11.0(jiti@2.7.0)
- eslint-formatting-reporter: 0.0.0(eslint@10.11.0(jiti@2.7.0))
- eslint-parser-plain: 0.1.1
- ohash: 2.0.12
- oxfmt: 0.35.0
- prettier: 3.9.8
- synckit: 0.11.13
-
- eslint-plugin-import-lite@0.6.0(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- eslint: 10.11.0(jiti@2.7.0)
-
- eslint-plugin-jsdoc@64.5.4(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3):
- dependencies:
- '@es-joy/jsdoccomment': 0.98.0
- '@es-joy/resolve.exports': 1.2.0
- '@typescript-eslint/utils': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- are-docs-informative: 0.1.1
- comment-parser: 1.4.9
- debug: 4.4.3
- escape-string-regexp: 5.0.0
- eslint: 10.11.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
- optionalDependencies:
- typescript: 6.0.3
- transitivePeerDependencies:
- - supports-color
-
- eslint-plugin-jsonc@3.4.2(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.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.11.0(jiti@2.7.0)
- eslint-json-compat-utils: 0.2.3(eslint@10.11.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.11.0(jiti@2.7.0))(typescript@6.0.3):
- dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0))
- enhanced-resolve: 5.25.1
- eslint: 10.11.0(jiti@2.7.0)
- eslint-plugin-es-x: 7.8.0(eslint@10.11.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-no-only-tests@3.4.0: {}
-
- eslint-plugin-perfectionist@5.11.1(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3):
- dependencies:
- '@typescript-eslint/utils': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
- eslint: 10.11.0(jiti@2.7.0)
- natural-orderby: 5.0.0
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- eslint-plugin-pnpm@1.9.1(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- empathic: 2.1.0
- eslint: 10.11.0(jiti@2.7.0)
- eslint-json-compat-utils: 0.2.3(eslint@10.11.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.1
- yaml-eslint-parser: 2.1.0
- transitivePeerDependencies:
- - '@eslint/json'
-
- eslint-plugin-regexp@3.3.0(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0))
- '@eslint-community/regexpp': 4.12.2
- comment-parser: 1.4.9
- eslint: 10.11.0(jiti@2.7.0)
- jsdoc-type-pratt-parser: 9.2.2
- refa: 0.12.1
- regexp-ast-analysis: 0.7.1
- scslre: 0.3.0
-
- eslint-plugin-toml@1.5.0(eslint@10.11.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
- debug: 4.4.3
- eslint: 10.11.0(jiti@2.7.0)
- toml-eslint-parser: 1.0.3
- transitivePeerDependencies:
- - supports-color
-
- eslint-plugin-unicorn@74.0.0(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0))
- '@eslint/css-tree': 4.1.1
- browserslist: 4.29.0
- change-case: 5.4.4
- ci-info: 4.4.0
- core-js-compat: 3.50.0
- detect-indent: 7.0.2
- entities: 8.1.0
- eslint: 10.11.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.3
- reserved-identifiers: 1.2.0
- semver: 7.8.5
- strip-indent: 4.1.1
- yaml: 2.9.1
-
- eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- eslint: 10.11.0(jiti@2.7.0)
- optionalDependencies:
- '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
-
- eslint-plugin-vue@10.11.0(@stylistic/eslint-plugin@5.10.0(eslint@10.11.0(jiti@2.7.0)))(@typescript-eslint/parser@8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.11.0(jiti@2.7.0))(vue-eslint-parser@10.4.1(eslint@10.11.0(jiti@2.7.0))):
- dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.0(jiti@2.7.0))
- eslint: 10.11.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.11.0(jiti@2.7.0))
- xml-name-validator: 5.0.0
- optionalDependencies:
- '@stylistic/eslint-plugin': 5.10.0(eslint@10.11.0(jiti@2.7.0))
- '@typescript-eslint/parser': 8.70.0(eslint@10.11.0(jiti@2.7.0))(typescript@6.0.3)
-
- eslint-plugin-yml@3.8.1(eslint@10.11.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.11.0(jiti@2.7.0)
- natural-compare: 1.4.0
- yaml-eslint-parser: 2.1.0
-
- eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.43)(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- '@vue/compiler-sfc': 3.5.43
- eslint: 10.11.0(jiti@2.7.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-visitor-keys@3.4.3: {}
-
- eslint-visitor-keys@4.2.1: {}
-
- eslint-visitor-keys@5.0.1: {}
-
- eslint@10.11.0(jiti@2.7.0):
- dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.11.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@10.4.0:
- dependencies:
- acorn: 8.18.0
- acorn-jsx: 5.3.2(acorn@8.18.0)
- eslint-visitor-keys: 4.2.1
-
- 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@2.0.2: {}
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.9
- esutils@2.0.3: {}
-
expect-type@1.4.0: {}
exsolve@1.1.1: {}
- fast-deep-equal@3.1.3: {}
-
- fast-diff@1.3.0: {}
-
- fast-json-stable-stringify@2.1.0: {}
-
- fast-levenshtein@2.0.6: {}
-
- fast-string-truncated-width@3.0.3: {}
-
- fast-string-width@3.0.2:
- dependencies:
- fast-string-truncated-width: 3.0.3
-
- fast-wrap-ansi@0.2.2:
- dependencies:
- fast-string-width: 3.0.2
-
- fault@2.0.1:
- dependencies:
- format: 0.2.2
-
fdir@6.5.0(picomatch@4.0.7):
optionalDependencies:
picomatch: 4.0.7
- file-entry-cache@11.1.5:
- dependencies:
- flat-cache: 6.1.23
-
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
- find-up-simple@1.0.1: {}
-
- find-up@5.0.0:
- dependencies:
- locate-path: 6.0.0
- path-exists: 4.0.0
-
find-up@6.3.0:
dependencies:
locate-path: 7.2.0
@@ -5014,14 +3567,6 @@ snapshots:
mlly: 1.8.2
rollup: 4.63.4
- flat-cache@6.1.23:
- dependencies:
- cacheable: 2.5.0
- flatted: 3.4.4
- hookified: 1.15.1
-
- flatted@3.4.4: {}
-
follow-redirects@1.16.0(debug@4.4.3):
optionalDependencies:
debug: 4.4.3
@@ -5034,8 +3579,6 @@ snapshots:
hasown: 2.0.4
mime-types: 2.1.35
- format@0.2.2: {}
-
fraction.js@5.3.4: {}
fs-minipass@2.1.0:
@@ -5047,8 +3590,6 @@ snapshots:
function-bind@1.1.2: {}
- function-timeout@1.0.2: {}
-
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -5067,10 +3608,6 @@ snapshots:
dunder-proto: 1.0.1
es-object-atoms: 1.1.2
- get-tsconfig@4.14.3:
- dependencies:
- resolve-pkg-maps: 1.0.0
-
giget@1.2.5:
dependencies:
citty: 0.1.6
@@ -5083,48 +3620,24 @@ snapshots:
giget@3.3.1: {}
- github-slugger@2.0.0: {}
-
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
- glob-parent@6.0.2:
- dependencies:
- is-glob: 4.0.3
-
- globals@15.15.0: {}
-
- globals@17.12.0: {}
-
- globrex@0.1.2: {}
-
gopd@1.2.0: {}
- graceful-fs@4.2.11: {}
-
has-symbols@1.1.0: {}
has-tostringtag@1.0.2:
dependencies:
has-symbols: 1.1.0
- hashery@1.5.1:
- dependencies:
- hookified: 1.15.1
-
hasown@2.0.4:
dependencies:
function-bind: 1.1.2
hookable@5.5.3: {}
- hookified@1.15.1: {}
-
- hookified@2.2.0: {}
-
- html-entities@2.6.0: {}
-
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
@@ -5132,26 +3645,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- identifier-regex@1.1.0:
- dependencies:
- reserved-identifiers: 1.2.0
-
- ignore@5.3.2: {}
-
- ignore@7.0.9: {}
-
- imurmurhash@0.1.4: {}
-
- indent-string@5.0.0: {}
-
is-binary-path@2.1.0:
dependencies:
binary-extensions: 2.3.0
- is-builtin-module@5.0.0:
- dependencies:
- builtin-modules: 5.4.0
-
is-core-module@2.17.0:
dependencies:
hasown: 2.0.4
@@ -5164,11 +3661,6 @@ snapshots:
dependencies:
is-extglob: 2.1.1
- is-identifier@1.1.0:
- dependencies:
- identifier-regex: 1.1.0
- super-regex: 1.1.0
-
is-inside-container@1.0.0:
dependencies:
is-docker: 3.0.0
@@ -5185,52 +3677,16 @@ snapshots:
dependencies:
is-inside-container: 1.0.0
- isexe@2.0.0: {}
-
jiti@1.21.7: {}
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.2:
- dependencies:
- '@types/estree': 1.0.9
- '@types/node': 26.6.2
-
- 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
-
knitwork@1.3.0: {}
- levn@0.4.1:
- dependencies:
- prelude-ls: 1.2.1
- type-check: 0.4.0
-
lilconfig@3.1.3: {}
lint-staged@17.5.1:
@@ -5241,16 +3697,6 @@ snapshots:
optionalDependencies:
yaml: 2.9.1
- local-pkg@1.2.1:
- dependencies:
- mlly: 1.8.2
- pkg-types: 2.3.3
- quansync: 0.2.11
-
- locate-path@6.0.0:
- dependencies:
- p-locate: 5.0.0
-
locate-path@7.2.0:
dependencies:
p-locate: 6.0.0
@@ -5259,8 +3705,6 @@ snapshots:
lodash.uniq@4.5.0: {}
- longest-streak@3.1.0: {}
-
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.6.0
@@ -5275,365 +3719,18 @@ snapshots:
'@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: {}
-
math-intrinsics@1.1.0: {}
- 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.0.28: {}
mdn-data@2.27.1: {}
- mdn-data@2.35.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.2:
- 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.2
- 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
-
mime-db@1.52.0: {}
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
- minimatch@10.2.6:
- dependencies:
- brace-expansion: 5.0.12
-
minipass@3.3.6:
dependencies:
yallist: 4.0.0
@@ -5647,7 +3744,7 @@ snapshots:
mkdirp@1.0.4: {}
- mkdist@2.4.1(typescript@6.0.3):
+ mkdist@2.4.1(typescript@7.0.2):
dependencies:
autoprefixer: 10.6.1(postcss@8.5.28)
citty: 0.1.6
@@ -5663,7 +3760,7 @@ snapshots:
semver: 7.8.5
tinyglobby: 0.2.17
optionalDependencies:
- typescript: 6.0.3
+ typescript: 7.0.2
mlly@1.8.2:
dependencies:
@@ -5672,18 +3769,12 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.4
- module-replacements@3.3.0: {}
-
mri@1.2.0: {}
ms@2.1.3: {}
nanoid@3.3.19: {}
- natural-compare@1.4.0: {}
-
- natural-orderby@5.0.0: {}
-
node-fetch-native@1.6.7: {}
node-gyp-build@4.8.4: {}
@@ -5705,8 +3796,6 @@ snapshots:
tinyexec: 0.3.2
ufo: 1.6.4
- object-deep-merge@2.0.1: {}
-
obug@2.2.1: {}
ofetch@1.5.1:
@@ -5726,77 +3815,64 @@ snapshots:
is-inside-container: 1.0.0
wsl-utils: 0.1.0
- optionator@0.9.4:
+ oxfmt@0.68.0:
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
-
- oxfmt@0.35.0:
- dependencies:
- tinypool: 2.1.0
+ tinypool: 2.1.2
optionalDependencies:
- '@oxfmt/binding-android-arm-eabi': 0.35.0
- '@oxfmt/binding-android-arm64': 0.35.0
- '@oxfmt/binding-darwin-arm64': 0.35.0
- '@oxfmt/binding-darwin-x64': 0.35.0
- '@oxfmt/binding-freebsd-x64': 0.35.0
- '@oxfmt/binding-linux-arm-gnueabihf': 0.35.0
- '@oxfmt/binding-linux-arm-musleabihf': 0.35.0
- '@oxfmt/binding-linux-arm64-gnu': 0.35.0
- '@oxfmt/binding-linux-arm64-musl': 0.35.0
- '@oxfmt/binding-linux-ppc64-gnu': 0.35.0
- '@oxfmt/binding-linux-riscv64-gnu': 0.35.0
- '@oxfmt/binding-linux-riscv64-musl': 0.35.0
- '@oxfmt/binding-linux-s390x-gnu': 0.35.0
- '@oxfmt/binding-linux-x64-gnu': 0.35.0
- '@oxfmt/binding-linux-x64-musl': 0.35.0
- '@oxfmt/binding-openharmony-arm64': 0.35.0
- '@oxfmt/binding-win32-arm64-msvc': 0.35.0
- '@oxfmt/binding-win32-ia32-msvc': 0.35.0
- '@oxfmt/binding-win32-x64-msvc': 0.35.0
-
- p-event@6.0.1:
- dependencies:
- p-timeout: 6.1.4
-
- p-limit@3.1.0:
- dependencies:
- yocto-queue: 0.1.0
+ '@oxfmt/binding-android-arm-eabi': 0.68.0
+ '@oxfmt/binding-android-arm64': 0.68.0
+ '@oxfmt/binding-darwin-arm64': 0.68.0
+ '@oxfmt/binding-darwin-x64': 0.68.0
+ '@oxfmt/binding-freebsd-x64': 0.68.0
+ '@oxfmt/binding-linux-arm-gnueabihf': 0.68.0
+ '@oxfmt/binding-linux-arm-musleabihf': 0.68.0
+ '@oxfmt/binding-linux-arm64-gnu': 0.68.0
+ '@oxfmt/binding-linux-arm64-musl': 0.68.0
+ '@oxfmt/binding-linux-ppc64-gnu': 0.68.0
+ '@oxfmt/binding-linux-riscv64-gnu': 0.68.0
+ '@oxfmt/binding-linux-riscv64-musl': 0.68.0
+ '@oxfmt/binding-linux-s390x-gnu': 0.68.0
+ '@oxfmt/binding-linux-x64-gnu': 0.68.0
+ '@oxfmt/binding-linux-x64-musl': 0.68.0
+ '@oxfmt/binding-openharmony-arm64': 0.68.0
+ '@oxfmt/binding-win32-arm64-msvc': 0.68.0
+ '@oxfmt/binding-win32-ia32-msvc': 0.68.0
+ '@oxfmt/binding-win32-x64-msvc': 0.68.0
+
+ oxlint@1.83.0:
+ optionalDependencies:
+ '@oxlint/binding-android-arm-eabi': 1.83.0
+ '@oxlint/binding-android-arm64': 1.83.0
+ '@oxlint/binding-darwin-arm64': 1.83.0
+ '@oxlint/binding-darwin-x64': 1.83.0
+ '@oxlint/binding-freebsd-x64': 1.83.0
+ '@oxlint/binding-linux-arm-gnueabihf': 1.83.0
+ '@oxlint/binding-linux-arm-musleabihf': 1.83.0
+ '@oxlint/binding-linux-arm64-gnu': 1.83.0
+ '@oxlint/binding-linux-arm64-musl': 1.83.0
+ '@oxlint/binding-linux-ppc64-gnu': 1.83.0
+ '@oxlint/binding-linux-riscv64-gnu': 1.83.0
+ '@oxlint/binding-linux-riscv64-musl': 1.83.0
+ '@oxlint/binding-linux-s390x-gnu': 1.83.0
+ '@oxlint/binding-linux-x64-gnu': 1.83.0
+ '@oxlint/binding-linux-x64-musl': 1.83.0
+ '@oxlint/binding-openharmony-arm64': 1.83.0
+ '@oxlint/binding-win32-arm64-msvc': 1.83.0
+ '@oxlint/binding-win32-ia32-msvc': 1.83.0
+ '@oxlint/binding-win32-x64-msvc': 1.83.0
p-limit@4.0.0:
dependencies:
yocto-queue: 1.2.2
- p-locate@5.0.0:
- dependencies:
- p-limit: 3.1.0
-
p-locate@6.0.0:
dependencies:
p-limit: 4.0.0
- p-timeout@6.1.4: {}
-
package-manager-detector@1.8.0: {}
- parse-gitignore@2.0.0: {}
-
- parse-imports-exports@0.2.4:
- dependencies:
- parse-statements: 1.0.11
-
- parse-statements@1.0.11: {}
-
- path-exists@4.0.0: {}
-
path-exists@5.0.0: {}
- path-key@3.1.1: {}
-
path-parse@1.0.7: {}
pathe@1.1.2: {}
@@ -5827,12 +3903,6 @@ snapshots:
exsolve: 1.1.1
pathe: 2.0.3
- pluralize@8.0.0: {}
-
- pnpm-workspace-yaml@1.9.1:
- dependencies:
- yaml: 2.9.1
-
postcss-calc@10.1.1(postcss@8.5.28):
dependencies:
postcss: 8.5.28
@@ -6002,30 +4072,12 @@ snapshots:
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: {}
-
pretty-bytes@7.1.3: {}
proxy-from-env@2.1.0: {}
- punycode@2.3.1: {}
-
- qified@0.10.1:
- dependencies:
- hookified: 2.2.0
-
- quansync@0.2.11: {}
-
quansync@1.0.0: {}
- quote-js-string@0.1.0: {}
-
rc9@2.1.2:
dependencies:
defu: 6.1.7
@@ -6042,22 +4094,16 @@ snapshots:
readdirp@5.1.1: {}
- 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.3:
+ redis@6.2.1:
dependencies:
- jsesc: 3.1.0
-
- reserved-identifiers@1.2.0: {}
-
- resolve-pkg-maps@1.0.0: {}
+ '@redis/bloom': 6.2.1(@redis/client@6.2.1)
+ '@redis/client': 6.2.1
+ '@redis/json': 6.2.1(@redis/client@6.2.1)
+ '@redis/search': 6.2.1(@redis/client@6.2.1)
+ '@redis/time-series': 6.2.1(@redis/client@6.2.1)
+ transitivePeerDependencies:
+ - '@node-rs/xxhash'
+ - '@opentelemetry/api'
resolve@1.22.12:
dependencies:
@@ -6066,16 +4112,17 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- rollup-plugin-dts@6.5.1(rollup@4.63.4)(typescript@6.0.3):
+ rollup-plugin-dts@6.5.1(@typescript/typescript6@6.0.2)(rollup@4.63.4)(typescript@7.0.2):
dependencies:
'@jridgewell/remapping': 2.3.5
'@jridgewell/sourcemap-codec': 1.6.0
convert-source-map: 2.0.0
magic-string: 0.30.21
rollup: 4.63.4
- typescript: 6.0.3
+ typescript: 7.0.2
optionalDependencies:
'@babel/code-frame': 8.0.6
+ '@typescript/typescript6': 6.0.2
rollup@4.63.4:
dependencies:
@@ -6113,22 +4160,10 @@ snapshots:
sax@1.6.1: {}
- scslre@0.3.0:
- dependencies:
- '@eslint-community/regexpp': 4.12.2
- refa: 0.12.1
- regexp-ast-analysis: 0.7.1
-
scule@1.3.0: {}
semver@7.8.5: {}
- shebang-command@2.0.0:
- dependencies:
- shebang-regex: 3.0.0
-
- shebang-regex@3.0.0: {}
-
sherif-darwin-arm64@1.13.0:
optional: true
@@ -6168,19 +4203,8 @@ snapshots:
simple-git-hooks@2.14.0: {}
- sisteransi@1.0.5: {}
-
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.24
-
- spdx-license-ids@3.0.24: {}
-
stack-trace@1.0.0-pre2: {}
stackback@0.0.2: {}
@@ -6191,20 +4215,12 @@ snapshots:
string-argv@0.3.2: {}
- strip-indent@4.1.1: {}
-
stylehacks@7.0.11(postcss@8.5.28):
dependencies:
browserslist: 4.29.0
postcss: 8.5.28
postcss-selector-parser: 7.1.6
- super-regex@1.1.0:
- dependencies:
- function-timeout: 1.0.2
- make-asynchronous: 1.1.0
- time-span: 5.1.0
-
supports-preserve-symlinks-flag@1.0.0: {}
svgo@4.1.0:
@@ -6217,12 +4233,6 @@ snapshots:
picocolors: 1.1.1
sax: 1.6.1
- synckit@0.11.13:
- dependencies:
- '@pkgr/core': 0.3.6
-
- tapable@2.3.3: {}
-
tar@6.2.1:
dependencies:
chownr: 2.0.0
@@ -6232,10 +4242,6 @@ snapshots:
mkdirp: 1.0.4
yallist: 4.0.0
- time-span@5.1.0:
- dependencies:
- convert-hrtime: 5.0.0
-
tinybench@6.1.4: {}
tinyexec@0.3.2: {}
@@ -6249,7 +4255,7 @@ snapshots:
fdir: 6.5.0(picomatch@4.0.7)
picomatch: 4.0.7
- tinypool@2.1.0: {}
+ tinypool@2.1.2: {}
tinyrainbow@3.1.1: {}
@@ -6257,30 +4263,34 @@ snapshots:
dependencies:
is-number: 7.0.0
- to-valid-identifier@1.0.0:
- dependencies:
- '@sindresorhus/base62': 1.0.0
- reserved-identifiers: 1.2.0
-
- toml-eslint-parser@1.0.3:
- dependencies:
- eslint-visitor-keys: 5.0.1
-
- ts-api-utils@2.5.0(typescript@6.0.3):
- dependencies:
- typescript: 6.0.3
-
- type-check@0.4.0:
- dependencies:
- prelude-ls: 1.2.1
-
- type-fest@4.41.0: {}
-
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
+
ufo@1.6.4: {}
- unbuild@3.6.1(typescript@6.0.3):
+ unbuild@3.6.1(@typescript/typescript6@6.0.2)(typescript@7.0.2):
dependencies:
'@rollup/plugin-alias': 5.1.1(rollup@4.63.4)
'@rollup/plugin-commonjs': 28.0.9(rollup@4.63.4)
@@ -6296,18 +4306,18 @@ snapshots:
hookable: 5.5.3
jiti: 2.7.0
magic-string: 0.30.21
- mkdist: 2.4.1(typescript@6.0.3)
+ mkdist: 2.4.1(typescript@7.0.2)
mlly: 1.8.2
pathe: 2.0.3
pkg-types: 2.3.3
pretty-bytes: 7.1.3
rollup: 4.63.4
- rollup-plugin-dts: 6.5.1(rollup@4.63.4)(typescript@6.0.3)
+ rollup-plugin-dts: 6.5.1(@typescript/typescript6@6.0.2)(rollup@4.63.4)(typescript@7.0.2)
scule: 1.3.0
tinyglobby: 0.2.17
untyped: 2.0.0
optionalDependencies:
- typescript: 6.0.3
+ typescript: 7.0.2
transitivePeerDependencies:
- '@typescript/typescript6'
- sass
@@ -6330,29 +4340,7 @@ snapshots:
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
+ undici@8.10.2: {}
untyped@2.0.0:
dependencies:
@@ -6368,14 +4356,8 @@ snapshots:
escalade: 3.2.0
picocolors: 1.1.1
- uri-js@4.4.1:
- dependencies:
- punycode: 2.3.1
-
util-deprecate@1.0.2: {}
- verkit@0.3.2: {}
-
verkit@0.4.1: {}
vite@7.3.6(@types/node@26.6.2)(jiti@2.7.0)(yaml@2.9.1):
@@ -6414,48 +4396,19 @@ snapshots:
transitivePeerDependencies:
- msw
- vue-eslint-parser@10.4.1(eslint@10.11.0(jiti@2.7.0)):
- dependencies:
- debug: 4.4.3
- eslint: 10.11.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: {}
+ ws@8.21.3: {}
wsl-utils@0.1.0:
dependencies:
is-wsl: 3.1.1
- xml-name-validator@5.0.0: {}
-
yallist@4.0.0: {}
- yaml-eslint-parser@2.1.0:
- dependencies:
- eslint-visitor-keys: 5.0.1
- yaml: 2.9.1
-
yaml@2.9.1: {}
- yocto-queue@0.1.0: {}
-
yocto-queue@1.2.2: {}
-
- zwitch@2.0.4: {}
diff --git a/scripts/sync-sponsors.ts b/scripts/sync-sponsors.ts
index 974acb6..1f4578e 100644
--- a/scripts/sync-sponsors.ts
+++ b/scripts/sync-sponsors.ts
@@ -17,7 +17,7 @@ interface Sponsor {
/** Tagline, present on sponsors that bought an ad slot. */
description?: string
/** Brand tint behind the ad card, both themes required together. */
- background?: { light: string, dark: string }
+ background?: { light: string; dark: string }
/** 1-based ad-grid position the sponsor bought. */
slot?: number
[key: string]: unknown
@@ -44,8 +44,7 @@ async function findReadmes(dir: string): Promise {
}
subdirPromises.push(findReadmes(fullPath))
- }
- else if (entry.isFile() && entry.name === README_FILE_NAME) {
+ } else if (entry.isFile() && entry.name === README_FILE_NAME) {
result.push(fullPath)
}
}
@@ -65,7 +64,7 @@ function escapeHtml(value: string): string {
.replaceAll('<', '<')
.replaceAll('>', '>')
.replaceAll('"', '"')
- .replaceAll('\'', ''')
+ .replaceAll("'", ''')
}
function getTierImageSizeAndColumns(tierLevel: number, tierLevels: number[]): [columns: number, imageSize: number] {
@@ -94,7 +93,9 @@ function buildSlotCards(slotSponsors: Sponsor[]): string[] {
const description = escapeHtml(sponsor.description ?? '')
lines.push(' ')
- lines.push(` ${name} ${description} | `)
+ lines.push(
+ ` ${name} ${description} | `,
+ )
lines.push('
')
}
@@ -110,9 +111,7 @@ function buildSponsorsSection(sponsors: Sponsor[]): string {
// Slot sponsors are featured as cards up top; the tier tables below carry
// everyone else so nobody appears twice.
- const slotSponsors = activeSponsors
- .filter(sponsor => sponsor.slot !== undefined)
- .sort((a, b) => a.slot! - b.slot!)
+ const slotSponsors = activeSponsors.filter(sponsor => sponsor.slot !== undefined).sort((a, b) => a.slot! - b.slot!)
const tieredSponsors = activeSponsors.filter(sponsor => sponsor.slot === undefined)
const groupedSponsors = new Map()
@@ -164,7 +163,9 @@ function buildSponsorsSection(sponsors: Sponsor[]): string {
const displayName = sponsor.name ?? sponsor.login
const escapedName = escapeHtml(displayName)
- lines.push(` }) ${escapedName} | `)
+ lines.push(
+ ` }) ${escapedName} | `,
+ )
const isRowEnd = (index + 1) % columns === 0
const isLast = index === tierSponsors.length - 1
@@ -215,13 +216,11 @@ async function main(): Promise {
}
// Links arrive with their tracking params already baked in upstream.
- const sponsors = await response.json() as Sponsor[]
+ const sponsors = (await response.json()) as Sponsor[]
const readmeFiles = await findReadmes(ROOT_DIR)
const replacement = buildSponsorsSection(sponsors)
- const readmeContents = await Promise.all(
- readmeFiles.map(readmePath => readFile(readmePath, 'utf8')),
- )
+ const readmeContents = await Promise.all(readmeFiles.map(readmePath => readFile(readmePath, 'utf8')))
const writePromises: Promise[] = []
let updatedCount = 0
@@ -239,7 +238,7 @@ async function main(): Promise {
console.log(`Updated sponsors section in ${updatedCount} README files.`)
}
-main().catch((error) => {
+main().catch(error => {
console.error(error)
process.exitCode = 1
})
diff --git a/tsconfig.json b/tsconfig.json
index ac7162b..b06914f 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -23,9 +23,5 @@
"*/*/tests",
"*/*/*"
],
- "exclude": [
- "playgrounds/**",
- "tests/bun/**",
- "tests/deno/**"
- ]
+ "exclude": ["playgrounds/**", "tests/bun/**", "tests/deno/**"]
}