@mnaoumov/typescript-dev-toolkit 2.2.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/assets/biome.json +49 -0
  2. package/assets/prettier.json +13 -0
  3. package/dist/lib/cjs/docs-site/docs-links.cjs +6 -3
  4. package/dist/lib/cjs/docs-site/docs-site-commands.cjs +24 -5
  5. package/dist/lib/cjs/docs-site/docs-site-commands.d.cts +8 -3
  6. package/dist/lib/cjs/docs-site/docs-site-config.cjs +4 -1
  7. package/dist/lib/cjs/docs-site/docs-site-config.d.cts +17 -0
  8. package/dist/lib/cjs/docs-site/index.cjs +4 -1
  9. package/dist/lib/cjs/docs-site/index.d.cts +1 -0
  10. package/dist/lib/cjs/docs-site/link-check.cjs +88 -11
  11. package/dist/lib/cjs/docs-site/link-check.d.cts +91 -2
  12. package/dist/lib/cjs/docs-site/repo-homepage.cjs +108 -0
  13. package/dist/lib/cjs/docs-site/repo-homepage.d.cts +50 -0
  14. package/dist/lib/cjs/formatters/auto.cjs +59 -0
  15. package/dist/lib/cjs/formatters/auto.d.cts +51 -0
  16. package/dist/lib/cjs/formatters/biome.cjs +121 -0
  17. package/dist/lib/cjs/formatters/biome.d.cts +69 -0
  18. package/dist/lib/cjs/formatters/index.cjs +12 -3
  19. package/dist/lib/cjs/formatters/index.d.cts +3 -0
  20. package/dist/lib/cjs/formatters/prettier.cjs +93 -0
  21. package/dist/lib/cjs/formatters/prettier.d.cts +56 -0
  22. package/dist/lib/cjs/index.cjs +4 -1
  23. package/dist/lib/cjs/index.d.cts +1 -0
  24. package/dist/lib/cjs/linters/auto.cjs +52 -0
  25. package/dist/lib/cjs/linters/auto.d.cts +49 -0
  26. package/dist/lib/cjs/linters/biome.cjs +50 -0
  27. package/dist/lib/cjs/linters/biome.d.cts +36 -0
  28. package/dist/lib/cjs/linters/eslint-config.cjs +52 -29
  29. package/dist/lib/cjs/linters/eslint.cjs +15 -14
  30. package/dist/lib/cjs/linters/eslint.d.cts +6 -0
  31. package/dist/lib/cjs/linters/index.cjs +7 -1
  32. package/dist/lib/cjs/linters/index.d.cts +2 -0
  33. package/dist/lib/cjs/repo-paths.cjs +3 -1
  34. package/dist/lib/cjs/repo-paths.d.cts +8 -0
  35. package/dist/lib/cjs/shared-config-files.cjs +68 -0
  36. package/dist/lib/cjs/shared-config-files.d.cts +29 -0
  37. package/dist/lib/cjs/test-runners/auto.cjs +83 -0
  38. package/dist/lib/cjs/test-runners/auto.d.cts +82 -0
  39. package/dist/lib/cjs/test-runners/index.cjs +10 -1
  40. package/dist/lib/cjs/test-runners/index.d.cts +3 -0
  41. package/dist/lib/cjs/test-runners/jest-config.cjs +86 -0
  42. package/dist/lib/cjs/test-runners/jest-config.d.cts +71 -0
  43. package/dist/lib/cjs/test-runners/jest.cjs +111 -0
  44. package/dist/lib/cjs/test-runners/jest.d.cts +77 -0
  45. package/dist/lib/esm/docs-site/docs-links.mjs +7 -3
  46. package/dist/lib/esm/docs-site/docs-site-commands.d.mts +8 -3
  47. package/dist/lib/esm/docs-site/docs-site-commands.mjs +14 -5
  48. package/dist/lib/esm/docs-site/docs-site-config.d.mts +17 -0
  49. package/dist/lib/esm/docs-site/docs-site-config.mjs +4 -1
  50. package/dist/lib/esm/docs-site/index.d.mts +1 -0
  51. package/dist/lib/esm/docs-site/index.mjs +3 -1
  52. package/dist/lib/esm/docs-site/link-check.d.mts +91 -2
  53. package/dist/lib/esm/docs-site/link-check.mjs +83 -11
  54. package/dist/lib/esm/docs-site/repo-homepage.d.mts +50 -0
  55. package/dist/lib/esm/docs-site/repo-homepage.mjs +84 -0
  56. package/dist/lib/esm/formatters/auto.d.mts +51 -0
  57. package/dist/lib/esm/formatters/auto.mjs +40 -0
  58. package/dist/lib/esm/formatters/biome.d.mts +69 -0
  59. package/dist/lib/esm/formatters/biome.mjs +107 -0
  60. package/dist/lib/esm/formatters/index.d.mts +3 -0
  61. package/dist/lib/esm/formatters/index.mjs +8 -2
  62. package/dist/lib/esm/formatters/prettier.d.mts +56 -0
  63. package/dist/lib/esm/formatters/prettier.mjs +75 -0
  64. package/dist/lib/esm/index.d.mts +1 -0
  65. package/dist/lib/esm/index.mjs +3 -1
  66. package/dist/lib/esm/linters/auto.d.mts +49 -0
  67. package/dist/lib/esm/linters/auto.mjs +30 -0
  68. package/dist/lib/esm/linters/biome.d.mts +36 -0
  69. package/dist/lib/esm/linters/biome.mjs +29 -0
  70. package/dist/lib/esm/linters/eslint-config.mjs +52 -29
  71. package/dist/lib/esm/linters/eslint.d.mts +6 -0
  72. package/dist/lib/esm/linters/eslint.mjs +14 -14
  73. package/dist/lib/esm/linters/index.d.mts +2 -0
  74. package/dist/lib/esm/linters/index.mjs +5 -1
  75. package/dist/lib/esm/repo-paths.d.mts +8 -0
  76. package/dist/lib/esm/repo-paths.mjs +3 -1
  77. package/dist/lib/esm/shared-config-files.d.mts +29 -0
  78. package/dist/lib/esm/shared-config-files.mjs +36 -0
  79. package/dist/lib/esm/test-runners/auto.d.mts +82 -0
  80. package/dist/lib/esm/test-runners/auto.mjs +64 -0
  81. package/dist/lib/esm/test-runners/index.d.mts +3 -0
  82. package/dist/lib/esm/test-runners/index.mjs +7 -1
  83. package/dist/lib/esm/test-runners/jest-config.d.mts +71 -0
  84. package/dist/lib/esm/test-runners/jest-config.mjs +58 -0
  85. package/dist/lib/esm/test-runners/jest.d.mts +77 -0
  86. package/dist/lib/esm/test-runners/jest.mjs +75 -0
  87. package/docs-site/repo-homepage/package.json +6 -0
  88. package/formatters/auto/package.json +6 -0
  89. package/formatters/biome/package.json +6 -0
  90. package/formatters/prettier/package.json +6 -0
  91. package/linters/auto/package.json +6 -0
  92. package/linters/biome/package.json +6 -0
  93. package/package.json +21 -1
  94. package/test-runners/auto/package.json +6 -0
  95. package/test-runners/jest/package.json +6 -0
  96. package/test-runners/jest-config/package.json +6 -0
