From 4e8d486de6e5b70c21daf31e583c23397e8b64a0 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 13 Jan 2026 17:51:55 -0800 Subject: [PATCH 1/3] upgrades --- .eslintrc.json | 7 - .github/eslint.json | 18 - .github/workflows/node.js.yml | 30 - .github/workflows/test.yml | 20 + LICENSE | 2 +- eslint.config.js | 8 + package.json | 15 +- rollup.config.js | 6 +- test/.eslintrc.json | 10 - test/arabicLocale-test.js | 58 +- test/defaultLocale-test.js | 8 +- test/format-test.js | 16 +- test/format-trim-test.js | 14 +- test/format-type-%-test.js | 10 +- test/format-type-b-test.js | 6 +- test/format-type-c-test.js | 6 +- test/format-type-d-test.js | 40 +- test/format-type-e-test.js | 10 +- test/format-type-f-test.js | 18 +- test/format-type-g-test.js | 6 +- test/format-type-n-test.js | 6 +- test/format-type-none-test.js | 16 +- test/format-type-o-test.js | 6 +- test/format-type-p-test.js | 6 +- test/format-type-r-test.js | 6 +- test/format-type-s-test.js | 18 +- test/format-type-x-test.js | 34 +- test/formatPrefix-test.js | 10 +- test/formatSpecifier-test.js | 22 +- test/locale-test.js | 28 +- test/precisionFixed-test.js | 4 +- test/precisionPrefix-test.js | 10 +- test/precisionRound-test.js | 4 +- vitest.config.js | 3 + yarn.lock | 1518 ++++++++++++++++++--------------- 35 files changed, 1056 insertions(+), 943 deletions(-) delete mode 100644 .eslintrc.json delete mode 100644 .github/eslint.json delete mode 100644 .github/workflows/node.js.yml create mode 100644 .github/workflows/test.yml create mode 100644 eslint.config.js delete mode 100644 test/.eslintrc.json create mode 100644 vitest.config.js diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 2ce7cf2..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "eslint:recommended", - "parserOptions": { - "sourceType": "module", - "ecmaVersion": 8 - } -} diff --git a/.github/eslint.json b/.github/eslint.json deleted file mode 100644 index c280fdb..0000000 --- a/.github/eslint.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "problemMatcher": [ - { - "owner": "eslint-compact", - "pattern": [ - { - "regexp": "^(.+):\\sline\\s(\\d+),\\scol\\s(\\d+),\\s(Error|Warning|Info)\\s-\\s(.+)\\s\\((.+)\\)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5, - "code": 6 - } - ] - } - ] -} diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml deleted file mode 100644 index 7e5ee59..0000000 --- a/.github/workflows/node.js.yml +++ /dev/null @@ -1,30 +0,0 @@ -# https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: Node.js CI - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [14.x] - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: yarn --frozen-lockfile - - run: | - echo ::add-matcher::.github/eslint.json - yarn run eslint src test --format=compact - - run: yarn test diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..492ed27 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,20 @@ +name: Test + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: 24 + cache: yarn + - run: yarn --frozen-lockfile + - run: yarn test + - run: yarn lint diff --git a/LICENSE b/LICENSE index b014515..a8918c4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2010-2021 Mike Bostock +Copyright 2010-2026 Mike Bostock Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..47276a5 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,8 @@ +import js from "@eslint/js"; +import globals from "globals"; +import {defineConfig} from "eslint/config"; + +export default defineConfig([ + {files: ["**/*.{js,ts,jsx,tsx}"], plugins: {js}, extends: ["js/recommended"]}, + {files: ["**/*.{js,ts,jsx,tsx}"], languageOptions: {globals: globals.browser}} +]); diff --git a/package.json b/package.json index 8865d58..a358d37 100644 --- a/package.json +++ b/package.json @@ -39,15 +39,16 @@ "./src/defaultLocale.js" ], "devDependencies": { - "eslint": "8", - "mocha": "9", - "rollup": "2", - "rollup-plugin-terser": "7" + "@rollup/plugin-terser": "^0.4.4", + "eslint": "^9.39.2", + "globals": "^17.0.0", + "rollup": "^4.55.1", + "vitest": "^4.0.17" }, "scripts": { - "test": "mocha 'test/**/*-test.js' && eslint src test", - "prepublishOnly": "rm -rf dist && yarn test && rollup -c", - "postpublish": "git push && git push --tags && cd ../d3.github.com && git pull && cp ../${npm_package_name}/dist/${npm_package_name}.js ${npm_package_name}.v${npm_package_version%%.*}.js && cp ../${npm_package_name}/dist/${npm_package_name}.min.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git add ${npm_package_name}.v${npm_package_version%%.*}.js ${npm_package_name}.v${npm_package_version%%.*}.min.js && git commit -m \"${npm_package_name} ${npm_package_version}\" && git push && cd -" + "test": "vitest", + "lint": "eslint src test", + "prepublishOnly": "rm -rf dist && rollup -c" }, "engines": { "node": ">=12" diff --git a/rollup.config.js b/rollup.config.js index 4c6ccad..5e6988a 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,6 +1,6 @@ -import {readFileSync} from "fs"; -import {terser} from "rollup-plugin-terser"; -import * as meta from "./package.json"; +import {readFileSync} from "node:fs"; +import terser from "@rollup/plugin-terser"; +import meta from "./package.json" with {type: "json"}; // Extract copyrights from the LICENSE. const copyright = readFileSync("./LICENSE", "utf-8") diff --git a/test/.eslintrc.json b/test/.eslintrc.json deleted file mode 100644 index d03ea20..0000000 --- a/test/.eslintrc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "eslint:recommended", - "parserOptions": { - "sourceType": "module", - "ecmaVersion": 8 - }, - "env": { - "mocha": true - } -} diff --git a/test/arabicLocale-test.js b/test/arabicLocale-test.js index fbf5c12..2e81369 100644 --- a/test/arabicLocale-test.js +++ b/test/arabicLocale-test.js @@ -1,115 +1,115 @@ -import assert from "assert"; -import {readFileSync} from "fs"; +import {readFileSync} from "node:fs"; +import {assert, test} from "vitest"; import {formatLocale} from "../src/index.js"; function locale(locale) { return formatLocale(JSON.parse(readFileSync(`./locale/${locale}.json`, "utf8"))); } -it("formatLocale() can format numbers using ar-001 locale", () => { +test("formatLocale() can format numbers using ar-001 locale", () => { assert.strictEqual(locale("ar-001").format("$,.2f")(-1234.56), "−١٬٢٣٤٫٥٦"); }); -it("formatLocale() can format numbers using ar-AE locale", () => { +test("formatLocale() can format numbers using ar-AE locale", () => { assert.strictEqual(locale("ar-AE").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ د.إ."); }); -it("formatLocale() can format numbers using ar-BH locale", () => { +test("formatLocale() can format numbers using ar-BH locale", () => { assert.strictEqual(locale("ar-BH").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ د.ب."); }); -it("formatLocale() can format numbers using ar-DJ locale", () => { +test("formatLocale() can format numbers using ar-DJ locale", () => { assert.strictEqual(locale("ar-DJ").format("$,.2f")(1234.56), "\u200fFdj ١٬٢٣٤٫٥٦"); }); -it("formatLocale() can format numbers using ar-DZ locale", () => { +test("formatLocale() can format numbers using ar-DZ locale", () => { assert.strictEqual(locale("ar-DZ").format("$,.2f")(1234.56), "د.ج. 1.234,56"); }); -it("formatLocale() can format numbers using ar-EG locale", () => { +test("formatLocale() can format numbers using ar-EG locale", () => { assert.strictEqual(locale("ar-EG").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ ج.م."); }); -it("formatLocale() can format numbers using ar-EH locale", () => { +test("formatLocale() can format numbers using ar-EH locale", () => { assert.strictEqual(locale("ar-EH").format("$,.2f")(1234.56), "د.م. 1,234.56"); }); -it("formatLocale() can format numbers using ar-ER locale", () => { +test("formatLocale() can format numbers using ar-ER locale", () => { assert.strictEqual(locale("ar-ER").format("$,.2f")(1234.56), "Nfk ١٬٢٣٤٫٥٦"); }); -it("formatLocale() can format numbers using ar-IL locale", () => { +test("formatLocale() can format numbers using ar-IL locale", () => { assert.strictEqual(locale("ar-IL").format("$,.2f")(1234.56), "₪ ١٬٢٣٤٫٥٦"); }); -it("formatLocale() can format numbers using ar-IQ locale", () => { +test("formatLocale() can format numbers using ar-IQ locale", () => { assert.strictEqual(locale("ar-IQ").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ د.ع."); }); -it("formatLocale() can format numbers using ar-JO locale", () => { +test("formatLocale() can format numbers using ar-JO locale", () => { assert.strictEqual(locale("ar-JO").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ د.أ."); }); -it("formatLocale() can format numbers using ar-KM locale", () => { +test("formatLocale() can format numbers using ar-KM locale", () => { assert.strictEqual(locale("ar-KM").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ ف.ج.ق."); }); -it("formatLocale() can format numbers using ar-KW locale", () => { +test("formatLocale() can format numbers using ar-KW locale", () => { assert.strictEqual(locale("ar-KW").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ د.ك."); }); -it("formatLocale() can format numbers using ar-LB locale", () => { +test("formatLocale() can format numbers using ar-LB locale", () => { assert.strictEqual(locale("ar-LB").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ ل.ل."); }); -it("formatLocale() can format numbers using ar-MA locale", () => { +test("formatLocale() can format numbers using ar-MA locale", () => { assert.strictEqual(locale("ar-MA").format("$,.2f")(1234.56), "د.م. 1.234,56"); }); -it("formatLocale() can format numbers using ar-MR locale", () => { +test("formatLocale() can format numbers using ar-MR locale", () => { assert.strictEqual(locale("ar-MR").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ أ.م."); }); -it("formatLocale() can format numbers using ar-OM locale", () => { +test("formatLocale() can format numbers using ar-OM locale", () => { assert.strictEqual(locale("ar-OM").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ ر.ع."); }); -it("formatLocale() can format numbers using ar-PS locale", () => { +test("formatLocale() can format numbers using ar-PS locale", () => { assert.strictEqual(locale("ar-PS").format("$,.2f")(1234.56), "₪ ١٬٢٣٤٫٥٦"); }); -it("formatLocale() can format numbers using ar-QA locale", () => { +test("formatLocale() can format numbers using ar-QA locale", () => { assert.strictEqual(locale("ar-QA").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ ر.ق."); }); -it("formatLocale() can format numbers using ar-SA locale", () => { +test("formatLocale() can format numbers using ar-SA locale", () => { assert.strictEqual(locale("ar-SA").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ ر.س."); }); -it("formatLocale() can format numbers using ar-SD locale", () => { +test("formatLocale() can format numbers using ar-SD locale", () => { assert.strictEqual(locale("ar-SD").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ ج.س."); }); -it("formatLocale() can format numbers using ar-SO locale", () => { +test("formatLocale() can format numbers using ar-SO locale", () => { assert.strictEqual(locale("ar-SO").format("$,.2f")(1234.56), "‏S ١٬٢٣٤٫٥٦"); }); -it("formatLocale() can format numbers using ar-SS locale", () => { +test("formatLocale() can format numbers using ar-SS locale", () => { assert.strictEqual(locale("ar-SS").format("$,.2f")(1234.56), "£ ١٬٢٣٤٫٥٦"); }); -it("formatLocale() can format numbers using ar-SY locale", () => { +test("formatLocale() can format numbers using ar-SY locale", () => { assert.strictEqual(locale("ar-SY").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ ل.س."); }); -it("formatLocale() can format numbers using ar-TD locale", () => { +test("formatLocale() can format numbers using ar-TD locale", () => { assert.strictEqual(locale("ar-TD").format("$,.2f")(1234.56), "\u200fFCFA ١٬٢٣٤٫٥٦"); }); -it("formatLocale() can format numbers using ar-TN locale", () => { +test("formatLocale() can format numbers using ar-TN locale", () => { assert.strictEqual(locale("ar-TN").format("$,.2f")(1234.56), "د.ت. 1.234,56"); }); -it("formatLocale() can format numbers using ar-YE locale", () => { +test("formatLocale() can format numbers using ar-YE locale", () => { assert.strictEqual(locale("ar-YE").format("$,.2f")(1234.56), "١٬٢٣٤٫٥٦ ر.ى."); }); diff --git a/test/defaultLocale-test.js b/test/defaultLocale-test.js index f842f2f..d5b7265 100644 --- a/test/defaultLocale-test.js +++ b/test/defaultLocale-test.js @@ -1,4 +1,4 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format, formatPrefix, formatDefaultLocale} from "../src/index.js"; const enUs = { @@ -16,7 +16,7 @@ const frFr = { percent: "\u202f%" }; -it("formatDefaultLocale(definition) returns the new default locale", () => { +test("formatDefaultLocale(definition) returns the new default locale", () => { const locale = formatDefaultLocale(frFr); try { assert.strictEqual(locale.format("$,.2f")(12345678.90), "12.345.678,90 €"); @@ -26,7 +26,7 @@ it("formatDefaultLocale(definition) returns the new default locale", () => { } }); -it("formatDefaultLocale(definition) affects format", () => { +test("formatDefaultLocale(definition) affects format", () => { const locale = formatDefaultLocale(frFr); try { assert.strictEqual(format, locale.format); @@ -36,7 +36,7 @@ it("formatDefaultLocale(definition) affects format", () => { } }); -it("formatDefaultLocale(definition) affects formatPrefix", () => { +test("formatDefaultLocale(definition) affects formatPrefix", () => { const locale = formatDefaultLocale(frFr); try { assert.strictEqual(formatPrefix, locale.formatPrefix); diff --git a/test/format-test.js b/test/format-test.js index 6d34e25..c1643ec 100644 --- a/test/format-test.js +++ b/test/format-test.js @@ -1,36 +1,36 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(specifier)(number) returns a string", () => { +test("format(specifier)(number) returns a string", () => { assert.strictEqual(typeof format("d")(0), "string"); }); -it("format(specifier).toString() returns the normalized specifier", () => { +test("format(specifier).toString() returns the normalized specifier", () => { assert.strictEqual(format("d") + "", " >-d"); }); -it("format(specifier) throws an error for invalid formats", () => { +test("format(specifier) throws an error for invalid formats", () => { assert.throws(() => { format("foo"); }, /invalid format: foo/); assert.throws(() => { format(".-2s"); }, /invalid format: \.-2s/); assert.throws(() => { format(".f"); }, /invalid format: \.f/); }); -it("format(\",.\") unreasonable precision values are clamped to reasonable values", () => { +test("format(\",.\") unreasonable precision values are clamped to reasonable values", () => { assert.strictEqual(format(".30f")(0), "0.00000000000000000000"); assert.strictEqual(format(".0g")(1), "1"); }); -it("format(\"s\") handles very small and very large values", () => { +test("format(\"s\") handles very small and very large values", () => { assert.strictEqual(format("s")(Number.MIN_VALUE), "0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005y"); assert.strictEqual(format("s")(Number.MAX_VALUE), "179769000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Y"); }); -it("format(\"n\") is equivalent to format(\",g\")", () => { +test("format(\"n\") is equivalent to format(\",g\")", () => { assert.strictEqual(format("n")(123456.78), "123,457"); assert.strictEqual(format(",g")(123456.78), "123,457"); }); -it("format(\"012\") is equivalent to format(\"0=12\")", () => { +test("format(\"012\") is equivalent to format(\"0=12\")", () => { assert.strictEqual(format("012")(123.456), "00000123.456"); assert.strictEqual(format("0=12")(123.456), "00000123.456"); }); diff --git a/test/format-trim-test.js b/test/format-trim-test.js index 8729535..b221dc0 100644 --- a/test/format-trim-test.js +++ b/test/format-trim-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"~r\") trims insignificant zeros", () => { +test("format(\"~r\") trims insignificant zeros", () => { const f = format("~r"); assert.strictEqual(f(1), "1"); assert.strictEqual(f(0.1), "0.1"); @@ -18,7 +18,7 @@ it("format(\"~r\") trims insignificant zeros", () => { assert.strictEqual(f(0.11111119), "0.111111"); }); -it("format(\"~e\") trims insignificant zeros", () => { +test("format(\"~e\") trims insignificant zeros", () => { const f = format("~e"); assert.strictEqual(f(0), "0e+0"); assert.strictEqual(f(42), "4.2e+1"); @@ -30,7 +30,7 @@ it("format(\"~e\") trims insignificant zeros", () => { assert.strictEqual(f(0.00000000042), "4.2e-10"); }); -it("format(\".4~e\") trims insignificant zeros", () => { +test("format(\".4~e\") trims insignificant zeros", () => { const f = format(".4~e"); assert.strictEqual(f(0.00000000012345), "1.2345e-10"); assert.strictEqual(f(0.00000000012340), "1.234e-10"); @@ -46,7 +46,7 @@ it("format(\".4~e\") trims insignificant zeros", () => { assert.strictEqual(f(-12300000000), "−1.23e+10"); }); -it("format(\"~s\") trims insignificant zeros", () => { +test("format(\"~s\") trims insignificant zeros", () => { const f = format("~s"); assert.strictEqual(f(0), "0"); assert.strictEqual(f(1), "1"); @@ -71,7 +71,7 @@ it("format(\"~s\") trims insignificant zeros", () => { assert.strictEqual(f(1e15), "1P"); }); -it("format(\"~%\") trims insignificant zeros", () => { +test("format(\"~%\") trims insignificant zeros", () => { const f = format("~%"); assert.strictEqual(f(0), "0%"); assert.strictEqual(f(0.1), "10%"); @@ -80,7 +80,7 @@ it("format(\"~%\") trims insignificant zeros", () => { assert.strictEqual(f(0.0001), "0.01%"); }); -it("trimming respects commas", () => { +test("trimming respects commas", () => { const f = format(",~g"); assert.strictEqual(f(10000.0), "10,000"); assert.strictEqual(f(10000.1), "10,000.1"); diff --git a/test/format-type-%-test.js b/test/format-type-%-test.js index f5209c0..03bed27 100644 --- a/test/format-type-%-test.js +++ b/test/format-type-%-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"%\") can output a whole percentage", () => { +test("format(\"%\") can output a whole percentage", () => { const f = format(".0%"); assert.strictEqual(f(0), "0%"); assert.strictEqual(f(0.042), "4%"); @@ -12,19 +12,19 @@ it("format(\"%\") can output a whole percentage", () => { assert.strictEqual(f(-4.2), "−420%"); }); -it("format(\".%\") can output a percentage with precision", () => { +test("format(\".%\") can output a percentage with precision", () => { const f1 = format(".1%"); assert.strictEqual(f1(0.234), "23.4%"); const f2 = format(".2%"); assert.strictEqual(f2(0.234), "23.40%"); }); -it("format(\"%\") fill respects suffix", () => { +test("format(\"%\") fill respects suffix", () => { assert.strictEqual(format("020.0%")(42), "0000000000000004200%"); assert.strictEqual(format("20.0%")(42), " 4200%"); }); -it("format(\"^%\") align center puts suffix adjacent to number", () => { +test("format(\"^%\") align center puts suffix adjacent to number", () => { assert.strictEqual(format("^21.0%")(0.42), " 42% "); assert.strictEqual(format("^21,.0%")(422), " 42,200% "); assert.strictEqual(format("^21,.0%")(-422), " −42,200% "); diff --git a/test/format-type-b-test.js b/test/format-type-b-test.js index f97e4b3..78f409b 100644 --- a/test/format-type-b-test.js +++ b/test/format-type-b-test.js @@ -1,10 +1,10 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"b\") binary", () => { +test("format(\"b\") binary", () => { assert.strictEqual(format("b")(10), "1010"); }); -it("format(\"#b\") binary with prefix", () => { +test("format(\"#b\") binary with prefix", () => { assert.strictEqual(format("#b")(10), "0b1010"); }); diff --git a/test/format-type-c-test.js b/test/format-type-c-test.js index c7a0d7d..13f742c 100644 --- a/test/format-type-c-test.js +++ b/test/format-type-c-test.js @@ -1,13 +1,13 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format, formatLocale} from "../src/index.js"; -it("format(\"c\") unicode character", () => { +test("format(\"c\") unicode character", () => { assert.strictEqual(format("c")("☃"), "☃"); assert.strictEqual(format("020c")("☃"), "0000000000000000000☃"); assert.strictEqual(format(" ^20c")("☃"), " ☃ "); assert.strictEqual(format("$c")("☃"), "$☃"); }); -it("format(\"c\") does not localize a decimal point", () => { +test("format(\"c\") does not localize a decimal point", () => { assert.strictEqual(formatLocale({decimal: "/"}).format("c")("."), "."); }); diff --git a/test/format-type-d-test.js b/test/format-type-d-test.js index c219a07..05c82f6 100644 --- a/test/format-type-d-test.js +++ b/test/format-type-d-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"d\") can zero fill", () => { +test("format(\"d\") can zero fill", () => { const f = format("08d"); assert.strictEqual(f(0), "00000000"); assert.strictEqual(f(42), "00000042"); @@ -13,7 +13,7 @@ it("format(\"d\") can zero fill", () => { assert.strictEqual(f(-42000000), "−42000000"); }); -it("format(\"d\") can space fill", () => { +test("format(\"d\") can space fill", () => { const f = format("8d"); assert.strictEqual(f(0), " 0"); assert.strictEqual(f(42), " 42"); @@ -25,7 +25,7 @@ it("format(\"d\") can space fill", () => { assert.strictEqual(f(-42000000), "−42000000"); }); -it("format(\"d\") can underscore fill", () => { +test("format(\"d\") can underscore fill", () => { const f = format("_>8d"); assert.strictEqual(f(0), "_______0"); assert.strictEqual(f(42), "______42"); @@ -37,7 +37,7 @@ it("format(\"d\") can underscore fill", () => { assert.strictEqual(f(-42000000), "−42000000"); }); -it("format(\"d\") can zero fill with sign and group", () => { +test("format(\"d\") can zero fill with sign and group", () => { const f = format("+08,d"); assert.strictEqual(f(0), "+0,000,000"); assert.strictEqual(f(42), "+0,000,042"); @@ -49,19 +49,19 @@ it("format(\"d\") can zero fill with sign and group", () => { assert.strictEqual(f(-42000000), "−42,000,000"); }); -it("format(\"d\") always uses zero precision", () => { +test("format(\"d\") always uses zero precision", () => { const f = format(".2d"); assert.strictEqual(f(0), "0"); assert.strictEqual(f(42), "42"); assert.strictEqual(f(-4.2), "−4"); }); -it("format(\"d\") rounds non-integers", () => { +test("format(\"d\") rounds non-integers", () => { const f = format("d"); assert.strictEqual(f(4.2), "4"); }); -it("format(\",d\") can group thousands", () => { +test("format(\",d\") can group thousands", () => { const f = format(",d"); assert.strictEqual(f(0), "0"); assert.strictEqual(f(42), "42"); @@ -76,7 +76,7 @@ it("format(\",d\") can group thousands", () => { assert.strictEqual(f(1.3e107), "130,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000"); }); -it("format(\"0,d\") can group thousands and zero fill", () => { +test("format(\"0,d\") can group thousands and zero fill", () => { assert.strictEqual(format("01,d")(0), "0"); assert.strictEqual(format("01,d")(0), "0"); assert.strictEqual(format("02,d")(0), "00"); @@ -94,7 +94,7 @@ it("format(\"0,d\") can group thousands and zero fill", () => { assert.strictEqual(format("015,d")(1e21), "1,000,000,000,000,000,000,000"); }); -it("format(\"0,d\") can group thousands and zero fill with overflow", () => { +test("format(\"0,d\") can group thousands and zero fill with overflow", () => { assert.strictEqual(format("01,d")(1), "1"); assert.strictEqual(format("01,d")(1), "1"); assert.strictEqual(format("02,d")(12), "12"); @@ -104,7 +104,7 @@ it("format(\"0,d\") can group thousands and zero fill with overflow", () => { assert.strictEqual(format("013,d")(1234567890123), "1,234,567,890,123"); }); -it("format(\",d\") can group thousands and space fill", () => { +test("format(\",d\") can group thousands and space fill", () => { assert.strictEqual(format("1,d")(0), "0"); assert.strictEqual(format("1,d")(0), "0"); assert.strictEqual(format("2,d")(0), " 0"); @@ -115,7 +115,7 @@ it("format(\",d\") can group thousands and space fill", () => { assert.strictEqual(format("21,d")(0), " 0"); }); -it("format(\",d\") can group thousands and space fill with overflow", () => { +test("format(\",d\") can group thousands and space fill with overflow", () => { assert.strictEqual(format("1,d")(1), "1"); assert.strictEqual(format("1,d")(1), "1"); assert.strictEqual(format("2,d")(12), "12"); @@ -125,7 +125,7 @@ it("format(\",d\") can group thousands and space fill with overflow", () => { assert.strictEqual(format("13,d")(1234567890123), "1,234,567,890,123"); }); -it("format(\" { +test("format(\" { assert.strictEqual(format("<1,d")(0), "0"); assert.strictEqual(format("<1,d")(0), "0"); assert.strictEqual(format("<2,d")(0), "0 "); @@ -136,7 +136,7 @@ it("format(\" { assert.strictEqual(format("<21,d")(0), "0 "); }); -it("format(\">d\") align right", () => { +test("format(\">d\") align right", () => { assert.strictEqual(format(">1,d")(0), "0"); assert.strictEqual(format(">1,d")(0), "0"); assert.strictEqual(format(">2,d")(0), " 0"); @@ -149,7 +149,7 @@ it("format(\">d\") align right", () => { assert.strictEqual(format(">21,d")(1e21), "1,000,000,000,000,000,000,000"); }); -it("format(\"^d\") align center", () => { +test("format(\"^d\") align center", () => { assert.strictEqual(format("^1,d")(0), "0"); assert.strictEqual(format("^1,d")(0), "0"); assert.strictEqual(format("^2,d")(0), "0 "); @@ -162,7 +162,7 @@ it("format(\"^d\") align center", () => { assert.strictEqual(format("^21,d")(1e21), "1,000,000,000,000,000,000,000"); }); -it("format(\"=+,d\") pad after sign", () => { +test("format(\"=+,d\") pad after sign", () => { assert.strictEqual(format("=+1,d")(0), "+0"); assert.strictEqual(format("=+1,d")(0), "+0"); assert.strictEqual(format("=+2,d")(0), "+0"); @@ -174,7 +174,7 @@ it("format(\"=+,d\") pad after sign", () => { assert.strictEqual(format("=+21,d")(1e21), "+1,000,000,000,000,000,000,000"); }); -it("format(\"=+$,d\") pad after sign with currency", () => { +test("format(\"=+$,d\") pad after sign with currency", () => { assert.strictEqual(format("=+$1,d")(0), "+$0"); assert.strictEqual(format("=+$1,d")(0), "+$0"); assert.strictEqual(format("=+$2,d")(0), "+$0"); @@ -186,7 +186,7 @@ it("format(\"=+$,d\") pad after sign with currency", () => { assert.strictEqual(format("=+$21,d")(1e21), "+$1,000,000,000,000,000,000,000"); }); -it("format(\" ,d\") a space can denote positive numbers", () => { +test("format(\" ,d\") a space can denote positive numbers", () => { assert.strictEqual(format(" 1,d")(-1), "−1"); assert.strictEqual(format(" 1,d")(0), " 0"); assert.strictEqual(format(" 2,d")(0), " 0"); @@ -198,7 +198,7 @@ it("format(\" ,d\") a space can denote positive numbers", () => { assert.strictEqual(format(" 21,d")(1e21), " 1,000,000,000,000,000,000,000"); }); -it("format(\"-,d\") explicitly only use a sign for negative numbers", () => { +test("format(\"-,d\") explicitly only use a sign for negative numbers", () => { assert.strictEqual(format("-1,d")(-1), "−1"); assert.strictEqual(format("-1,d")(0), "0"); assert.strictEqual(format("-2,d")(0), " 0"); @@ -209,7 +209,7 @@ it("format(\"-,d\") explicitly only use a sign for negative numbers", () => { assert.strictEqual(format("-21,d")(0), " 0"); }); -it("format(\"d\") can format negative zero as zero", () => { +test("format(\"d\") can format negative zero as zero", () => { assert.strictEqual(format("1d")(-0), "0"); assert.strictEqual(format("1d")(-1e-12), "0"); }); diff --git a/test/format-type-e-test.js b/test/format-type-e-test.js index 3e76be3..6bdbb63 100644 --- a/test/format-type-e-test.js +++ b/test/format-type-e-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"e\") can output exponent notation", () => { +test("format(\"e\") can output exponent notation", () => { const f = format("e"); assert.strictEqual(f(0), "0.000000e+0"); assert.strictEqual(f(42), "4.200000e+1"); @@ -15,15 +15,15 @@ it("format(\"e\") can output exponent notation", () => { assert.strictEqual(format(".3e")(42), "4.200e+1") }); -it("format(\"e\") can format negative zero as zero", () => { +test("format(\"e\") can format negative zero as zero", () => { assert.strictEqual(format("1e")(-0), "0.000000e+0"); assert.strictEqual(format("1e")(-1e-12), "−1.000000e-12"); }); -it("format(\",e\") does not group Infinity", () => { +test("format(\",e\") does not group Infinity", () => { assert.strictEqual(format(",e")(Infinity), "Infinity"); }); -it("format(\".3e\") can format negative infinity", () => { +test("format(\".3e\") can format negative infinity", () => { assert.strictEqual(format(".3e")(-Infinity), "−Infinity"); }); diff --git a/test/format-type-f-test.js b/test/format-type-f-test.js index 165bb5b..752efcd 100644 --- a/test/format-type-f-test.js +++ b/test/format-type-f-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"f\") can output fixed-point notation", () => { +test("format(\"f\") can output fixed-point notation", () => { assert.strictEqual(format(".1f")(0.49), "0.5"); assert.strictEqual(format(".2f")(0.449), "0.45"); assert.strictEqual(format(".3f")(0.4449), "0.445"); @@ -12,7 +12,7 @@ it("format(\"f\") can output fixed-point notation", () => { assert.strictEqual(format(".5f")(100), "100.00000"); }); -it("format(\"+$,f\") can output a currency with comma-grouping and sign", () => { +test("format(\"+$,f\") can output a currency with comma-grouping and sign", () => { const f = format("+$,.2f"); assert.strictEqual(f(0), "+$0.00"); assert.strictEqual(f(0.429), "+$0.43"); @@ -21,7 +21,7 @@ it("format(\"+$,f\") can output a currency with comma-grouping and sign", () => assert.strictEqual(f(1e4), "+$10,000.00"); }); -it("format(\",.f\") can group thousands, space fill, and round to significant digits", () => { +test("format(\",.f\") can group thousands, space fill, and round to significant digits", () => { assert.strictEqual(format("10,.1f")(123456.49), " 123,456.5"); assert.strictEqual(format("10,.2f")(1234567.449), "1,234,567.45"); assert.strictEqual(format("10,.3f")(12345678.4449), "12,345,678.445"); @@ -32,26 +32,26 @@ it("format(\",.f\") can group thousands, space fill, and round to significant di assert.strictEqual(format("10,.5f")(123456789), "123,456,789.00000"); }); -it("format(\"f\") can display integers in fixed-point notation", () => { +test("format(\"f\") can display integers in fixed-point notation", () => { assert.strictEqual(format("f")(42), "42.000000"); }); -it("format(\"f\") can format negative zero as zero", () => { +test("format(\"f\") can format negative zero as zero", () => { assert.strictEqual(format("f")(-0), "0.000000"); assert.strictEqual(format("f")(-1e-12), "0.000000"); }); -it("format(\"+f\") signs negative zero correctly", () => { +test("format(\"+f\") signs negative zero correctly", () => { assert.strictEqual(format("+f")(-0), "−0.000000"); assert.strictEqual(format("+f")(+0), "+0.000000"); assert.strictEqual(format("+f")(-1e-12), "−0.000000"); assert.strictEqual(format("+f")(+1e-12), "+0.000000"); }); -it("format(\"f\") can format negative infinity", () => { +test("format(\"f\") can format negative infinity", () => { assert.strictEqual(format("f")(-Infinity), "−Infinity"); }); -it("format(\",f\") does not group Infinity", () => { +test("format(\",f\") does not group Infinity", () => { assert.strictEqual(format(",f")(Infinity), "Infinity"); }); diff --git a/test/format-type-g-test.js b/test/format-type-g-test.js index dfd5348..8f9f91c 100644 --- a/test/format-type-g-test.js +++ b/test/format-type-g-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"g\") can output general notation", () => { +test("format(\"g\") can output general notation", () => { assert.strictEqual(format(".1g")(0.049), "0.05"); assert.strictEqual(format(".1g")(0.49), "0.5"); assert.strictEqual(format(".2g")(0.449), "0.45"); @@ -15,7 +15,7 @@ it("format(\"g\") can output general notation", () => { assert.strictEqual(format(".2g")(0.002), "0.0020"); }); -it("format(\",g\") can group thousands with general notation", () => { +test("format(\",g\") can group thousands with general notation", () => { const f = format(",.12g"); assert.strictEqual(f(0), "0.00000000000"); assert.strictEqual(f(42), "42.0000000000"); diff --git a/test/format-type-n-test.js b/test/format-type-n-test.js index 19364d1..51f9fd1 100644 --- a/test/format-type-n-test.js +++ b/test/format-type-n-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"n\") is an alias for \",g\"", () => { +test("format(\"n\") is an alias for \",g\"", () => { const f = format(".12n"); assert.strictEqual(f(0), "0.00000000000"); assert.strictEqual(f(42), "42.0000000000"); @@ -16,7 +16,7 @@ it("format(\"n\") is an alias for \",g\"", () => { assert.strictEqual(f(1e21), "1.00000000000e+21"); }); -it("format(\"n\") uses zero padding", () => { +test("format(\"n\") uses zero padding", () => { assert.strictEqual(format("01.0n")(0), "0"); assert.strictEqual(format("02.0n")(0), "00"); assert.strictEqual(format("03.0n")(0), "000"); diff --git a/test/format-type-none-test.js b/test/format-type-none-test.js index 03c99f1..0c3e020 100644 --- a/test/format-type-none-test.js +++ b/test/format-type-none-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\".[precision]\") uses significant precision and trims insignificant zeros", () => { +test("format(\".[precision]\") uses significant precision and trims insignificant zeros", () => { assert.strictEqual(format(".1")(4.9), "5"); assert.strictEqual(format(".1")(0.49), "0.5"); assert.strictEqual(format(".2")(4.9), "4.9"); @@ -14,7 +14,7 @@ it("format(\".[precision]\") uses significant precision and trims insignificant assert.strictEqual(format(".5")(0.444449), "0.44445"); }); -it("format(\".[precision]\") does not trim significant zeros", () => { +test("format(\".[precision]\") does not trim significant zeros", () => { assert.strictEqual(format(".5")(10), "10"); assert.strictEqual(format(".5")(100), "100"); assert.strictEqual(format(".5")(1000), "1000"); @@ -25,14 +25,14 @@ it("format(\".[precision]\") does not trim significant zeros", () => { assert.strictEqual(format(".6")(1.10001e6), "1.10001e+6"); }); -it("format(\".[precision]\") also trims the decimal point if there are only insignificant zeros", () => { +test("format(\".[precision]\") also trims the decimal point if there are only insignificant zeros", () => { assert.strictEqual(format(".5")(1.00001), "1"); assert.strictEqual(format(".5")(1.00001e6), "1e+6"); assert.strictEqual(format(".6")(1.00001), "1.00001"); assert.strictEqual(format(".6")(1.00001e6), "1.00001e+6"); }); -it("format(\"$\") can output a currency", () => { +test("format(\"$\") can output a currency", () => { const f = format("$"); assert.strictEqual(f(0), "$0"); assert.strictEqual(f(.042), "$0.042"); @@ -43,7 +43,7 @@ it("format(\"$\") can output a currency", () => { assert.strictEqual(f(-4.2), "−$4.2"); }); -it("format(\"($\") can output a currency with parentheses for negative values", () => { +test("format(\"($\") can output a currency with parentheses for negative values", () => { const f = format("($"); assert.strictEqual(f(0), "$0"); assert.strictEqual(f(.042), "$0.042"); @@ -54,10 +54,10 @@ it("format(\"($\") can output a currency with parentheses for negative values", assert.strictEqual(f(-4.2), "($4.2)"); }); -it("format(\"\") can format negative zero as zero", () => { +test("format(\"\") can format negative zero as zero", () => { assert.strictEqual(format("")(-0), "0"); }); -it("format(\"\") can format negative infinity", () => { +test("format(\"\") can format negative infinity", () => { assert.strictEqual(format("")(-Infinity), "−Infinity"); }); diff --git a/test/format-type-o-test.js b/test/format-type-o-test.js index fc2d8a4..01d7731 100644 --- a/test/format-type-o-test.js +++ b/test/format-type-o-test.js @@ -1,10 +1,10 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"o\") octal", () => { +test("format(\"o\") octal", () => { assert.strictEqual(format("o")(10), "12"); }); -it("format(\"#o\") octal with prefix", () => { +test("format(\"#o\") octal with prefix", () => { assert.strictEqual(format("#o")(10), "0o12"); }); diff --git a/test/format-type-p-test.js b/test/format-type-p-test.js index ab4223b..b171c33 100644 --- a/test/format-type-p-test.js +++ b/test/format-type-p-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"p\") can output a percentage", () => { +test("format(\"p\") can output a percentage", () => { const f = format("p"); assert.strictEqual(f(.00123), "0.123000%"); assert.strictEqual(f(.0123), "1.23000%"); @@ -14,7 +14,7 @@ it("format(\"p\") can output a percentage", () => { assert.strictEqual(f(-1.23), "−123.000%"); }); -it("format(\"+p\") can output a percentage with rounding and sign", () => { +test("format(\"+p\") can output a percentage with rounding and sign", () => { const f = format("+.2p"); assert.strictEqual(f(.00123), "+0.12%"); assert.strictEqual(f(.0123), "+1.2%"); diff --git a/test/format-type-r-test.js b/test/format-type-r-test.js index bd31714..25e661f 100644 --- a/test/format-type-r-test.js +++ b/test/format-type-r-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"r\") can round to significant digits", () => { +test("format(\"r\") can round to significant digits", () => { assert.strictEqual(format(".2r")(0), "0.0"); assert.strictEqual(format(".1r")(0.049), "0.05"); assert.strictEqual(format(".1r")(-0.049), "−0.05"); @@ -32,7 +32,7 @@ it("format(\"r\") can round to significant digits", () => { assert.strictEqual(format(".15r")(.999999999999999), "0.999999999999999"); }); -it("format(\"r\") can round very small numbers", () => { +test("format(\"r\") can round very small numbers", () => { const f = format(".2r"); assert.strictEqual(f(1e-22), "0.00000000000000000000010"); }); diff --git a/test/format-type-s-test.js b/test/format-type-s-test.js index e81366c..b507463 100644 --- a/test/format-type-s-test.js +++ b/test/format-type-s-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"s\") outputs SI-prefix notation with default precision 6", () => { +test("format(\"s\") outputs SI-prefix notation with default precision 6", () => { const f = format("s"); assert.strictEqual(f(0), "0.00000"); assert.strictEqual(f(1), "1.00000"); @@ -17,7 +17,7 @@ it("format(\"s\") outputs SI-prefix notation with default precision 6", () => { assert.strictEqual(f(.000001), "1.00000µ"); }); -it("format(\"[.precision]s\") outputs SI-prefix notation with precision significant digits", () => { +test("format(\"[.precision]s\") outputs SI-prefix notation with precision significant digits", () => { const f1 = format(".3s"); assert.strictEqual(f1(0), "0.00"); assert.strictEqual(f1(1), "1.00"); @@ -38,7 +38,7 @@ it("format(\"[.precision]s\") outputs SI-prefix notation with precision signific assert.strictEqual(f2(.009995), "9.995m"); }); -it("format(\"s\") formats numbers smaller than 1e-24 with yocto", () => { +test("format(\"s\") formats numbers smaller than 1e-24 with yocto", () => { const f = format(".8s"); assert.strictEqual(f(1.29e-30), "0.0000013y"); // Note: rounded! assert.strictEqual(f(1.29e-29), "0.0000129y"); @@ -62,7 +62,7 @@ it("format(\"s\") formats numbers smaller than 1e-24 with yocto", () => { assert.strictEqual(f(-1.29e-21), "−1.2900000z"); }); -it("format(\"s\") formats numbers larger than 1e24 with yotta", () => { +test("format(\"s\") formats numbers larger than 1e24 with yotta", () => { const f = format(".8s"); assert.strictEqual(f(1.23e+21), "1.2300000Z"); assert.strictEqual(f(1.23e+22), "12.300000Z"); @@ -86,7 +86,7 @@ it("format(\"s\") formats numbers larger than 1e24 with yotta", () => { assert.strictEqual(f(-1.23e+30), "−1230000.0Y"); }); -it("format(\"$s\") outputs SI-prefix notation with a currency symbol", () => { +test("format(\"$s\") outputs SI-prefix notation with a currency symbol", () => { const f1 = format("$.2s"); assert.strictEqual(f1(0), "$0.0"); assert.strictEqual(f1(2.5e5), "$250k"); @@ -112,7 +112,7 @@ it("format(\"$s\") outputs SI-prefix notation with a currency symbol", () => { assert.strictEqual(f3(.009995), "$9.995m"); }); -it("format(\"s\") SI-prefix notation precision is consistent for small and large numbers", () => { +test("format(\"s\") SI-prefix notation precision is consistent for small and large numbers", () => { const f1 = format(".0s"); assert.strictEqual(f1(1e-5), "10µ"); assert.strictEqual(f1(1e-4), "100µ"); @@ -139,13 +139,13 @@ it("format(\"s\") SI-prefix notation precision is consistent for small and large assert.strictEqual(f2(1e+5), "100.0k"); }); -it("format(\"0[width],s\") will group thousands due to zero fill", () => { +test("format(\"0[width],s\") will group thousands due to zero fill", () => { const f = format("020,s"); assert.strictEqual(f(42), "000,000,000,042.0000"); assert.strictEqual(f(42e12), "00,000,000,042.0000T"); }); -it("format(\",s\") will group thousands for very large numbers", () => { +test("format(\",s\") will group thousands for very large numbers", () => { const f = format(",s"); assert.strictEqual(f(42e30), "42,000,000Y"); }); diff --git a/test/format-type-x-test.js b/test/format-type-x-test.js index 6c71334..f05f54f 100644 --- a/test/format-type-x-test.js +++ b/test/format-type-x-test.js @@ -1,73 +1,73 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format} from "../src/index.js"; -it("format(\"x\") returns the expected hexadecimal (lowercase) string", () => { +test("format(\"x\") returns the expected hexadecimal (lowercase) string", () => { assert.strictEqual(format("x")(0xdeadbeef), "deadbeef"); }); -it("format(\"#x\") returns the expected hexadecimal (lowercase) string with prefix", () => { +test("format(\"#x\") returns the expected hexadecimal (lowercase) string with prefix", () => { assert.strictEqual(format("#x")(0xdeadbeef), "0xdeadbeef"); }); -it("format(\",x\") groups thousands", () => { +test("format(\",x\") groups thousands", () => { assert.strictEqual(format(",x")(0xdeadbeef), "de,adb,eef"); }); -it("format(\",x\") groups thousands", () => { +test("format(\",x\") groups thousands", () => { assert.strictEqual(format(",x")(0xdeadbeef), "de,adb,eef"); }); -it("format(\"#,x\") does not group the prefix", () => { +test("format(\"#,x\") does not group the prefix", () => { assert.strictEqual(format("#,x")(0xadeadbeef), "0xade,adb,eef"); }); -it("format(\"+#x\") puts the sign before the prefix", () => { +test("format(\"+#x\") puts the sign before the prefix", () => { assert.strictEqual(format("+#x")(0xdeadbeef), "+0xdeadbeef"); assert.strictEqual(format("+#x")(-0xdeadbeef), "−0xdeadbeef"); assert.strictEqual(format(" #x")(0xdeadbeef), " 0xdeadbeef"); assert.strictEqual(format(" #x")(-0xdeadbeef), "−0xdeadbeef"); }); -it("format(\"$,x\") formats hexadecimal currency", () => { +test("format(\"$,x\") formats hexadecimal currency", () => { assert.strictEqual(format("$,x")(0xdeadbeef), "$de,adb,eef"); }); -it("format(\"[.precision]x\") always has precision zero", () => { +test("format(\"[.precision]x\") always has precision zero", () => { assert.strictEqual(format(".2x")(0xdeadbeef), "deadbeef"); assert.strictEqual(format(".2x")(-4.2), "−4"); }); -it("format(\"x\") rounds non-integers", () => { +test("format(\"x\") rounds non-integers", () => { assert.strictEqual(format("x")(2.4), "2"); }); -it("format(\"x\") can format negative zero as zero", () => { +test("format(\"x\") can format negative zero as zero", () => { assert.strictEqual(format("x")(-0), "0"); assert.strictEqual(format("x")(-1e-12), "0"); }); -it("format(\"x\") does not consider -0xeee to be positive", () => { +test("format(\"x\") does not consider -0xeee to be positive", () => { assert.strictEqual(format("x")(-0xeee), "−eee"); }); -it("format(\"X\") returns the expected hexadecimal (uppercase) string", () => { +test("format(\"X\") returns the expected hexadecimal (uppercase) string", () => { assert.strictEqual(format("X")(0xdeadbeef), "DEADBEEF"); }); -it("format(\"#X\") returns the expected hexadecimal (uppercase) string with prefix", () => { +test("format(\"#X\") returns the expected hexadecimal (uppercase) string with prefix", () => { assert.strictEqual(format("#X")(0xdeadbeef), "0xDEADBEEF"); }); -it("format(\"X\") can format negative zero as zero", () => { +test("format(\"X\") can format negative zero as zero", () => { assert.strictEqual(format("X")(-0), "0"); assert.strictEqual(format("X")(-1e-12), "0"); }); -it("format(\"X\") does not consider -0xeee to be positive", () => { +test("format(\"X\") does not consider -0xeee to be positive", () => { assert.strictEqual(format("X")(-0xeee), "−EEE"); }); -it("format(\"#[width]x\") considers the prefix", () => { +test("format(\"#[width]x\") considers the prefix", () => { assert.strictEqual(format("20x")(0xdeadbeef), " deadbeef"); assert.strictEqual(format("#20x")(0xdeadbeef), " 0xdeadbeef"); assert.strictEqual(format("020x")(0xdeadbeef), "000000000000deadbeef"); diff --git a/test/formatPrefix-test.js b/test/formatPrefix-test.js index a237b4d..a46766c 100644 --- a/test/formatPrefix-test.js +++ b/test/formatPrefix-test.js @@ -1,21 +1,21 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {formatPrefix} from "../src/index.js"; -it("formatPrefix(\"s\", value)(number) formats with the SI prefix appropriate to the specified value", () => { +test("formatPrefix(\"s\", value)(number) formats with the SI prefix appropriate to the specified value", () => { assert.strictEqual(formatPrefix(",.0s", 1e-6)(.00042), "420µ"); assert.strictEqual(formatPrefix(",.0s", 1e-6)(.0042), "4,200µ"); assert.strictEqual(formatPrefix(",.3s", 1e-3)(.00042), "0.420m"); }); -it("formatPrefix(\"s\", value)(number) uses yocto for very small reference values", () => { +test("formatPrefix(\"s\", value)(number) uses yocto for very small reference values", () => { assert.strictEqual(formatPrefix(",.0s", 1e-27)(1e-24), "1y"); }); -it("formatPrefix(\"s\", value)(number) uses yotta for very small reference values", () => { +test("formatPrefix(\"s\", value)(number) uses yotta for very small reference values", () => { assert.strictEqual(formatPrefix(",.0s", 1e27)(1e24), "1Y"); }); -it("formatPrefix(\"$,s\", value)(number) formats with the specified SI prefix", () => { +test("formatPrefix(\"$,s\", value)(number) formats with the specified SI prefix", () => { const f = formatPrefix(" $12,.1s", 1e6); assert.strictEqual(f(-42e6), " −$42.0M"); assert.strictEqual(f(+4.2e6), " $4.2M"); diff --git a/test/formatSpecifier-test.js b/test/formatSpecifier-test.js index 0e7f31b..83a9101 100644 --- a/test/formatSpecifier-test.js +++ b/test/formatSpecifier-test.js @@ -1,18 +1,18 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {format, formatSpecifier, FormatSpecifier} from "../src/index.js"; -it("formatSpecifier(specifier) throws an error for invalid formats", () => { +test("formatSpecifier(specifier) throws an error for invalid formats", () => { assert.throws(() => { formatSpecifier("foo"); }, /invalid format: foo/); assert.throws(() => { formatSpecifier(".-2s"); }, /invalid format: \.-2s/); assert.throws(() => { formatSpecifier(".f"); }, /invalid format: \.f/); }); -it("formatSpecifier(specifier) returns an instanceof formatSpecifier", () => { +test("formatSpecifier(specifier) returns an instanceof formatSpecifier", () => { const s = formatSpecifier(""); assert.strictEqual(s instanceof formatSpecifier, true); }); -it("formatSpecifier(\"\") has the expected defaults", () => { +test("formatSpecifier(\"\") has the expected defaults", () => { const s = formatSpecifier(""); assert.strictEqual(s.fill, " "); assert.strictEqual(s.align, ">"); @@ -26,19 +26,19 @@ it("formatSpecifier(\"\") has the expected defaults", () => { assert.strictEqual(s.type, ""); }); -it("formatSpecifier(specifier) preserves unknown types", () => { +test("formatSpecifier(specifier) preserves unknown types", () => { const s = formatSpecifier("q"); assert.strictEqual(s.trim, false); assert.strictEqual(s.type, "q"); }); -it("formatSpecifier(specifier) preserves shorthand", () => { +test("formatSpecifier(specifier) preserves shorthand", () => { const s = formatSpecifier(""); assert.strictEqual(s.trim, false); assert.strictEqual(s.type, ""); }); -it("formatSpecifier(specifier).toString() reflects current field values", () => { +test("formatSpecifier(specifier).toString() reflects current field values", () => { const s = formatSpecifier(""); assert.strictEqual((s.fill = "_", s) + "", "_>-"); assert.strictEqual((s.align = "^", s) + "", "_^-"); @@ -53,17 +53,17 @@ it("formatSpecifier(specifier).toString() reflects current field values", () => assert.strictEqual(format(s)(42), "+$0,000,000,042"); }); -it("formatSpecifier(specifier).toString() clamps precision to zero", () => { +test("formatSpecifier(specifier).toString() clamps precision to zero", () => { const s = formatSpecifier(""); assert.strictEqual((s.precision = -1, s) + "", " >-.0"); }); -it("formatSpecifier(specifier).toString() clamps width to one", () => { +test("formatSpecifier(specifier).toString() clamps width to one", () => { const s = formatSpecifier(""); assert.strictEqual((s.width = -1, s) + "", " >-1"); }); -it("new FormatSpecifier({}) has the expected defaults", () => { +test("new FormatSpecifier({}) has the expected defaults", () => { const s = new FormatSpecifier({}); assert.strictEqual(s.fill, " "); assert.strictEqual(s.align, ">"); @@ -77,7 +77,7 @@ it("new FormatSpecifier({}) has the expected defaults", () => { assert.strictEqual(s.type, ""); }); -it("new FormatSpecifier({…}) coerces all inputs to the expected types", () => { +test("new FormatSpecifier({…}) coerces all inputs to the expected types", () => { const s = new FormatSpecifier({ fill: 1, align: 2, diff --git a/test/locale-test.js b/test/locale-test.js index 3d238cd..bf56fa3 100644 --- a/test/locale-test.js +++ b/test/locale-test.js @@ -1,38 +1,38 @@ -import assert from "assert"; -import {readdirSync, readFileSync} from "fs"; -import {join} from "path"; +import {readdirSync, readFileSync} from "node:fs"; +import {join} from "node:path"; +import {assert, test} from "vitest"; import {formatLocale} from "../src/index.js"; function locale(locale) { return formatLocale(JSON.parse(readFileSync(`./locale/${locale}.json`, "utf8"))); } -it("formatLocale({decimal: decimal}) observes the specified decimal point", () => { +test("formatLocale({decimal: decimal}) observes the specified decimal point", () => { assert.strictEqual(formatLocale({decimal: "|"}).format("06.2f")(2), "002|00"); assert.strictEqual(formatLocale({decimal: "/"}).format("06.2f")(2), "002/00"); }); -it("formatLocale({currency: [prefix, suffix]}) observes the specified currency prefix and suffix", () => { +test("formatLocale({currency: [prefix, suffix]}) observes the specified currency prefix and suffix", () => { assert.strictEqual(formatLocale({decimal: ".", currency: ["฿", ""]}).format("$06.2f")(2), "฿02.00"); assert.strictEqual(formatLocale({decimal: ".", currency: ["", "฿"]}).format("$06.2f")(2), "02.00฿"); }); -it("formatLocale({currency: [prefix, suffix]}) places the currency suffix after the SI suffix", () => { +test("formatLocale({currency: [prefix, suffix]}) places the currency suffix after the SI suffix", () => { assert.strictEqual(formatLocale({decimal: ",", currency: ["", " €"]}).format("$.3s")(1.2e9), "1,20G €"); }); -it("formatLocale({grouping: undefined}) does not perform any grouping", () => { +test("formatLocale({grouping: undefined}) does not perform any grouping", () => { assert.strictEqual(formatLocale({decimal: "."}).format("012,.2f")(2), "000000002.00"); }); -it("formatLocale({grouping: [sizes…]}) observes the specified group sizes", () => { +test("formatLocale({grouping: [sizes…]}) observes the specified group sizes", () => { assert.strictEqual(formatLocale({decimal: ".", grouping: [3], thousands: ","}).format("012,.2f")(2), "0,000,002.00"); assert.strictEqual(formatLocale({decimal: ".", grouping: [2], thousands: ","}).format("012,.2f")(2), "0,00,00,02.00"); assert.strictEqual(formatLocale({decimal: ".", grouping: [2, 3], thousands: ","}).format("012,.2f")(2), "00,000,02.00"); assert.strictEqual(formatLocale({decimal: ".", grouping: [3, 2, 2, 2, 2, 2, 2], thousands: ","}).format(",d")(1e12), "10,00,00,00,00,000"); }); -it("formatLocale(…) can format numbers using the Indian numbering system.", () => { +test("formatLocale(…) can format numbers using the Indian numbering system.", () => { const format = locale("en-IN").format(","); assert.strictEqual(format(10), "10"); assert.strictEqual(format(100), "100"); @@ -56,30 +56,30 @@ it("formatLocale(…) can format numbers using the Indian numbering system.", () assert.strictEqual(format(-10.5), "−10.5"); }); -it("formatLocale({thousands: separator}) observes the specified group separator", () => { +test("formatLocale({thousands: separator}) observes the specified group separator", () => { assert.strictEqual(formatLocale({decimal: ".", grouping: [3], thousands: " "}).format("012,.2f")(2), "0 000 002.00"); assert.strictEqual(formatLocale({decimal: ".", grouping: [3], thousands: "/"}).format("012,.2f")(2), "0/000/002.00"); }); -it("formatLocale({percent: percent}) observes the specified percent sign", () => { +test("formatLocale({percent: percent}) observes the specified percent sign", () => { assert.strictEqual(formatLocale({decimal: ".", percent: "!"}).format("06.2%")(2), "200.00!"); assert.strictEqual(formatLocale({decimal: ".", percent: "﹪"}).format("06.2%")(2), "200.00﹪"); }); -it("formatLocale({minus: minus}) observes the specified minus sign", () => { +test("formatLocale({minus: minus}) observes the specified minus sign", () => { assert.strictEqual(formatLocale({decimal: ".", minus: "-"}).format("06.2f")(-2), "-02.00"); assert.strictEqual(formatLocale({decimal: ".", minus: "−"}).format("06.2f")(-2), "−02.00"); assert.strictEqual(formatLocale({decimal: ".", minus: "➖"}).format("06.2f")(-2), "➖02.00"); assert.strictEqual(formatLocale({decimal: "."}).format("06.2f")(-2), "−02.00"); }); -it("formatLocale({nan: nan}) observes the specified not-a-number representation", () => { +test("formatLocale({nan: nan}) observes the specified not-a-number representation", () => { assert.strictEqual(formatLocale({nan: "N/A"}).format("6.2f")(undefined), " N/A"); assert.strictEqual(formatLocale({nan: "-"}).format("<6.2g")(undefined), "- "); assert.strictEqual(formatLocale({}).format(" 6.2f")(undefined), " NaN"); }); -it("locale data is valid", async () => { +test("locale data is valid", async () => { for (const file of readdirSync("locale")) { if (!/\.json$/i.test(file)) continue; const locale = JSON.parse(readFileSync(join("locale", file), "utf8")); diff --git a/test/precisionFixed-test.js b/test/precisionFixed-test.js index 7f7df15..2e3796b 100644 --- a/test/precisionFixed-test.js +++ b/test/precisionFixed-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {precisionFixed} from "../src/index.js"; -it("precisionFixed(number) returns the expected value", () => { +test("precisionFixed(number) returns the expected value", () => { assert.strictEqual(precisionFixed(8.9), 0); assert.strictEqual(precisionFixed(1.1), 0); assert.strictEqual(precisionFixed(0.89), 1); diff --git a/test/precisionPrefix-test.js b/test/precisionPrefix-test.js index ca70f5a..2910f04 100644 --- a/test/precisionPrefix-test.js +++ b/test/precisionPrefix-test.js @@ -1,11 +1,11 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {precisionPrefix} from "../src/index.js"; // A generalization from µ to all prefixes: // assert.strictEqual(precisionPrefix(1e-6, 1e-6), 0); // 1µ // assert.strictEqual(precisionPrefix(1e-6, 1e-7), 0); // 10µ // assert.strictEqual(precisionPrefix(1e-6, 1e-8), 0); // 100µ -it("precisionPrefix(step, value) returns zero if step has the same units as value", () => { +test("precisionPrefix(step, value) returns zero if step has the same units as value", () => { for (var i = -24; i <= 24; i += 3) { for (var j = i; j < i + 3; ++j) { assert.strictEqual(precisionPrefix(+("1e" + i), +("1e" + j)), 0); @@ -17,7 +17,7 @@ it("precisionPrefix(step, value) returns zero if step has the same units as valu // assert.strictEqual(precisionPrefix(1e-9, 1e-6), 3); // 0.001µ // assert.strictEqual(precisionPrefix(1e-8, 1e-6), 2); // 0.01µ // assert.strictEqual(precisionPrefix(1e-7, 1e-6), 1); // 0.1µ -it("precisionPrefix(step, value) returns greater than zero if fractional digits are needed", () => { +test("precisionPrefix(step, value) returns greater than zero if fractional digits are needed", () => { for (var i = -24; i <= 24; i += 3) { for (var j = i - 4; j < i; ++j) { assert.strictEqual(precisionPrefix(+("1e" + j), +("1e" + i)), i - j); @@ -25,7 +25,7 @@ it("precisionPrefix(step, value) returns greater than zero if fractional digits } }); -it("precisionPrefix(step, value) returns the expected precision when value is less than one yocto", () => { +test("precisionPrefix(step, value) returns the expected precision when value is less than one yocto", () => { assert.strictEqual(precisionPrefix(1e-24, 1e-24), 0); // 1y assert.strictEqual(precisionPrefix(1e-25, 1e-25), 1); // 0.1y assert.strictEqual(precisionPrefix(1e-26, 1e-26), 2); // 0.01y @@ -33,7 +33,7 @@ it("precisionPrefix(step, value) returns the expected precision when value is le assert.strictEqual(precisionPrefix(1e-28, 1e-28), 4); // 0.0001y }); -it("precisionPrefix(step, value) returns the expected precision when value is greater than than one yotta", () => { +test("precisionPrefix(step, value) returns the expected precision when value is greater than than one yotta", () => { assert.strictEqual(precisionPrefix(1e24, 1e24), 0); // 1Y assert.strictEqual(precisionPrefix(1e24, 1e25), 0); // 10Y assert.strictEqual(precisionPrefix(1e24, 1e26), 0); // 100Y diff --git a/test/precisionRound-test.js b/test/precisionRound-test.js index 552760f..7a48613 100644 --- a/test/precisionRound-test.js +++ b/test/precisionRound-test.js @@ -1,7 +1,7 @@ -import assert from "assert"; +import {assert, test} from "vitest"; import {precisionRound} from "../src/index.js"; -it("precisionRound(step, max) returns the expected value", () => { +test("precisionRound(step, max) returns the expected value", () => { assert.strictEqual(precisionRound(0.1, 1.1), 2); // "1.0", "1.1" assert.strictEqual(precisionRound(0.01, 0.99), 2); // "0.98", "0.99" assert.strictEqual(precisionRound(0.01, 1.00), 2); // "0.99", "1.0" diff --git a/vitest.config.js b/vitest.config.js new file mode 100644 index 0000000..e10101e --- /dev/null +++ b/vitest.config.js @@ -0,0 +1,3 @@ +import {defineConfig, configDefaults} from "vitest/config"; + +export default defineConfig({test: {include: ["test/**/*-test.js"]}}); diff --git a/yarn.lock b/yarn.lock index f460e70..dd2b450 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,77 +2,492 @@ # yarn lockfile v1 -"@babel/code-frame@^7.10.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" - integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== - dependencies: - "@babel/highlight" "^7.16.0" - -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== - -"@babel/highlight@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== - dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@eslint/eslintrc@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" - integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== +"@esbuild/aix-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz#521cbd968dcf362094034947f76fa1b18d2d403c" + integrity sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== + +"@esbuild/android-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz#61ea550962d8aa12a9b33194394e007657a6df57" + integrity sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== + +"@esbuild/android-arm@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.27.2.tgz#554887821e009dd6d853f972fde6c5143f1de142" + integrity sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== + +"@esbuild/android-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.27.2.tgz#a7ce9d0721825fc578f9292a76d9e53334480ba2" + integrity sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== + +"@esbuild/darwin-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz#2cb7659bd5d109803c593cfc414450d5430c8256" + integrity sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== + +"@esbuild/darwin-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz#e741fa6b1abb0cd0364126ba34ca17fd5e7bf509" + integrity sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== + +"@esbuild/freebsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz#2b64e7116865ca172d4ce034114c21f3c93e397c" + integrity sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== + +"@esbuild/freebsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz#e5252551e66f499e4934efb611812f3820e990bb" + integrity sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== + +"@esbuild/linux-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz#dc4acf235531cd6984f5d6c3b13dbfb7ddb303cb" + integrity sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== + +"@esbuild/linux-arm@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz#56a900e39240d7d5d1d273bc053daa295c92e322" + integrity sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== + +"@esbuild/linux-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz#d4a36d473360f6870efcd19d52bbfff59a2ed1cc" + integrity sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== + +"@esbuild/linux-loong64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz#fcf0ab8c3eaaf45891d0195d4961cb18b579716a" + integrity sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== + +"@esbuild/linux-mips64el@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz#598b67d34048bb7ee1901cb12e2a0a434c381c10" + integrity sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== + +"@esbuild/linux-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz#3846c5df6b2016dab9bc95dde26c40f11e43b4c0" + integrity sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== + +"@esbuild/linux-riscv64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz#173d4475b37c8d2c3e1707e068c174bb3f53d07d" + integrity sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== + +"@esbuild/linux-s390x@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz#f7a4790105edcab8a5a31df26fbfac1aa3dacfab" + integrity sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== + +"@esbuild/linux-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz#2ecc1284b1904aeb41e54c9ddc7fcd349b18f650" + integrity sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== + +"@esbuild/netbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz#e2863c2cd1501845995cb11adf26f7fe4be527b0" + integrity sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== + +"@esbuild/netbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz#93f7609e2885d1c0b5a1417885fba8d1fcc41272" + integrity sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== + +"@esbuild/openbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz#a1985604a203cdc325fd47542e106fafd698f02e" + integrity sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== + +"@esbuild/openbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz#8209e46c42f1ffbe6e4ef77a32e1f47d404ad42a" + integrity sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== + +"@esbuild/openharmony-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz#8fade4441893d9cc44cbd7dcf3776f508ab6fb2f" + integrity sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== + +"@esbuild/sunos-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz#980d4b9703a16f0f07016632424fc6d9a789dfc2" + integrity sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== + +"@esbuild/win32-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz#1c09a3633c949ead3d808ba37276883e71f6111a" + integrity sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== + +"@esbuild/win32-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz#1b1e3a63ad4bef82200fef4e369e0fff7009eee5" + integrity sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== + +"@esbuild/win32-x64@0.27.2": + version "0.27.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz#9e585ab6086bef994c6e8a5b3a0481219ada862b" + integrity sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== + +"@eslint-community/eslint-utils@^4.8.0": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.12.1": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== + dependencies: + "@eslint/object-schema" "^2.1.7" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" + +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.1": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" + integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.2.0" - globals "^13.9.0" - ignore "^4.0.6" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.0.4" + js-yaml "^4.1.1" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@humanwhocodes/config-array@^0.9.2": - version "0.9.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" - integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== +"@eslint/js@9.39.2": + version "9.39.2" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.2.tgz#2d4b8ec4c3ea13c1b3748e0c97ecd766bdd80599" + integrity sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA== + +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== + +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" + "@eslint/core" "^0.17.0" + levn "^0.4.1" -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== -"@types/node@*": - version "16.11.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.11.tgz#6ea7342dfb379ea1210835bada87b3c512120234" - integrity sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw== +"@humanfs/node@^0.16.6": + version "0.16.7" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.4.0" -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -acorn-jsx@^5.3.1: +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.11" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.11.tgz#b21835cbd36db656b857c2ad02ebd413cc13a9ba" + integrity sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@rollup/plugin-terser@^0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz#15dffdb3f73f121aa4fbb37e7ca6be9aeea91962" + integrity sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A== + dependencies: + serialize-javascript "^6.0.1" + smob "^1.0.0" + terser "^5.17.4" + +"@rollup/rollup-android-arm-eabi@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz#76e0fef6533b3ce313f969879e61e8f21f0eeb28" + integrity sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg== + +"@rollup/rollup-android-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz#d3cfc675a40bbdec97bda6d7fe3b3b05f0e1cd93" + integrity sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg== + +"@rollup/rollup-darwin-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz#eb912b8f59dd47c77b3c50a78489013b1d6772b4" + integrity sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg== + +"@rollup/rollup-darwin-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz#e7d0839fdfd1276a1d34bc5ebbbd0dfd7d0b81a0" + integrity sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ== + +"@rollup/rollup-freebsd-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz#7ff8118760f7351e48fd0cd3717ff80543d6aac8" + integrity sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg== + +"@rollup/rollup-freebsd-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz#49d330dadbda1d4e9b86b4a3951b59928a9489a9" + integrity sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw== + +"@rollup/rollup-linux-arm-gnueabihf@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz#98c5f1f8b9776b4a36e466e2a1c9ed1ba52ef1b6" + integrity sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ== + +"@rollup/rollup-linux-arm-musleabihf@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz#b9acecd3672e742f70b0c8a94075c816a91ff040" + integrity sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg== + +"@rollup/rollup-linux-arm64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz#7a6ab06651bc29e18b09a50ed1a02bc972977c9b" + integrity sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ== + +"@rollup/rollup-linux-arm64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz#3c8c9072ba4a4d4ef1156b85ab9a2cbb57c1fad0" + integrity sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA== + +"@rollup/rollup-linux-loong64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz#17a7af13530f4e4a7b12cd26276c54307a84a8b0" + integrity sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g== + +"@rollup/rollup-linux-loong64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz#5cd7a900fd7b077ecd753e34a9b7ff1157fe70c1" + integrity sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw== + +"@rollup/rollup-linux-ppc64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz#03a097e70243ddf1c07b59d3c20f38e6f6800539" + integrity sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw== + +"@rollup/rollup-linux-ppc64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz#a5389873039d4650f35b4fa060d286392eb21a94" + integrity sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw== + +"@rollup/rollup-linux-riscv64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz#789e60e7d6e2b76132d001ffb24ba80007fb17d0" + integrity sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw== + +"@rollup/rollup-linux-riscv64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz#3556fa88d139282e9a73c337c9a170f3c5fe7aa4" + integrity sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg== + +"@rollup/rollup-linux-s390x-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz#c085995b10143c16747a67f1a5487512b2ff04b2" + integrity sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg== + +"@rollup/rollup-linux-x64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz#9563a5419dd2604841bad31a39ccfdd2891690fb" + integrity sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg== + +"@rollup/rollup-linux-x64-musl@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz#691bb06e6269a8959c13476b0cd2aa7458facb31" + integrity sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w== + +"@rollup/rollup-openbsd-x64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz#223e71224746a59ce6d955bbc403577bb5a8be9d" + integrity sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg== + +"@rollup/rollup-openharmony-arm64@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz#0817e5d8ecbfeb8b7939bf58f8ce3c9dd67fce77" + integrity sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw== + +"@rollup/rollup-win32-arm64-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz#de56d8f2013c84570ef5fb917aae034abda93e4a" + integrity sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g== + +"@rollup/rollup-win32-ia32-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz#659aff5244312475aeea2c9479a6c7d397b517bf" + integrity sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA== + +"@rollup/rollup-win32-x64-gnu@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz#2cb09549cbb66c1b979f9238db6dd454cac14a88" + integrity sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg== + +"@rollup/rollup-win32-x64-msvc@4.55.1": + version "4.55.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz#f79437939020b83057faf07e98365b1fa51c458b" + integrity sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw== + +"@standard-schema/spec@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" + integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w== + +"@types/chai@^5.2.2": + version "5.2.3" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.3.tgz#8e9cd9e1c3581fa6b341a5aed5588eb285be0b4a" + integrity sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== + dependencies: + "@types/deep-eql" "*" + assertion-error "^2.0.1" + +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + +"@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@vitest/expect@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-4.0.17.tgz#67bb0d4a7d37054590a19dcf831f7936d14a8a02" + integrity sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ== + dependencies: + "@standard-schema/spec" "^1.0.0" + "@types/chai" "^5.2.2" + "@vitest/spy" "4.0.17" + "@vitest/utils" "4.0.17" + chai "^6.2.1" + tinyrainbow "^3.0.3" + +"@vitest/mocker@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@vitest/mocker/-/mocker-4.0.17.tgz#ce559098be1ae18ae5aa441a79939bcd7fc8f42f" + integrity sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ== + dependencies: + "@vitest/spy" "4.0.17" + estree-walker "^3.0.3" + magic-string "^0.30.21" + +"@vitest/pretty-format@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-4.0.17.tgz#dde7cb2c01699d0943571137d1b482edff5fc000" + integrity sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw== + dependencies: + tinyrainbow "^3.0.3" + +"@vitest/runner@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-4.0.17.tgz#dcc3bb4a4b1077858f3b105e91b2eeb208cee780" + integrity sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ== + dependencies: + "@vitest/utils" "4.0.17" + pathe "^2.0.3" + +"@vitest/snapshot@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-4.0.17.tgz#40d71a3dad4ac39812ed96a95fded46a920e1a31" + integrity sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ== + dependencies: + "@vitest/pretty-format" "4.0.17" + magic-string "^0.30.21" + pathe "^2.0.3" + +"@vitest/spy@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-4.0.17.tgz#d0936f8908b4dae091d9b948be3bae8e19d1878d" + integrity sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew== + +"@vitest/utils@4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-4.0.17.tgz#48181deab273c87ac4ee20c1c454ffe9c4f453fe" + integrity sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w== + dependencies: + "@vitest/pretty-format" "4.0.17" + tinyrainbow "^3.0.3" + +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" - integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -82,53 +497,28 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-colors@4.1.1, ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -137,18 +527,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -159,21 +537,12 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e" - integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA== +chai@^6.2.1: + version "6.2.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e" + integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -181,37 +550,6 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -219,11 +557,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -239,160 +572,147 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -debug@4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== +debug@^4.3.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: - ms "2.1.2" + ms "^2.1.3" -debug@^4.1.1, debug@^4.3.2: +debug@^4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +es-module-lexer@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: +esbuild@^0.27.0: + version "0.27.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.27.2.tgz#d83ed2154d5813a5367376bb2292a9296fc83717" + integrity sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.27.2" + "@esbuild/android-arm" "0.27.2" + "@esbuild/android-arm64" "0.27.2" + "@esbuild/android-x64" "0.27.2" + "@esbuild/darwin-arm64" "0.27.2" + "@esbuild/darwin-x64" "0.27.2" + "@esbuild/freebsd-arm64" "0.27.2" + "@esbuild/freebsd-x64" "0.27.2" + "@esbuild/linux-arm" "0.27.2" + "@esbuild/linux-arm64" "0.27.2" + "@esbuild/linux-ia32" "0.27.2" + "@esbuild/linux-loong64" "0.27.2" + "@esbuild/linux-mips64el" "0.27.2" + "@esbuild/linux-ppc64" "0.27.2" + "@esbuild/linux-riscv64" "0.27.2" + "@esbuild/linux-s390x" "0.27.2" + "@esbuild/linux-x64" "0.27.2" + "@esbuild/netbsd-arm64" "0.27.2" + "@esbuild/netbsd-x64" "0.27.2" + "@esbuild/openbsd-arm64" "0.27.2" + "@esbuild/openbsd-x64" "0.27.2" + "@esbuild/openharmony-arm64" "0.27.2" + "@esbuild/sunos-x64" "0.27.2" + "@esbuild/win32-arm64" "0.27.2" + "@esbuild/win32-ia32" "0.27.2" + "@esbuild/win32-x64" "0.27.2" + +escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-scope@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" - integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" - integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== - -eslint@8: - version "8.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.4.0.tgz#2fa01b271cafc28addc2719e551acff5e89f5230" - integrity sha512-kv0XQcAQJL/VD9THQKhTQZVqkJKA+tIj/v2ZKNaIHRAADcJWFb+B/BAewUYuF6UVg1s2xC5qXVoDk0G8sKGeTA== - dependencies: - "@eslint/eslintrc" "^1.0.5" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^9.39.2: + version "9.39.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.2.tgz#cb60e6d16ab234c0f8369a3fe7cc87967faf4b6c" + integrity sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw== + dependencies: + "@eslint-community/eslint-utils" "^4.8.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.39.2" + "@eslint/plugin-kit" "^0.4.1" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + ajv "^6.12.4" chalk "^4.0.0" - cross-spawn "^7.0.2" + cross-spawn "^7.0.6" debug "^4.3.2" - doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.0" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.1.0" - espree "^9.2.0" - esquery "^1.4.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.2.0" - semver "^7.2.1" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc" - integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: - acorn "^8.6.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.1.0" + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.5.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== dependencies: estraverse "^5.1.0" @@ -408,11 +728,23 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +expect-type@^1.2.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.3.0.tgz#0d58ed361877a31bbc4dd6cf71bbfef7faf6bd68" + integrity sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -428,21 +760,19 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - to-regex-range "^5.0.1" + flat-cache "^4.0.0" -find-up@5.0.0: +find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -450,115 +780,57 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted "^3.2.9" + keyv "^4.5.4" -flatted@^3.1.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" - integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -glob-parent@^6.0.1: +glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" - integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== - dependencies: - type-fest "^0.20.2" - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +globals@^17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-17.0.0.tgz#a4196d9cfeb4d627ba165b4647b1f5853bf90a30" + integrity sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -571,84 +843,35 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -659,6 +882,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -679,106 +909,56 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== +magic-string@^0.30.21: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + "@jridgewell/sourcemap-codec" "^1.5.5" -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -mocha@9: - version "9.1.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.1.3.tgz#8a623be6b323810493d8c8f6f7667440fa469fdb" - integrity sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.2" - debug "4.3.2" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.1.7" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "3.0.4" - ms "2.1.3" - nanoid "3.1.25" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - workerpool "6.1.5" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nanoid@3.1.25: - version "3.1.25" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" - integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" +obug@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/obug/-/obug-2.1.1.tgz#2cba74ff241beb77d63055ddf4cd1e9f90b538be" + integrity sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ== -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" + word-wrap "^1.2.5" p-limit@^3.0.2: version "3.1.0" @@ -806,31 +986,40 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +postcss@^8.5.6: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -843,50 +1032,43 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-terser@7: - version "7.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== +rollup@^4.43.0, rollup@^4.55.1: + version "4.55.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.55.1.tgz#4ec182828be440648e7ee6520dc35e9f20e05144" + integrity sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A== dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup@2: - version "2.60.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.60.2.tgz#3f45ace36a9b10b4297181831ea0719922513463" - integrity sha512-1Bgjpq61sPjgoZzuiDSGvbI1tD91giZABgjCQBKM5aYLnzjq52GoDuWVwT/cm/MCxCMPU8gqQvkj8doQ5C8Oqw== + "@types/estree" "1.0.8" optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.55.1" + "@rollup/rollup-android-arm64" "4.55.1" + "@rollup/rollup-darwin-arm64" "4.55.1" + "@rollup/rollup-darwin-x64" "4.55.1" + "@rollup/rollup-freebsd-arm64" "4.55.1" + "@rollup/rollup-freebsd-x64" "4.55.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.55.1" + "@rollup/rollup-linux-arm-musleabihf" "4.55.1" + "@rollup/rollup-linux-arm64-gnu" "4.55.1" + "@rollup/rollup-linux-arm64-musl" "4.55.1" + "@rollup/rollup-linux-loong64-gnu" "4.55.1" + "@rollup/rollup-linux-loong64-musl" "4.55.1" + "@rollup/rollup-linux-ppc64-gnu" "4.55.1" + "@rollup/rollup-linux-ppc64-musl" "4.55.1" + "@rollup/rollup-linux-riscv64-gnu" "4.55.1" + "@rollup/rollup-linux-riscv64-musl" "4.55.1" + "@rollup/rollup-linux-s390x-gnu" "4.55.1" + "@rollup/rollup-linux-x64-gnu" "4.55.1" + "@rollup/rollup-linux-x64-musl" "4.55.1" + "@rollup/rollup-openbsd-x64" "4.55.1" + "@rollup/rollup-openharmony-arm64" "4.55.1" + "@rollup/rollup-win32-arm64-msvc" "4.55.1" + "@rollup/rollup-win32-ia32-msvc" "4.55.1" + "@rollup/rollup-win32-x64-gnu" "4.55.1" + "@rollup/rollup-win32-x64-msvc" "4.55.1" fsevents "~2.3.2" safe-buffer@^5.1.0: @@ -894,24 +1076,10 @@ safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -semver@^7.2.1: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== +serialize-javascript@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" @@ -927,6 +1095,21 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +smob@^1.0.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/smob/-/smob-1.5.0.tgz#85d79a1403abf128d24d3ebc1cdc5e1a9548d3ab" + integrity sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig== + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -940,73 +1123,60 @@ source-map@^0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" +std-env@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" + integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -terser@^5.0.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc" - integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA== +terser@^5.17.4: + version "5.44.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.1.tgz#e391e92175c299b8c284ad6ded609e37303b0a9c" + integrity sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw== dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.15.0" commander "^2.20.0" - source-map "~0.7.2" source-map-support "~0.5.20" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +tinybench@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b" + integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg== + +tinyexec@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.2.tgz#bdd2737fe2ba40bd6f918ae26642f264b99ca251" + integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== dependencies: - is-number "^7.0.0" + fdir "^6.5.0" + picomatch "^4.0.3" + +tinyrainbow@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-3.0.3.tgz#984a5b1c1b25854a9b6bccbe77964d0593d1ea42" + integrity sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -1015,11 +1185,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -1027,84 +1192,65 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -which@2.0.2, which@^2.0.1: +"vite@^6.0.0 || ^7.0.0": + version "7.3.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.3.1.tgz#7f6cfe8fb9074138605e822a75d9d30b814d6507" + integrity sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA== + dependencies: + esbuild "^0.27.0" + fdir "^6.5.0" + picomatch "^4.0.3" + postcss "^8.5.6" + rollup "^4.43.0" + tinyglobby "^0.2.15" + optionalDependencies: + fsevents "~2.3.3" + +vitest@^4.0.17: + version "4.0.17" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-4.0.17.tgz#0e39e67a909a132afe434ee1278bdcf0c17fd063" + integrity sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg== + dependencies: + "@vitest/expect" "4.0.17" + "@vitest/mocker" "4.0.17" + "@vitest/pretty-format" "4.0.17" + "@vitest/runner" "4.0.17" + "@vitest/snapshot" "4.0.17" + "@vitest/spy" "4.0.17" + "@vitest/utils" "4.0.17" + es-module-lexer "^1.7.0" + expect-type "^1.2.2" + magic-string "^0.30.21" + obug "^2.1.1" + pathe "^2.0.3" + picomatch "^4.0.3" + std-env "^3.10.0" + tinybench "^2.9.0" + tinyexec "^1.0.2" + tinyglobby "^0.2.15" + tinyrainbow "^3.0.3" + vite "^6.0.0 || ^7.0.0" + why-is-node-running "^2.3.0" + +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -workerpool@6.1.5: - version "6.1.5" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581" - integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +why-is-node-running@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04" + integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w== dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + siginfo "^2.0.0" + stackback "0.0.2" -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== yocto-queue@^0.1.0: version "0.1.0" From d14f2a31c6c9dd7655f81941b9dcd4cc3d01111e Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 13 Jan 2026 19:16:46 -0800 Subject: [PATCH 2/3] add publish.yml --- .github/workflows/publish.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..e16d09d --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,25 @@ +name: Publish + +on: + workflow_dispatch: {} + release: + types: [published] + +permissions: + id-token: write + contents: read + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 + with: + node-version: 24 + registry-url: 'https://registry.npmjs.org' + cache: yarn + - run: yarn --frozen-lockfile + - run: yarn test + - run: yarn lint + - run: npm publish From 5a5903491539dd79068bdd0e63960ea52a9dbccd Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 13 Jan 2026 19:36:54 -0800 Subject: [PATCH 3/3] update links --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9c7e904..edbf071 100644 --- a/README.md +++ b/README.md @@ -67,19 +67,19 @@ See [*locale*.format](#locale_format) for a detailed specification, and try runn ## Installing -If you use npm, `npm install d3-format`. You can also download the [latest release on GitHub](https://github.com/d3/d3-format/releases/latest). In modern browsers, you can import d3-format from Skypack: +If you use npm, `npm install d3-format`. You can also download the [latest release on GitHub](https://github.com/d3/d3-format/releases/latest). In modern browsers, you can import d3-format from jsDelivr as an ES module: ```html ``` -For legacy environments, you can load d3-format’s UMD bundle from an npm-based CDN such as jsDelivr; a `d3` global is exported: +For legacy environments, you can load d3-format’s UMD bundle; a `d3` global is exported: ```html @@ -90,7 +90,7 @@ var f = d3.format(".2s"); ``` -Locale files are published to npm and can be loaded using [d3.json](https://github.com/d3/d3-fetch/blob/master/README.md#json). For example, to set Russian as the default locale: +Locale files are published to npm and can be loaded using [d3.json](https://d3js.org/d3-fetch#json). For example, to set Russian as the default locale: ```js const locale = await d3.json("https://cdn.jsdelivr.net/npm/d3-format@3/locale/ru-RU.json");