From 484eebf97b387337aec5d6f6d374e14f39b9ebcc Mon Sep 17 00:00:00 2001 From: Lexus Drumgold Date: Thu, 31 Oct 2024 21:59:19 -0400 Subject: [PATCH] chore: refactor project architecture - closes #651 Signed-off-by: Lexus Drumgold --- .codecov.yml | 8 +- .cspell.json | 1 - .dictionary.txt | 1 - .dprint.jsonc | 6 +- .github/infrastructure.yml | 7 +- .github/workflows/ci.yml | 25 +- .husky/pre-commit | 11 - .lintstagedrc.json | 14 - .nvmrc | 2 +- .remarkrc.mjs | 2 - .vscode/settings.json | 1 + .yarnrc.yml | 1 + CONTRIBUTING.md | 5 + build.config.mts | 10 +- dprint/{prettier.mjs => prettier.mts} | 22 +- dprint/{remark.mjs => remark.mts} | 14 +- dprint/{shfmt.mjs => shfmt.mts} | 46 +-- eslint.base.config.mjs | 45 ++- package.json | 15 +- tsconfig.build.json | 17 +- tsconfig.json | 31 +- tsconfig.typecheck.json | 12 +- vitest-env.d.mts | 7 +- vitest.config.mts | 43 +-- yarn.lock | 402 ++------------------------ 25 files changed, 199 insertions(+), 549 deletions(-) delete mode 100755 .husky/pre-commit delete mode 100644 .lintstagedrc.json rename dprint/{prettier.mjs => prettier.mts} (72%) rename dprint/{remark.mjs => remark.mts} (68%) rename dprint/{shfmt.mjs => shfmt.mts} (58%) diff --git a/.codecov.yml b/.codecov.yml index c9ac8f8e..baeebe53 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -4,12 +4,12 @@ --- codecov: notify: - after_n_builds: 3 + after_n_builds: 2 wait_for_ci: true require_ci_to_pass: true comment: - after_n_builds: 3 + after_n_builds: 2 behavior: default layout: header,diff,flags,components,tree,footer require_base: false @@ -80,6 +80,10 @@ coverage: threshold: 0% flags: + node23: + carryforward: false + paths: + - src/ node22: carryforward: false paths: diff --git a/.cspell.json b/.cspell.json index 979e069f..17708557 100644 --- a/.cspell.json +++ b/.cspell.json @@ -13,7 +13,6 @@ "failFast": false, "flagWords": [], "ignorePaths": [ - "!scratch.*", "**/*.patch", "**/*.snap", "**/*.wasm", diff --git a/.dictionary.txt b/.dictionary.txt index 3e4f1192..31ad6bf7 100644 --- a/.dictionary.txt +++ b/.dictionary.txt @@ -21,7 +21,6 @@ jchen kaisugi ksort lcov -lintstagedrc mkbuild mlly nocheck diff --git a/.dprint.jsonc b/.dprint.jsonc index 4b70dc73..ec5b61c9 100644 --- a/.dprint.jsonc +++ b/.dprint.jsonc @@ -15,17 +15,17 @@ "exec": { "commands": [ { - "command": "node ./dprint/prettier.mjs {{file_path}}", + "command": "node --experimental-strip-types --experimental-transform-types ./dprint/prettier.mts {{file_path}}", "exts": ["css", "html", "json5", "scss", "yaml", "yml"], "stdin": true }, { - "command": "node ./dprint/remark.mjs {{file_path}}", + "command": "node --experimental-strip-types --experimental-transform-types ./dprint/remark.mts {{file_path}}", "exts": ["md", "mdx"], "stdin": true }, { - "command": "node ./dprint/shfmt.mjs {{file_path}}", + "command": "node --experimental-strip-types --experimental-transform-types ./dprint/shfmt.mts {{file_path}}", "exts": ["sh", "zsh"], "fileNames": [ ".editorconfig", diff --git a/.github/infrastructure.yml b/.github/infrastructure.yml index ed699fc5..41d01069 100644 --- a/.github/infrastructure.yml +++ b/.github/infrastructure.yml @@ -33,10 +33,9 @@ branches: - context: lint - context: spelling - context: test (22) - - context: typescript (5.0.4) - - context: typescript (5.4.5) - - context: typescript (5.5.4) - - context: typescript (5.6.2) + - context: test (23) + - context: typescript (5.6.3) + - context: typescript (5.7.0-beta) strict: true restrictions: null environments: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 509efd78..c064548e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -257,9 +257,10 @@ jobs: matrix: typescript-version: - ${{ needs.preflight.outputs.version-typescript }} - - 5.5.4 - - 5.4.5 - - 5.0.4 + - 5.6.3 + env: + TYPESCRIPT_VERSION: ${{ matrix.typescript-version }} + VITEST_REPORT: ./.vitest-reports/typecheck.blob.json if: ${{ fromJson(needs.preflight.outputs.typecheck-files) }} steps: - id: checkout @@ -282,14 +283,21 @@ jobs: key: ${{ needs.preflight.outputs.cache-key }} path: ${{ env.CACHE_PATH }} - id: typescript - name: Install typescript@${{ matrix.typescript-version }} - run: yarn add -D typescript@${{ matrix.typescript-version }} + name: Install typescript@${{ env.TYPESCRIPT_VERSION }} + run: yarn add -D typescript@${{ env.TYPESCRIPT_VERSION }} - id: print-typescript-version name: Print TypeScript version run: jq .devDependencies.typescript package.json -r - id: typecheck name: Run typecheck run: yarn typecheck + - id: report + name: Upload report + uses: actions/upload-artifact@v4.4.3 + with: + name: | + ${{ format('typecheck-{0}-{1}-{2}.blob.json', env.TYPESCRIPT_VERSION, github.event.repository.name, env.SHA) }} + path: ${{ env.VITEST_REPORT }} test: needs: - commitlint @@ -300,9 +308,11 @@ jobs: fail-fast: false matrix: node-version: + - 23 - 22 env: COVERAGE_SUMMARY: ./coverage/coverage-summary.json + NODE_VERSION: ${{ matrix.node-version }} PCT: .total.branches.pct + .total.functions.pct + .total.lines.pct + .total.statements.pct VITEST_REPORT: ./.vitest-reports/test.blob.json if: ${{ fromJson(needs.preflight.outputs.test-files) }} @@ -336,14 +346,15 @@ jobs: name: Upload report uses: actions/upload-artifact@v4.4.3 with: - name: ${{ format('vitest-report-{0}-{1}.json', github.event.repository.name, env.SHA) }} + name: | + ${{ format('test-{0}-{1}-{2}.blob.json', env.NODE_VERSION, github.event.repository.name, env.SHA) }} path: ${{ env.VITEST_REPORT }} - id: coverage-summary name: Upload coverage summary uses: actions/upload-artifact@v4.4.3 with: name: | - ${{ format('coverage-summary-{0}-{1}.json', github.event.repository.name, env.SHA) }} + ${{ format('coverage-summary-{0}-{1}-{2}.json', env.NODE_VERSION, github.event.repository.name, env.SHA) }} path: ${{ env.COVERAGE_SUMMARY }} - id: codecov name: Upload coverage report to Codecov diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index e816bcff..00000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -set -e - -# Pre-Commit Workflow -# -# References: -# -# - https://github.com/okonet/lint-staged#command-line-flags - -cross-env LINT_STAGED=1 lint-staged --config=.lintstagedrc.json --relative --verbose diff --git a/.lintstagedrc.json b/.lintstagedrc.json deleted file mode 100644 index 1d2c0fc2..00000000 --- a/.lintstagedrc.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "*": [ - "dprint check", - "eslint --exit-on-fatal-error", - "cspell lint --color --no-progress --relative $@" - ], - "**/*.{cts,mts,ts}": "yarn test --changed --typecheck --mode=typecheck", - "**/yarn.lock": "yarn dedupe --check", - "src/**/*.mts": [ - "yarn test --changed --coverage", - "yarn build", - "bash -c tsc -p tsconfig.build.json" - ] -} diff --git a/.nvmrc b/.nvmrc index 728f7de5..40994076 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.9.0 +23 diff --git a/.remarkrc.mjs b/.remarkrc.mjs index 37489928..4d43be9c 100644 --- a/.remarkrc.mjs +++ b/.remarkrc.mjs @@ -58,7 +58,6 @@ import remarkLintNoUndefinedReferences from 'remark-lint-no-undefined-references import remarkLintNoUnneededFullReferenceImage from 'remark-lint-no-unneeded-full-reference-image' import remarkLintNoUnneededFullReferenceLink from 'remark-lint-no-unneeded-full-reference-link' import remarkLintNoUnusedDefinitions from 'remark-lint-no-unused-definitions' -import remarkLintNoTrailingSlash from 'remark-lint-no-url-trailing-slash' import remarkLintOrderedListMarkerStyle from 'remark-lint-ordered-list-marker-style' import remarkLintOrderedListMarkerValue from 'remark-lint-ordered-list-marker-value' import remarkLintRuleStyle from 'remark-lint-rule-style' @@ -130,7 +129,6 @@ const lint = { remarkLintNoShortcutReferenceLink, remarkLintNoTableIndentation, remarkLintNoTabs, - remarkLintNoTrailingSlash, remarkLintNoUndefinedReferences, remarkLintNoUnneededFullReferenceImage, remarkLintNoUnneededFullReferenceLink, diff --git a/.vscode/settings.json b/.vscode/settings.json index c833eb0d..68d557ce 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -131,6 +131,7 @@ "*.log": "log", "*.snap": "jest-snapshot", ".env.zsh": "shellscript", + "*.map": "json", ".npmrc": "ini", ".remarkignore": "ignore", "commit-msg": "shellscript", diff --git a/.yarnrc.yml b/.yarnrc.yml index 7b34136b..79b89661 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -22,6 +22,7 @@ enableTransparentWorkspaces: false injectEnvironmentFiles: - .env.repo? + - .env.vars? nmHoistingLimits: dependencies diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 248c2692..16db4bb4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -232,8 +232,13 @@ Be sure to use [`it.skip`][vitest-test-skip] or [`it.todo`][vitest-test-todo] wh #### Running Tests - `yarn test` +- `yarn test:reports` +- `yarn test:ui` - `yarn test:cov` +- `yarn test:cov:reports` +- `yarn test:cov:ui` - `yarn typecheck` +- `yarn typecheck:ui` #### Code Coverage diff --git a/build.config.mts b/build.config.mts index b4f9bea7..38464f15 100644 --- a/build.config.mts +++ b/build.config.mts @@ -5,18 +5,16 @@ */ import { defineBuildConfig, type Config } from '@flex-development/mkbuild' -import tsconfig from './tsconfig.build.json' assert { type: 'json' } +import tsconfig from './tsconfig.build.json' with { type: 'json' } /** - * Build configuration options. + * Build config. * - * @const {Config} config + * @type {Config} */ -const config: Config = defineBuildConfig({ +export default defineBuildConfig({ charset: 'utf8', entries: [], target: ['node18', tsconfig.compilerOptions.target], tsconfig: 'tsconfig.build.json' }) - -export default config diff --git a/dprint/prettier.mjs b/dprint/prettier.mts similarity index 72% rename from dprint/prettier.mjs rename to dprint/prettier.mts index eac932c3..91d3e7c3 100644 --- a/dprint/prettier.mjs +++ b/dprint/prettier.mts @@ -3,11 +3,18 @@ * @module dprint/prettier */ -import { includes } from '@flex-development/tutils' +import { ok } from 'devlop' import editorconfig from 'editorconfig' import { Transform } from 'node:stream' import * as prettier from 'prettier' +declare module 'editorconfig' { + interface KnownProps { + max_line_length?: number | undefined + single_attribute_per_line?: boolean | undefined + } +} + process.stdin.pipe(new Transform({ /** * Formats a file using `prettier`. @@ -21,8 +28,9 @@ process.stdin.pipe(new Transform({ * @return {Promise} * Formatted file content */ - async transform(buffer) { + async transform(buffer: Buffer): Promise { const [filepath] = process.argv.slice(2) + ok(typeof filepath === 'string', 'expected `filepath`') const { end_of_line = 'lf', @@ -38,10 +46,9 @@ process.stdin.pipe(new Transform({ /** * Formatted text. * - * @type {string} - * @const text + * @const {string} text */ - const text = await prettier.format(buffer.toString(), { + const text: string = await prettier.format(buffer.toString(), { arrowParens: 'avoid', bracketSpacing: spaces_around_brackets === 'inside', endOfLine: end_of_line === 'unset' ? 'auto' : end_of_line, @@ -55,10 +62,9 @@ process.stdin.pipe(new Transform({ singleQuote: quote_type === 'single', tabWidth: tab_width === 'unset' ? 2 : tab_width, trailingComma: 'none', - useTabs: includes([indent_size, indent_style], 'tab') + useTabs: [indent_size, indent_style].includes('tab') }) - process.stdout.write(text) - return text + return process.stdout.write(text), text } })) diff --git a/dprint/remark.mjs b/dprint/remark.mts similarity index 68% rename from dprint/remark.mjs rename to dprint/remark.mts index 11611080..8e8edf59 100644 --- a/dprint/remark.mjs +++ b/dprint/remark.mts @@ -3,6 +3,7 @@ * @module dprint/remark */ +import { ok } from 'devlop' import { Transform } from 'node:stream' import remarkParse from 'remark-parse' import remarkStringify from 'remark-stringify' @@ -23,16 +24,15 @@ process.stdin.pipe(new Transform({ * @return {Promise} * Formatted file content */ - async transform(buffer) { + async transform(buffer: Buffer): Promise { /** * Virtual file. * - * @type {VFile} - * @const file + * @const {VFile} file */ - const file = new VFile(buffer.toString()) + const file: VFile = new VFile(buffer.toString()) - file.path = process.argv.slice(2)[0] + file.path = process.argv.slice(2)[0]! await unified() .use(remarkParse) @@ -40,7 +40,7 @@ process.stdin.pipe(new Transform({ .use(remarkStringify) .process(file) - process.stdout.write(file.value) - return file.value + ok(typeof file.value === 'string', 'expected `file.value` to be a string') + return process.stdout.write(file.value), file.value } })) diff --git a/dprint/shfmt.mjs b/dprint/shfmt.mts similarity index 58% rename from dprint/shfmt.mjs rename to dprint/shfmt.mts index c72a2967..df3b6c20 100644 --- a/dprint/shfmt.mjs +++ b/dprint/shfmt.mts @@ -3,11 +3,23 @@ * @module dprint/shfmt */ -import * as tutils from '@flex-development/tutils' +import { ok } from 'devlop' import editorconfig from 'editorconfig' import { Transform } from 'node:stream' import * as sh from 'sh-syntax' +declare module 'editorconfig' { + interface KnownProps { + binary_next_line?: boolean | undefined + function_next_line?: boolean | undefined + keep_comments?: boolean | undefined + keep_padding?: boolean | undefined + shell_variant?: sh.LangVariant | undefined + space_redirects?: boolean | undefined + switch_case_indent?: boolean | undefined + } +} + process.stdin.pipe(new Transform({ /** * Formats a file using `sh-syntax`. @@ -22,8 +34,9 @@ process.stdin.pipe(new Transform({ * @return {Promise} * Formatted file content */ - async transform(buffer) { + async transform(buffer: Buffer): Promise { const [filepath] = process.argv.slice(2) + ok(typeof filepath === 'string', 'expected `filepath`') const { binary_next_line = true, @@ -41,49 +54,44 @@ process.stdin.pipe(new Transform({ /** * Shell formatting options. * - * @type {tutils.Shake>>} - * @const opts + * @const {sh.ShOptions} options */ - const opts = tutils.shake({ + const options: sh.ShOptions = { binaryNextLine: binary_next_line, filepath, functionNextLine: function_next_line, - indent: indent_size, + indent: typeof indent_size === 'string' ? 2 : indent_size, keepComments: keep_comments, keepPadding: keep_padding, minify: false, spaceRedirects: space_redirects, switchCaseIndent: switch_case_indent, - tabWidth: tab_width, + tabWidth: tab_width === 'unset' ? 2 : tab_width, useTabs: indent_style === 'tab', variant: shell_variant - }) + } /** * Text to format. * - * @type {string} - * @const originalText + * @const {string} originalText */ - const originalText = buffer.toString() + const originalText: string = buffer.toString() /** * Formatted text AST. * - * @type {sh.File} - * @const ast + * @const {sh.File} ast */ - const ast = await sh.parse(originalText, opts) + const ast: sh.File = await sh.parse(originalText, options) /** * Formatted text. * - * @type {string} - * @const text + * @const {string} text */ - const text = await sh.print(ast, { ...opts, originalText }) + const text: string = await sh.print(ast, { ...options, originalText }) - process.stdout.write(text) - return text + return process.stdout.write(text), text } })) diff --git a/eslint.base.config.mjs b/eslint.base.config.mjs index 0374621a..1033df69 100644 --- a/eslint.base.config.mjs +++ b/eslint.base.config.mjs @@ -10,6 +10,13 @@ import fs from 'node:fs' import ts from 'typescript-eslint' import pkg from './package.json' with { type: 'json' } +/** + * @typedef {import('eslint').ESLint.Plugin} Plugin + * @typedef {import('eslint').Linter.Config} Config + * @typedef {import('eslint').Linter.Parser} Parser + * @typedef {import('eslint').Linter.SourceType} SourceType + */ + /** * Load a plugin. * @@ -17,15 +24,15 @@ import pkg from './package.json' with { type: 'json' } * * @param {string} name * Plugin module name - * @return {Promise} + * @return {Promise} * Eslint plugin */ const plugin = async name => (await import(name)).default /** - * Base eslint configuration object. + * Eslint configuration objects. * - * @type {import('eslint').Linter.Config[]} + * @type {Config[]} */ export default [ eslint.configs.recommended, @@ -38,7 +45,7 @@ export default [ jsx: true } }, - sourceType: pkg.type + sourceType: /** @type {SourceType} */ (pkg.type) }, linterOptions: { reportUnusedDisableDirectives: true @@ -169,7 +176,7 @@ export default [ NodeJS: 'readonly', React: fs.existsSync('node_modules/react') ? 'readonly' : false }, - parser: ts.parser, + parser: /** @type {Parser} */ (ts.parser), parserOptions: { extraFileExtensions: [], program: null, @@ -180,7 +187,7 @@ export default [ }, plugins: { '@stylistic': await plugin('@stylistic/eslint-plugin'), - '@typescript-eslint': ts.plugin, + '@typescript-eslint': /** @type {Plugin} */ (ts.plugin), import: await plugin('eslint-plugin-import'), jsdoc: await plugin('eslint-plugin-jsdoc'), node: await plugin('eslint-plugin-n'), @@ -938,7 +945,7 @@ export default [ { ignoreConditionalTests: true, ignoreMixedLogicalExpressions: true, - ignorePrimitives: { string: true } + ignorePrimitives: { boolean: true, string: true } } ], '@typescript-eslint/prefer-optional-chain': 2, @@ -991,6 +998,13 @@ export default [ 'require-await': 0 } }, + { + files: ['**/*.+(cjs|cts)'], + rules: { + '@typescript-eslint/no-require-imports': 0, + 'unicorn/prefer-module': 0 + } + }, { files: ['**/*.+(cts|mts)'], rules: { @@ -1015,10 +1029,9 @@ export default [ } }, { - files: ['**/*.+(cjs|cts)'], + files: ['**/*.abstract.+(mts|ts)'], rules: { - '@typescript-eslint/no-require-imports': 0, - 'unicorn/prefer-module': 0 + '@typescript-eslint/no-useless-constructor': 0 } }, { @@ -1036,7 +1049,8 @@ export default [ '**/__mocks__/**/*.+(mts|ts|tsx)', '**/__tests__/*.spec.+(mts|ts|tsx)', '**/__tests__/*.spec-d.+(mts|ts)', - '__tests__/setup/*.+(mts|ts|tsx)' + '**/__tests__/setup/*.+(mts|ts|tsx)', + '**/__tests__/utils/*.+(mts|ts|tsx)' ], languageOptions: { globals: { @@ -1114,9 +1128,10 @@ export default [ } }, { - files: ['**/*.abstract.+(mts|ts)'], + files: ['**/cli/**/*.+(mts|ts)'], rules: { - '@typescript-eslint/no-useless-constructor': 0 + 'node/prefer-global/process': [2, 'never'], + 'unicorn/no-process-exit': 0 } }, { @@ -1141,7 +1156,7 @@ export default [ parser: await import('jsonc-eslint-parser') }, plugins: { - jsonc: (await import('eslint-plugin-jsonc')).default + jsonc: /** @type {any} */ ((await import('eslint-plugin-jsonc')).default) }, rules: { 'jsonc/no-bigint-literals': 2, @@ -1269,7 +1284,7 @@ export default [ parser: await import('yaml-eslint-parser') }, plugins: { - yml: (await import('eslint-plugin-yml')).default + yml: /** @type {any} */ ((await import('eslint-plugin-yml')).default) }, rules: { 'spaced-comment': 0, diff --git a/package.json b/package.json index d735d620..ce586294 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "check:lint": "eslint --exit-on-fatal-error --max-warnings 0 .", "check:spelling": "cspell lint --color --no-progress --relative $@ \"**\"", "check:types": "tsc -p tsconfig.typecheck.json", - "check:types:attw": "yarn pack && attw package.tgz && yarn clean:pack", + "check:types:attw": "yarn pack && attw package.tgz; yarn clean:pack", "check:types:build": "tsc -p tsconfig.build.json", "check:upgrades": "yarn upgrade-interactive", "clean:build": "trash \"./{dist,*.tgz}\"", @@ -108,13 +108,14 @@ "release": "bash ./scripts/release.sh", "remark": "remark .", "test": "cross-env NODE_OPTIONS=\"--conditions mlly --experimental-strip-types --experimental-transform-types\" vitest run", - "test:bench": "cross-env NODE_OPTIONS=\"--conditions mlly --experimental-strip-types --experimental-transform-types\" vitest bench --run", "test:cov": "yarn test --coverage", "test:cov:reports": "yarn test:cov --merge-reports --mode=reports", - "test:cov:serve": "vite preview --outDir ./coverage", + "test:cov:ui": "yarn test:ui --coverage", "test:cov:upload": "./codecov -t $CODECOV_TOKEN -f ./coverage/lcov.info", "test:reports": "yarn test --merge-reports --mode=reports", - "typecheck": "yarn test --typecheck --mode=typecheck" + "test:ui": "cross-env VITEST_UI=1 NODE_OPTIONS=\"--conditions mlly --experimental-strip-types --experimental-transform-types\" vitest --ui", + "typecheck": "yarn test --typecheck --mode=typecheck", + "typecheck:ui": "yarn test:ui --typecheck --mode=typecheck" }, "dependencies": { "@flex-development/errnode": "3.1.1", @@ -143,7 +144,7 @@ "@types/eslint": "9.6.1", "@types/eslint__js": "8.42.3", "@types/is-ci": "3.0.4", - "@types/node": "22.7.4", + "@types/node": "22.8.6", "@types/node-notifier": "8.0.5", "@types/rollup": "0.54.0", "@typescript-eslint/eslint-plugin": "8.12.2", @@ -179,7 +180,6 @@ "import-meta-resolve": "4.1.0", "is-ci": "3.0.1", "jsonc-eslint-parser": "2.4.0", - "lint-staged": "15.2.10", "node-notifier": "10.0.1", "prettier": "3.3.3", "pretty-bytes": "6.1.1", @@ -242,7 +242,6 @@ "remark-lint-no-unneeded-full-reference-image": "4.0.0", "remark-lint-no-unneeded-full-reference-link": "4.0.0", "remark-lint-no-unused-definitions": "4.0.0", - "remark-lint-no-url-trailing-slash": "3.0.1", "remark-lint-ordered-list-marker-style": "4.0.0", "remark-lint-ordered-list-marker-value": "4.0.0", "remark-lint-rule-style": "4.0.0", @@ -257,7 +256,7 @@ "tinyrainbow": "1.2.0", "trash-cli": "6.0.0", "ts-dedent": "2.2.0", - "typescript": "5.6.2", + "typescript": "5.7.0-beta", "typescript-eslint": "8.12.2", "unified": "11.0.5", "vfile": "6.0.3", diff --git a/tsconfig.build.json b/tsconfig.build.json index 2db289ef..848147bb 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,13 +1,22 @@ { "compilerOptions": { - "customConditions": [], + "allowImportingTsExtensions": false, + "allowJs": false, + "checkJs": false, + "customConditions": ["mlly"], "declaration": true, "noEmitOnError": true, + "outDir": "./dist", "paths": {}, - "skipLibCheck": false, + "rootDir": "./src", + "skipLibCheck": true, "target": "es2023" }, - "exclude": [], + "exclude": ["**/__tests__/**"], "extends": "./tsconfig.json", - "include": ["./dist/*"] + "files": [ + "typings/@flex-development/pkg-types/index.d.mts", + "typings/typescript/lib.es5.d.ts" + ], + "include": ["./dist/**/*", "./src/**/*"] } diff --git a/tsconfig.json b/tsconfig.json index badda03b..54d5932d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,9 +3,9 @@ "allowImportingTsExtensions": true, "allowJs": true, "allowUnreachableCode": false, - "alwaysStrict": false, - "baseUrl": ".", - "checkJs": false, + "allowUnusedLabels": false, + "alwaysStrict": true, + "checkJs": true, "customConditions": ["mlly", "development"], "declaration": false, "declarationMap": false, @@ -14,6 +14,8 @@ "exactOptionalPropertyTypes": true, "experimentalDecorators": false, "forceConsistentCasingInFileNames": true, + "isolatedDeclarations": false, + "isolatedModules": true, "lib": ["es2023"], "module": "esnext", "moduleResolution": "bundler", @@ -24,12 +26,13 @@ "noImplicitAny": true, "noImplicitOverride": true, "noImplicitReturns": true, + "noImplicitThis": true, "noUncheckedIndexedAccess": true, + "noUncheckedSideEffectImports": true, "noUnusedLocals": false, "noUnusedParameters": false, - "outDir": "dist", "paths": { - "#node_modules/*": ["__fixtures__/node_modules/*"] + "#node_modules/*": ["./__fixtures__/node_modules/*"] }, "preserveConstEnums": true, "preserveSymlinks": false, @@ -37,29 +40,15 @@ "resolveJsonModule": true, "resolvePackageJsonExports": true, "resolvePackageJsonImports": true, - "rootDir": ".", - "skipDefaultLibCheck": false, - "skipLibCheck": true, "sourceMap": true, "strict": true, - "strictNullChecks": true, - "strictPropertyInitialization": true, "target": "esnext", "useDefineForClassFields": true, "useUnknownInCatchVariables": true, "verbatimModuleSyntax": true }, - "exclude": ["**/coverage", "**/dist", "**/node_modules"], - "include": [ - "**/**/*.json", - "**/**/*.mjs", - "**/**/*.mts", - "**/**/*.ts", - "**/.*.json", - "**/.*.mjs", - "**/.*.mts", - "**/.*.ts" - ], + "exclude": ["**/node_modules", "./coverage", "./dist"], + "include": ["**/**.json", "**/**.mjs", "**/**.mts", "**/**.ts"], "mdx": { "plugins": [ "remark-directive", diff --git a/tsconfig.typecheck.json b/tsconfig.typecheck.json index 1a2a3d84..cb7c83ae 100644 --- a/tsconfig.typecheck.json +++ b/tsconfig.typecheck.json @@ -1,6 +1,9 @@ { "compilerOptions": { - "customConditions": ["types", "mlly"] + "allowJs": false, + "checkJs": false, + "customConditions": ["types", "mlly"], + "skipLibCheck": true }, "extends": "./tsconfig.json", "files": [ @@ -9,10 +12,5 @@ "typings/typescript/lib.es5.d.ts", "vitest-env.d.mts" ], - "include": [ - "__fixtures__/**/**.mts", - "__tests__/**/**.mts", - "src/**/**.mts", - "src/**/.*.mts" - ] + "include": ["./__fixtures__/**/*", "./__tests__/**/*", "./src/**.mts"] } diff --git a/vitest-env.d.mts b/vitest-env.d.mts index d7bf620b..b5652e1f 100644 --- a/vitest-env.d.mts +++ b/vitest-env.d.mts @@ -5,20 +5,19 @@ interface ImportMetaEnv { readonly DEV: '1' | import('@flex-development/tutils').EmptyString readonly GITHUB_TOKEN: string readonly LINT_STAGED?: import('@flex-development/tutils').Stringify<0 | 1> - readonly MODE: import('@flex-development/tutils').NodeEnv.TEST - readonly NODE_ENV: import('@flex-development/tutils').NodeEnv.TEST + readonly MODE: string + readonly NODE_ENV: string readonly PROD: '1' | import('@flex-development/tutils').EmptyString readonly PWD: string readonly SSR: '1' | import('@flex-development/tutils').EmptyString readonly TEST: 'true' readonly USER: string readonly VITEST: 'true' - readonly VITEST_CLI_WRAPPER: 'true' readonly VITEST_MODE: 'DEV' | 'RUN' readonly VITEST_POOL_ID: import('@flex-development/tutils').Numeric readonly VITEST_WORKER_ID: import('@flex-development/tutils').Numeric readonly VITE_ROOT: string - readonly VITE_USER_NODE_ENV: import('@flex-development/tutils').NodeEnv.TEST + readonly VITE_USER_NODE_ENV: string } interface ImportMeta { diff --git a/vitest.config.mts b/vitest.config.mts index 46323c5f..89e6b615 100644 --- a/vitest.config.mts +++ b/vitest.config.mts @@ -1,7 +1,7 @@ /** - * @file Vitest Configuration + * @file Configuration - Vitest * @module config/vitest - * @see https://vitest.dev/config/ + * @see https://vitest.dev/config */ import tsconfigPaths from '#tests/plugins/tsconfig-paths' @@ -15,7 +15,7 @@ import { type UserConfigExport } from 'vitest/config' import { BaseSequencer, type WorkspaceSpec } from 'vitest/node' -import tsconfigJson from './tsconfig.test.json' +import tsconfig from './tsconfig.test.json' with { type: 'json' } /** * Vitest configuration. @@ -23,19 +23,10 @@ import tsconfigJson from './tsconfig.test.json' * @const {UserConfigExport} config */ const config: UserConfigExport = defineConfig((env: ConfigEnv): UserConfig => { - /** - * [`lint-staged`][1] check. - * - * [1]: https://github.com/okonet/lint-staged - * - * @const {boolean} LINT_STAGED - */ - const LINT_STAGED: boolean = !!Number.parseInt(process.env.LINT_STAGED ?? '0') - return { define: {}, plugins: [tsconfigPaths({ tsconfig: 'tsconfig.test.json' })], - resolve: { conditions: tsconfigJson.compilerOptions.customConditions }, + resolve: { conditions: tsconfig.compilerOptions.customConditions }, test: { allowOnly: !ci, chaiConfig: { @@ -45,7 +36,7 @@ const config: UserConfigExport = defineConfig((env: ConfigEnv): UserConfig => { }, clearMocks: true, coverage: { - all: !LINT_STAGED, + all: true, clean: true, cleanOnRerun: true, exclude: [ @@ -71,24 +62,18 @@ const config: UserConfigExport = defineConfig((env: ConfigEnv): UserConfig => { }, environment: 'node', environmentOptions: {}, - exclude: [ - '.cache', - '.git', - '.idea', - 'dist', - 'node_modules' - ], globalSetup: [], globals: true, - hookTimeout: 10 * 1000, - include: [`**/__tests__/*.${LINT_STAGED ? '{spec,spec-d}' : 'spec'}.mts`], + include: ['src/**/__tests__/*.spec.mts'], mockReset: true, outputFile: { blob: `.vitest-reports/${env.mode}.blob.json`, json: pathe.join('__tests__', 'reports', env.mode + '.json') }, passWithNoTests: true, - reporters: env.mode === 'reports' + reporters: JSON.parse(process.env.VITEST_UI ?? '0') + ? [new Notifier(), 'verbose'] + : env.mode === 'reports' ? ['verbose'] : [ci ? 'github-actions' : new Notifier(), 'blob', 'json', 'verbose'], /** @@ -118,7 +103,7 @@ const config: UserConfigExport = defineConfig((env: ConfigEnv): UserConfig => { */ sequencer: class Sequencer extends BaseSequencer { /** - * Determines test file execution order. + * Determine test file execution order. * * @public * @override @@ -127,13 +112,15 @@ const config: UserConfigExport = defineConfig((env: ConfigEnv): UserConfig => { * @param {WorkspaceSpec[]} specs * Workspace spec objects * @return {Promise} - * `files` sorted + * Sorted `specs` */ public override async sort( specs: WorkspaceSpec[] ): Promise { - return (await super.sort(specs)).sort(([, file1], [, file2]) => { - return file1.localeCompare(file2) + return new Promise(resolve => { + return void resolve(specs.sort((a, b) => { + return a.moduleId.localeCompare(b.moduleId) + })) }) } } diff --git a/yarn.lock b/yarn.lock index 76aa3fcc..2dfa5820 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1767,7 +1767,7 @@ __metadata: "@types/eslint": "npm:9.6.1" "@types/eslint__js": "npm:8.42.3" "@types/is-ci": "npm:3.0.4" - "@types/node": "npm:22.7.4" + "@types/node": "npm:22.8.6" "@types/node-notifier": "npm:8.0.5" "@types/rollup": "npm:0.54.0" "@typescript-eslint/eslint-plugin": "npm:8.12.2" @@ -1804,7 +1804,6 @@ __metadata: import-meta-resolve: "npm:4.1.0" is-ci: "npm:3.0.1" jsonc-eslint-parser: "npm:2.4.0" - lint-staged: "npm:15.2.10" node-notifier: "npm:10.0.1" prettier: "npm:3.3.3" pretty-bytes: "npm:6.1.1" @@ -1867,7 +1866,6 @@ __metadata: remark-lint-no-unneeded-full-reference-image: "npm:4.0.0" remark-lint-no-unneeded-full-reference-link: "npm:4.0.0" remark-lint-no-unused-definitions: "npm:4.0.0" - remark-lint-no-url-trailing-slash: "npm:3.0.1" remark-lint-ordered-list-marker-style: "npm:4.0.0" remark-lint-ordered-list-marker-value: "npm:4.0.0" remark-lint-rule-style: "npm:4.0.0" @@ -1882,7 +1880,7 @@ __metadata: tinyrainbow: "npm:1.2.0" trash-cli: "npm:6.0.0" ts-dedent: "npm:2.2.0" - typescript: "npm:5.6.2" + typescript: "npm:5.7.0-beta" typescript-eslint: "npm:8.12.2" unified: "npm:11.0.5" vfile: "npm:6.0.3" @@ -2750,12 +2748,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:22.7.4": - version: 22.7.4 - resolution: "@types/node@npm:22.7.4" +"@types/node@npm:*, @types/node@npm:22.8.6": + version: 22.8.6 + resolution: "@types/node@npm:22.8.6" dependencies: - undici-types: "npm:~6.19.2" - checksum: 10/19ddab80c4eba2253c855ed67c9bbc47417183049d01e59010a738bd80d47338bab79fd1f44ae51516bd63a1db4bf21ddb38b16bf6401a2e93252068ec52e88b + undici-types: "npm:~6.19.8" + checksum: 10/27bb73f033eeec05b4ed52dbc521cac28fb7ac14af267119c9bae0318c97848cd790ac7f0a65924ace7ea717eae62e91bd227da4bd6c0217d0016a7a6cd0a156 languageName: node linkType: hard @@ -3231,7 +3229,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": +"ansi-styles@npm:^6.1.0": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" checksum: 10/70fdf883b704d17a5dfc9cde206e698c16bcd74e7f196ab821511651aee4f9f76c9514bdfa6ca3a27b5e49138b89cb222a28caf3afe4567570139577f991df32 @@ -3622,7 +3620,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.0.0, chalk@npm:^5.2.0, chalk@npm:^5.3.0, chalk@npm:~5.3.0": +"chalk@npm:^5.0.0, chalk@npm:^5.2.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" checksum: 10/6373caaab21bd64c405bfc4bd9672b145647fc9482657b5ea1d549b3b2765054e9d3d928870cdf764fb4aad67555f5061538ff247b8310f110c5c888d92397ea @@ -3776,15 +3774,6 @@ __metadata: languageName: node linkType: hard -"cli-cursor@npm:^5.0.0": - version: 5.0.0 - resolution: "cli-cursor@npm:5.0.0" - dependencies: - restore-cursor: "npm:^5.0.0" - checksum: 10/1eb9a3f878b31addfe8d82c6d915ec2330cec8447ab1f117f4aa34f0137fbb3137ec3466e1c9a65bcb7557f6e486d343f2da57f253a2f668d691372dfa15c090 - languageName: node - linkType: hard - "cli-highlight@npm:^2.1.11": version: 2.1.11 resolution: "cli-highlight@npm:2.1.11" @@ -3814,16 +3803,6 @@ __metadata: languageName: node linkType: hard -"cli-truncate@npm:^4.0.0": - version: 4.0.0 - resolution: "cli-truncate@npm:4.0.0" - dependencies: - slice-ansi: "npm:^5.0.0" - string-width: "npm:^7.0.0" - checksum: 10/d5149175fd25ca985731bdeec46a55ec237475cf74c1a5e103baea696aceb45e372ac4acbaabf1316f06bd62e348123060f8191ffadfeedebd2a70a2a7fb199d - languageName: node - linkType: hard - "cliui@npm:^7.0.2": version: 7.0.4 resolution: "cliui@npm:7.0.4" @@ -3846,13 +3825,6 @@ __metadata: languageName: node linkType: hard -"co@npm:3.1.0": - version: 3.1.0 - resolution: "co@npm:3.1.0" - checksum: 10/b6d7194a9e58906698f4ecca640a829b5c2b209678e7ff37ab91c84b745bbfa5096ba6dddd9d4bc1c829bea88e3f600d960e2d732473a992cbebce7a585068f6 - languageName: node - linkType: hard - "collapse-white-space@npm:^2.0.0": version: 2.1.0 resolution: "collapse-white-space@npm:2.1.0" @@ -3901,13 +3873,6 @@ __metadata: languageName: node linkType: hard -"colorette@npm:^2.0.20": - version: 2.0.20 - resolution: "colorette@npm:2.0.20" - checksum: 10/0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f - languageName: node - linkType: hard - "comma-separated-tokens@npm:^2.0.0": version: 2.0.3 resolution: "comma-separated-tokens@npm:2.0.3" @@ -3929,7 +3894,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^12.1.0, commander@npm:~12.1.0": +"commander@npm:^12.1.0": version: 12.1.0 resolution: "commander@npm:12.1.0" checksum: 10/cdaeb672d979816853a4eed7f1310a9319e8b976172485c2a6b437ed0db0a389a44cfb222bfbde772781efa9f215bdd1b936f80d6b249485b465c6cb906e1f93 @@ -4110,7 +4075,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.2": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -4302,7 +4267,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:~4.3.6": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6": version: 4.3.6 resolution: "debug@npm:4.3.6" dependencies: @@ -5456,13 +5421,6 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^5.0.1": - version: 5.0.1 - resolution: "eventemitter3@npm:5.0.1" - checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5 - languageName: node - linkType: hard - "execa@npm:^2.0.1": version: 2.1.0 resolution: "execa@npm:2.1.0" @@ -5480,23 +5438,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:~8.0.1": - version: 8.0.1 - resolution: "execa@npm:8.0.1" - dependencies: - cross-spawn: "npm:^7.0.3" - get-stream: "npm:^8.0.1" - human-signals: "npm:^5.0.0" - is-stream: "npm:^3.0.0" - merge-stream: "npm:^2.0.0" - npm-run-path: "npm:^5.1.0" - onetime: "npm:^6.0.0" - signal-exit: "npm:^4.1.0" - strip-final-newline: "npm:^3.0.0" - checksum: 10/d2ab5fe1e2bb92b9788864d0713f1fce9a07c4594e272c0c97bc18c90569897ab262e4ea58d27a694d288227a2e24f16f5e2575b44224ad9983b799dc7f1098d - languageName: node - linkType: hard - "exit-hook@npm:3.2.0": version: 3.2.0 resolution: "exit-hook@npm:3.2.0" @@ -5854,13 +5795,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^8.0.1": - version: 8.0.1 - resolution: "get-stream@npm:8.0.1" - checksum: 10/dde5511e2e65a48e9af80fea64aff11b4921b14b6e874c6f8294c50975095af08f41bfb0b680c887f28b566dd6ec2cb2f960f9d36a323359be324ce98b766e9e - languageName: node - linkType: hard - "get-symbol-description@npm:^1.0.0, get-symbol-description@npm:^1.0.2": version: 1.0.2 resolution: "get-symbol-description@npm:1.0.2" @@ -6188,13 +6122,6 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^5.0.0": - version: 5.0.0 - resolution: "human-signals@npm:5.0.0" - checksum: 10/30f8870d831cdcd2d6ec0486a7d35d49384996742052cee792854273fa9dd9e7d5db06bb7985d4953e337e10714e994e0302e90dc6848069171b05ec836d65b0 - languageName: node - linkType: hard - "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -6509,22 +6436,6 @@ __metadata: languageName: node linkType: hard -"is-fullwidth-code-point@npm:^4.0.0": - version: 4.0.0 - resolution: "is-fullwidth-code-point@npm:4.0.0" - checksum: 10/8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^5.0.0": - version: 5.0.0 - resolution: "is-fullwidth-code-point@npm:5.0.0" - dependencies: - get-east-asian-width: "npm:^1.0.0" - checksum: 10/8dfb2d2831b9e87983c136f5c335cd9d14c1402973e357a8ff057904612ed84b8cba196319fabedf9aefe4639e14fe3afe9d9966d1d006ebeb40fe1fed4babe5 - languageName: node - linkType: hard - "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -6625,13 +6536,6 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "is-stream@npm:3.0.0" - checksum: 10/172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 - languageName: node - linkType: hard - "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -6948,13 +6852,6 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:~3.1.2": - version: 3.1.2 - resolution: "lilconfig@npm:3.1.2" - checksum: 10/8058403850cfad76d6041b23db23f730e52b6c17a8c28d87b90766639ca0ee40c748a3e85c2d7bd133d572efabff166c4b015e5d25e01fd666cb4b13cfada7f0 - languageName: node - linkType: hard - "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -6969,40 +6866,6 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:15.2.10": - version: 15.2.10 - resolution: "lint-staged@npm:15.2.10" - dependencies: - chalk: "npm:~5.3.0" - commander: "npm:~12.1.0" - debug: "npm:~4.3.6" - execa: "npm:~8.0.1" - lilconfig: "npm:~3.1.2" - listr2: "npm:~8.2.4" - micromatch: "npm:~4.0.8" - pidtree: "npm:~0.6.0" - string-argv: "npm:~0.3.2" - yaml: "npm:~2.5.0" - bin: - lint-staged: bin/lint-staged.js - checksum: 10/ab6930cd633dbb5b6ec7c81fc06c65df41e9f80d93dd22e0d79c6e272cdfd8110a0fbdec60303d46a06b30bcd92261153630e2c937531b77ec5ae41e7e9d90d3 - languageName: node - linkType: hard - -"listr2@npm:~8.2.4": - version: 8.2.4 - resolution: "listr2@npm:8.2.4" - dependencies: - cli-truncate: "npm:^4.0.0" - colorette: "npm:^2.0.20" - eventemitter3: "npm:^5.0.1" - log-update: "npm:^6.1.0" - rfdc: "npm:^1.4.1" - wrap-ansi: "npm:^9.0.0" - checksum: 10/344d2397e127bf802935925e95b54468eef745fbbaf9326eb33a1634ae2d6e86cdb527ef48cb83a19a50671955d39b3e2608c74db85530df07b5674f5de115e1 - languageName: node - linkType: hard - "load-plugin@npm:^6.0.0": version: 6.0.3 resolution: "load-plugin@npm:6.0.3" @@ -7110,19 +6973,6 @@ __metadata: languageName: node linkType: hard -"log-update@npm:^6.1.0": - version: 6.1.0 - resolution: "log-update@npm:6.1.0" - dependencies: - ansi-escapes: "npm:^7.0.0" - cli-cursor: "npm:^5.0.0" - slice-ansi: "npm:^7.1.0" - strip-ansi: "npm:^7.1.0" - wrap-ansi: "npm:^9.0.0" - checksum: 10/5abb4131e33b1e7f8416bb194fe17a3603d83e4657c5bf5bb81ce4187f3b00ea481643b85c3d5cefe6037a452cdcf7f1391ab8ea0d9c23e75d19589830ec4f11 - languageName: node - linkType: hard - "longest-streak@npm:^3.0.0": version: 3.1.0 resolution: "longest-streak@npm:3.1.0" @@ -8063,7 +7913,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:4.0.8, micromatch@npm:^4.0.4, micromatch@npm:^4.0.8, micromatch@npm:~4.0.8": +"micromatch@npm:4.0.8, micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -8080,20 +7930,6 @@ __metadata: languageName: node linkType: hard -"mimic-fn@npm:^4.0.0": - version: 4.0.0 - resolution: "mimic-fn@npm:4.0.0" - checksum: 10/995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 - languageName: node - linkType: hard - -"mimic-function@npm:^5.0.0": - version: 5.0.1 - resolution: "mimic-function@npm:5.0.1" - checksum: 10/eb5893c99e902ccebbc267c6c6b83092966af84682957f79313311edb95e8bb5f39fb048d77132b700474d1c86d90ccc211e99bae0935447a4834eb4c882982c - languageName: node - linkType: hard - "min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" @@ -8506,15 +8342,6 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^5.1.0": - version: 5.1.0 - resolution: "npm-run-path@npm:5.1.0" - dependencies: - path-key: "npm:^4.0.0" - checksum: 10/dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 - languageName: node - linkType: hard - "npmlog@npm:^6.0.0": version: 6.0.2 resolution: "npmlog@npm:6.0.2" @@ -8612,24 +8439,6 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^6.0.0": - version: 6.0.0 - resolution: "onetime@npm:6.0.0" - dependencies: - mimic-fn: "npm:^4.0.0" - checksum: 10/0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 - languageName: node - linkType: hard - -"onetime@npm:^7.0.0": - version: 7.0.0 - resolution: "onetime@npm:7.0.0" - dependencies: - mimic-function: "npm:^5.0.0" - checksum: 10/eb08d2da9339819e2f9d52cab9caf2557d80e9af8c7d1ae86e1a0fef027d00a88e9f5bd67494d350df360f7c559fbb44e800b32f310fb989c860214eacbb561c - languageName: node - linkType: hard - "optionator@npm:^0.9.3": version: 0.9.3 resolution: "optionator@npm:0.9.3" @@ -8876,13 +8685,6 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^4.0.0": - version: 4.0.0 - resolution: "path-key@npm:4.0.0" - checksum: 10/8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 - languageName: node - linkType: hard - "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -8951,15 +8753,6 @@ __metadata: languageName: node linkType: hard -"pidtree@npm:~0.6.0": - version: 0.6.0 - resolution: "pidtree@npm:0.6.0" - bin: - pidtree: bin/pidtree.js - checksum: 10/ea67fb3159e170fd069020e0108ba7712df9f0fd13c8db9b2286762856ddce414fb33932e08df4bfe36e91fe860b51852aee49a6f56eb4714b69634343add5df - languageName: node - linkType: hard - "pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" @@ -9965,16 +9758,6 @@ __metadata: languageName: node linkType: hard -"remark-lint-no-url-trailing-slash@npm:3.0.1": - version: 3.0.1 - resolution: "remark-lint-no-url-trailing-slash@npm:3.0.1" - dependencies: - unified-lint-rule: "npm:^1.0.0" - unist-util-visit: "npm:^1.0.0" - checksum: 10/23f845669020f1e99dd40bc0bb23efff89f79496c0cb1d03c0706cb734bc4aa29f4104080a922b276ecdb0976df34c0f0619b696027aedf67ff55ff397bbd00b - languageName: node - linkType: hard - "remark-lint-ordered-list-marker-style@npm:4.0.0": version: 4.0.0 resolution: "remark-lint-ordered-list-marker-style@npm:4.0.0" @@ -10262,16 +10045,6 @@ __metadata: languageName: node linkType: hard -"restore-cursor@npm:^5.0.0": - version: 5.1.0 - resolution: "restore-cursor@npm:5.1.0" - dependencies: - onetime: "npm:^7.0.0" - signal-exit: "npm:^4.1.0" - checksum: 10/838dd54e458d89cfbc1a923b343c1b0f170a04100b4ce1733e97531842d7b440463967e521216e8ab6c6f8e89df877acc7b7f4c18ec76e99fb9bf5a60d358d2c - languageName: node - linkType: hard - "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -10286,13 +10059,6 @@ __metadata: languageName: node linkType: hard -"rfdc@npm:^1.4.1": - version: 1.4.1 - resolution: "rfdc@npm:1.4.1" - checksum: 10/2f3d11d3d8929b4bfeefc9acb03aae90f971401de0add5ae6c5e38fec14f0405e6a4aad8fdb76344bfdd20c5193110e3750cbbd28ba86d73729d222b6cf4a729 - languageName: node - linkType: hard - "rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" @@ -10559,7 +10325,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": +"signal-exit@npm:^4.0.1": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f @@ -10600,33 +10366,6 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:^5.0.0": - version: 5.0.0 - resolution: "slice-ansi@npm:5.0.0" - dependencies: - ansi-styles: "npm:^6.0.0" - is-fullwidth-code-point: "npm:^4.0.0" - checksum: 10/7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e - languageName: node - linkType: hard - -"slice-ansi@npm:^7.1.0": - version: 7.1.0 - resolution: "slice-ansi@npm:7.1.0" - dependencies: - ansi-styles: "npm:^6.2.1" - is-fullwidth-code-point: "npm:^5.0.0" - checksum: 10/10313dd3cf7a2e4b265f527b1684c7c568210b09743fd1bd74f2194715ed13ffba653dc93a5fa79e3b1711518b8990a732cb7143aa01ddafe626e99dfa6474b2 - languageName: node - linkType: hard - -"sliced@npm:^1.0.1": - version: 1.0.1 - resolution: "sliced@npm:1.0.1" - checksum: 10/4c9f7f783dafc48eb02eda0047a3dbe9920ed36bd50b96f7ecceb07b1b18da27bfc7f24438ccb85b63d353b4978dc130de9d9dd7e84d5ebaf44fe5138ae7b23b - languageName: node - linkType: hard - "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -10743,13 +10482,6 @@ __metadata: languageName: node linkType: hard -"string-argv@npm:~0.3.2": - version: 0.3.2 - resolution: "string-argv@npm:0.3.2" - checksum: 10/f9d3addf887026b4b5f997a271149e93bf71efc8692e7dc0816e8807f960b18bcb9787b45beedf0f97ff459575ee389af3f189d8b649834cac602f2e857e75af - languageName: node - linkType: hard - "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -10794,17 +10526,6 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^7.0.0": - version: 7.2.0 - resolution: "string-width@npm:7.2.0" - dependencies: - emoji-regex: "npm:^10.3.0" - get-east-asian-width: "npm:^1.0.0" - strip-ansi: "npm:^7.1.0" - checksum: 10/42f9e82f61314904a81393f6ef75b832c39f39761797250de68c041d8ba4df2ef80db49ab6cd3a292923a6f0f409b8c9980d120f7d32c820b4a8a84a2598a295 - languageName: node - linkType: hard - "string.prototype.trim@npm:^1.2.9": version: 1.2.9 resolution: "string.prototype.trim@npm:1.2.9" @@ -10897,13 +10618,6 @@ __metadata: languageName: node linkType: hard -"strip-final-newline@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-final-newline@npm:3.0.0" - checksum: 10/23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 - languageName: node - linkType: hard - "strip-indent@npm:^3.0.0": version: 3.0.0 resolution: "strip-indent@npm:3.0.0" @@ -11330,13 +11044,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.6.2": - version: 5.6.2 - resolution: "typescript@npm:5.6.2" +"typescript@npm:5.7.0-beta": + version: 5.7.0-beta + resolution: "typescript@npm:5.7.0-beta" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/f95365d4898f357823e93d334ecda9fcade54f009b397c7d05b7621cd9e865981033cf89ccde0f3e3a7b73b1fdbae18e92bc77db237b43e912f053fef0f9a53b + checksum: 10/4edffe5624a80b899e45d2de05014a09247133b2c446811ff9a84e708c360d48930b20924c3418f3dbf104ef3c123e4977ee4e5ec2be67b4a5c0fc9e71052c38 languageName: node linkType: hard @@ -11350,13 +11064,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.6.2#optional!builtin": - version: 5.6.2 - resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=8c6c40" +"typescript@patch:typescript@npm%3A5.7.0-beta#optional!builtin": + version: 5.7.0-beta + resolution: "typescript@patch:typescript@npm%3A5.7.0-beta#optional!builtin::version=5.7.0-beta&hash=cef18b" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10/8bfc7ca0d9feca4c3fcbd6c70741abfcd714197d6448e68225ae71e462447d904d3bfba49759a8fbe4956d87f054e2d346833c8349c222daa594a2626d4e1be8 + checksum: 10/eb91d3ef54b409df6e000926eb788855bd815da1adec4e967e0092f8e61352b9e42d10da42ac79c2f4a04ce6b2cc545678e1a41db734f865d20c67baad6b1a8a languageName: node linkType: hard @@ -11395,10 +11109,10 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~6.19.2": - version: 6.19.6 - resolution: "undici-types@npm:6.19.6" - checksum: 10/0ea9bc25762a86597d095b3772f6cec0bcabb796c339f7dfa2bd601c745a480289eb2939848dc285a56d4f94f50c475868160d8d6d3f54e823f1faf7ea9e9468 +"undici-types@npm:~6.19.8": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10/cf0b48ed4fc99baf56584afa91aaffa5010c268b8842f62e02f752df209e3dea138b372a60a963b3b2576ed932f32329ce7ddb9cb5f27a6c83040d8cd74b7a70 languageName: node linkType: hard @@ -11462,15 +11176,6 @@ __metadata: languageName: node linkType: hard -"unified-lint-rule@npm:^1.0.0": - version: 1.0.6 - resolution: "unified-lint-rule@npm:1.0.6" - dependencies: - wrapped: "npm:^1.0.1" - checksum: 10/fb3fa8a08bab260e8200a40de48180d422cc7beb118cd74352490a6e8e42346ffbaed47e43593df4b5519eead0f67d71d1e4031b1b100a9aaf5f42d7b6135d54 - languageName: node - linkType: hard - "unified-lint-rule@npm:^3.0.0": version: 3.0.0 resolution: "unified-lint-rule@npm:3.0.0" @@ -11541,13 +11246,6 @@ __metadata: languageName: node linkType: hard -"unist-util-is@npm:^3.0.0": - version: 3.0.0 - resolution: "unist-util-is@npm:3.0.0" - checksum: 10/4cb6af4ad752155da2e79318f781adcd53fa2df3376f9acdee628de536613337f501ded76bf7e4a153be93ee0ff009889882eb71ac1a72ae5496ae278661c143 - languageName: node - linkType: hard - "unist-util-is@npm:^6.0.0": version: 6.0.0 resolution: "unist-util-is@npm:6.0.0" @@ -11603,15 +11301,6 @@ __metadata: languageName: node linkType: hard -"unist-util-visit-parents@npm:^2.0.0": - version: 2.1.2 - resolution: "unist-util-visit-parents@npm:2.1.2" - dependencies: - unist-util-is: "npm:^3.0.0" - checksum: 10/01ef0b7d369e97c7ec15dde3d70e9016993ebacdf4860ac736cdcfad3991411c6695f55dda128ab2faeb1af616f0509f0741cefe4e2c1a32d6be40b0e5a3d986 - languageName: node - linkType: hard - "unist-util-visit-parents@npm:^6.0.0": version: 6.0.1 resolution: "unist-util-visit-parents@npm:6.0.1" @@ -11622,15 +11311,6 @@ __metadata: languageName: node linkType: hard -"unist-util-visit@npm:^1.0.0": - version: 1.4.1 - resolution: "unist-util-visit@npm:1.4.1" - dependencies: - unist-util-visit-parents: "npm:^2.0.0" - checksum: 10/e9395205b6908c8d0fe71bc44e65d89d4781d1bb2d453a33cb67ed4124bad0b89d6b1d526ebaecb82a7c48e211bdf6f24351449b8cc115327b345f4617c18728 - languageName: node - linkType: hard - "unist-util-visit@npm:^5.0.0": version: 5.0.0 resolution: "unist-util-visit@npm:5.0.0" @@ -12030,27 +11710,6 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^9.0.0": - version: 9.0.0 - resolution: "wrap-ansi@npm:9.0.0" - dependencies: - ansi-styles: "npm:^6.2.1" - string-width: "npm:^7.0.0" - strip-ansi: "npm:^7.1.0" - checksum: 10/b9d91564c091cf3978a7c18ca0f3e4d4606e83549dbe59cf76f5e77feefdd5ec91443155e8102630524d10a8c275efac8a7082c0f26fa43e6b989dc150d176ce - languageName: node - linkType: hard - -"wrapped@npm:^1.0.1": - version: 1.0.1 - resolution: "wrapped@npm:1.0.1" - dependencies: - co: "npm:3.1.0" - sliced: "npm:^1.0.1" - checksum: 10/549d3a0dae46f97eae15f749dc9c512cbbb0db716e1f2bc48e3e134123c941750ed008bb2799d154406154e69fb3b2e504964d9bd8e3c63e99ac4991cfd00ae8 - languageName: node - linkType: hard - "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -12118,15 +11777,6 @@ __metadata: languageName: node linkType: hard -"yaml@npm:~2.5.0": - version: 2.5.1 - resolution: "yaml@npm:2.5.1" - bin: - yaml: bin.mjs - checksum: 10/0eecb679db75ea6a989ad97715a9fa5d946972945aa6aa7d2175bca66c213b5564502ccb1cdd04b1bf816ee38b5c43e4e2fda3ff6f5e09da24dabb51ae92c57d - languageName: node - linkType: hard - "yargs-parser@npm:^20.2.2": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9"