@@ -0,0 +1,58 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ import { existsSync } from "node:fs";
7
+ import { readPackageJsonSync } from "../npm.mjs";
8
+ import { RepoPaths } from "../repo-paths.mjs";
9
+ import { resolvePathFromRootSafe } from "../root.mjs";
10
+ import { LIBRARY_VITEST_COVERAGE } from "./vitest-config.mjs";
11
+ const JEST_TYPESCRIPT_TRANSFORM_PATTERN = String.raw`^.+\.[cm]?tsx?$`;
12
+ const JEST_RELATIVE_JS_IMPORT_MAPPER = {
13
+ "^(\\.{1,2}/.*)\\.js$": "$1"
14
+ };
15
+ const DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS = ["/node_modules/", "/dist/"];
16
+ function defineJestConfig(options = {}) {
17
+ const { esm = isEsmPackage(), moduleNameMapper, tsJestOptions, ...overrides } = options;
18
+ return {
19
+ collectCoverageFrom: [
20
+ ...LIBRARY_VITEST_COVERAGE.include,
21
+ ...LIBRARY_VITEST_COVERAGE.exclude.map((pattern) => `!${pattern}`)
22
+ ],
23
+ coverageDirectory: LIBRARY_VITEST_COVERAGE.reportsDirectory,
24
+ coverageProvider: LIBRARY_VITEST_COVERAGE.provider,
25
+ coverageReporters: ["text", "lcov", "html"],
26
+ extensionsToTreatAsEsm: esm ? [".ts", ".tsx"] : [],
27
+ moduleNameMapper: {
28
+ ...JEST_RELATIVE_JS_IMPORT_MAPPER,
29
+ ...moduleNameMapper
30
+ },
31
+ roots: ["<rootDir>/src"],
32
+ testEnvironment: "node",
33
+ testMatch: ["**/*.test.ts"],
34
+ testPathIgnorePatterns: [...DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS],
35
+ transform: {
36
+ [JEST_TYPESCRIPT_TRANSFORM_PATTERN]: [
37
+ "ts-jest",
38
+ {
39
+ tsconfig: { isolatedModules: true },
40
+ useESM: esm,
41
+ ...tsJestOptions
42
+ }
43
+ ]
44
+ },
45
+ ...overrides
46
+ };
47
+ }
48
+ function isEsmPackage() {
49
+ return existsSync(resolvePathFromRootSafe({ path: RepoPaths.PackageJson })) && readPackageJsonSync().type === "module";
50
+ }
51
+ export {
52
+ DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS,
53
+ JEST_RELATIVE_JS_IMPORT_MAPPER,
54
+ JEST_TYPESCRIPT_TRANSFORM_PATTERN,
55
+ defineJestConfig,
56
+ isEsmPackage
57
+ };
58
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9qZXN0LWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBqZXN0IGNvbmZpZ3VyYXRpb24gZm9yIFR5cGVTY3JpcHQgcGFja2FnZXM6IHtAbGluayBkZWZpbmVKZXN0Q29uZmlnfSwgd2hpY2ggZmlsbHMgaW4gdGhlIHRzLWplc3QgdHJhbnNmb3JtLFxuICogdGhlIEVTTSBzZXR0aW5ncywgdGhlIHRlc3QgZXhjbHVkZXMgYW5kIHRoZSBjb3ZlcmFnZSBibG9jayBhIHByb2plY3Qgb3RoZXJ3aXNlIHdyaXRlcyBieSBoYW5kLlxuICpcbiAqIFRoZSBjb3ZlcmFnZSBibG9jayBpcyB0aGUgb25lIHRoZSB2aXRlc3QgbGlicmFyeSBjb25maWd1cmF0aW9uIHVzZXMsIHNvIGEgcGFja2FnZSByZXBvcnRzIHRoZSBzYW1lIGZpbGVzIHdoaWNoZXZlclxuICogcnVubmVyIGl0IHBpY2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnamVzdCc7XG5pbXBvcnQgdHlwZSB7IFRzSmVzdFRyYW5zZm9ybWVyT3B0aW9ucyB9IGZyb20gJ3RzLWplc3QnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7IHJlYWRQYWNrYWdlSnNvblN5bmMgfSBmcm9tICcuLi9ucG0udHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290U2FmZSB9IGZyb20gJy4uL3Jvb3QudHMnO1xuaW1wb3J0IHsgTElCUkFSWV9WSVRFU1RfQ09WRVJBR0UgfSBmcm9tICcuL3ZpdGVzdC1jb25maWcudHMnO1xuXG4vKipcbiAqIFRoZSBmaWxlcyB0cy1qZXN0IGNvbXBpbGVzOiBgLnRzYCwgYC50c3hgLCBgLm10c2AgYW5kIGAuY3RzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEpFU1RfVFlQRVNDUklQVF9UUkFOU0ZPUk1fUEFUVEVSTiA9IFN0cmluZy5yYXdgXi4rXFwuW2NtXT90c3g/JGA7XG5cbi8qKlxuICogTWFwcyBhIHJlbGF0aXZlIGltcG9ydCB3cml0dGVuIHdpdGggYSBgLmpzYCBleHRlbnNpb24gb250byB0aGUgcGF0aCB3aXRob3V0IGFuIGV4dGVuc2lvbiwgd2hpY2ggamVzdCByZXNvbHZlcy5cbiAqXG4gKiBBIHByb2plY3QgY29tcGlsZWQgd2l0aCBgbW9kdWxlOiBub2RlbmV4dGAgd3JpdGVzIGAuL2Zvby5qc2AgZm9yIGAuL2Zvby50c2AsIGFuZCBzbyBkb2VzIFR5cGVTY3JpcHQgaXRzZWxmIHdoZW5cbiAqIGByZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb25zYCB0dXJucyBhIGAuL2Zvby50c2AgaW1wb3J0IGludG8gYC4vZm9vLmpzYC4gSmVzdCBsb29rcyBmb3IgYSBmaWxlIGxpdGVyYWxseSBuYW1lZFxuICogYGZvby5qc2AgYW5kIGZhaWxzIHdpdGggYENhbm5vdCBmaW5kIG1vZHVsZSAnLi9mb28uanMnYCwgc28gdGhlIGV4dGVuc2lvbiBpcyByZW1vdmVkIGFuZCBqZXN0J3Mgb3duXG4gKiBgbW9kdWxlRmlsZUV4dGVuc2lvbnNgIHNlYXJjaCBmaW5kcyBgZm9vLnRzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEpFU1RfUkVMQVRJVkVfSlNfSU1QT1JUX01BUFBFUjogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7XG4gICdeKFxcXFwuezEsMn0vLiopXFxcXC5qcyQnOiAnJDEnXG59O1xuXG4vKipcbiAqIEZvbGRlcnMgamVzdCBuZXZlciBjb2xsZWN0cyB0ZXN0cyBmcm9tLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9KRVNUX1RFU1RfUEFUSF9JR05PUkVfUEFUVEVSTlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWycvbm9kZV9tb2R1bGVzLycsICcvZGlzdC8nXTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZGVmaW5lSmVzdENvbmZpZ306IGFueSBqZXN0IG9wdGlvbiwgd2hpY2ggd2lucyBvdmVyIHRoZSBkZWZhdWx0IHRoZSBmdW5jdGlvbiB3b3VsZCBvdGhlcndpc2VcbiAqIHNldCwgcGx1cyB0aGUgdHdvIGJlbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUplc3RDb25maWdPcHRpb25zIGV4dGVuZHMgQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgamVzdCBsb2FkcyB0aGUgcHJvamVjdCBhcyBFUyBtb2R1bGVzLlxuICAgKlxuICAgKiBFU00gbmVlZHMgYGV4dGVuc2lvbnNUb1RyZWF0QXNFc21gLCB0cy1qZXN0J3MgYHVzZUVTTWAsIGFuZCBOb2RlJ3MgYC0tZXhwZXJpbWVudGFsLXZtLW1vZHVsZXNgLCB3aGljaCB0aGUgamVzdFxuICAgKiBydW5uZXIgaW4gdGhpcyBwYWNrYWdlIGFkZHMgYnkgdGhlIHNhbWUgcnVsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgIHdoZW4gYHBhY2thZ2UuanNvbmAgZGVjbGFyZXMgYFwidHlwZVwiOiBcIm1vZHVsZVwiYFxuICAgKi9cbiAgcmVhZG9ubHkgZXNtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIHRzLWplc3QgdHJhbnNmb3JtLCBzcHJlYWQgb3ZlciB0aGUgZGVmYXVsdHM6IGB1c2VFU01gIGZyb20ge0BsaW5rIGVzbX0sIGFuZCBhIGB0c2NvbmZpZ2Agb2ZcbiAgICogYHsgaXNvbGF0ZWRNb2R1bGVzOiB0cnVlIH1gLCBzbyBlYWNoIGZpbGUgaXMgdHJhbnNwaWxlZCBvbiBpdHMgb3duLCB3aXRob3V0IGEgdHlwZSBjaGVjaywgYXMgdml0ZXN0IGRvZXMuIEFcbiAgICogYHRzY29uZmlnYCBnaXZlbiBoZXJlIHJlcGxhY2VzIHRoYXQgZGVmYXVsdCByYXRoZXIgdGhhbiBtZXJnaW5nIHdpdGggaXQuXG4gICAqXG4gICAqIElnbm9yZWQgd2hlbiB7QGxpbmsgQ29uZmlnLnRyYW5zZm9ybX0gaXMgZ2l2ZW4uXG4gICAqL1xuICByZWFkb25seSB0c0plc3RPcHRpb25zPzogVHNKZXN0VHJhbnNmb3JtZXJPcHRpb25zO1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBUeXBlU2NyaXB0IHByb2plY3QncyBqZXN0IGNvbmZpZ3VyYXRpb24uXG4gKlxuICogVGhlIGRlZmF1bHRzOiB0aGUgdGVzdHMgYXJlIGBzcmMvKipcXC8qLnRlc3QudHNgLCBydW4gaW4gdGhlIGBub2RlYCBlbnZpcm9ubWVudCwgdHJhbnNmb3JtZWQgYnkgdHMtamVzdCwgYXMgRVNNIHdoZW5cbiAqIHRoZSBwYWNrYWdlIGlzIChzZWUge0BsaW5rIERlZmluZUplc3RDb25maWdPcHRpb25zLmVzbX0pOyBhIGAuanNgIHJlbGF0aXZlIGltcG9ydCByZXNvbHZlcyBvbnRvIGl0cyBgLnRzYCBzb3VyY2U7XG4gKiBjb3ZlcmFnZSBpcyB2OCBvdmVyIGBzcmMvYCwgd2l0aG91dCB0aGUgYmFycmVscywgdGhlIGRlY2xhcmF0aW9ucywgdGhlIHRlc3RzIGFuZCB0aGUgdGVzdCBoZWxwZXJzLCByZXBvcnRlZCBhc1xuICogYHRleHRgLCBgbGNvdmAgYW5kIGBodG1sYCBpbnRvIGBjb3ZlcmFnZS9gLiBFdmVyeSBqZXN0IG9wdGlvbiBpbiBgb3B0aW9uc2AgcmVwbGFjZXMgaXRzIGRlZmF1bHQsIGV4Y2VwdFxuICogYG1vZHVsZU5hbWVNYXBwZXJgLCB3aG9zZSBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUgYC5qc2AgbWFwcGVyLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBqZXN0IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVKZXN0Q29uZmlnKG9wdGlvbnM6IERlZmluZUplc3RDb25maWdPcHRpb25zID0ge30pOiBDb25maWcge1xuICBjb25zdCB7IGVzbSA9IGlzRXNtUGFja2FnZSgpLCBtb2R1bGVOYW1lTWFwcGVyLCB0c0plc3RPcHRpb25zLCAuLi5vdmVycmlkZXMgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBjb2xsZWN0Q292ZXJhZ2VGcm9tOiBbXG4gICAgICAuLi5MSUJSQVJZX1ZJVEVTVF9DT1ZFUkFHRS5pbmNsdWRlLFxuICAgICAgLi4uTElCUkFSWV9WSVRFU1RfQ09WRVJBR0UuZXhjbHVkZS5tYXAoKHBhdHRlcm4pID0+IGAhJHtwYXR0ZXJufWApXG4gICAgXSxcbiAgICBjb3ZlcmFnZURpcmVjdG9yeTogTElCUkFSWV9WSVRFU1RfQ09WRVJBR0UucmVwb3J0c0RpcmVjdG9yeSxcbiAgICBjb3ZlcmFnZVByb3ZpZGVyOiBMSUJSQVJZX1ZJVEVTVF9DT1ZFUkFHRS5wcm92aWRlcixcbiAgICBjb3ZlcmFnZVJlcG9ydGVyczogWyd0ZXh0JywgJ2xjb3YnLCAnaHRtbCddLFxuICAgIGV4dGVuc2lvbnNUb1RyZWF0QXNFc206IGVzbSA/IFsnLnRzJywgJy50c3gnXSA6IFtdLFxuICAgIG1vZHVsZU5hbWVNYXBwZXI6IHtcbiAgICAgIC4uLkpFU1RfUkVMQVRJVkVfSlNfSU1QT1JUX01BUFBFUixcbiAgICAgIC4uLm1vZHVsZU5hbWVNYXBwZXJcbiAgICB9LFxuICAgIHJvb3RzOiBbJzxyb290RGlyPi9zcmMnXSxcbiAgICB0ZXN0RW52aXJvbm1lbnQ6ICdub2RlJyxcbiAgICB0ZXN0TWF0Y2g6IFsnKiovKi50ZXN0LnRzJ10sXG4gICAgdGVzdFBhdGhJZ25vcmVQYXR0ZXJuczogWy4uLkRFRkFVTFRfSkVTVF9URVNUX1BBVEhfSUdOT1JFX1BBVFRFUk5TXSxcbiAgICB0cmFuc2Zvcm06IHtcbiAgICAgIFtKRVNUX1RZUEVTQ1JJUFRfVFJBTlNGT1JNX1BBVFRFUk5dOiBbXG4gICAgICAgICd0cy1qZXN0JyxcbiAgICAgICAge1xuICAgICAgICAgIHRzY29uZmlnOiB7IGlzb2xhdGVkTW9kdWxlczogdHJ1ZSB9LFxuICAgICAgICAgIHVzZUVTTTogZXNtLFxuICAgICAgICAgIC4uLnRzSmVzdE9wdGlvbnNcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgLi4ub3ZlcnJpZGVzXG4gIH07XG59XG5cbi8qKlxuICogU2F5cyB3aGV0aGVyIHRoZSBwcm9qZWN0IGF0IHRoZSByb290IGlzIGFuIEVTIG1vZHVsZSBwYWNrYWdlLlxuICpcbiAqIEByZXR1cm5zIFdoZXRoZXIgaXRzIGBwYWNrYWdlLmpzb25gIGRlY2xhcmVzIGBcInR5cGVcIjogXCJtb2R1bGVcImAuIEEgcHJvamVjdCB3aXRob3V0IGEgYHBhY2thZ2UuanNvbmAgaXMgbm90LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFc21QYWNrYWdlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZXhpc3RzU3luYyhyZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IFJlcG9QYXRocy5QYWNrYWdlSnNvbiB9KSkgJiYgcmVhZFBhY2thZ2VKc29uU3luYygpLnR5cGUgPT09ICdtb2R1bGUnO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFhQSxTQUFTLGtCQUFrQjtBQUUzQixTQUFTLDJCQUEyQjtBQUNwQyxTQUFTLGlCQUFpQjtBQUMxQixTQUFTLCtCQUErQjtBQUN4QyxTQUFTLCtCQUErQjtBQUtqQyxNQUFNLG9DQUFvQyxPQUFPO0FBVWpELE1BQU0saUNBQW1FO0FBQUEsRUFDOUUsd0JBQXdCO0FBQzFCO0FBS08sTUFBTSx5Q0FBNEQsQ0FBQyxrQkFBa0IsUUFBUTtBQXVDN0YsU0FBUyxpQkFBaUIsVUFBbUMsQ0FBQyxHQUFXO0FBQzlFLFFBQU0sRUFBRSxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsZUFBZSxHQUFHLFVBQVUsSUFBSTtBQUVoRixTQUFPO0FBQUEsSUFDTCxxQkFBcUI7QUFBQSxNQUNuQixHQUFHLHdCQUF3QjtBQUFBLE1BQzNCLEdBQUcsd0JBQXdCLFFBQVEsSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLEVBQUU7QUFBQSxJQUNuRTtBQUFBLElBQ0EsbUJBQW1CLHdCQUF3QjtBQUFBLElBQzNDLGtCQUFrQix3QkFBd0I7QUFBQSxJQUMxQyxtQkFBbUIsQ0FBQyxRQUFRLFFBQVEsTUFBTTtBQUFBLElBQzFDLHdCQUF3QixNQUFNLENBQUMsT0FBTyxNQUFNLElBQUksQ0FBQztBQUFBLElBQ2pELGtCQUFrQjtBQUFBLE1BQ2hCLEdBQUc7QUFBQSxNQUNILEdBQUc7QUFBQSxJQUNMO0FBQUEsSUFDQSxPQUFPLENBQUMsZUFBZTtBQUFBLElBQ3ZCLGlCQUFpQjtBQUFBLElBQ2pCLFdBQVcsQ0FBQyxjQUFjO0FBQUEsSUFDMUIsd0JBQXdCLENBQUMsR0FBRyxzQ0FBc0M7QUFBQSxJQUNsRSxXQUFXO0FBQUEsTUFDVCxDQUFDLGlDQUFpQyxHQUFHO0FBQUEsUUFDbkM7QUFBQSxRQUNBO0FBQUEsVUFDRSxVQUFVLEVBQUUsaUJBQWlCLEtBQUs7QUFBQSxVQUNsQyxRQUFRO0FBQUEsVUFDUixHQUFHO0FBQUEsUUFDTDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQSxHQUFHO0FBQUEsRUFDTDtBQUNGO0FBT08sU0FBUyxlQUF3QjtBQUN0QyxTQUFPLFdBQVcsd0JBQXdCLEVBQUUsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFDLEtBQUssb0JBQW9CLEVBQUUsU0FBUztBQUNoSDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,77 @@
1
+ /// <reference path="../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * This module provides functions for running tests using the Jest framework.
6
+ */
7
+ /**
8
+ * Every file jest reads its configuration from, besides the `jest` key of `package.json`.
9
+ *
10
+ * @see {@link https://jestjs.io/docs/configuration}
11
+ */
12
+ export declare const JEST_CONFIG_FILE_NAMES: readonly string[];
13
+ /**
14
+ * The Node flag jest's ESM loader needs: it is built on `vm.SyntheticModule`, which Node only exposes under it.
15
+ * Without it every ESM suite fails to load with `Must use import to load ES Module`.
16
+ */
17
+ export declare const EXPERIMENTAL_VM_MODULES_FLAG = "--experimental-vm-modules";
18
+ /**
19
+ * Options for running tests with coverage.
20
+ */
21
+ export interface TestCoverageOptions extends TestOptions {
22
+ /**
23
+ * Minimum coverage percentage required, for lines, functions, branches and statements alike. If the actual coverage
24
+ * falls below it, jest exits with a non-zero code.
25
+ *
26
+ * @default `0`
27
+ */
28
+ readonly minCoverageInPercents?: number;
29
+ }
30
+ /**
31
+ * Options for running tests.
32
+ */
33
+ export interface TestOptions {
34
+ /**
35
+ * Whether jest runs the suite as ES modules, which adds {@link EXPERIMENTAL_VM_MODULES_FLAG} to `NODE_OPTIONS`.
36
+ *
37
+ * @default `true` when `package.json` declares `"type": "module"`, the rule `defineJestConfig` follows too
38
+ */
39
+ readonly esm?: boolean;
40
+ /**
41
+ * The projects to run, by their `displayName`, passed to jest's `--selectProjects`. Unlike vitest's runner, a name
42
+ * matches only itself: jest has no `name:*` form.
43
+ */
44
+ readonly projects?: string[];
45
+ }
46
+ /**
47
+ * Options for running tests in watch mode.
48
+ */
49
+ export type TestWatchOptions = TestOptions;
50
+ /**
51
+ * Says whether the project configures jest.
52
+ *
53
+ * @returns Whether a jest configuration file, or a `jest` key in `package.json`, exists at the project root.
54
+ */
55
+ export declare function hasJestConfig(): Promise<boolean>;
56
+ /**
57
+ * Runs the test suite.
58
+ *
59
+ * @param options - The options for the test.
60
+ * @returns A {@link Promise} that resolves when the tests have completed.
61
+ */
62
+ export declare function test(options?: TestOptions): Promise<void>;
63
+ /**
64
+ * Runs the test suite with coverage.
65
+ *
66
+ * @param options - Optional coverage configuration.
67
+ * @returns A {@link Promise} that resolves when the tests have completed.
68
+ */
69
+ export declare function testCoverage(options?: TestCoverageOptions): Promise<void>;
70
+ /**
71
+ * Runs the test suite in watch mode, re-running the tests the changed files affect. Jest needs a git or Mercurial
72
+ * repository for that.
73
+ *
74
+ * @param options - The options for the test.
75
+ * @returns A {@link Promise} that resolves when the watcher exits.
76
+ */
77
+ export declare function testWatch(options?: TestWatchOptions): Promise<void>;
@@ -0,0 +1,75 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ import { existsSync } from "node:fs";
7
+ import process from "node:process";
8
+ import { readPackageJson } from "../npm.mjs";
9
+ import { resolveToolCommand } from "../package-manager.mjs";
10
+ import { RepoPaths } from "../repo-paths.mjs";
11
+ import {
12
+ execFromRoot,
13
+ resolvePathFromRootSafe
14
+ } from "../root.mjs";
15
+ import { isEsmPackage } from "./jest-config.mjs";
16
+ const JEST_CONFIG_FILE_NAMES = [
17
+ "jest.config.cjs",
18
+ "jest.config.cts",
19
+ "jest.config.js",
20
+ "jest.config.json",
21
+ "jest.config.mjs",
22
+ "jest.config.mts",
23
+ "jest.config.ts"
24
+ ];
25
+ const EXPERIMENTAL_VM_MODULES_FLAG = "--experimental-vm-modules";
26
+ async function hasJestConfig() {
27
+ if (JEST_CONFIG_FILE_NAMES.some((fileName) => existsSync(resolvePathFromRootSafe({ path: fileName })))) {
28
+ return true;
29
+ }
30
+ if (!existsSync(resolvePathFromRootSafe({ path: RepoPaths.PackageJson }))) {
31
+ return false;
32
+ }
33
+ const packageJson = await readPackageJson();
34
+ return Object.hasOwn(packageJson, "jest");
35
+ }
36
+ async function test(options = {}) {
37
+ await runJest([], options);
38
+ }
39
+ async function testCoverage(options = {}) {
40
+ const threshold = options.minCoverageInPercents ?? 0;
41
+ const coverageThreshold = {
42
+ global: {
43
+ branches: threshold,
44
+ functions: threshold,
45
+ lines: threshold,
46
+ statements: threshold
47
+ }
48
+ };
49
+ await runJest(["--coverage", `--coverageThreshold=${JSON.stringify(coverageThreshold)}`], options);
50
+ }
51
+ async function testWatch(options = {}) {
52
+ await runJest(["--watch"], options, true);
53
+ }
54
+ function addExperimentalVmModulesFlag(nodeOptions) {
55
+ const flags = (nodeOptions ?? "").split(/\s+/).filter(Boolean);
56
+ if (!flags.includes(EXPERIMENTAL_VM_MODULES_FLAG)) {
57
+ flags.push(EXPERIMENTAL_VM_MODULES_FLAG);
58
+ }
59
+ return flags.join(" ");
60
+ }
61
+ async function runJest(runArguments, options, isInteractive = false) {
62
+ const { esm = isEsmPackage(), projects = [] } = options;
63
+ const projectArguments = projects.length > 0 ? ["--selectProjects", ...projects] : [];
64
+ const env = esm ? { NODE_OPTIONS: addExperimentalVmModulesFlag(process.env["NODE_OPTIONS"]) } : {};
65
+ await execFromRoot([...resolveToolCommand({ tool: "jest" }), ...runArguments, ...projectArguments], { env, isInteractive });
66
+ }
67
+ export {
68
+ EXPERIMENTAL_VM_MODULES_FLAG,
69
+ JEST_CONFIG_FILE_NAMES,
70
+ hasJestConfig,
71
+ test,
72
+ testCoverage,
73
+ testWatch
74
+ };
75
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9qZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBydW5uaW5nIHRlc3RzIHVzaW5nIHRoZSBKZXN0IGZyYW1ld29yay5cbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICcuLi9ucG0udHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7IGlzRXNtUGFja2FnZSB9IGZyb20gJy4vamVzdC1jb25maWcudHMnO1xuXG4vKipcbiAqIEV2ZXJ5IGZpbGUgamVzdCByZWFkcyBpdHMgY29uZmlndXJhdGlvbiBmcm9tLCBiZXNpZGVzIHRoZSBgamVzdGAga2V5IG9mIGBwYWNrYWdlLmpzb25gLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vamVzdGpzLmlvL2RvY3MvY29uZmlndXJhdGlvbn1cbiAqL1xuZXhwb3J0IGNvbnN0IEpFU1RfQ09ORklHX0ZJTEVfTkFNRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnamVzdC5jb25maWcuY2pzJyxcbiAgJ2plc3QuY29uZmlnLmN0cycsXG4gICdqZXN0LmNvbmZpZy5qcycsXG4gICdqZXN0LmNvbmZpZy5qc29uJyxcbiAgJ2plc3QuY29uZmlnLm1qcycsXG4gICdqZXN0LmNvbmZpZy5tdHMnLFxuICAnamVzdC5jb25maWcudHMnXG5dO1xuXG4vKipcbiAqIFRoZSBOb2RlIGZsYWcgamVzdCdzIEVTTSBsb2FkZXIgbmVlZHM6IGl0IGlzIGJ1aWx0IG9uIGB2bS5TeW50aGV0aWNNb2R1bGVgLCB3aGljaCBOb2RlIG9ubHkgZXhwb3NlcyB1bmRlciBpdC5cbiAqIFdpdGhvdXQgaXQgZXZlcnkgRVNNIHN1aXRlIGZhaWxzIHRvIGxvYWQgd2l0aCBgTXVzdCB1c2UgaW1wb3J0IHRvIGxvYWQgRVMgTW9kdWxlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYUEVSSU1FTlRBTF9WTV9NT0RVTEVTX0ZMQUcgPSAnLS1leHBlcmltZW50YWwtdm0tbW9kdWxlcyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyB0ZXN0cyB3aXRoIGNvdmVyYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDb3ZlcmFnZU9wdGlvbnMgZXh0ZW5kcyBUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIGNvdmVyYWdlIHBlcmNlbnRhZ2UgcmVxdWlyZWQsIGZvciBsaW5lcywgZnVuY3Rpb25zLCBicmFuY2hlcyBhbmQgc3RhdGVtZW50cyBhbGlrZS4gSWYgdGhlIGFjdHVhbCBjb3ZlcmFnZVxuICAgKiBmYWxscyBiZWxvdyBpdCwgamVzdCBleGl0cyB3aXRoIGEgbm9uLXplcm8gY29kZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDBgXG4gICAqL1xuICByZWFkb25seSBtaW5Db3ZlcmFnZUluUGVyY2VudHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyB0ZXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGplc3QgcnVucyB0aGUgc3VpdGUgYXMgRVMgbW9kdWxlcywgd2hpY2ggYWRkcyB7QGxpbmsgRVhQRVJJTUVOVEFMX1ZNX01PRFVMRVNfRkxBR30gdG8gYE5PREVfT1BUSU9OU2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYCB3aGVuIGBwYWNrYWdlLmpzb25gIGRlY2xhcmVzIGBcInR5cGVcIjogXCJtb2R1bGVcImAsIHRoZSBydWxlIGBkZWZpbmVKZXN0Q29uZmlnYCBmb2xsb3dzIHRvb1xuICAgKi9cbiAgcmVhZG9ubHkgZXNtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByb2plY3RzIHRvIHJ1biwgYnkgdGhlaXIgYGRpc3BsYXlOYW1lYCwgcGFzc2VkIHRvIGplc3QncyBgLS1zZWxlY3RQcm9qZWN0c2AuIFVubGlrZSB2aXRlc3QncyBydW5uZXIsIGEgbmFtZVxuICAgKiBtYXRjaGVzIG9ubHkgaXRzZWxmOiBqZXN0IGhhcyBubyBgbmFtZToqYCBmb3JtLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIGluIHdhdGNoIG1vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIFRlc3RXYXRjaE9wdGlvbnMgPSBUZXN0T3B0aW9ucztcblxuLyoqXG4gKiBTYXlzIHdoZXRoZXIgdGhlIHByb2plY3QgY29uZmlndXJlcyBqZXN0LlxuICpcbiAqIEByZXR1cm5zIFdoZXRoZXIgYSBqZXN0IGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgYSBgamVzdGAga2V5IGluIGBwYWNrYWdlLmpzb25gLCBleGlzdHMgYXQgdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc0plc3RDb25maWcoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChKRVNUX0NPTkZJR19GSUxFX05BTUVTLnNvbWUoKGZpbGVOYW1lKSA9PiBleGlzdHNTeW5jKHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogZmlsZU5hbWUgfSkpKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFleGlzdHNTeW5jKHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogUmVwb1BhdGhzLlBhY2thZ2VKc29uIH0pKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gIHJldHVybiBPYmplY3QuaGFzT3duKHBhY2thZ2VKc29uLCAnamVzdCcpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHRlc3QuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdChvcHRpb25zOiBUZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJ1bkplc3QoW10sIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgd2l0aCBjb3ZlcmFnZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvdmVyYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdENvdmVyYWdlKG9wdGlvbnM6IFRlc3RDb3ZlcmFnZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0aHJlc2hvbGQgPSBvcHRpb25zLm1pbkNvdmVyYWdlSW5QZXJjZW50cyA/PyAwO1xuICBjb25zdCBjb3ZlcmFnZVRocmVzaG9sZCA9IHtcbiAgICBnbG9iYWw6IHtcbiAgICAgIGJyYW5jaGVzOiB0aHJlc2hvbGQsXG4gICAgICBmdW5jdGlvbnM6IHRocmVzaG9sZCxcbiAgICAgIGxpbmVzOiB0aHJlc2hvbGQsXG4gICAgICBzdGF0ZW1lbnRzOiB0aHJlc2hvbGRcbiAgICB9XG4gIH07XG4gIGF3YWl0IHJ1bkplc3QoWyctLWNvdmVyYWdlJywgYC0tY292ZXJhZ2VUaHJlc2hvbGQ9JHtKU09OLnN0cmluZ2lmeShjb3ZlcmFnZVRocmVzaG9sZCl9YF0sIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgaW4gd2F0Y2ggbW9kZSwgcmUtcnVubmluZyB0aGUgdGVzdHMgdGhlIGNoYW5nZWQgZmlsZXMgYWZmZWN0LiBKZXN0IG5lZWRzIGEgZ2l0IG9yIE1lcmN1cmlhbFxuICogcmVwb3NpdG9yeSBmb3IgdGhhdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgdGVzdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgd2F0Y2hlciBleGl0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RXYXRjaChvcHRpb25zOiBUZXN0V2F0Y2hPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuSmVzdChbJy0td2F0Y2gnXSwgb3B0aW9ucywgdHJ1ZSk7XG59XG5cbi8qKlxuICogQXBwZW5kcyB7QGxpbmsgRVhQRVJJTUVOVEFMX1ZNX01PRFVMRVNfRkxBR30gdG8gYSBgTk9ERV9PUFRJT05TYCB2YWx1ZSwga2VlcGluZyB3aGF0ZXZlciBpdCBhbHJlYWR5IGhvbGRzLlxuICpcbiAqIEBwYXJhbSBub2RlT3B0aW9ucyAtIFRoZSBpbmhlcml0ZWQgYE5PREVfT1BUSU9OU2AuXG4gKiBAcmV0dXJucyBUaGUgYE5PREVfT1BUSU9OU2AgamVzdCBydW5zIHdpdGguXG4gKi9cbmZ1bmN0aW9uIGFkZEV4cGVyaW1lbnRhbFZtTW9kdWxlc0ZsYWcobm9kZU9wdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IGZsYWdzID0gKG5vZGVPcHRpb25zID8/ICcnKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKCFmbGFncy5pbmNsdWRlcyhFWFBFUklNRU5UQUxfVk1fTU9EVUxFU19GTEFHKSkge1xuICAgIGZsYWdzLnB1c2goRVhQRVJJTUVOVEFMX1ZNX01PRFVMRVNfRkxBRyk7XG4gIH1cblxuICByZXR1cm4gZmxhZ3Muam9pbignICcpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGplc3QgQ0xJIGZyb20gdGhlIHByb2plY3Qgcm9vdC5cbiAqXG4gKiBAcGFyYW0gcnVuQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0aGF0IHNlbGVjdCB3aGF0IGplc3QgZG9lcy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBUZXN0T3B0aW9uc30uXG4gKiBAcGFyYW0gaXNJbnRlcmFjdGl2ZSAtIFdoZXRoZXIgamVzdCBnZXRzIHRoZSB0ZXJtaW5hbCwgYXMgaXRzIHdhdGNoIG1vZGUgbmVlZHMgdG8gcmVhZCBrZXlzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGplc3QgZXhpdHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkplc3QocnVuQXJndW1lbnRzOiBzdHJpbmdbXSwgb3B0aW9uczogVGVzdE9wdGlvbnMsIGlzSW50ZXJhY3RpdmUgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGVzbSA9IGlzRXNtUGFja2FnZSgpLCBwcm9qZWN0cyA9IFtdIH0gPSBvcHRpb25zO1xuICBjb25zdCBwcm9qZWN0QXJndW1lbnRzID0gcHJvamVjdHMubGVuZ3RoID4gMCA/IFsnLS1zZWxlY3RQcm9qZWN0cycsIC4uLnByb2plY3RzXSA6IFtdO1xuICBjb25zdCBlbnYgPSBlc20gPyB7IE5PREVfT1BUSU9OUzogYWRkRXhwZXJpbWVudGFsVm1Nb2R1bGVzRmxhZyhwcm9jZXNzLmVudlsnTk9ERV9PUFRJT05TJ10pIH0gOiB7fTtcblxuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdqZXN0JyB9KSwgLi4ucnVuQXJndW1lbnRzLCAuLi5wcm9qZWN0QXJndW1lbnRzXSwgeyBlbnYsIGlzSW50ZXJhY3RpdmUgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQU1BLFNBQVMsa0JBQWtCO0FBQzNCLE9BQU8sYUFBYTtBQUVwQixTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLGlCQUFpQjtBQUMxQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsb0JBQW9CO0FBT3RCLE1BQU0seUJBQTRDO0FBQUEsRUFDdkQ7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQU1PLE1BQU0sK0JBQStCO0FBMkM1QyxlQUFzQixnQkFBa0M7QUFDdEQsTUFBSSx1QkFBdUIsS0FBSyxDQUFDLGFBQWEsV0FBVyx3QkFBd0IsRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRztBQUN0RyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksQ0FBQyxXQUFXLHdCQUF3QixFQUFFLE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBQyxHQUFHO0FBQ3pFLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLE1BQU0sZ0JBQWdCO0FBQzFDLFNBQU8sT0FBTyxPQUFPLGFBQWEsTUFBTTtBQUMxQztBQVFBLGVBQXNCLEtBQUssVUFBdUIsQ0FBQyxHQUFrQjtBQUNuRSxRQUFNLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFDM0I7QUFRQSxlQUFzQixhQUFhLFVBQStCLENBQUMsR0FBa0I7QUFDbkYsUUFBTSxZQUFZLFFBQVEseUJBQXlCO0FBQ25ELFFBQU0sb0JBQW9CO0FBQUEsSUFDeEIsUUFBUTtBQUFBLE1BQ04sVUFBVTtBQUFBLE1BQ1YsV0FBVztBQUFBLE1BQ1gsT0FBTztBQUFBLE1BQ1AsWUFBWTtBQUFBLElBQ2Q7QUFBQSxFQUNGO0FBQ0EsUUFBTSxRQUFRLENBQUMsY0FBYyx1QkFBdUIsS0FBSyxVQUFVLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxPQUFPO0FBQ25HO0FBU0EsZUFBc0IsVUFBVSxVQUE0QixDQUFDLEdBQWtCO0FBQzdFLFFBQU0sUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUk7QUFDMUM7QUFRQSxTQUFTLDZCQUE2QixhQUF5QztBQUM3RSxRQUFNLFNBQVMsZUFBZSxJQUFJLE1BQU0sS0FBSyxFQUFFLE9BQU8sT0FBTztBQUM3RCxNQUFJLENBQUMsTUFBTSxTQUFTLDRCQUE0QixHQUFHO0FBQ2pELFVBQU0sS0FBSyw0QkFBNEI7QUFBQSxFQUN6QztBQUVBLFNBQU8sTUFBTSxLQUFLLEdBQUc7QUFDdkI7QUFVQSxlQUFlLFFBQVEsY0FBd0IsU0FBc0IsZ0JBQWdCLE9BQXNCO0FBQ3pHLFFBQU0sRUFBRSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsRUFBRSxJQUFJO0FBQ2hELFFBQU0sbUJBQW1CLFNBQVMsU0FBUyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxJQUFJLENBQUM7QUFDcEYsUUFBTSxNQUFNLE1BQU0sRUFBRSxjQUFjLDZCQUE2QixRQUFRLElBQUksY0FBYyxDQUFDLEVBQUUsSUFBSSxDQUFDO0FBRWpHLFFBQU0sYUFBYSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxHQUFHLGNBQWMsR0FBRyxnQkFBZ0IsR0FBRyxFQUFFLEtBQUssY0FBYyxDQUFDO0FBQzVIOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/docs-site/repo-homepage.cjs",
3
+ "module": "../../dist/lib/esm/docs-site/repo-homepage.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/docs-site/repo-homepage.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/formatters/auto.cjs",
3
+ "module": "../../dist/lib/esm/formatters/auto.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/formatters/auto.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/formatters/biome.cjs",
3
+ "module": "../../dist/lib/esm/formatters/biome.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/formatters/biome.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/formatters/prettier.cjs",
3
+ "module": "../../dist/lib/esm/formatters/prettier.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/formatters/prettier.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/linters/auto.cjs",
3
+ "module": "../../dist/lib/esm/linters/auto.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/linters/auto.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/linters/biome.cjs",
3
+ "module": "../../dist/lib/esm/linters/biome.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/linters/biome.d.cts"
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnaoumov/typescript-dev-toolkit",
3
- "version": "2.2.0",
3
+ "version": "3.1.0",
4
4
  "description": "Generic TypeScript project tooling: build, lint, format, spellcheck, test, gate and release scripts.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -314,6 +314,7 @@
