From 61a00a7e340bb2b941b68d406e7b90078aaed0bf Mon Sep 17 00:00:00 2001 From: silverwind Date: Thu, 23 May 2024 23:53:45 +0200 Subject: [PATCH] convert to typescript --- .eslintrc.yaml | 4 +- .gitattributes | 1 + .github/workflows/ci.yaml | 10 +- Makefile | 42 +- updates.test.js => index.test.ts | 25 +- updates.js => index.ts | 252 ++- package-lock.json | 1509 +++++++++++++++-- package.json | 19 +- ...pdates.test.js.snap => index.test.ts.snap} | 135 +- tsconfig.json | 20 + vite.config.ts | 11 + vitest.config.js => vitest.config.ts | 2 +- 12 files changed, 1663 insertions(+), 367 deletions(-) rename updates.test.js => index.test.ts (90%) rename updates.js => index.ts (79%) rename snapshots/{updates.test.js.snap => index.test.ts.snap} (84%) create mode 100644 tsconfig.json create mode 100644 vite.config.ts rename vitest.config.js => vitest.config.ts (69%) diff --git a/.eslintrc.yaml b/.eslintrc.yaml index 72c1d0e..ee7de86 100644 --- a/.eslintrc.yaml +++ b/.eslintrc.yaml @@ -1,2 +1,4 @@ root: true -extends: silverwind +extends: + - silverwind + - silverwind-typescript diff --git a/.gitattributes b/.gitattributes index 55103af..30e33fc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ * text=auto eol=lf *.snap linguist-language=JavaScript linguist-generated fixtures/** linguist-generated +vendor/** linguist-vendored diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e9a561e..d740e6b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -7,17 +7,11 @@ jobs: fail-fast: false matrix: node: [18, 20, 22] - bun: [latest] - os: [ubuntu-latest, macos-latest] - - runs-on: ubuntu-latest + os: [ubuntu-latest, macos-latest, windows-latest] + runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{matrix.node}} - - uses: oven-sh/setup-bun@v1 - with: - bun-version: ${{matrix.bun}} - run: make lint test - - run: bun test diff --git a/Makefile b/Makefile index 5141cd6..036985d 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -SRC := updates.js -DST := dist/updates.js +SOURCE_FILES := index.ts +DIST_FILES := dist/index.js node_modules: package-lock.json npm install --no-save @@ -10,11 +10,13 @@ deps: node_modules .PHONY: lint lint: node_modules - npx eslint --color . + npx eslint --ext js,jsx,ts,tsx --color . + npx tsc .PHONY: lint-fix lint-fix: node_modules - npx eslint --color . --fix + npx eslint --ext js,jsx,ts,tsx --color . --fix + npx tsc .PHONY: test test: node_modules build @@ -24,18 +26,12 @@ test: node_modules build test-update: node_modules build npx vitest -u -.PHONY: test -test-bun: node_modules build - bun test - rm -rf __snapshots__ - .PHONY: build -build: $(DST) +build: node_modules $(DIST_FILES) -$(DST): $(SRC) node_modules -# workaround for https://github.com/evanw/esbuild/issues/1921 - npx esbuild --log-level=warning --platform=node --target=node18 --format=esm --bundle --minify --legal-comments=none --banner:js="import {createRequire} from 'module';const require = createRequire(import.meta.url);" --define:import.meta.VERSION=\"$(shell jq .version package.json)\" --outfile=$(DST) $(SRC) - chmod +x $(DST) +$(DIST_FILES): $(SOURCE_FILES) package-lock.json vite.config.ts + npx vite build + chmod +x $(DIST_FILES) .PHONY: publish publish: node_modules @@ -43,23 +39,23 @@ publish: node_modules npm publish .PHONY: update -update: node_modules build - node $(DST) -u +update: node_modules + npx updates -cu rm -rf node_modules package-lock.json npm install @touch node_modules -.PHONY: patch -patch: node_modules lint test - npx versions -c 'make --no-print-directory build' patch package.json package-lock.json +.PHONY: path +patch: node_modules lint test build + npx versions patch package.json package-lock.json @$(MAKE) --no-print-directory publish .PHONY: minor -minor: node_modules lint test - npx versions -c 'make --no-print-directory build' minor package.json package-lock.json +minor: node_modules lint test build + npx versions minor package.json package-lock.json @$(MAKE) --no-print-directory publish .PHONY: major -major: node_modules lint test - npx versions -c 'make --no-print-directory build' major package.json package-lock.json +major: node_modules lint test build + npx versions major package.json package-lock.json @$(MAKE) --no-print-directory publish diff --git a/updates.test.js b/index.test.ts similarity index 90% rename from updates.test.js rename to index.test.ts index 2f454a9..99aa43a 100644 --- a/updates.test.js +++ b/index.test.ts @@ -6,6 +6,8 @@ import {writeFile, readFile, rm} from "node:fs/promises"; import {fileURLToPath} from "node:url"; import {tmpdir} from "node:os"; import {env} from "node:process"; +import type {Server} from "node:http"; +import type {Service, Protocol} from "restana"; const testFile = fileURLToPath(new URL("fixtures/npm-test/package.json", import.meta.url)); const emptyFile = fileURLToPath(new URL("fixtures/npm-empty/package.json", import.meta.url)); @@ -14,7 +16,7 @@ const dualFile = fileURLToPath(new URL("fixtures/dual", import.meta.url)); const testPkg = JSON.parse(readFileSync(testFile, "utf8")); const testDir = mkdtempSync(join(tmpdir(), "updates-")); -const script = fileURLToPath(new URL("updates.js", import.meta.url)); +const script = fileURLToPath(new URL("dist/index.js", import.meta.url)); const dependencyTypes = [ "dependencies", @@ -24,7 +26,7 @@ const dependencyTypes = [ "resolutions", ]; -const testPackages = new Set(); +const testPackages: Set = new Set(); for (const dependencyType of dependencyTypes) { for (const name of Object.keys(testPkg[dependencyType] || [])) { testPackages.add(name); @@ -33,22 +35,29 @@ for (const dependencyType of dependencyTypes) { const pyTestPackages = new Set(["djlint", "PyYAML"]); -function makeUrl(server) { - const {port} = server.address(); +function makeUrl(server: Server) { + const {port}: any = server.address(); return Object.assign(new URL("http://localhost"), {port}).toString(); } -function defaultRoute(req, res) { +function defaultRoute(req: any, res: any) { console.error(`default handler hit for ${req.url}`); res.send(404); } -function resolutionsBasePackage(name) { +function resolutionsBasePackage(name: string) { const packages = name.match(/(@[^/]+\/)?([^/]+)/g) || []; return packages[packages.length - 1]; } -let npmServer, githubServer, githubUrl, pypiServer, pypiUrl, npmUrl; +let npmServer: Service | Server; +let githubServer: Service | Server; +let pypiServer: Service | Server; + +let githubUrl: string; +let pypiUrl: string; +let npmUrl: string; + beforeAll(async () => { let commits, tags; @@ -98,7 +107,7 @@ afterAll(async () => { ]); }); -function makeTest(args) { +function makeTest(args: string) { return async () => { const argsArr = [ ...args.split(/\s+/), "-c", diff --git a/updates.js b/index.ts similarity index 79% rename from updates.js rename to index.ts index 37285e5..df90621 100755 --- a/updates.js +++ b/index.ts @@ -16,6 +16,16 @@ import {getProperty} from "dot-prop"; import pAll from "p-all"; import memize from "memize"; import picomatch from "picomatch"; +import {version} from "./package.json" with {type: "json"}; +import type {AuthOptions} from "registry-auth-token"; +import type {AgentOptions} from "node:https"; + +type Npmrc = { + registry?: string, + ca?: string, + cafile?: string, + [other: string]: any, +} // regexes for url dependencies. does only github and only hash or exact semver // https://regex101.com/r/gCZzfK/2 @@ -23,11 +33,11 @@ const stripRe = /^.*?:\/\/(.*?@)?(github\.com[:/])/i; const partsRe = /^([^/]+)\/([^/#]+)?.*?\/([0-9a-f]+|v?[0-9]+\.[0-9]+\.[0-9]+)$/i; const hashRe = /^[0-9a-f]{7,}$/i; const versionRe = /[0-9]+(\.[0-9]+)?(\.[0-9]+)?/g; -const esc = str => str.replace(/[|\\{}()[\]^$+*?.-]/g, "\\$&"); +const esc = (str: string) => str.replace(/[|\\{}()[\]^$+*?.-]/g, "\\$&"); const gitInfo = memize(hostedGitInfo.fromUrl); const registryAuthToken = memize(rat); const normalizeUrl = memize(url => url.endsWith("/") ? url.substring(0, url.length - 1) : url); -const packageVersion = import.meta.VERSION || "0.0.0"; +const packageVersion = version || "0.0.0"; const sep = "\0"; const args = minimist(argv.slice(2), { @@ -89,32 +99,32 @@ const minor = argSetToRegexes(parseMixedArg(args.minor)); const allowDowngrade = parseMixedArg(args["allow-downgrade"]); const githubApiUrl = args.githubapi ? normalizeUrl(args.githubapi) : "https://api.github.com"; const pypiApiUrl = args.pypiapi ? normalizeUrl(args.pypiapi) : "https://pypi.org"; -const stripV = str => str.replace(/^v/, ""); +const stripV = (str: string) => str.replace(/^v/, ""); -function matchesAny(str, set) { +function matchesAny(str: string, set: boolean | Set) { for (const re of (set instanceof Set ? set : [])) { if (re.test(str)) return true; } return false; } -const registryUrl = memize((scope, npmrc) => { +const registryUrl = memize((scope: string, npmrc: Npmrc) => { const url = npmrc[`${scope}:registry`] || npmrc.registry; return url.endsWith("/") ? url : `${url}/`; }); -function findUpSync(filename, dir) { +function findUpSync(filename: string, dir: string): string | null { const path = join(dir, filename); try { accessSync(path); return path; } catch {} const parent = dirname(dir); return parent === dir ? null : findUpSync(filename, parent); } -function getAuthAndRegistry(name, registry, authTokenOpts, npmrc) { +function getAuthAndRegistry(name: string, registry: string, authTokenOpts: AuthOptions, npmrc: Npmrc) { if (!name.startsWith("@")) { return [registryAuthToken(registry, authTokenOpts), registry]; } else { - const scope = (/@[a-z0-9][\w-.]+/.exec(name) || [])[0]; + const scope = (/@[a-z0-9][\w-.]+/.exec(name) || [""])[0]; const url = normalizeUrl(registryUrl(scope, npmrc)); if (url !== registry) { try { @@ -126,7 +136,7 @@ function getAuthAndRegistry(name, registry, authTokenOpts, npmrc) { } } -const getFetchOpts = memize((agentOpts, authType, authToken) => { +const getFetchOpts = memize((agentOpts: AgentOptions, authType?: string, authToken?: string) => { return { ...(Object.keys(agentOpts).length && {agentOpts}), headers: { @@ -136,14 +146,14 @@ const getFetchOpts = memize((agentOpts, authType, authToken) => { }; }); -async function doFetch(url, opts) { +async function doFetch(url: string, opts: RequestInit) { if (args.verbose) console.error(`${magenta("fetch")} ${url}`); const res = await fetch(url, opts); if (args.verbose) console.error(`${res.ok ? green("done") : red("error")} ${url}`); return res; } -async function fetchNpmInfo(name, type, originalRegistry, agentOpts, authTokenOpts, npmrc) { +async function fetchNpmInfo(name: string, type: string, originalRegistry: string, agentOpts: AgentOptions, authTokenOpts: AuthOptions, npmrc: Npmrc) { const [auth, registry] = getAuthAndRegistry(name, originalRegistry, authTokenOpts, npmrc); const packageName = type === "resolutions" ? basename(name) : name; const urlName = packageName.replace(/\//g, "%2f"); @@ -161,7 +171,7 @@ async function fetchNpmInfo(name, type, originalRegistry, agentOpts, authTokenOp } } -async function fetchPypiInfo(name, type, agentOpts) { +async function fetchPypiInfo(name: string, type: string, agentOpts: AgentOptions) { const url = `${pypiApiUrl}/pypi/${name}/json`; const res = await doFetch(url, getFetchOpts(agentOpts)); @@ -176,7 +186,7 @@ async function fetchPypiInfo(name, type, agentOpts) { } } -function getInfoUrl({repository, homepage, info}, registry, name) { +function getInfoUrl({repository, homepage, info}: {repository: string | {[other: string]: any}, homepage: string, info: {[other: string]: any}}, registry: string, name: string) { if (info) { // pypi repository = info.project_urls.repository || @@ -202,10 +212,10 @@ function getInfoUrl({repository, homepage, info}, registry, name) { if (browse) { infoUrl = browse; } - if (infoUrl && repository.directory && info.treepath) { + if (infoUrl && typeof repository !== "string" && repository.directory && info?.treepath) { infoUrl = `${infoUrl}/${info.treepath}/HEAD/${repository.directory}`; } - if (!infoUrl && repository?.url && /^https?:/.test(repository.url)) { + if (!infoUrl && typeof repository !== "string" && repository?.url && /^https?:/.test(repository.url)) { infoUrl = repository.url; } if (!infoUrl && url) { @@ -216,12 +226,12 @@ function getInfoUrl({repository, homepage, info}, registry, name) { return infoUrl || homepage || ""; } -function finishWithMessage(message) { +function finishWithMessage(message: string) { console.info(args.json ? JSON.stringify({message}) : message); doExit(); } -function doExit(err) { +function doExit(err?: Error | void) { if (err) { const error = err.stack ?? err.message; console.info(args.json ? JSON.stringify({error}) : red(error)); @@ -229,18 +239,44 @@ function doExit(err) { process.exit(err ? 1 : 0); } -function outputDeps(deps = {}) { +type Dep = { + "old": string, + "new": string, + "oldPrint"?: string, + "newPrint"?: string, + "oldOriginal"?: string, + "info"?: string, + "age"?: string, +} + +type Deps = { + [name: string]: Dep, +} + +type DepsByMode = { + [mode: string]: Deps, +} + +type Output = { + results: { + [mode: string]: { + [type: string]: Deps, + } + } +} + +function outputDeps(deps: DepsByMode = {}) { for (const mode of Object.keys(deps)) { for (const value of Object.values(deps[mode])) { - if ("oldPrint" in value) { + if (typeof value.oldPrint === "string") { value.old = value.oldPrint; delete value.oldPrint; } - if ("newPrint" in value) { + if (typeof value.newPrint === "string") { value.new = value.newPrint; delete value.newPrint; } - if ("oldOriginal" in value) { + if (typeof value.oldOriginal === "string") { value.old = value.oldOriginal; delete value.oldOriginal; } @@ -253,7 +289,7 @@ function outputDeps(deps = {}) { } if (args.json) { - const output = {results: {}}; + const output: Output = {results: {}}; for (const mode of Object.keys(deps)) { for (const [key, value] of Object.entries(deps[mode])) { const [type, name] = key.split(sep); @@ -277,14 +313,14 @@ function outputDeps(deps = {}) { } // preserve file metadata on windows -async function write(file, content) { +async function write(file: string, content: string) { const {platform} = await import("node:os"); const isWindows = platform() === "win32"; if (isWindows) truncateSync(file, 0); writeFileSync(file, content, isWindows ? {flag: "r+"} : undefined); } -function highlightDiff(a, b, colorFn) { +function highlightDiff(a: string, b: string, colorFn: (str: string) => string) { if (a === b) return a; const aParts = a.split(/\./); const bParts = b.split(/\./); @@ -308,7 +344,7 @@ function highlightDiff(a, b, colorFn) { return res; } -function formatDeps(deps) { +function formatDeps(deps: DepsByMode) { const arr = [["NAME", "OLD", "NEW", "AGE", "INFO"]]; const seen = new Set(); @@ -323,7 +359,7 @@ function formatDeps(deps) { highlightDiff(data.old, data.new, red), highlightDiff(data.new, data.old, green), data.age || "", - data.info, + data.info || "", ]); } } @@ -334,7 +370,7 @@ function formatDeps(deps) { }); } -function updatePackageJson(pkgStr, deps) { +function updatePackageJson(pkgStr: string, deps: Deps) { let newPkgStr = pkgStr; for (const key of Object.keys(deps)) { const name = key.split(sep)[1]; @@ -345,7 +381,7 @@ function updatePackageJson(pkgStr, deps) { return newPkgStr; } -function updateProjectToml(pkgStr, deps) { +function updateProjectToml(pkgStr: string, deps: Deps) { let newPkgStr = pkgStr; for (const key of Object.keys(deps)) { const name = key.split(sep)[1]; @@ -356,34 +392,42 @@ function updateProjectToml(pkgStr, deps) { return newPkgStr; } -function updateRange(range, version) { +function updateRange(range: string, version: string) { return range.replace(/[0-9]+\.[0-9]+\.[0-9]+(-.+)?/g, version); } -function isVersionPrerelease(version) { +function isVersionPrerelease(version: string) { const parsed = parse(version); if (!parsed) return false; return Boolean(parsed.prerelease.length); } -function isRangePrerelease(range) { +function isRangePrerelease(range: string) { // can not use coerce here because it ignores prerelease tags return /[0-9]+\.[0-9]+\.[0-9]+-.+/.test(range); } -function rangeToVersion(range) { +function rangeToVersion(range: string) { try { - return coerce(range).version; + return coerce(range)?.version ?? null; } catch { return null; } } -function findVersion(data, versions, {range, semvers, usePre, useRel, useGreatest} = {}) { +type NpmData = {[other: string]: any}; + +type FindVersionOpts = { + range: string, + semvers: Set, + usePre: boolean, + useRel: boolean, + useGreatest: boolean, +} + +function findVersion(data: NpmData, versions: string[], {range, semvers, usePre, useRel, useGreatest}: FindVersionOpts) { let tempVersion = rangeToVersion(range); let tempDate = 0; - - semvers = new Set(semvers); usePre = isRangePrerelease(range) || usePre; if (usePre) { @@ -395,14 +439,16 @@ function findVersion(data, versions, {range, semvers, usePre, useRel, useGreates for (const version of versions) { const parsed = parse(version); - if (parsed.prerelease.length && (!usePre || useRel)) continue; + if (!parsed || !tempVersion || parsed.prerelease.length && (!usePre || useRel)) continue; const d = diff(tempVersion, parsed.version); if (!d || !semvers.has(d)) continue; // some registries like github don't have data.time available, fall back to greatest on them if (useGreatest || !("time" in data)) { - if (gte(coerce(parsed.version).version, tempVersion)) { + const coerced = coerce(parsed?.version)?.version; + if (!coerced) continue; + if (gte(coerced, tempVersion)) { tempVersion = parsed.version; } } else { @@ -417,12 +463,22 @@ function findVersion(data, versions, {range, semvers, usePre, useRel, useGreates return tempVersion || null; } -function findNewVersion(data, {mode, range, useGreatest, useRel, usePre, semvers} = {}) { +type FindNewVersionOpts = { + mode: string, + range: string, + usePre: boolean, + useRel: boolean, + useGreatest: boolean, + semvers: Set, +} + +function findNewVersion(data: NpmData, {mode, range, useGreatest, useRel, usePre, semvers}: FindNewVersionOpts) { if (range === "*") return null; // ignore wildcard if (range.includes("||")) return null; // ignore or-chains const versions = Object.keys(mode === "pypi" ? data.releases : data.versions) .filter(version => valid(version)); const version = findVersion(data, versions, {range, semvers, usePre, useRel, useGreatest}); + if (!version) return null; if (useGreatest) { return version; @@ -431,12 +487,16 @@ function findNewVersion(data, {mode, range, useGreatest, useRel, usePre, semvers let originalLatestTag; if (mode === "pypi") { originalLatestTag = data.info.version; // may not be a 3-part semver - latestTag = coerce(data.info.version).version; // add .0 to 6.0 so semver eats it + const coerced = coerce(data.info.version); + if (!coerced) throw new Error(`Unable to coerce ${data.info.version}`); + latestTag = coerced.version; // add .0 to 6.0 so semver eats it } else { latestTag = data["dist-tags"].latest; } - const oldVersion = coerce(range).version; + const coerced = coerce(range); + if (!coerced) throw new Error(`Unable to coerce ${range}`); + const oldVersion = coerced.version; const oldIsPre = isRangePrerelease(range); const newIsPre = isVersionPrerelease(version); const latestIsPre = isVersionPrerelease(latestTag); @@ -487,8 +547,8 @@ function findNewVersion(data, {mode, range, useGreatest, useRel, usePre, semvers } } -function fetchGitHub(url) { - const opts = {}; +function fetchGitHub(url: string) { + const opts: RequestInit = {}; const token = env.UPDATES_GITHUB_API_TOKEN || env.GITHUB_API_TOKEN || env.GH_TOKEN || env.HOMEBREW_GITHUB_API_TOKEN; if (token) { opts.headers = {Authorization: `Bearer ${token}`}; @@ -496,10 +556,10 @@ function fetchGitHub(url) { return doFetch(url, opts); } -async function getLastestCommit(user, repo) { +async function getLastestCommit(user: string, repo: string): Promise<{hash: string, commit: {[other: string]: any}}> { const url = `${githubApiUrl}/repos/${user}/${repo}/commits`; const res = await fetchGitHub(url); - if (!res || !res.ok) return; + if (!res || !res.ok) return {hash: "", commit: {}}; const data = await res.json(); const {sha: hash, commit} = data[0]; return {hash, commit}; @@ -507,20 +567,21 @@ async function getLastestCommit(user, repo) { // return list of tags sorted old to new // TODO: newDate support, semver matching -async function getTags(user, repo) { +async function getTags(user: string, repo: string): Promise { const res = await fetchGitHub(`${githubApiUrl}/repos/${user}/${repo}/git/refs/tags`); - if (!res || !res.ok) return; + if (!res || !res.ok) return []; const data = await res.json(); - const tags = data.map(entry => entry.ref.replace(/^refs\/tags\//, "")); + const tags = data.map((entry: {ref: string}) => entry.ref.replace(/^refs\/tags\//, "")); return tags; } -function selectTag(tags, oldRef, useGreatest) { +function selectTag(tags: string[], oldRef: string, useGreatest: boolean) { const oldRefBare = stripV(oldRef); if (!valid(oldRefBare)) return; if (!useGreatest) { const lastTag = tags.at(-1); + if (!lastTag) return; const lastTagBare = stripV(lastTag); if (!valid(lastTagBare)) return; @@ -545,14 +606,14 @@ function selectTag(tags, oldRef, useGreatest) { } } -async function checkUrlDep([key, dep], {useGreatest} = {}) { +async function checkUrlDep(key: string, dep: Dep, useGreatest: boolean) { const stripped = dep.old.replace(stripRe, ""); const [_, user, repo, oldRef] = partsRe.exec(stripped) || []; if (!user || !repo || !oldRef) return; if (hashRe.test(oldRef)) { const {hash, commit} = await getLastestCommit(user, repo); - if (!hash?.length) return; + if (!hash) return; const newDate = commit?.committer?.date ?? commit?.author?.date; const newRef = hash.substring(0, oldRef.length); @@ -569,13 +630,16 @@ async function checkUrlDep([key, dep], {useGreatest} = {}) { } } -function normalizeRange(range) { +function normalizeRange(range: string) { const versionMatches = range.match(versionRe); if (versionMatches?.length !== 1) return range; - return range.replace(versionRe, coerce(versionMatches[0])); + const coerced = coerce(versionMatches[0]); + if (!coerced) return range; + // @ts-ignore + return range.replace(versionRe, coerced); } -function parseMixedArg(arg) { +function parseMixedArg(arg: any) { if (arg === undefined) { return false; } else if (arg === "") { @@ -589,17 +653,17 @@ function parseMixedArg(arg) { } } -function extractCerts(str) { - return Array.from(str.matchAll(/(----BEGIN CERT[^]+?IFICATE----)/g), m => m[0]); +function extractCerts(str: string): string[] { + return Array.from(str.matchAll(/(----BEGIN CERT[^]+?IFICATE----)/g), (m: string[]) => m[0]); } -async function getCerts(extra = []) { +async function getCerts(extra: string[] = []) { return [...(await import("node:tls")).rootCertificates, ...extra]; } // convert arg from cli or config to regex -function argToRegex(arg, cli) { - if (cli) { +function argToRegex(arg: string | RegExp, cli: boolean) { + if (cli && typeof arg === "string") { return /\/.+\//.test(arg) ? new RegExp(arg.slice(1, -1)) : picomatch.makeRe(arg); } else { return arg instanceof RegExp ? arg : picomatch.makeRe(arg); @@ -607,7 +671,7 @@ function argToRegex(arg, cli) { } // parse cli arg into regex set -function argSetToRegexes(arg) { +function argSetToRegexes(arg: any) { if (arg instanceof Set) { const ret = new Set(); for (const entry of arg) { @@ -619,7 +683,7 @@ function argSetToRegexes(arg) { } // parse include/exclude into a Set of regexes -function matchersToRegexSet(cliArgs, configArgs) { +function matchersToRegexSet(cliArgs: string[], configArgs: string[]): Set { const ret = new Set(); for (const arg of cliArgs || []) { ret.add(argToRegex(arg, true)); @@ -627,10 +691,10 @@ function matchersToRegexSet(cliArgs, configArgs) { for (const arg of configArgs || []) { ret.add(argToRegex(arg, false)); } - return ret; + return ret as Set; } -function canInclude(name, mode, {include, exclude}) { +function canInclude(name: string, mode: string, include: Set, exclude: Set) { if (mode === "pypi" && name === "python") return false; if (!include.size && !exclude.size) return true; for (const re of exclude) { @@ -642,7 +706,7 @@ function canInclude(name, mode, {include, exclude}) { return include.size ? false : true; } -function resolveFiles(filesArg) { +function resolveFiles(filesArg: Set): Set { const resolvedFiles = new Set(); if (filesArg) { // check passed files @@ -651,7 +715,7 @@ function resolveFiles(filesArg) { try { stat = lstatSync(file); } catch (err) { - throw new Error(`Unable to open ${file}: ${err.message}`); + throw new Error(`Unable to open ${file}: ${(err as Error).message}`); } if (stat?.isFile()) { @@ -677,16 +741,17 @@ function resolveFiles(filesArg) { if (file) resolvedFiles.add(resolve(file)); } } - return resolvedFiles; + return resolvedFiles as Set; } async function main() { for (const stream of [process.stdout, process.stderr]) { + // @ts-ignore stream?._handle?.setBlocking?.(true); } const maxSockets = 96; - const concurrency = typeof args.sockets === "number" ? parseInt(args.sockets) : maxSockets; + const concurrency = typeof args.sockets === "number" ? args.sockets : maxSockets; const {help, version, file: filesArg, types, update} = args; if (help) { @@ -731,13 +796,13 @@ async function main() { } // output vars - const deps = {}; - const maybeUrlDeps = {}; - const pkgStrs = {}; - const filePerMode = {}; + const deps: DepsByMode = {}; + const maybeUrlDeps: DepsByMode = {}; + const pkgStrs: {[other: string]: string} = {}; + const filePerMode: {[other: string]: string} = {}; let numDependencies = 0; - for (const file of resolveFiles(parseMixedArg(filesArg))) { + for (const file of resolveFiles(parseMixedArg(filesArg) as Set)) { const projectDir = dirname(resolve(file)); const filename = basename(file); @@ -745,7 +810,7 @@ async function main() { filePerMode[mode] = file; if (!deps[mode]) deps[mode] = {}; - let config = {}; + let config: {[other: string]: any} = {}; try { ({default: config} = await Promise.any([ "updates.config.js", @@ -759,7 +824,8 @@ async function main() { ].map(str => import(join(projectDir, ...str.split("/")))))); } catch {} - let includeCli, excludeCli; + let includeCli: string[] = []; + let excludeCli: string[] = []; if (args.include && args.include !== true) { // cli includeCli = (Array.isArray(args.include) ? args.include : [args.include]).flatMap(item => item.split(",")); } @@ -769,18 +835,19 @@ async function main() { const include = matchersToRegexSet(includeCli, config?.include); const exclude = matchersToRegexSet(excludeCli, config?.exclude); - const agentOpts = {}; - const npmrc = rc("npm", {registry: "https://registry.npmjs.org"}); + const agentOpts: AgentOptions = {}; + const npmrc: Npmrc = rc("npm", {registry: "https://registry.npmjs.org"}); const authTokenOpts = {npmrc, recursive: true}; if (mode === "npm") { if (npmrc["strict-ssl"] === false) { agentOpts.rejectUnauthorized = false; } if (npmrc?.cafile) { - agentOpts.ca = getCerts(extractCerts(readFileSync(npmrc.cafile, "utf8"))); + agentOpts.ca = await getCerts(extractCerts(readFileSync(npmrc.cafile, "utf8"))); } if (npmrc?.ca) { - agentOpts.ca = getCerts(Array.isArray(npmrc.ca) ? npmrc.ca : [npmrc.ca].map(ca => extractCerts(ca))); + const cas = Array.isArray(npmrc.ca) ? npmrc.ca : [npmrc.ca]; + agentOpts.ca = await getCerts(cas.flatMap(ca => extractCerts(ca))); } } @@ -809,11 +876,11 @@ async function main() { } } - let pkg; + let pkg: {[other: string]: any}; try { pkgStrs[mode] = readFileSync(file, "utf8"); } catch (err) { - throw new Error(`Unable to open ${file}: ${err.message}`); + throw new Error(`Unable to open ${file}: ${(err as Error).message}`); } try { @@ -823,11 +890,11 @@ async function main() { pkg = (await import("@iarna/toml/parse-string.js")).default(pkgStrs[mode]); } } catch (err) { - throw new Error(`Error parsing ${file}: ${err.message}`); + throw new Error(`Error parsing ${file}: ${(err as Error).message}`); } for (const depType of dependencyTypes) { - let obj; + let obj: {[other: string]: string}; if (mode === "npm") { obj = pkg[depType] || {}; } else { @@ -835,15 +902,17 @@ async function main() { } for (const [name, value] of Object.entries(obj)) { - if (validRange(value) && canInclude(name, mode, {include, exclude})) { + if (validRange(value) && canInclude(name, mode, include, exclude)) { + // @ts-ignore deps[mode][`${depType}${sep}${name}`] = { old: normalizeRange(value), oldOriginal: value, - }; - } else if (mode === "npm" && canInclude(name, mode, {include, exclude})) { + } as Partial; + } else if (mode === "npm" && canInclude(name, mode, include, exclude)) { + // @ts-ignore maybeUrlDeps[`${depType}${sep}${name}`] = { old: value, - }; + } as Partial; } } } @@ -851,7 +920,7 @@ async function main() { numDependencies += Object.keys(deps[mode]).length + Object.keys(maybeUrlDeps).length; if (!numDependencies) continue; - let registry; + let registry: string; if (mode === "npm") { registry = normalizeUrl(args.registry || config.registry || npmrc.registry); } @@ -911,12 +980,15 @@ async function main() { const results = await pAll(Object.entries(maybeUrlDeps).map(([key, dep]) => () => { const name = key.split(sep)[1]; const useGreatest = typeof greatest === "boolean" ? greatest : matchesAny(name, greatest); - return checkUrlDep([key, dep], {useGreatest}); + // @ts-ignore + return checkUrlDep(key, dep, useGreatest); }), {concurrency}); for (const res of (results || []).filter(Boolean)) { + // @ts-ignore const {key, newRange, user, repo, oldRef, newRef, newDate} = res; deps[mode][key] = { + // @ts-ignore old: maybeUrlDeps[key].old, new: newRange, oldPrint: hashRe.test(oldRef) ? oldRef.substring(0, 7) : oldRef, @@ -952,7 +1024,7 @@ async function main() { const fn = (mode === "npm") ? updatePackageJson : updateProjectToml; await write(filePerMode[mode], fn(pkgStrs[mode], deps[mode])); } catch (err) { - throw new Error(`Error writing ${basename(filePerMode[mode])}: ${err.message}`); + throw new Error(`Error writing ${basename(filePerMode[mode])}: ${(err as Error).message}`); } // TODO: json @@ -960,7 +1032,7 @@ async function main() { } } - doExit(exitCode); + process.exit(exitCode); } main().catch(doExit).then(doExit); diff --git a/package-lock.json b/package-lock.json index 464e50b..2e03375 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,11 +13,21 @@ }, "devDependencies": { "@iarna/toml": "2.2.5", + "@types/hosted-git-info": "3.0.5", + "@types/iarna__toml": "2.0.5", + "@types/minimist": "1.2.5", + "@types/node": "20.12.12", + "@types/picomatch": "2.3.3", + "@types/rc": "1.2.4", + "@types/registry-auth-token": "4.2.4", + "@types/semver": "7.5.8", + "@types/text-table": "0.2.5", "ansi-regex": "6.0.1", "dot-prop": "9.0.0", "esbuild": "0.21.3", "eslint": "8.57.0", - "eslint-config-silverwind": "85.1.2", + "eslint-config-silverwind": "85.1.4", + "eslint-config-silverwind-typescript": "3.2.7", "execa": "8.0.1", "glowie": "1.3.1", "hosted-git-info": "7.0.2", @@ -32,7 +42,12 @@ "supports-color": "9.4.0", "text-table": "0.2.0", "timerel": "5.6.3", - "versions": "12.0.1", + "typescript": "5.4.5", + "typescript-config-silverwind": "4.3.2", + "versions": "12.1.0", + "vite": "5.2.11", + "vite-config-silverwind": "1.1.4", + "vite-plugin-dts": "3.9.1", "vitest": "1.6.0", "vitest-config-silverwind": "9.0.6" }, @@ -40,15 +55,6 @@ "node": ">=18" } }, - "node_modules/@antfu/utils": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.8.tgz", - "integrity": "sha512-rWQkqXRESdjXtc+7NRfK9lASQjpXJu1ayp7qi1d23zZorY+wBHVLHHoVcMsEnkqEBWTFqbztO7/QdJFzyEcLTg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/@babel/code-frame": { "version": "7.24.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", @@ -148,6 +154,18 @@ "node": ">=4" } }, + "node_modules/@babel/parser": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.3.tgz", @@ -645,6 +663,124 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, + "node_modules/@microsoft/api-extractor": { + "version": "7.43.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.43.0.tgz", + "integrity": "sha512-GFhTcJpB+MI6FhvXEI9b2K0snulNLWHqC/BbcJtyNYcKUiw7l3Lgis5ApsYncJ0leALX7/of4XfmXk+maT111w==", + "dev": true, + "dependencies": { + "@microsoft/api-extractor-model": "7.28.13", + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "4.0.2", + "@rushstack/rig-package": "0.5.2", + "@rushstack/terminal": "0.10.0", + "@rushstack/ts-command-line": "4.19.1", + "lodash": "~4.17.15", + "minimatch": "~3.0.3", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.4.2" + }, + "bin": { + "api-extractor": "bin/api-extractor" + } + }, + "node_modules/@microsoft/api-extractor-model": { + "version": "7.28.13", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.28.13.tgz", + "integrity": "sha512-39v/JyldX4MS9uzHcdfmjjfS6cYGAoXV+io8B5a338pkHiSt+gy2eXQ0Q7cGFJ7quSa1VqqlMdlPrB6sLR/cAw==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "~0.16.1", + "@rushstack/node-core-library": "4.0.2" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/typescript": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", + "integrity": "sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.16.2.tgz", + "integrity": "sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -680,10 +816,56 @@ "node": ">= 8" } }, + "node_modules/@phenomnomnominal/tsquery": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", + "integrity": "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==", + "dev": true, + "dependencies": { + "esquery": "^1.4.0" + }, + "peerDependencies": { + "typescript": "^3 || ^4 || ^5" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", - "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", "cpu": [ "arm" ], @@ -694,9 +876,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", - "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", "cpu": [ "arm64" ], @@ -707,9 +889,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", - "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", "cpu": [ "arm64" ], @@ -720,9 +902,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", - "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", "cpu": [ "x64" ], @@ -733,9 +915,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", - "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", "cpu": [ "arm" ], @@ -746,9 +928,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", - "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", "cpu": [ "arm" ], @@ -759,9 +941,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", - "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", "cpu": [ "arm64" ], @@ -772,9 +954,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", - "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", "cpu": [ "arm64" ], @@ -785,9 +967,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", - "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", "cpu": [ "ppc64" ], @@ -798,9 +980,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", - "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", "cpu": [ "riscv64" ], @@ -811,9 +993,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", - "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", "cpu": [ "s390x" ], @@ -824,9 +1006,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", - "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", "cpu": [ "x64" ], @@ -837,9 +1019,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", - "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", "cpu": [ "x64" ], @@ -850,9 +1032,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", - "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", "cpu": [ "arm64" ], @@ -863,9 +1045,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", - "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", "cpu": [ "ia32" ], @@ -876,9 +1058,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", - "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", "cpu": [ "x64" ], @@ -888,6 +1070,128 @@ "win32" ] }, + "node_modules/@rushstack/node-core-library": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-4.0.2.tgz", + "integrity": "sha512-hyES82QVpkfQMeBMteQUnrhASL/KHPhd7iJ8euduwNJG4mu2GSOKybf0rOEjOm1Wz7CwJEUm9y0yD7jg2C1bfg==", + "dev": true, + "dependencies": { + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "z-schema": "~5.0.2" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/rig-package": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.2.tgz", + "integrity": "sha512-mUDecIJeH3yYGZs2a48k+pbhM6JYwWlgjs2Ca5f2n1G2/kgdgP9D/07oglEGf6mRyXEnazhEENeYTSNDRCwdqA==", + "dev": true, + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/terminal": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.10.0.tgz", + "integrity": "sha512-UbELbXnUdc7EKwfH2sb8ChqNgapUOdqcCIdQP4NGxBpTZV2sQyeekuK3zmfQSa/MN+/7b4kBogl2wq0vpkpYGw==", + "dev": true, + "dependencies": { + "@rushstack/node-core-library": "4.0.2", + "supports-color": "~8.1.1" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/terminal/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@rushstack/terminal/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@rushstack/ts-command-line": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.19.1.tgz", + "integrity": "sha512-J7H768dgcpG60d7skZ5uSSwyCZs/S2HrWP1Ds8d1qYAyaaeJmpmmLr9BVw97RjFzmQPOYnoXcKA4GkqDCkduQg==", + "dev": true, + "dependencies": { + "@rushstack/terminal": "0.10.0", + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "string-argv": "~0.3.1" + } + }, + "node_modules/@rushstack/ts-command-line/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -941,6 +1245,12 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true + }, "node_modules/@types/eslint": { "version": "8.56.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", @@ -957,6 +1267,21 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/hosted-git-info": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hosted-git-info/-/hosted-git-info-3.0.5.tgz", + "integrity": "sha512-Dmngh7U003cOHPhKGyA7LWqrnvcTyILNgNPmNCxlx7j8MIi54iBliiT8XqVLIQ3GchoOjVAyBzNJVyuaJjqokg==", + "dev": true + }, + "node_modules/@types/iarna__toml": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/iarna__toml/-/iarna__toml-2.0.5.tgz", + "integrity": "sha512-I55y+SxI0ayM4MBU6yfGJGmi4wRll6wtSeKiFYAZj+Z5Q1DVbMgBSVDYY+xQZbjIlLs/pN4fidnvR8faDrmxPg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -970,22 +1295,259 @@ "dev": true, "peer": true }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", + "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "node_modules/@typescript-eslint/parser": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz", - "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==", + "node_modules/@types/picomatch": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.3.tgz", + "integrity": "sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==", + "dev": true + }, + "node_modules/@types/rc": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/rc/-/rc-1.2.4.tgz", + "integrity": "sha512-xD6+epQoMH79A1uwmJIq25D+XZ57jUzCQ1DGSvs3tGKdx7QDYOOaMh6m5KBkEIW4+Cy5++bZ7NLDfdpNiYVKYA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@types/minimist": "*" + } + }, + "node_modules/@types/registry-auth-token": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/registry-auth-token/-/registry-auth-token-4.2.4.tgz", + "integrity": "sha512-NsLrPRVZBHXXcDa/3vB3Aqla9xZ0bY8GRcD0UlhpMPeNcht540agdE6mOjYB2BZi/tIHxWD5qtRZ6YDZ4hTiqg==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/text-table": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.5.tgz", + "integrity": "sha512-hcZhlNvMkQG/k1vcZ6yHOl6WAYftQ2MLfTHcYRZ2xYZFD8tGVnE3qFV0lj1smQeDSR7/yY0PyuUalauf33bJeA==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.10.0.tgz", + "integrity": "sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/type-utils": "7.10.0", + "@typescript-eslint/utils": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.10.0.tgz", + "integrity": "sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "debug": "^4.3.4" }, "engines": { @@ -1005,13 +1567,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", - "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz", + "integrity": "sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0" + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1021,10 +1583,37 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.10.0.tgz", + "integrity": "sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.10.0", + "@typescript-eslint/utils": "7.10.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", - "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.10.0.tgz", + "integrity": "sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==", "dev": true, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1035,13 +1624,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", - "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz", + "integrity": "sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/visitor-keys": "7.10.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1099,15 +1688,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz", - "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.10.0.tgz", + "integrity": "sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0" + "@typescript-eslint/scope-manager": "7.10.0", + "@typescript-eslint/types": "7.10.0", + "@typescript-eslint/typescript-estree": "7.10.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -1121,12 +1710,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", - "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz", + "integrity": "sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.9.0", + "@typescript-eslint/types": "7.10.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1239,6 +1828,121 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/utils/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.11.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", + "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/shared": "3.4.27", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", + "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", + "dev": true, + "dependencies": { + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", + "dev": true + }, "node_modules/0http": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/0http/-/0http-3.5.3.tgz", @@ -1503,12 +2207,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1597,9 +2301,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001620", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz", - "integrity": "sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==", + "version": "1.0.30001621", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz", + "integrity": "sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==", "dev": true, "funding": [ { @@ -1719,6 +2423,20 @@ "node": ">=0.8.0" } }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1737,6 +2455,16 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + }, "node_modules/comment-parser": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", @@ -1746,6 +2474,12 @@ "node": ">= 12.0.0" } }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1839,6 +2573,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1977,9 +2717,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.774", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz", - "integrity": "sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==", + "version": "1.4.780", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.780.tgz", + "integrity": "sha512-NPtACGFe7vunRYzvYqVRhQvsDrTevxpgDKxG/Vcbe0BTNOY+5+/2mOXSw2ls7ToNbE5Bf/+uQbjTxcmwMozpCw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/enhanced-resolve": { @@ -1995,6 +2741,18 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2259,36 +3017,47 @@ } }, "node_modules/eslint-config-silverwind": { - "version": "85.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-silverwind/-/eslint-config-silverwind-85.1.2.tgz", - "integrity": "sha512-5kOOusdMDwIatI9y2mffC9eWmpUkprki9mFUT4icaCbIyMI06XdpgFxnfBmd7ZVA4dts67ImNR0T2s4fP5ughA==", + "version": "85.1.4", + "resolved": "https://registry.npmjs.org/eslint-config-silverwind/-/eslint-config-silverwind-85.1.4.tgz", + "integrity": "sha512-AutGS9PV1MMhsWNF3uDQjlTcjgbyTvV5T7uXxQo1MG+MvlaqQvfXLtMM5PKqTMhKfHS7IP1mytN57MqOoC5UsQ==", "dev": true, "dependencies": { "@eslint-community/eslint-plugin-eslint-comments": "4.3.0", "@stylistic/eslint-plugin-js": "2.1.0", - "@typescript-eslint/parser": "7.9.0", + "@typescript-eslint/parser": "7.10.0", "deepie-merge": "1.2.3", "eslint-import-resolver-typescript": "3.6.1", - "eslint-plugin-antfu": "2.2.0", "eslint-plugin-array-func": "4.0.0", "eslint-plugin-i": "2.29.1", "eslint-plugin-no-use-extend-native": "0.5.0", - "eslint-plugin-regexp": "2.5.0", + "eslint-plugin-regexp": "2.6.0", "eslint-plugin-sonarjs": "1.0.3", "eslint-plugin-unicorn": "53.0.0", "eslint-plugin-vitest": "0.4.1", "eslint-plugin-vitest-globals": "1.5.0", - "globals": "15.2.0" + "globals": "15.3.0" }, "peerDependencies": { "eslint": "^8", "typescript": "^5" } }, + "node_modules/eslint-config-silverwind-typescript": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/eslint-config-silverwind-typescript/-/eslint-config-silverwind-typescript-3.2.7.tgz", + "integrity": "sha512-U063ypLM6Ey9h3/Sy989MIG20yVc/y/Qy7bQ5UkfJFZBoqbll6xfzIicJuHyICNxHAda8xgN42ataTh7AYpp8A==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "7.10.0", + "@typescript-eslint/parser": "7.10.0", + "eslint-import-resolver-typescript": "3.6.1", + "eslint-plugin-etc": "2.0.3" + } + }, "node_modules/eslint-config-silverwind/node_modules/globals": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.2.0.tgz", - "integrity": "sha512-FQ5YwCHZM3nCmtb5FzEWwdUc9K5d3V/w9mzcz8iGD1gC/aOTHc6PouYu0kkKipNJqHAT7m51sqzQjEjIP+cK0A==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.3.0.tgz", + "integrity": "sha512-cCdyVjIUVTtX8ZsPkq1oCsOsLmGIswqnjZYMJJTGaNApj1yHtLSymKhwH51ttirREn75z3p4k051clwg7rvNKA==", "dev": true, "engines": { "node": ">=18" @@ -2297,6 +3066,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-etc": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-etc/-/eslint-etc-5.2.1.tgz", + "integrity": "sha512-lFJBSiIURdqQKq9xJhvSJFyPA+VeTh5xvk24e8pxVL7bwLBtGF60C/KRkLTMrvCZ6DA3kbPuYhLWY0TZMlqTsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0", + "tsutils": "^3.17.1", + "tsutils-etc": "^1.4.1" + }, + "peerDependencies": { + "eslint": "^8.0.0", + "typescript": ">=4.0.0" + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", @@ -2368,21 +3152,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-antfu": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-antfu/-/eslint-plugin-antfu-2.2.0.tgz", - "integrity": "sha512-QHzHYP+fyfhSkIdcuT9JZ4rCPuJOoHRE27gglPYHlJ6lxB7pO9i45yAy4aurx/rleBuEC27U4c//1Nwtbasj4Q==", - "dev": true, - "dependencies": { - "@antfu/utils": "^0.7.8" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "eslint": "*" - } - }, "node_modules/eslint-plugin-array-func": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-4.0.0.tgz", @@ -2395,6 +3164,24 @@ "eslint": ">=8.40.0" } }, + "node_modules/eslint-plugin-etc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-etc/-/eslint-plugin-etc-2.0.3.tgz", + "integrity": "sha512-o5RS/0YwtjlGKWjhKojgmm82gV1b4NQUuwk9zqjy9/EjxNFKKYCaF+0M7DkYBn44mJ6JYFZw3Ft249dkKuR1ew==", + "dev": true, + "dependencies": { + "@phenomnomnominal/tsquery": "^5.0.0", + "@typescript-eslint/experimental-utils": "^5.0.0", + "eslint-etc": "^5.1.0", + "requireindex": "~1.2.0", + "tslib": "^2.0.0", + "tsutils": "^3.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0", + "typescript": ">=4.0.0" + } + }, "node_modules/eslint-plugin-i": { "version": "2.29.1", "resolved": "https://registry.npmjs.org/eslint-plugin-i/-/eslint-plugin-i-2.29.1.tgz", @@ -2513,9 +3300,9 @@ } }, "node_modules/eslint-plugin-regexp": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.5.0.tgz", - "integrity": "sha512-I7vKcP0o75WS5SHiVNXN+Eshq49sbrweMQIuqSL3AId9AwDe9Dhbfug65vw64LxmOd4v+yf5l5Xt41y9puiq0g==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.6.0.tgz", + "integrity": "sha512-FCL851+kislsTEQEMioAlpDuK5+E5vs0hi1bF8cFlPlHcEjeRhuAzEsGikXRreE+0j4WhW2uO54MqTjXtYOi3A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", @@ -2763,13 +3550,10 @@ } }, "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - } + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/esutils": { "version": "2.0.3", @@ -2871,9 +3655,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -2928,6 +3712,20 @@ "is-callable": "^1.1.3" } }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2986,6 +3784,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", @@ -3279,6 +4086,15 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, "node_modules/hosted-git-info": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", @@ -3325,6 +4141,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -3347,6 +4172,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { "once": "^1.3.0", @@ -3514,6 +4340,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-get-set-prop": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-get-set-prop/-/is-get-set-prop-1.0.0.tgz", @@ -3776,6 +4611,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3861,6 +4702,15 @@ "json5": "lib/cli.js" } }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -3870,6 +4720,12 @@ "json-buffer": "3.0.1" } }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3920,6 +4776,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -3984,12 +4858,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -4068,6 +4942,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -4389,6 +5269,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4822,6 +5708,24 @@ "jsesc": "bin/jsesc" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -4896,9 +5800,9 @@ } }, "node_modules/rollup": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", - "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -4911,22 +5815,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.17.2", - "@rollup/rollup-android-arm64": "4.17.2", - "@rollup/rollup-darwin-arm64": "4.17.2", - "@rollup/rollup-darwin-x64": "4.17.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", - "@rollup/rollup-linux-arm-musleabihf": "4.17.2", - "@rollup/rollup-linux-arm64-gnu": "4.17.2", - "@rollup/rollup-linux-arm64-musl": "4.17.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", - "@rollup/rollup-linux-riscv64-gnu": "4.17.2", - "@rollup/rollup-linux-s390x-gnu": "4.17.2", - "@rollup/rollup-linux-x64-gnu": "4.17.2", - "@rollup/rollup-linux-x64-musl": "4.17.2", - "@rollup/rollup-win32-arm64-msvc": "4.17.2", - "@rollup/rollup-win32-ia32-msvc": "4.17.2", - "@rollup/rollup-win32-x64-msvc": "4.17.2", + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", "fsevents": "~2.3.2" } }, @@ -5132,6 +6036,15 @@ "node": ">=8" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", @@ -5168,9 +6081,15 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "node_modules/stackback": { @@ -5185,6 +6104,29 @@ "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", "dev": true }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -5449,6 +6391,51 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils-etc": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tsutils-etc/-/tsutils-etc-1.4.2.tgz", + "integrity": "sha512-2Dn5SxTDOu6YWDNKcx1xu2YUy6PUeKrWZB/x2cQ8vY2+iz3JRembKn/iZ0JLT1ZudGNwQQvtFX9AwvRHbXuPUg==", + "dev": true, + "dependencies": { + "@types/yargs": "^17.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "ts-flags": "bin/ts-flags", + "ts-kind": "bin/ts-kind" + }, + "peerDependencies": { + "tsutils": "^3.0.0", + "typescript": ">=4.0.0" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5564,7 +6551,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5573,6 +6559,12 @@ "node": ">=14.17" } }, + "node_modules/typescript-config-silverwind": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript-config-silverwind/-/typescript-config-silverwind-4.3.2.tgz", + "integrity": "sha512-3g/VjgGOJ7XboDfi3emeZTyDGeMVPQfqmQf6icuTEiPryTHHJPUwAWIRJ+1HUn0wczJ4oL2H1WldP3rQR+LQag==", + "dev": true + }, "node_modules/ufo": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", @@ -5595,6 +6587,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", @@ -5644,13 +6651,22 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/versions": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/versions/-/versions-12.0.1.tgz", - "integrity": "sha512-oCkAhoscH5+axMBTnRYhieGy6DnQrn7ZofV4535oiS/TFD4lrC6kjvoxB3OvSa0nregdbeO//fTM6IZMcFKg6Q==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/versions/-/versions-12.1.0.tgz", + "integrity": "sha512-EPoR6mP5wuQse4xRBlz+2ChFL/TguUdu3ymQmh4sz5zxQY4p4wYZx5vD/ZioKlLo4qTL0+YYAnyBokRlYylP1Q==", "dev": true, "bin": { - "versions": "bin/versions.js" + "versions": "dist/versions.js" }, "engines": { "node": ">=18" @@ -5711,6 +6727,22 @@ } } }, + "node_modules/vite-config-silverwind": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/vite-config-silverwind/-/vite-config-silverwind-1.1.4.tgz", + "integrity": "sha512-oxMaxo689YzNmVnP9nTMIpUgWXbwvk8NvIHVF7AfdlVcH46DtrkoFm+637ZTY5Tw9XdYhRgqc2nXD0lT0PWYAQ==", + "dev": true, + "dependencies": { + "vite-plugin-dts": "3.9.1", + "vite-string-plugin": "1.3.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "vite": "^5.2.11" + } + }, "node_modules/vite-node": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", @@ -5733,6 +6765,33 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-plugin-dts": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-3.9.1.tgz", + "integrity": "sha512-rVp2KM9Ue22NGWB8dNtWEr+KekN3rIgz1tWD050QnRGlriUCmaDwa7qA5zDEjbXg5lAXhYMSBJtx3q3hQIJZSg==", + "dev": true, + "dependencies": { + "@microsoft/api-extractor": "7.43.0", + "@rollup/pluginutils": "^5.1.0", + "@vue/language-core": "^1.8.27", + "debug": "^4.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.8", + "vue-tsc": "^1.8.27" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "typescript": "*", + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, "node_modules/vite-string-plugin": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/vite-string-plugin/-/vite-string-plugin-1.3.1.tgz", @@ -6231,6 +7290,45 @@ } } }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "dependencies": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/vue-tsc/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6308,18 +7406,71 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -6331,6 +7482,26 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/z-schema": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz", + "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==", + "dev": true, + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } } } } diff --git a/package.json b/package.json index 5ed8606..59c3d0c 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,21 @@ ], "devDependencies": { "@iarna/toml": "2.2.5", + "@types/hosted-git-info": "3.0.5", + "@types/iarna__toml": "2.0.5", + "@types/minimist": "1.2.5", + "@types/node": "20.12.12", + "@types/picomatch": "2.3.3", + "@types/rc": "1.2.4", + "@types/registry-auth-token": "4.2.4", + "@types/semver": "7.5.8", + "@types/text-table": "0.2.5", "ansi-regex": "6.0.1", "dot-prop": "9.0.0", "esbuild": "0.21.3", "eslint": "8.57.0", - "eslint-config-silverwind": "85.1.2", + "eslint-config-silverwind": "85.1.4", + "eslint-config-silverwind-typescript": "3.2.7", "execa": "8.0.1", "glowie": "1.3.1", "hosted-git-info": "7.0.2", @@ -34,7 +44,12 @@ "supports-color": "9.4.0", "text-table": "0.2.0", "timerel": "5.6.3", - "versions": "12.0.1", + "typescript": "5.4.5", + "typescript-config-silverwind": "4.3.2", + "versions": "12.1.0", + "vite": "5.2.11", + "vite-config-silverwind": "1.1.4", + "vite-plugin-dts": "3.9.1", "vitest": "1.6.0", "vitest-config-silverwind": "9.0.6" } diff --git a/snapshots/updates.test.js.snap b/snapshots/index.test.ts.snap similarity index 84% rename from snapshots/updates.test.js.snap rename to snapshots/index.test.ts.snap index 2d509bb..9f9ab3f 100644 --- a/snapshots/updates.test.js.snap +++ b/snapshots/index.test.ts.snap @@ -6,47 +6,47 @@ exports[`dual 1`] = ` "dependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "7.11.5", + "new": "7.24.5", "old": "7.0.0", }, "gulp-sourcemaps": { "info": "https://github.com/gulp-sourcemaps/gulp-sourcemaps", - "new": "2.6.5", + "new": "3.0.0", "old": "2.0.0", }, "html-webpack-plugin": { "info": "https://github.com/jantimon/html-webpack-plugin", - "new": "4.0.0-beta.11", + "new": "5.6.0", "old": "4.0.0-alpha.2", }, "jpeg-buffer-orientation": { "info": "https://github.com/fisker/jpeg-buffer-orientation", - "new": "2.0.3", + "new": "4.1.1", "old": "0.0.0", }, "noty": { "info": "https://github.com/needim/noty", - "new": "3.2.0-beta", + "new": "3.2.0-beta-deprecated", "old": "3.1.0", }, "prismjs": { - "info": "https://github.com/LeaVerou/prism", - "new": "1.17.1", + "info": "https://github.com/PrismJS/prism", + "new": "1.29.0", "old": "1.0.0", }, "react": { "info": "https://github.com/facebook/react/tree/HEAD/packages/react", - "new": "18.2.0", + "new": "18.3.1", "old": "18.0", }, "styled-components": { "info": "https://github.com/styled-components/styled-components", - "new": "5.0.0-rc.2", + "new": "6.1.11", "old": "2.5.0-1", }, "svgstore": { "info": "https://github.com/svgstore/svgstore", - "new": "^3.0.0-2", + "new": "^3.0.1", "old": "^3.0.0", }, "updates": { @@ -58,14 +58,14 @@ exports[`dual 1`] = ` "peerDependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "~7.11.5", + "new": "~7.24.5", "old": "~6.0.0", }, }, "resolutions": { "versions/updates": { "info": "https://github.com/silverwind/updates", - "new": "^10.0.0", + "new": "^16.1.1", "old": "^1.0.0", }, }, @@ -100,7 +100,7 @@ exports[`dual 2 1`] = ` "dependencies": { "noty": { "info": "https://github.com/needim/noty", - "new": "3.2.0-beta", + "new": "3.2.0-beta-deprecated", "old": "3.1.0", }, }, @@ -128,7 +128,7 @@ exports[`exclude 2 1`] = ` "dependencies": { "react": { "info": "https://github.com/facebook/react/tree/HEAD/packages/react", - "new": "18.2.0", + "new": "18.3.1", "old": "18.0", }, }, @@ -142,7 +142,7 @@ exports[`exclude 3 1`] = ` "dependencies": { "gulp-sourcemaps": { "info": "https://github.com/gulp-sourcemaps/gulp-sourcemaps", - "new": "2.6.5", + "new": "3.0.0", "old": "2.0.0", }, }, @@ -170,22 +170,22 @@ exports[`greatest 1`] = ` "dependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "7.11.5", + "new": "7.24.5", "old": "7.0.0", }, "gulp-sourcemaps": { "info": "https://github.com/gulp-sourcemaps/gulp-sourcemaps", - "new": "2.6.5", + "new": "3.0.0", "old": "2.0.0", }, "html-webpack-plugin": { "info": "https://github.com/jantimon/html-webpack-plugin", - "new": "4.0.0-beta.11", + "new": "5.6.0", "old": "4.0.0-alpha.2", }, "jpeg-buffer-orientation": { "info": "https://github.com/fisker/jpeg-buffer-orientation", - "new": "2.0.3", + "new": "4.1.1", "old": "0.0.0", }, "noty": { @@ -194,20 +194,25 @@ exports[`greatest 1`] = ` "old": "3.1.0", }, "prismjs": { - "info": "https://github.com/LeaVerou/prism", - "new": "1.17.1", + "info": "https://github.com/PrismJS/prism", + "new": "1.29.0", "old": "1.0.0", }, "react": { "info": "https://github.com/facebook/react/tree/HEAD/packages/react", - "new": "18.2.0", + "new": "18.3.1", "old": "18.0", }, "styled-components": { "info": "https://github.com/styled-components/styled-components", - "new": "5.0.0-rc.2", + "new": "6.1.11", "old": "2.5.0-1", }, + "svgstore": { + "info": "https://github.com/svgstore/svgstore", + "new": "^3.0.1", + "old": "^3.0.0", + }, "updates": { "info": "https://github.com/silverwind/updates", "new": "537ccb7", @@ -217,14 +222,14 @@ exports[`greatest 1`] = ` "peerDependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "~7.11.5", + "new": "~7.24.5", "old": "~6.0.0", }, }, "resolutions": { "versions/updates": { "info": "https://github.com/silverwind/updates", - "new": "^10.0.0", + "new": "^16.1.1", "old": "^1.0.0", }, }, @@ -238,7 +243,7 @@ exports[`include 1`] = ` "dependencies": { "noty": { "info": "https://github.com/needim/noty", - "new": "3.2.0-beta", + "new": "3.2.0-beta-deprecated", "old": "3.1.0", }, }, @@ -252,7 +257,7 @@ exports[`include 2 1`] = ` "dependencies": { "noty": { "info": "https://github.com/needim/noty", - "new": "3.2.0-beta", + "new": "3.2.0-beta-deprecated", "old": "3.1.0", }, }, @@ -266,7 +271,7 @@ exports[`include 3 1`] = ` "dependencies": { "noty": { "info": "https://github.com/needim/noty", - "new": "3.2.0-beta", + "new": "3.2.0-beta-deprecated", "old": "3.1.0", }, }, @@ -280,47 +285,47 @@ exports[`latest 1`] = ` "dependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "7.11.5", + "new": "7.24.5", "old": "7.0.0", }, "gulp-sourcemaps": { "info": "https://github.com/gulp-sourcemaps/gulp-sourcemaps", - "new": "2.6.5", + "new": "3.0.0", "old": "2.0.0", }, "html-webpack-plugin": { "info": "https://github.com/jantimon/html-webpack-plugin", - "new": "4.0.0-beta.11", + "new": "5.6.0", "old": "4.0.0-alpha.2", }, "jpeg-buffer-orientation": { "info": "https://github.com/fisker/jpeg-buffer-orientation", - "new": "2.0.3", + "new": "4.1.1", "old": "0.0.0", }, "noty": { "info": "https://github.com/needim/noty", - "new": "3.2.0-beta", + "new": "3.2.0-beta-deprecated", "old": "3.1.0", }, "prismjs": { - "info": "https://github.com/LeaVerou/prism", - "new": "1.17.1", + "info": "https://github.com/PrismJS/prism", + "new": "1.29.0", "old": "1.0.0", }, "react": { "info": "https://github.com/facebook/react/tree/HEAD/packages/react", - "new": "18.2.0", + "new": "18.3.1", "old": "18.0", }, "styled-components": { "info": "https://github.com/styled-components/styled-components", - "new": "5.0.0-rc.2", + "new": "6.1.11", "old": "2.5.0-1", }, "svgstore": { "info": "https://github.com/svgstore/svgstore", - "new": "^3.0.0-2", + "new": "^3.0.1", "old": "^3.0.0", }, "updates": { @@ -332,14 +337,14 @@ exports[`latest 1`] = ` "peerDependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "~7.11.5", + "new": "~7.24.5", "old": "~6.0.0", }, }, "resolutions": { "versions/updates": { "info": "https://github.com/silverwind/updates", - "new": "^10.0.0", + "new": "^16.1.1", "old": "^1.0.0", }, }, @@ -358,7 +363,7 @@ exports[`patch 1`] = ` }, "html-webpack-plugin": { "info": "https://github.com/jantimon/html-webpack-plugin", - "new": "4.0.0-beta.11", + "new": "4.0.4", "old": "4.0.0-alpha.2", }, "noty": { @@ -368,7 +373,7 @@ exports[`patch 1`] = ` }, "svgstore": { "info": "https://github.com/svgstore/svgstore", - "new": "^3.0.0-2", + "new": "^3.0.1", "old": "^3.0.0", }, "updates": { @@ -394,47 +399,47 @@ exports[`prerelease 1`] = ` "dependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "7.11.5", + "new": "8.0.0-alpha.8", "old": "7.0.0", }, "gulp-sourcemaps": { "info": "https://github.com/gulp-sourcemaps/gulp-sourcemaps", - "new": "2.6.5", + "new": "3.0.0", "old": "2.0.0", }, "html-webpack-plugin": { "info": "https://github.com/jantimon/html-webpack-plugin", - "new": "4.0.0-beta.11", + "new": "5.6.0", "old": "4.0.0-alpha.2", }, "jpeg-buffer-orientation": { "info": "https://github.com/fisker/jpeg-buffer-orientation", - "new": "2.0.3", + "new": "4.1.1", "old": "0.0.0", }, "noty": { "info": "https://github.com/needim/noty", - "new": "3.2.0-beta", + "new": "3.2.0-beta-deprecated", "old": "3.1.0", }, "prismjs": { - "info": "https://github.com/LeaVerou/prism", - "new": "1.17.1", + "info": "https://github.com/PrismJS/prism", + "new": "1.29.0", "old": "1.0.0", }, "react": { "info": "https://github.com/facebook/react/tree/HEAD/packages/react", - "new": "18.3.0-next-d1e35c703-20221110", + "new": "19.0.0-rc-4c2e457c7c-20240522", "old": "18.0", }, "styled-components": { "info": "https://github.com/styled-components/styled-components", - "new": "5.0.0-rc.2", + "new": "6.1.11", "old": "2.5.0-1", }, "svgstore": { "info": "https://github.com/svgstore/svgstore", - "new": "^3.0.0-2", + "new": "^3.0.1", "old": "^3.0.0", }, "updates": { @@ -446,14 +451,14 @@ exports[`prerelease 1`] = ` "peerDependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "~7.11.5", + "new": "~8.0.0-alpha.8", "old": "~6.0.0", }, }, "resolutions": { "versions/updates": { "info": "https://github.com/silverwind/updates", - "new": "^10.0.0", + "new": "^16.1.1", "old": "^1.0.0", }, }, @@ -486,22 +491,22 @@ exports[`release 1`] = ` "dependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "7.11.5", + "new": "7.24.5", "old": "7.0.0", }, "gulp-sourcemaps": { "info": "https://github.com/gulp-sourcemaps/gulp-sourcemaps", - "new": "2.6.5", + "new": "3.0.0", "old": "2.0.0", }, "html-webpack-plugin": { "info": "https://github.com/jantimon/html-webpack-plugin", - "new": "3.2.0", + "new": "5.6.0", "old": "4.0.0-alpha.2", }, "jpeg-buffer-orientation": { "info": "https://github.com/fisker/jpeg-buffer-orientation", - "new": "2.0.3", + "new": "4.1.1", "old": "0.0.0", }, "noty": { @@ -510,23 +515,23 @@ exports[`release 1`] = ` "old": "3.1.0", }, "prismjs": { - "info": "https://github.com/LeaVerou/prism", - "new": "1.17.1", + "info": "https://github.com/PrismJS/prism", + "new": "1.29.0", "old": "1.0.0", }, "react": { "info": "https://github.com/facebook/react/tree/HEAD/packages/react", - "new": "18.2.0", + "new": "18.3.1", "old": "18.0", }, "styled-components": { "info": "https://github.com/styled-components/styled-components", - "new": "4.4.1", + "new": "6.1.11", "old": "2.5.0-1", }, "svgstore": { "info": "https://github.com/svgstore/svgstore", - "new": "^2.0.3", + "new": "^3.0.1", "old": "^3.0.0", }, "updates": { @@ -538,14 +543,14 @@ exports[`release 1`] = ` "peerDependencies": { "@babel/preset-env": { "info": "https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env", - "new": "~7.11.5", + "new": "~7.24.5", "old": "~6.0.0", }, }, "resolutions": { "versions/updates": { "info": "https://github.com/silverwind/updates", - "new": "^10.0.0", + "new": "^16.1.1", "old": "^1.0.0", }, }, diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffb253 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "typescript-config-silverwind", + "include": [ + "**/*", + "**/.*", + "**/.*/**/*", + "**/.*/**/.*", + ], + "exclude": [ + "**/dist/**", + ], + "compilerOptions": { + "strict": true, + "types": [ + "jest-extended", + "vite/client", + "vitest/globals", + ], + }, +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..94f82c2 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,11 @@ +import {defineConfig} from "vite"; +import {lib} from "vite-config-silverwind"; + +export default defineConfig(lib({ + url: import.meta.url, + noDts: true, + build: { + target: "node18", + minify: true, + } +})); diff --git a/vitest.config.js b/vitest.config.ts similarity index 69% rename from vitest.config.js rename to vitest.config.ts index cec649e..15da13a 100644 --- a/vitest.config.js +++ b/vitest.config.ts @@ -1,4 +1,4 @@ -import {defineConfig} from "vitest/dist/config.js"; +import {defineConfig} from "vitest/config"; import {backend} from "vitest-config-silverwind"; export default defineConfig(backend({