diff --git a/.github/workflows/config-lint-typecheck.yml b/.github/workflows/config-lint-typecheck.yml new file mode 100644 index 00000000..d8cb258b --- /dev/null +++ b/.github/workflows/config-lint-typecheck.yml @@ -0,0 +1,49 @@ +name: config - lint and typecheck + +on: + pull_request: {} + +jobs: + check: + name: Check if files modified + runs-on: ubuntu-latest + outputs: + checked: ${{ steps.changed-files.outputs.any_modified }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v42 + with: + files: | + packages/config/** + + lint: + name: Linting and Typecheck + runs-on: ubuntu-latest + needs: [check] + if: needs.check.outputs.checked == 'true' + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + version: 8 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install pnpm packages + working-directory: packages/config + run: pnpm install --frozen-lockfile + + - name: Lint + working-directory: packages/config + run: pnpm lint + + - name: Typecheck + working-directory: packages/config + run: pnpm typecheck diff --git a/.github/workflows/config-publish.yml b/.github/workflows/config-publish.yml new file mode 100644 index 00000000..928b1a9f --- /dev/null +++ b/.github/workflows/config-publish.yml @@ -0,0 +1,54 @@ +name: config - publish version + +on: + push: + branches: + - main + +jobs: + check: + name: Check + runs-on: ubuntu-latest + outputs: + checked: ${{ steps.changed-files.outputs.any_modified }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v42 + with: + files: | + packages/config/** + + publish: + runs-on: ubuntu-latest + needs: [check] + if: needs.check.outputs.checked == 'true' + environment: + name: npm + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + version: 8 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + registry-url: 'https://registry.npmjs.org' + + - name: Install pnpm packages + run: pnpm install --frozen-lockfile + + - name: Build + run: pnpm run build + working-directory: 'packages/config' + + - name: Publish + run: pnpm publish --access public + working-directory: 'packages/config' + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/config-test.yml b/.github/workflows/config-test.yml new file mode 100644 index 00000000..275fc20f --- /dev/null +++ b/.github/workflows/config-test.yml @@ -0,0 +1,45 @@ +name: config - test + +on: + pull_request: {} + +jobs: + check: + name: Check if files modified + runs-on: ubuntu-latest + outputs: + checked: ${{ steps.changed-files.outputs.any_modified }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v42 + with: + files: | + packages/config/** + + lint: + name: Testing + runs-on: ubuntu-latest + needs: [check] + if: needs.check.outputs.checked == 'true' + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + version: 8 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install pnpm packages + working-directory: packages/config + run: pnpm install --frozen-lockfile + + - name: Test + working-directory: packages/config + run: pnpm test diff --git a/.github/workflows/create-guider-deploy.yml b/.github/workflows/create-guider-deploy.yml index 016a2149..596345a3 100644 --- a/.github/workflows/create-guider-deploy.yml +++ b/.github/workflows/create-guider-deploy.yml @@ -41,7 +41,7 @@ jobs: registry-url: 'https://registry.npmjs.org' - name: Install pnpm packages - run: pnpm install + run: pnpm install --frozen-lockfile - name: Build run: pnpm run build diff --git a/.github/workflows/create-guider-lint-typecheck.yml b/.github/workflows/create-guider-lint-typecheck.yml new file mode 100644 index 00000000..5188f4b8 --- /dev/null +++ b/.github/workflows/create-guider-lint-typecheck.yml @@ -0,0 +1,49 @@ +name: create-guider - lint and typecheck + +on: + pull_request: {} + +jobs: + check: + name: Check if files modified + runs-on: ubuntu-latest + outputs: + checked: ${{ steps.changed-files.outputs.any_modified }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v42 + with: + files: | + apps/create-guider/** + + lint: + name: Linting and Typecheck + runs-on: ubuntu-latest + needs: [check] + if: needs.check.outputs.checked == 'true' + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + version: 8 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install pnpm packages + working-directory: apps/create-guider + run: pnpm install --frozen-lockfile + + - name: Lint + working-directory: apps/create-guider + run: pnpm lint + + - name: Typecheck + working-directory: apps/create-guider + run: pnpm typecheck diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml index f2335bd5..3f1cd074 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/docs-deploy.yml @@ -23,7 +23,7 @@ jobs: cache: 'pnpm' - name: Install pnpm packages - run: pnpm install + run: pnpm install --frozen-lockfile - name: Build @neato/guider run: cd packages/guider && pnpm run build diff --git a/.github/workflows/docs-lint-typecheck.yml b/.github/workflows/docs-lint-typecheck.yml new file mode 100644 index 00000000..c9eec320 --- /dev/null +++ b/.github/workflows/docs-lint-typecheck.yml @@ -0,0 +1,49 @@ +name: docs - lint and typecheck + +on: + pull_request: {} + +jobs: + check: + name: Check if files modified + runs-on: ubuntu-latest + outputs: + checked: ${{ steps.changed-files.outputs.any_modified }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v42 + with: + files: | + apps/docs/** + + lint: + name: Linting and Typecheck + runs-on: ubuntu-latest + needs: [check] + if: needs.check.outputs.checked == 'true' + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + version: 8 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install pnpm packages + working-directory: apps/docs + run: pnpm install --frozen-lockfile + + - name: Lint + working-directory: apps/docs + run: pnpm lint + + - name: Typecheck + working-directory: apps/docs + run: pnpm typecheck diff --git a/.github/workflows/guider-lint-typecheck.yml b/.github/workflows/guider-lint-typecheck.yml new file mode 100644 index 00000000..f6947884 --- /dev/null +++ b/.github/workflows/guider-lint-typecheck.yml @@ -0,0 +1,49 @@ +name: guider - lint and typecheck + +on: + pull_request: {} + +jobs: + check: + name: Check if files modified + runs-on: ubuntu-latest + outputs: + checked: ${{ steps.changed-files.outputs.any_modified }} + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v42 + with: + files: | + packages/guider/** + + lint: + name: Linting and Typecheck + runs-on: ubuntu-latest + needs: [check] + if: needs.check.outputs.checked == 'true' + steps: + - uses: actions/checkout@v4 + + - uses: pnpm/action-setup@v3 + with: + version: 8 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + + - name: Install pnpm packages + working-directory: packages/guider + run: pnpm install --frozen-lockfile + + - name: Lint + working-directory: packages/guider + run: pnpm lint + + - name: Typecheck + working-directory: packages/guider + run: pnpm typecheck diff --git a/.github/workflows/guider-publish.yml b/.github/workflows/guider-publish.yml index a8b5b0f9..d7879916 100644 --- a/.github/workflows/guider-publish.yml +++ b/.github/workflows/guider-publish.yml @@ -41,7 +41,7 @@ jobs: registry-url: 'https://registry.npmjs.org' - name: Install pnpm packages - run: pnpm install + run: pnpm install --frozen-lockfile - name: Build run: pnpm run build diff --git a/apps/create-guider/package.json b/apps/create-guider/package.json index ed1a1aca..c10c6c0c 100644 --- a/apps/create-guider/package.json +++ b/apps/create-guider/package.json @@ -38,7 +38,8 @@ "build": "tsup", "dev": "tsup --watch --onSuccess 'node dist/index.js'", "lint": "eslint .", - "lint:fix": "eslint --fix ." + "lint:fix": "eslint --fix .", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@repo/eslint-config": "workspace:*", @@ -46,7 +47,8 @@ "@repo/typescript-config": "workspace:*", "@types/node": "^20.11.19", "concurrently": "^8.2.2", - "tsup": "7.2.0" + "tsup": "7.2.0", + "typescript": "^5.4.5" }, "dependencies": { "@clack/prompts": "^0.7.0", diff --git a/apps/create-guider/tsconfig.json b/apps/create-guider/tsconfig.json index 0fd3f7c3..d96905ec 100644 --- a/apps/create-guider/tsconfig.json +++ b/apps/create-guider/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "@repo/typescript-config/base.json", "include": ["."], - "exclude": ["dist", "build", "node_modules"], + "exclude": ["dist", "build", "node_modules", "templates"], "compilerOptions": { "jsx": "react-jsx", "module": "ES2022", diff --git a/apps/docs/package.json b/apps/docs/package.json index 78fdfbc3..46b2268d 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -14,7 +14,8 @@ "build": "next build", "dev": "next", "lint": "eslint .", - "lint:fix": "eslint --fix ." + "lint:fix": "eslint --fix .", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@repo/eslint-config": "workspace:*", @@ -24,7 +25,8 @@ "@types/react": "18.2.56", "autoprefixer": "^10.4.17", "postcss": "^8.4.37", - "tailwindcss": "^3.4.1" + "tailwindcss": "^3.4.1", + "typescript": "^5.4.5" }, "dependencies": { "@neato/guider": "workspace:*", diff --git a/package.json b/package.json index df417a8b..8d9c114d 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ }, "devDependencies": { "@repo/typescript-config": "workspace:*", + "tsup": "7.2.0", "turbo": "1.11.3", - "tsup": "7.2.0" + "vite": "^5.2.11", + "vitest": "^1.6.0" } } diff --git a/packages/config/README.md b/packages/config/README.md new file mode 100644 index 00000000..9010da3c --- /dev/null +++ b/packages/config/README.md @@ -0,0 +1,38 @@ +# ⚡@neato/config + +Load complex configuration from many sources on runtime with type-safety. Check the documentation for more info. + + +## 🔥Features +- Strictly typed OR loosly typed configurations. +- Complex object configuration. +- Load (partial) configuration from many inputs: + - From files: `.json`, `.env`. + - From environment variables. + - From directory structure (used for i.e docker secrets). + - From CLI arguments. +- Validate from a Zod or joi schema. + + +## 🍄Installation / usage + +> **Visit the [documentation](https://neatojs.com/docs/config/guide/why-neat-config) on how to install. + +```sh +npm install neat-config +``` + + +## 📖Documentation + +**Visit the [website](https://neatojs.com/docs/config) for documentation. + + +## 🧬 Running locally for development + +```sh +npm i -g pnpm # install PNPM if you don't have it already +pnpm i # install dependencies of the entire repo + +pnpm -C packages/config run dev # run library dev script in directory +``` diff --git a/packages/config/package.json b/packages/config/package.json index b62da6a2..ca9cf53d 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -26,6 +26,10 @@ "eslintConfig": { "extends": [ "@repo/eslint-config" + ], + "ignorePatterns": [ + "examples", + "dist" ] }, "prettier": "@repo/prettier-config", @@ -33,13 +37,17 @@ "build": "tsup src/index.ts --format esm,cjs --dts", "dev": "tsup src/index.ts --format esm,cjs --dts --watch", "lint": "eslint .", - "lint:fix": "eslint --fix ." + "lint:fix": "eslint --fix .", + "test": "vitest run", + "test:watch": "vitest", + "typecheck": "tsc --noEmit" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/prettier-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/node": "^20.11.19" + "@types/node": "^20.11.19", + "typescript": "^5.4.5" }, "dependencies": { "chalk": "^4.1.2", diff --git a/packages/config/src/__tests__/integration/basic.test.ts b/packages/config/src/__tests__/integration/basic.test.ts index ace9a58c..198570ad 100644 --- a/packages/config/src/__tests__/integration/basic.test.ts +++ b/packages/config/src/__tests__/integration/basic.test.ts @@ -1,11 +1,12 @@ +import { setEnv } from '__tests__/test'; import { createConfigLoader } from '../..'; describe('integration tests - basic', () => { test('load standard config', () => { - process.env = { + setEnv({ L1__L2__L3: 'test', HI: 'test2', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment() .load(); diff --git a/packages/config/src/__tests__/integration/fragments.test.ts b/packages/config/src/__tests__/integration/fragments.test.ts index 3c010fa0..7d48c393 100644 --- a/packages/config/src/__tests__/integration/fragments.test.ts +++ b/packages/config/src/__tests__/integration/fragments.test.ts @@ -1,11 +1,12 @@ +import { setEnv } from '__tests__/test'; import { createConfigLoader } from '../..'; describe('integration tests - fragments', () => { test('load normal fragments in config', () => { - process.env = { + setEnv({ HI: 'test2', USE_FRAGMENTS: 'A,B,c', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment() .setFragmentKey('use_fragments') @@ -21,9 +22,9 @@ describe('integration tests - fragments', () => { }); test('overwriting of each other', () => { - process.env = { + setEnv({ USE_FRAGMENTS: 'A,B', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment() .setFragmentKey('use_fragments') @@ -36,9 +37,9 @@ describe('integration tests - fragments', () => { }); test('error handling', () => { - process.env = { + setEnv({ USE_FRAGMENTS: 'A,F', - }; + }); const config = () => createConfigLoader({ assert: 'throw' }) .addFromEnvironment() diff --git a/packages/config/src/__tests__/integration/freeze.test.ts b/packages/config/src/__tests__/integration/freeze.test.ts index 65534fd3..e5fde3c2 100644 --- a/packages/config/src/__tests__/integration/freeze.test.ts +++ b/packages/config/src/__tests__/integration/freeze.test.ts @@ -1,11 +1,12 @@ +import { setEnv } from '__tests__/test'; import { createConfigLoader } from '../..'; describe('integration tests - freezing', () => { test('without freeze', () => { - process.env = { + setEnv({ L1__L2__L3: 'test', HI: 'test2', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment() .unfreeze() @@ -25,9 +26,9 @@ describe('integration tests - freezing', () => { }); test('with freeze - basic', () => { - process.env = { + setEnv({ HI: 'test2', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment() .load(); @@ -38,7 +39,7 @@ describe('integration tests - freezing', () => { // testing freeze expect(Object.isFrozen(config)).toBe(true); expect(() => { - config.hi = 'HELLO WORLD'; + (config as any).hi = 'HELLO WORLD'; }).toThrowError(); // in strict mode readonly objects throw typeError when assigned expect(config).toStrictEqual({ hi: 'test2', @@ -46,10 +47,10 @@ describe('integration tests - freezing', () => { }); test('with freeze - deep', () => { - process.env = { + setEnv({ L1__L2__L3: 'test', HI: 'test2', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment() .load(); @@ -63,8 +64,8 @@ describe('integration tests - freezing', () => { expect(Object.isFrozen(config.l1)).toBe(true); expect(Object.isFrozen(config.l1.l2)).toBe(true); expect(() => { - config.hi = 'HELLO WORLD'; - config.l1.l2.l3 = 'more tests'; + (config as any).hi = 'HELLO WORLD'; + (config as any).l1.l2.l3 = 'more tests'; }).toThrowError(); // in strict mode readonly objects throw typeError when assigned expect(config).toStrictEqual({ l1: { l2: { l3: 'test' } }, diff --git a/packages/config/src/__tests__/integration/joi-schema.test.ts b/packages/config/src/__tests__/integration/joi-schema.test.ts index efcba62a..707560da 100644 --- a/packages/config/src/__tests__/integration/joi-schema.test.ts +++ b/packages/config/src/__tests__/integration/joi-schema.test.ts @@ -1,11 +1,12 @@ import * as Joi from 'joi'; +import { setEnv } from '__tests__/test'; import { createConfigLoader } from '../..'; describe('integration tests - joi schema', () => { test('normal usage, valid', () => { - process.env = { + setEnv({ CONF_HI: 'test2', - }; + }); const schema = Joi.object({ HI: Joi.string(), }); @@ -19,9 +20,9 @@ describe('integration tests - joi schema', () => { }); test('normal usage, invalid', () => { - process.env = { + setEnv({ CONF_HI: 'test2', - }; + }); const schema = Joi.object({ HI: Joi.number(), }); @@ -54,10 +55,10 @@ describe('integration tests - joi schema', () => { }), }); - process.env = { + setEnv({ CONF_HI: 'abc', CONF_L1__L2__L3: 'def', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment('CONF_') .addJOISchema(schema) @@ -76,12 +77,12 @@ describe('integration tests - joi schema', () => { HelloWorld: Joi.string(), HI_AGAIN: Joi.string(), }); - process.env = { + setEnv({ CONF_HI: 'a', CONF_HELLO: 'a', CONF_HELLO_WORLD: 'a', 'CONF_hi-again': 'a', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment('CONF_') .addJOISchema(schema) @@ -100,9 +101,9 @@ describe('integration tests - joi schema', () => { hi: Joi.string().lowercase(), hoi: Joi.string().default('yike'), }); - process.env = { + setEnv({ CONF_HI: 'AAAA', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment('CONF_') .addJOISchema(schema) diff --git a/packages/config/src/__tests__/integration/schema-less.test.ts b/packages/config/src/__tests__/integration/schema-less.test.ts index 293d7dd1..e748a726 100644 --- a/packages/config/src/__tests__/integration/schema-less.test.ts +++ b/packages/config/src/__tests__/integration/schema-less.test.ts @@ -1,3 +1,4 @@ +import { setEnv } from '__tests__/test'; import { createConfigLoader } from '../..'; import { camelCaseNaming, @@ -6,10 +7,10 @@ import { describe('integration tests - basic', () => { test('load standard config', () => { - process.env = { + setEnv({ HELLO_WORLD__HI_AGAIN__L3: 'test', HI: 'test2', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment() .setNamingConvention(camelCaseNaming) diff --git a/packages/config/src/__tests__/integration/zod-schema.test.ts b/packages/config/src/__tests__/integration/zod-schema.test.ts index 76063a5e..c9014342 100644 --- a/packages/config/src/__tests__/integration/zod-schema.test.ts +++ b/packages/config/src/__tests__/integration/zod-schema.test.ts @@ -1,11 +1,12 @@ -import z from 'zod'; +import { z } from 'zod'; +import { setEnv } from '__tests__/test'; import { createConfigLoader } from '../..'; describe('integration tests - zod schema', () => { test('normal usage, valid', () => { - process.env = { + setEnv({ CONF_HI: 'test2', - }; + }); const schema = z.object({ HI: z.string(), }); @@ -18,9 +19,9 @@ describe('integration tests - zod schema', () => { }); }); test('normal usage, invalid', () => { - process.env = { + setEnv({ CONF_HI: 'test2', - }; + }); const schema = z.object({ HI: z.number(), }); @@ -49,10 +50,10 @@ describe('integration tests - zod schema', () => { }), }), }); - process.env = { + setEnv({ CONF_HI: 'abc', CONF_L1__L2__L3: 'def', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment('CONF_') .addZodSchema(schema) @@ -69,12 +70,12 @@ describe('integration tests - zod schema', () => { HelloWorld: z.string(), HI_AGAIN: z.string(), }); - process.env = { + setEnv({ CONF_HI: 'a', CONF_HELLO: 'a', CONF_HELLO_WORLD: 'a', 'CONF_hi-again': 'a', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment('CONF_') .addZodSchema(schema) @@ -91,9 +92,9 @@ describe('integration tests - zod schema', () => { hi: z.string().transform((v) => v.toLowerCase()), hoi: z.string().default('yike'), }); - process.env = { + setEnv({ CONF_HI: 'AAAA', - }; + }); const config = createConfigLoader({ assert: 'throw' }) .addFromEnvironment('CONF_') .addZodSchema(schema) diff --git a/packages/config/src/__tests__/loaders/cli.test.ts b/packages/config/src/__tests__/loaders/cli.test.ts index 1afbb773..e50d7045 100644 --- a/packages/config/src/__tests__/loaders/cli.test.ts +++ b/packages/config/src/__tests__/loaders/cli.test.ts @@ -2,17 +2,19 @@ import { getKeysFromCLI } from '../../loaders/cli'; describe('cli loader', () => { function setupArgv() { - process.argv = [ - 'node', - 'test.js', - '--test', - 'value', - '--conf-test1=abc', - '--conf-test2=def', - '--conf-test3', - 'ghi', - 'another-arg', - ]; + vi.stubGlobal('process', { + argv: [ + 'node', + 'test.js', + '--test', + 'value', + '--conf-test1=abc', + '--conf-test2=def', + '--conf-test3', + 'ghi', + 'another-arg', + ], + }); } function checkIfArrayHas(test: any, value: any) { diff --git a/packages/config/src/__tests__/loaders/dir.test.ts b/packages/config/src/__tests__/loaders/dir.test.ts index 4c3ded49..2c65b988 100644 --- a/packages/config/src/__tests__/loaders/dir.test.ts +++ b/packages/config/src/__tests__/loaders/dir.test.ts @@ -2,8 +2,7 @@ import * as PathMod from 'node:path'; import * as fs from 'node:fs'; import { getKeysFromDir } from '../../loaders/dir'; -jest.mock('fs', () => { - const originalModule = jest.requireActual('fs'); +vi.mock('fs', (originalModule) => { let files: [string, string][] = []; let path: any; diff --git a/packages/config/src/__tests__/loaders/environment.test.ts b/packages/config/src/__tests__/loaders/environment.test.ts index 036c1a23..b538cebb 100644 --- a/packages/config/src/__tests__/loaders/environment.test.ts +++ b/packages/config/src/__tests__/loaders/environment.test.ts @@ -1,12 +1,13 @@ +import { setEnv } from '__tests__/test'; import { getKeysFromEnvironment } from '../../loaders/environment'; describe('Environment loader', () => { beforeAll(() => { - process.env = { + setEnv({ test1: 'abc', test2: 'def', test3: 'ghi', - }; + }); }); function checkIfArrayHas(test: any, value: any) { diff --git a/packages/config/src/__tests__/loaders/file.test.ts b/packages/config/src/__tests__/loaders/file.test.ts index 6d16aa12..d3796155 100644 --- a/packages/config/src/__tests__/loaders/file.test.ts +++ b/packages/config/src/__tests__/loaders/file.test.ts @@ -6,7 +6,7 @@ import { ParserTypes, } from '../../loaders/file'; -jest.mock('fs'); +vi.mock('fs'); function checkIfArrayHas(test: any, value: any) { expect(test).toBeInstanceOf(Array); @@ -152,7 +152,7 @@ describe('file loader - env', () => { `# test comments TEST=abc TEST2=2 # more comments - + TEST3=3#another comment `, ); diff --git a/packages/config/src/__tests__/loaders/fragments.test.ts b/packages/config/src/__tests__/loaders/fragments.test.ts index b809012a..06d85b5e 100644 --- a/packages/config/src/__tests__/loaders/fragments.test.ts +++ b/packages/config/src/__tests__/loaders/fragments.test.ts @@ -1,4 +1,4 @@ -import type { fragmentLoader } from '../../loaders/fragment'; +import type { FragmentLoader } from '../../loaders/fragment'; import { expandFragments, extractFragmentDefinitionFromKeys, @@ -6,7 +6,7 @@ import { describe('fragment loader', () => { test('no fragments', () => { - const loader: fragmentLoader = { + const loader: FragmentLoader = { fragments: {}, key: '', }; @@ -24,7 +24,7 @@ describe('fragment loader', () => { }); test('no used fragments', () => { - const loader: fragmentLoader = { + const loader: FragmentLoader = { fragments: { FRAG_TEST: { hi: 'hi' }, FRAG_TEST2: { hi2: 'hi2' }, @@ -48,7 +48,7 @@ describe('fragment loader', () => { }); test('use one fragment', () => { - const loader: fragmentLoader = { + const loader: FragmentLoader = { fragments: { FRAG_TEST: { hi: 'hi' }, FRAG_TEST2: { hi2: 'hi2' }, @@ -72,7 +72,7 @@ describe('fragment loader', () => { }); test('use multiple fragments', () => { - const loader: fragmentLoader = { + const loader: FragmentLoader = { fragments: { FRAG_TEST: { hi: 'hi' }, FRAG_TEST2: { hi2: 'hi2' }, @@ -100,7 +100,7 @@ describe('fragment loader', () => { }); test('fragmentloading order', () => { - const loader: fragmentLoader = { + const loader: FragmentLoader = { fragments: { FRAG_TEST2: { hi: 'hi2' }, FRAG_TEST: { hi: 'hi', yoink: 'yoink' }, @@ -132,7 +132,7 @@ describe('fragment loader', () => { }); test('error handling', () => { - const loader: fragmentLoader = { + const loader: FragmentLoader = { fragments: { FRAG_TEST2: { hi: 'hi2' }, FRAG_TEST: { hi: 'hi', yoink: 'yoink' }, diff --git a/packages/config/src/__tests__/test.ts b/packages/config/src/__tests__/test.ts new file mode 100644 index 00000000..81dbd35d --- /dev/null +++ b/packages/config/src/__tests__/test.ts @@ -0,0 +1,9 @@ +export function setEnv(env: Record) { + if (!process.env) process.env = {}; + Object.keys(process.env).forEach((key) => { + vi.stubEnv(key, ''); + }); + Object.entries(env).forEach((entry) => { + vi.stubEnv(entry[0], entry[1]); + }); +} diff --git a/packages/config/src/__tests__/utils/zodCoercedBoolean.test.ts b/packages/config/src/__tests__/utils/zodCoercedBoolean.test.ts index 205f9f2f..e2ab4771 100644 --- a/packages/config/src/__tests__/utils/zodCoercedBoolean.test.ts +++ b/packages/config/src/__tests__/utils/zodCoercedBoolean.test.ts @@ -27,7 +27,7 @@ describe('zodCoercedBoolean()', () => { }); test('Unexpected values', () => { - check(() => {}).toBe(false); + check(() => 'Hello').toBe(false); check(BigInt('123')).toBe(false); check(1251254).toBe(false); check(-126).toBe(false); diff --git a/packages/config/src/builder/base.ts b/packages/config/src/builder/base.ts index 7437b01a..2cdfe1a0 100644 --- a/packages/config/src/builder/base.ts +++ b/packages/config/src/builder/base.ts @@ -8,7 +8,7 @@ import { getKeysFromDir } from 'loaders/dir'; import type { EnvironmentLoader } from 'loaders/environment'; import { getKeysFromEnvironment } from 'loaders/environment'; import type { FileLoader, FileOptions } from 'loaders/file'; -import { getKeysFromFiles, ParserTypesType } from 'loaders/file'; +import { getKeysFromFiles } from 'loaders/file'; import type { FragmentLoader } from 'loaders/fragment'; import type { DeepReadonly } from 'utils/freeze'; import type { NamingConventionFunc } from 'utils/translators/conventions'; @@ -22,10 +22,9 @@ export interface ConfigLoader { freeze: boolean; } -type ModifyFreeze< - Ret extends any, - TFreeze extends true | false, -> = TFreeze extends true ? DeepReadonly : Ret; +type ModifyFreeze = TFreeze extends true + ? DeepReadonly + : Ret; export interface ConfigBuilder { // loaders diff --git a/packages/config/src/loaders/cli.ts b/packages/config/src/loaders/cli.ts index c0dae107..ab07ee8e 100644 --- a/packages/config/src/loaders/cli.ts +++ b/packages/config/src/loaders/cli.ts @@ -1,4 +1,3 @@ -import { argv } from 'node:process'; import type { ConfigLoader } from 'builder/base'; import type { ConfigKeys } from 'loaders/base'; import { LoaderInputError } from 'utils/errors'; @@ -17,7 +16,7 @@ export function getKeysFromCLI(loaders: CLILoader[]): ConfigKeys { const prefixes: string[] = loaders.map((v) => v.prefix); const keys: ConfigKeys = []; let findNext: { key: string }[] = []; - argv.forEach((v) => { + process.argv.forEach((v) => { // if its waiting for next argument, parse that argument if (findNext.length > 0) { findNext.forEach((awaiting) => { diff --git a/packages/config/src/schemas/joi.ts b/packages/config/src/schemas/joi.ts index 610b5b4b..48702fb1 100644 --- a/packages/config/src/schemas/joi.ts +++ b/packages/config/src/schemas/joi.ts @@ -34,7 +34,7 @@ function recursiveSearchForKeys( path: string[] = [], ): string[] { const out: string[] = []; - Object.entries(desc.keys || {}).forEach(([k, v]) => { + Object.entries(desc.keys || {}).forEach(([k, v]: [string, any]) => { const keyArray = [...path, k]; if (v.type === 'object') { out.push(...recursiveSearchForKeys(v, keyArray)); diff --git a/packages/config/src/schemas/zod.ts b/packages/config/src/schemas/zod.ts index 669aede4..526a1fd3 100644 --- a/packages/config/src/schemas/zod.ts +++ b/packages/config/src/schemas/zod.ts @@ -10,7 +10,7 @@ export interface ConfigZodSchema { export function validateZodSchemaDefintion(schemaData: ConfigZodSchema) { const def = schemaData.schema._def; if (!def) throw new LoaderInputError('Schema not a valid Zod schema'); - if (def.typeName !== 'ZodObject') + if ((def as any).typeName !== 'ZodObject') throw new LoaderInputError('Base of schema not an object'); } diff --git a/packages/config/src/utils/build.ts b/packages/config/src/utils/build.ts index 4ca47f75..18717245 100644 --- a/packages/config/src/utils/build.ts +++ b/packages/config/src/utils/build.ts @@ -6,7 +6,7 @@ export function buildObjectFromKeys(keys: ConfigKeys): Record { keys.forEach((v) => { let current = output; const parts = v.key.split('__'); - const last = parts.pop()!; + const last = parts.pop() ?? ''; parts.forEach((path) => { if (current[path] !== undefined && current[path].constructor !== Object) throw new FileLoadError( diff --git a/packages/config/src/utils/errors.ts b/packages/config/src/utils/errors.ts index 5df07bd2..9f9f7cb1 100644 --- a/packages/config/src/utils/errors.ts +++ b/packages/config/src/utils/errors.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-base-to-string -- toString is overwritten */ +/* eslint-disable no-console -- this file is litterally a logger */ import chalk from 'chalk'; export class NeatConfigError extends Error { @@ -31,7 +33,7 @@ interface FancyErrorOptions { function makeFancyError(ops: FancyErrorOptions) { let out = chalk.gray('┌ ') + chalk.bgRed.white(` ${ops.badge ?? 'failed'} `); - ops.errors.forEach((err, i) => { + ops.errors.forEach((err) => { out += `\n${chalk.gray('│')}`; out += `\n${chalk.redBright('● ')}${chalk.bold.white(err.title)}`; if (err.details) out += `\n${chalk.gray('│ ')}${chalk.gray(err.details)}`; diff --git a/packages/config/src/utils/translators/conventions.ts b/packages/config/src/utils/translators/conventions.ts index 4718402f..1891adc7 100644 --- a/packages/config/src/utils/translators/conventions.ts +++ b/packages/config/src/utils/translators/conventions.ts @@ -2,8 +2,8 @@ export type NamingConventionFunc = (segment: string) => string; /** * transform normalized string to PascalCase - * HELLO_WORLD -> HelloWorld - * @param segment string to rename + * HELLO_WORLD → HelloWorld + * @param segment - string to rename * @returns renamed string */ export function pascalCaseNaming(segment: string): string { @@ -14,8 +14,8 @@ export function pascalCaseNaming(segment: string): string { /** * transform normalized string to camelCase - * HELLO_WORLD -> helloWorld - * @param segment string to rename + * HELLO_WORLD → helloWorld + * @param segment - string to rename * @returns renamed string */ export function camelCaseNaming(segment: string): string { @@ -24,8 +24,8 @@ export function camelCaseNaming(segment: string): string { /** * transform normalized string to SCREAMING_SNAKE_CASE - * HELLO_WORLD -> HELLO_WORLD - * @param segment string to rename + * HELLO_WORLD → HELLO_WORLD + * @param segment - string to rename * @returns renamed string */ export function screamingSnakeCaseNaming(segment: string): string { @@ -34,8 +34,8 @@ export function screamingSnakeCaseNaming(segment: string): string { /** * transform normalized string to snake_case - * HELLO_WORLD -> snake_case - * @param segment string to rename + * HELLO_WORLD → snake_case + * @param segment - string to rename * @returns renamed string */ export function snakeCaseNaming(segment: string): string { diff --git a/packages/config/src/utils/translators/normalizer.ts b/packages/config/src/utils/translators/normalizer.ts index 37655132..e2f8cd76 100644 --- a/packages/config/src/utils/translators/normalizer.ts +++ b/packages/config/src/utils/translators/normalizer.ts @@ -13,7 +13,7 @@ import type { ConfigKeys } from 'loaders/base'; function normalizeKeySegment(segment: string): string { return segment .replace(/([a-z])([A-Z])/g, (_, a, b) => `${a}-${b.toLowerCase()}`) - .replace(/[\-\_]+/g, '_') + .replace(/[-_]+/g, '_') .toUpperCase(); } diff --git a/packages/config/tsconfig.json b/packages/config/tsconfig.json index 983860b9..9e691d33 100644 --- a/packages/config/tsconfig.json +++ b/packages/config/tsconfig.json @@ -1,8 +1,9 @@ { "extends": "@repo/typescript-config/base.json", "include": ["."], - "exclude": ["dist", "build", "node_modules"], + "exclude": ["dist", "build", "node_modules", "examples"], "compilerOptions": { "baseUrl": "./src", + "types": ["vitest/globals"], } } diff --git a/packages/config/vitest.config.mts b/packages/config/vitest.config.mts new file mode 100644 index 00000000..f29bd382 --- /dev/null +++ b/packages/config/vitest.config.mts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + root: './src', + globals: true, + pool: 'forks', + }, +}); diff --git a/packages/eslint-config/.eslintrc.js b/packages/eslint-config/.eslintrc.js index 15356509..bc1af65f 100644 --- a/packages/eslint-config/.eslintrc.js +++ b/packages/eslint-config/.eslintrc.js @@ -33,5 +33,7 @@ module.exports = { "@typescript-eslint/require-await": "off", "@typescript-eslint/unified-signatures": "off", "no-nested-ternary": "off", + "unicorn/filename-case": "off", + "prefer-named-capture-group": "off", }, }; diff --git a/packages/guider/package.json b/packages/guider/package.json index 9aacece5..91670975 100644 --- a/packages/guider/package.json +++ b/packages/guider/package.json @@ -61,7 +61,8 @@ "tailwind:dev": "tailwindcss --postcss -i ./src/styles/tailwind.css -o ./style.css --watch", "tailwind:build": "tailwindcss --postcss -i ./src/styles/tailwind.css -o ./style.css --verbose", "lint": "eslint .", - "lint:fix": "eslint --fix ." + "lint:fix": "eslint --fix .", + "typecheck": "tsc --noEmit" }, "peerDependencies": { "next": ">=14.1.0", @@ -86,7 +87,8 @@ "react-dom": "^18.2.0", "rehype": "^13.0.1", "tailwindcss": "^3.4.1", - "tsup": "7.2.0" + "tsup": "7.2.0", + "typescript": "^5.4.5" }, "dependencies": { "@headlessui/react": "^1.7.18", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d496b32..3e365221 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,10 +13,16 @@ importers: version: link:packages/typescript-config tsup: specifier: 7.2.0 - version: 7.2.0(postcss@8.4.37) + version: 7.2.0(typescript@5.4.5) turbo: specifier: 1.11.3 version: 1.11.3 + vite: + specifier: ^5.2.11 + version: 5.2.11 + vitest: + specifier: ^1.6.0 + version: 1.6.0 apps/create-guider: dependencies: @@ -47,7 +53,10 @@ importers: version: 8.2.2 tsup: specifier: 7.2.0 - version: 7.2.0(postcss@8.4.37) + version: 7.2.0(typescript@5.4.5) + typescript: + specifier: ^5.4.5 + version: 5.4.5 apps/docs: dependencies: @@ -94,6 +103,9 @@ importers: tailwindcss: specifier: ^3.4.1 version: 3.4.1 + typescript: + specifier: ^5.4.5 + version: 5.4.5 examples/guider/kitchen-sink: dependencies: @@ -165,6 +177,9 @@ importers: '@types/node': specifier: ^20.11.19 version: 20.11.19 + typescript: + specifier: ^5.4.5 + version: 5.4.5 packages/eslint-config: devDependencies: @@ -173,7 +188,7 @@ importers: version: link:../prettier-config '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.56.0)(prettier@3.2.5)(typescript@5.3.3) + version: 5.2.0(eslint@8.56.0)(prettier@3.2.5)(typescript@5.4.5) eslint: specifier: ^8.56.0 version: 8.56.0 @@ -315,7 +330,7 @@ importers: version: 5.28.5(esbuild@0.18.20) autoprefixer: specifier: ^10.4.17 - version: 10.4.17(postcss@8.4.37) + version: 10.4.17(postcss@8.4.38) concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -324,7 +339,7 @@ importers: version: 14.1.0(react-dom@18.2.0)(react@18.2.0) postcss-import: specifier: ^16.0.1 - version: 16.0.1(postcss@8.4.37) + version: 16.0.1(postcss@8.4.38) react: specifier: ^18.2.0 version: 18.2.0 @@ -339,7 +354,10 @@ importers: version: 3.4.1 tsup: specifier: 7.2.0 - version: 7.2.0(postcss@8.4.37) + version: 7.2.0(postcss@8.4.38)(typescript@5.4.5) + typescript: + specifier: ^5.4.5 + version: 5.4.5 packages/prettier-config: {} @@ -612,6 +630,15 @@ packages: bundledDependencies: - is-unicode-supported + /@esbuild/aix-ppc64@0.20.2: + resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} @@ -620,6 +647,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm64@0.20.2: + resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} @@ -628,6 +664,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm@0.20.2: + resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} @@ -636,6 +681,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-x64@0.20.2: + resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} @@ -644,6 +698,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-arm64@0.20.2: + resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} @@ -652,6 +715,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-x64@0.20.2: + resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} @@ -660,6 +732,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-arm64@0.20.2: + resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} @@ -668,6 +749,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-x64@0.20.2: + resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} @@ -676,6 +766,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm64@0.20.2: + resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} @@ -684,6 +783,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm@0.20.2: + resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} @@ -692,6 +800,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ia32@0.20.2: + resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} @@ -700,6 +817,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-loong64@0.20.2: + resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} @@ -708,6 +834,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-mips64el@0.20.2: + resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} @@ -716,6 +851,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ppc64@0.20.2: + resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} @@ -724,6 +868,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-riscv64@0.20.2: + resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} @@ -732,6 +885,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-s390x@0.20.2: + resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} @@ -740,6 +902,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-x64@0.20.2: + resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} @@ -748,6 +919,15 @@ packages: requiresBuild: true optional: true + /@esbuild/netbsd-x64@0.20.2: + resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} @@ -756,6 +936,15 @@ packages: requiresBuild: true optional: true + /@esbuild/openbsd-x64@0.20.2: + resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -764,6 +953,15 @@ packages: requiresBuild: true optional: true + /@esbuild/sunos-x64@0.20.2: + resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} @@ -772,6 +970,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-arm64@0.20.2: + resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} @@ -780,6 +987,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-ia32@0.20.2: + resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} @@ -788,6 +1004,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-x64@0.20.2: + resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -916,6 +1141,13 @@ packages: wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} @@ -1112,6 +1344,134 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true + /@rollup/rollup-android-arm-eabi@4.17.2: + resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.17.2: + resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.17.2: + resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.17.2: + resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.17.2: + resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-musleabihf@4.17.2: + resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.17.2: + resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.17.2: + resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-powerpc64le-gnu@4.17.2: + resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.17.2: + resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.17.2: + resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.17.2: + resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.17.2: + resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.17.2: + resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.17.2: + resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.17.2: + resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@rushstack/eslint-patch@1.7.2: resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==} dev: true @@ -1140,6 +1500,10 @@ packages: resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} dev: false + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@swc/helpers@0.5.2: resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} dependencies: @@ -1349,7 +1713,7 @@ packages: - webpack-cli dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.4.5): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1361,10 +1725,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.56.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.56.0 @@ -1372,13 +1736,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.2.1(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.2.1(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.4.5): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1390,11 +1754,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.56.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -1415,7 +1779,7 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@6.21.0(eslint@8.56.0)(typescript@5.4.5): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1425,12 +1789,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.56.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.56.0 - ts-api-utils: 1.2.1(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.2.1(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -1445,7 +1809,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1460,13 +1824,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1482,13 +1846,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.2.1(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.2.1(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1499,7 +1863,7 @@ packages: '@types/semver': 7.5.7 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.56.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -1508,7 +1872,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.3.3): + /@typescript-eslint/utils@6.21.0(eslint@8.56.0)(typescript@5.4.5): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1519,7 +1883,7 @@ packages: '@types/semver': 7.5.7 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) eslint: 8.56.0 semver: 7.6.0 transitivePeerDependencies: @@ -1553,7 +1917,7 @@ packages: unist-util-visit: 4.1.2 dev: false - /@vercel/style-guide@5.2.0(eslint@8.56.0)(prettier@3.2.5)(typescript@5.3.3): + /@vercel/style-guide@5.2.0(eslint@8.56.0)(prettier@3.2.5)(typescript@5.4.5): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -1574,25 +1938,25 @@ packages: '@babel/core': 7.23.9 '@babel/eslint-parser': 7.23.10(@babel/core@7.23.9)(eslint@8.56.0) '@rushstack/eslint-patch': 1.7.2 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.4.5) eslint: 8.56.0 eslint-config-prettier: 9.1.0(eslint@8.56.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.56.0)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.56.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.56.0) eslint-plugin-react: 7.33.2(eslint@8.56.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-testing-library: 6.2.0(eslint@8.56.0)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.56.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.11(prettier@3.2.5) - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -1600,6 +1964,45 @@ packages: - supports-color dev: true + /@vitest/expect@1.6.0: + resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} + dependencies: + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + chai: 4.4.1 + dev: true + + /@vitest/runner@1.6.0: + resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} + dependencies: + '@vitest/utils': 1.6.0 + p-limit: 5.0.0 + pathe: 1.1.2 + dev: true + + /@vitest/snapshot@1.6.0: + resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} + dependencies: + magic-string: 0.30.10 + pathe: 1.1.2 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy@1.6.0: + resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} + dependencies: + tinyspy: 2.2.1 + dev: true + + /@vitest/utils@1.6.0: + resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + /@webassemblyjs/ast@1.12.1: resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} dependencies: @@ -1722,6 +2125,11 @@ packages: dependencies: acorn: 8.11.3 + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} @@ -1783,6 +2191,11 @@ packages: dependencies: color-convert: 2.0.1 + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -1914,6 +2327,10 @@ packages: is-shared-array-buffer: 1.0.2 dev: true + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} dev: true @@ -1950,6 +2367,22 @@ packages: postcss-value-parser: 4.2.0 dev: true + /autoprefixer@10.4.17(postcss@8.4.38): + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.23.0 + caniuse-lite: 1.0.30001587 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + /available-typed-arrays@1.0.6: resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} engines: {node: '>= 0.4'} @@ -2080,6 +2513,19 @@ packages: /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2110,6 +2556,12 @@ packages: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} dev: false + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + /chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2223,6 +2675,10 @@ packages: yargs: 17.7.2 dev: true + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + dev: true + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true @@ -2287,6 +2743,13 @@ packages: character-entities: 2.0.2 dev: false + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true @@ -2331,6 +2794,11 @@ packages: /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2537,6 +3005,37 @@ packages: '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 + /esbuild@0.20.2: + resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.20.2 + '@esbuild/android-arm': 0.20.2 + '@esbuild/android-arm64': 0.20.2 + '@esbuild/android-x64': 0.20.2 + '@esbuild/darwin-arm64': 0.20.2 + '@esbuild/darwin-x64': 0.20.2 + '@esbuild/freebsd-arm64': 0.20.2 + '@esbuild/freebsd-x64': 0.20.2 + '@esbuild/linux-arm': 0.20.2 + '@esbuild/linux-arm64': 0.20.2 + '@esbuild/linux-ia32': 0.20.2 + '@esbuild/linux-loong64': 0.20.2 + '@esbuild/linux-mips64el': 0.20.2 + '@esbuild/linux-ppc64': 0.20.2 + '@esbuild/linux-riscv64': 0.20.2 + '@esbuild/linux-s390x': 0.20.2 + '@esbuild/linux-x64': 0.20.2 + '@esbuild/netbsd-x64': 0.20.2 + '@esbuild/openbsd-x64': 0.20.2 + '@esbuild/sunos-x64': 0.20.2 + '@esbuild/win32-arm64': 0.20.2 + '@esbuild/win32-ia32': 0.20.2 + '@esbuild/win32-x64': 0.20.2 + dev: true + /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -2628,7 +3127,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -2658,7 +3157,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.4.5) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.4 array.prototype.flat: 1.3.2 @@ -2683,7 +3182,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.56.0)(typescript@5.3.3): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.56.0)(typescript@5.4.5): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2696,8 +3195,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.4.5) eslint: 8.56.0 transitivePeerDependencies: - supports-color @@ -2739,7 +3238,7 @@ packages: optional: true dependencies: eslint: 8.56.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.56.0)(typescript@5.4.5) dev: true /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.5): @@ -2797,13 +3296,13 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.3.3): + /eslint-plugin-testing-library@6.2.0(eslint@8.56.0)(typescript@5.4.5): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.4.5) eslint: 8.56.0 transitivePeerDependencies: - supports-color @@ -2987,7 +3486,6 @@ packages: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 - dev: false /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -3018,6 +3516,21 @@ packages: strip-final-newline: 2.0.0 dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -3269,6 +3782,10 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -3290,6 +3807,11 @@ packages: engines: {node: '>=10'} dev: true + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} @@ -3617,6 +4139,11 @@ packages: engines: {node: '>=10.17.0'} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /iconify-icon@2.0.0: resolution: {integrity: sha512-38ArOkxmyD9oDbJBkxaFpE6eZ0K3F9Sk+3x4mWGfjMJaxi3EKrix9Du4iWhgBFT3imKC4FJJE34ur2Rc7Xm+Uw==} dependencies: @@ -3869,6 +4396,11 @@ packages: engines: {node: '>=8'} dev: true + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -3966,6 +4498,10 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + /js-tokens@9.0.0: + resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + dev: true + /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -4115,6 +4651,14 @@ packages: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.7.0 + pkg-types: 1.1.0 + dev: true + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4157,6 +4701,12 @@ packages: dependencies: js-tokens: 4.0.0 + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + /lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} @@ -4173,6 +4723,12 @@ packages: dependencies: yallist: 4.0.0 + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -4762,6 +5318,11 @@ packages: engines: {node: '>=6'} dev: true + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -4786,6 +5347,15 @@ packages: resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} engines: {node: '>=16 || 14 >=14.17'} + /mlly@1.7.0: + resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.1.0 + ufo: 1.5.3 + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -4886,6 +5456,13 @@ packages: path-key: 3.1.1 dev: true + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + /npm-to-yarn@2.2.1: resolution: {integrity: sha512-O/j/ROyX0KGLG7O6Ieut/seQ0oiTpHF2tXAcFbpdTLQFiaNtkyTXXocM1fwpaa60dg1qpWj0nHlbNhx6qwuENQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4979,6 +5556,13 @@ packages: mimic-fn: 2.1.0 dev: true + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -5005,6 +5589,13 @@ packages: yocto-queue: 0.1.0 dev: true + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -5088,6 +5679,11 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -5103,6 +5699,14 @@ packages: engines: {node: '>=8'} dev: true + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: @@ -5154,6 +5758,14 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} + /pkg-types@1.1.0: + resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==} + dependencies: + confbox: 0.1.7 + mlly: 1.7.0 + pathe: 1.1.2 + dev: true + /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} @@ -5170,13 +5782,13 @@ packages: read-cache: 1.0.0 resolve: 1.22.8 - /postcss-import@16.0.1(postcss@8.4.37): + /postcss-import@16.0.1(postcss@8.4.38): resolution: {integrity: sha512-i2Pci0310NaLHr/5JUFSw1j/8hf1CzwMY13g6ZDxgOavmRHQi2ba3PmUHoihO+sjaum+KmCNzskNsw7JDrg03g==} engines: {node: '>=18.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.37 + postcss: 8.4.38 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 @@ -5207,6 +5819,23 @@ packages: postcss: 8.4.37 yaml: 2.3.4 + /postcss-load-config@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.0 + postcss: 8.4.38 + yaml: 2.3.4 + dev: true + /postcss-nested@6.0.1(postcss@8.4.37): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} @@ -5242,6 +5871,15 @@ packages: picocolors: 1.0.0 source-map-js: 1.2.0 + /postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.2.0 + dev: true + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -5273,6 +5911,15 @@ packages: hasBin: true dev: true + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + dev: true + /process-warning@2.3.2: resolution: {integrity: sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==} dev: false @@ -5355,6 +6002,10 @@ packages: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + dev: true + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} @@ -5645,6 +6296,32 @@ packages: fsevents: 2.3.3 dev: true + /rollup@4.17.2: + resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.17.2 + '@rollup/rollup-android-arm64': 4.17.2 + '@rollup/rollup-darwin-arm64': 4.17.2 + '@rollup/rollup-darwin-x64': 4.17.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 + '@rollup/rollup-linux-arm-musleabihf': 4.17.2 + '@rollup/rollup-linux-arm64-gnu': 4.17.2 + '@rollup/rollup-linux-arm64-musl': 4.17.2 + '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 + '@rollup/rollup-linux-riscv64-gnu': 4.17.2 + '@rollup/rollup-linux-s390x-gnu': 4.17.2 + '@rollup/rollup-linux-x64-gnu': 4.17.2 + '@rollup/rollup-linux-x64-musl': 4.17.2 + '@rollup/rollup-win32-arm64-msvc': 4.17.2 + '@rollup/rollup-win32-ia32-msvc': 4.17.2 + '@rollup/rollup-win32-x64-msvc': 4.17.2 + fsevents: 2.3.3 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -5803,6 +6480,10 @@ packages: object-inspect: 1.13.1 dev: true + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -5917,6 +6598,14 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: true + /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -6015,6 +6704,11 @@ packages: engines: {node: '>=6'} dev: true + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -6027,6 +6721,12 @@ packages: engines: {node: '>=8'} dev: true + /strip-literal@2.1.0: + resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + dependencies: + js-tokens: 9.0.0 + dev: true + /style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: @@ -6208,6 +6908,20 @@ packages: real-require: 0.2.0 dev: false + /tinybench@2.8.0: + resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} + dev: true + + /tinypool@0.8.4: + resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -6241,13 +6955,13 @@ packages: /trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - /ts-api-utils@1.2.1(typescript@5.3.3): + /ts-api-utils@1.2.1(typescript@5.4.5): resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.5 dev: true /ts-interface-checker@0.1.13: @@ -6269,7 +6983,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsup@7.2.0(postcss@8.4.37): + /tsup@7.2.0(postcss@8.4.38)(typescript@5.4.5): resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} engines: {node: '>=16.14'} hasBin: true @@ -6293,26 +7007,63 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss: 8.4.37 - postcss-load-config: 4.0.2(postcss@8.4.37) + postcss: 8.4.38 + postcss-load-config: 4.0.2(postcss@8.4.38) + resolve-from: 5.0.0 + rollup: 3.29.4 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tree-kill: 1.2.2 + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + + /tsup@7.2.0(typescript@5.4.5): + resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} + engines: {node: '>=16.14'} + hasBin: true + peerDependencies: + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.1.0' + peerDependenciesMeta: + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.2(esbuild@0.18.20) + cac: 6.7.14 + chokidar: 3.6.0 + debug: 4.3.4 + esbuild: 0.18.20 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss-load-config: 4.0.2(postcss@8.4.38) resolve-from: 5.0.0 rollup: 3.29.4 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsutils@3.21.0(typescript@5.3.3): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /turbo-darwin-64@1.11.3: @@ -6382,6 +7133,11 @@ packages: prelude-ls: 1.2.1 dev: true + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -6440,12 +7196,16 @@ packages: is-typed-array: 1.1.13 dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true dev: true + /ufo@1.5.3: + resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} + dev: true + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -6604,6 +7364,117 @@ packages: unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 + /vite-node@1.6.0: + resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 5.2.11 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@5.2.11: + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.17.2 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitest@1.6.0: + resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 1.6.0 + '@vitest/ui': 1.6.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + acorn-walk: 8.3.2 + chai: 4.4.1 + debug: 4.3.4 + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.10 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 2.1.0 + tinybench: 2.8.0 + tinypool: 0.8.4 + vite: 5.2.11 + vite-node: 1.6.0 + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /watchpack@2.4.1: resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} engines: {node: '>=10.13.0'} @@ -6728,6 +7599,15 @@ packages: dependencies: isexe: 2.0.0 + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -6786,6 +7666,11 @@ packages: engines: {node: '>=10'} dev: true + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + /zod-to-json-schema@3.22.4(zod@3.22.4): resolution: {integrity: sha512-2Ed5dJ+n/O3cU383xSY28cuVi0BCQhF8nYqWU5paEpl7fVdqdAmiLdqLyfblbNdfOFwFfi/mqU4O1pwc60iBhQ==} peerDependencies: diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..2de02971 --- /dev/null +++ b/renovate.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "timezone": "Europe/Amsterdam", + "extends": [ + "config:recommended", + "schedule:daily", + ":dependencyDashboard", + ":approveMajorUpdates", + "npm:unpublishSafe" + ], + "patch": { + "enabled": false + }, + "packageRules": [ + { + "matchDatasources": [ + "npm" + ], + "matchUpdateTypes": [ + "minor", + "patch", + "pin", + "digest" + ], + "groupName": "npm (minor updates)" + } + ] + } diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 00000000..e2ec3329 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globals: true, + }, +}); diff --git a/vitest.workspace.ts b/vitest.workspace.ts new file mode 100644 index 00000000..8189bdb5 --- /dev/null +++ b/vitest.workspace.ts @@ -0,0 +1,5 @@ +export default [ + "packages/*", + "apps/*", + "examples/*/*" +]