314
314
  "devDependencies": {
315
315
  "@astrojs/markdown-satteri": "^0.4.4",
316
316
  "@astrojs/starlight": "^0.42.6",
317
+ "@biomejs/biome": "^2.5.15",
317
318
  "@commitlint/cli": "^21.2.2",
318
319
  "@mnaoumov/typescript-test-toolkit": "^1.0.0",
319
320
  "@resvg/resvg-js": "^2.6.2",
@@ -327,9 +328,12 @@
327
328
  "eslint-plugin-jsdoc": "^64.5.4",
328
329
  "eslint-plugin-tsdoc": "^0.5.3",
329
330
  "husky": "^9.1.7",
331
+ "jest": "^30.5.2",
330
332
  "nano-staged": "^1.0.2",
333
+ "prettier": "^3.9.10",
331
334
  "satori": "^0.33.5",
332
335
  "satteri": "^0.10.5",
336
+ "ts-jest": "^29.4.15",
333
337
  "ts-morph": "^28.0.0",
334
338
  "tslib": "^2.8.1",
335
339
  "typedoc-plugin-mdn-links": "^5.1.1",
@@ -339,10 +343,14 @@
339
343
  "peerDependencies": {
340
344
  "@astrojs/markdown-satteri": "^0.4.4",
341
345
  "@astrojs/starlight": "^0.42.6",
346
+ "@biomejs/biome": "^2.0.0",
342
347
  "@resvg/resvg-js": "^2.6.2",
343
348
  "astro": "^7.4.0",
349
+ "jest": "^30.0.0",
350
+ "prettier": "^3.0.0",
344
351
  "satori": "^0.33.5",
345
352
  "satteri": "^0.10.5",
353
+ "ts-jest": "^29.4.0",
346
354
  "ts-morph": "^28.0.0",
347
355
  "typedoc-plugin-mdn-links": "^5.1.1",
348
356
  "vitest": "^5.0.1",
@@ -355,18 +363,30 @@
355
363
  "@astrojs/starlight": {
356
364
  "optional": true
357
365
  },
366
+ "@biomejs/biome": {
367
+ "optional": true
368
+ },
358
369
  "@resvg/resvg-js": {
359
370
  "optional": true
360
371
  },
361
372
  "astro": {
362
373
  "optional": true
363
374
  },
375
+ "jest": {
376
+ "optional": true
377
+ },
378
+ "prettier": {
379
+ "optional": true
380
+ },
364
381
  "satori": {
365
382
  "optional": true
366
383
  },
367
384
  "satteri": {
368
385
  "optional": true
369
386
  },
387
+ "ts-jest": {
388
+ "optional": true
389
+ },
370
390
  "ts-morph": {
371
391
  "optional": true
372
392
  },
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/test-runners/auto.cjs",
3
+ "module": "../../dist/lib/esm/test-runners/auto.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/test-runners/auto.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/test-runners/jest.cjs",
3
+ "module": "../../dist/lib/esm/test-runners/jest.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/test-runners/jest.d.cts"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../dist/lib/cjs/test-runners/jest-config.cjs",
3
+ "module": "../../dist/lib/esm/test-runners/jest-config.mjs",
4
+ "type": "module",
5
+ "types": "../../dist/lib/cjs/test-runners/jest-config.d.cts"
6
+ }