@mnaoumov/typescript-dev-toolkit 3.0.0 → 3.2.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 (100) 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 +1 -1
  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/nano-staged-config.cjs +33 -16
  34. package/dist/lib/cjs/nano-staged-config.d.cts +6 -0
  35. package/dist/lib/cjs/repo-paths.cjs +3 -1
  36. package/dist/lib/cjs/repo-paths.d.cts +8 -0
  37. package/dist/lib/cjs/shared-config-files.cjs +68 -0
  38. package/dist/lib/cjs/shared-config-files.d.cts +29 -0
  39. package/dist/lib/cjs/test-runners/auto.cjs +83 -0
  40. package/dist/lib/cjs/test-runners/auto.d.cts +82 -0
  41. package/dist/lib/cjs/test-runners/index.cjs +10 -1
  42. package/dist/lib/cjs/test-runners/index.d.cts +3 -0
  43. package/dist/lib/cjs/test-runners/jest-config.cjs +86 -0
  44. package/dist/lib/cjs/test-runners/jest-config.d.cts +71 -0
  45. package/dist/lib/cjs/test-runners/jest.cjs +111 -0
  46. package/dist/lib/cjs/test-runners/jest.d.cts +77 -0
  47. package/dist/lib/esm/docs-site/docs-links.mjs +7 -3
  48. package/dist/lib/esm/docs-site/docs-site-commands.d.mts +8 -3
  49. package/dist/lib/esm/docs-site/docs-site-commands.mjs +14 -5
  50. package/dist/lib/esm/docs-site/docs-site-config.d.mts +17 -0
  51. package/dist/lib/esm/docs-site/docs-site-config.mjs +4 -1
  52. package/dist/lib/esm/docs-site/index.d.mts +1 -0
  53. package/dist/lib/esm/docs-site/index.mjs +3 -1
  54. package/dist/lib/esm/docs-site/link-check.d.mts +91 -2
  55. package/dist/lib/esm/docs-site/link-check.mjs +83 -11
  56. package/dist/lib/esm/docs-site/repo-homepage.d.mts +50 -0
  57. package/dist/lib/esm/docs-site/repo-homepage.mjs +84 -0
  58. package/dist/lib/esm/formatters/auto.d.mts +51 -0
  59. package/dist/lib/esm/formatters/auto.mjs +40 -0
  60. package/dist/lib/esm/formatters/biome.d.mts +69 -0
  61. package/dist/lib/esm/formatters/biome.mjs +107 -0
  62. package/dist/lib/esm/formatters/index.d.mts +3 -0
  63. package/dist/lib/esm/formatters/index.mjs +8 -2
  64. package/dist/lib/esm/formatters/prettier.d.mts +56 -0
  65. package/dist/lib/esm/formatters/prettier.mjs +75 -0
  66. package/dist/lib/esm/index.d.mts +1 -0
  67. package/dist/lib/esm/index.mjs +3 -1
  68. package/dist/lib/esm/linters/auto.d.mts +49 -0
  69. package/dist/lib/esm/linters/auto.mjs +30 -0
  70. package/dist/lib/esm/linters/biome.d.mts +36 -0
  71. package/dist/lib/esm/linters/biome.mjs +29 -0
  72. package/dist/lib/esm/linters/eslint-config.mjs +1 -1
  73. package/dist/lib/esm/linters/eslint.d.mts +6 -0
  74. package/dist/lib/esm/linters/eslint.mjs +14 -14
  75. package/dist/lib/esm/linters/index.d.mts +2 -0
  76. package/dist/lib/esm/linters/index.mjs +5 -1
  77. package/dist/lib/esm/nano-staged-config.d.mts +6 -0
  78. package/dist/lib/esm/nano-staged-config.mjs +33 -16
  79. package/dist/lib/esm/repo-paths.d.mts +8 -0
  80. package/dist/lib/esm/repo-paths.mjs +3 -1
  81. package/dist/lib/esm/shared-config-files.d.mts +29 -0
  82. package/dist/lib/esm/shared-config-files.mjs +36 -0
  83. package/dist/lib/esm/test-runners/auto.d.mts +82 -0
  84. package/dist/lib/esm/test-runners/auto.mjs +64 -0
  85. package/dist/lib/esm/test-runners/index.d.mts +3 -0
  86. package/dist/lib/esm/test-runners/index.mjs +7 -1
  87. package/dist/lib/esm/test-runners/jest-config.d.mts +71 -0
  88. package/dist/lib/esm/test-runners/jest-config.mjs +58 -0
  89. package/dist/lib/esm/test-runners/jest.d.mts +77 -0
  90. package/dist/lib/esm/test-runners/jest.mjs +75 -0
  91. package/docs-site/repo-homepage/package.json +6 -0
  92. package/formatters/auto/package.json +6 -0
  93. package/formatters/biome/package.json +6 -0
  94. package/formatters/prettier/package.json +6 -0
  95. package/linters/auto/package.json +6 -0
  96. package/linters/biome/package.json +6 -0
  97. package/package.json +21 -1
  98. package/test-runners/auto/package.json +6 -0
  99. package/test-runners/jest/package.json +6 -0
  100. package/test-runners/jest-config/package.json +6 -0
@@ -0,0 +1,83 @@
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
+ "use strict";
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var auto_exports = {};
25
+ __export(auto_exports, {
26
+ VITEST_CONFIG_FILE_NAMES: () => VITEST_CONFIG_FILE_NAMES,
27
+ detectTestRunner: () => detectTestRunner,
28
+ test: () => test,
29
+ testCoverage: () => testCoverage,
30
+ testWatch: () => testWatch
31
+ });
32
+ module.exports = __toCommonJS(auto_exports);
33
+ var import_node_fs = require('node:fs');
34
+ var import_root = require('../root.cjs');
35
+ var import_jest = require('./jest.cjs');
36
+ var import_vitest = require('./vitest.cjs');
37
+ const VITEST_CONFIG_FILE_NAMES = [
38
+ "vitest.config.cjs",
39
+ "vitest.config.cts",
40
+ "vitest.config.js",
41
+ "vitest.config.mjs",
42
+ "vitest.config.mts",
43
+ "vitest.config.ts"
44
+ ];
45
+ const RUNNERS = {
46
+ jest: {
47
+ test: import_jest.test,
48
+ testCoverage: import_jest.testCoverage,
49
+ testWatch: import_jest.testWatch
50
+ },
51
+ vitest: {
52
+ test: import_vitest.test,
53
+ testCoverage: import_vitest.testCoverage,
54
+ testWatch: import_vitest.testWatch
55
+ }
56
+ };
57
+ async function detectTestRunner() {
58
+ if (VITEST_CONFIG_FILE_NAMES.some((fileName) => (0, import_node_fs.existsSync)((0, import_root.resolvePathFromRootSafe)({ path: fileName })))) {
59
+ return "vitest";
60
+ }
61
+ return await (0, import_jest.hasJestConfig)() ? "jest" : "vitest";
62
+ }
63
+ async function test(options = {}) {
64
+ const { runner = await detectTestRunner(), ...runnerOptions } = options;
65
+ await RUNNERS[runner].test(runnerOptions);
66
+ }
67
+ async function testCoverage(options = {}) {
68
+ const { runner = await detectTestRunner(), ...runnerOptions } = options;
69
+ await RUNNERS[runner].testCoverage(runnerOptions);
70
+ }
71
+ async function testWatch(options = {}) {
72
+ const { runner = await detectTestRunner(), ...runnerOptions } = options;
73
+ await RUNNERS[runner].testWatch(runnerOptions);
74
+ }
75
+ // Annotate the CommonJS export names for ESM import in node:
76
+ 0 && (module.exports = {
77
+ VITEST_CONFIG_FILE_NAMES,
78
+ detectTestRunner,
79
+ test,
80
+ testCoverage,
81
+ testWatch
82
+ });
83
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9hdXRvLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUnVucyB0aGUgdGVzdHMgd2l0aCB3aGljaGV2ZXIgcnVubmVyIHRoZSBwcm9qZWN0IGNvbmZpZ3VyZXM6IHZpdGVzdCBvciBqZXN0LlxuICovXG5cbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHsgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUgfSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGhhc0plc3RDb25maWcsXG4gIHRlc3QgYXMgamVzdFRlc3QsXG4gIHRlc3RDb3ZlcmFnZSBhcyBqZXN0VGVzdENvdmVyYWdlLFxuICB0ZXN0V2F0Y2ggYXMgamVzdFRlc3RXYXRjaFxufSBmcm9tICcuL2plc3QudHMnO1xuaW1wb3J0IHtcbiAgdGVzdCBhcyB2aXRlc3RUZXN0LFxuICB0ZXN0Q292ZXJhZ2UgYXMgdml0ZXN0VGVzdENvdmVyYWdlLFxuICB0ZXN0V2F0Y2ggYXMgdml0ZXN0VGVzdFdhdGNoXG59IGZyb20gJy4vdml0ZXN0LnRzJztcblxuLyoqXG4gKiBBIHRlc3QgcnVubmVyIHRoZSB0b29sa2l0IHJ1bnMuXG4gKi9cbmV4cG9ydCB0eXBlIFRlc3RSdW5uZXIgPSAnamVzdCcgfCAndml0ZXN0JztcblxuLyoqXG4gKiBFdmVyeSBmaWxlIHZpdGVzdCByZWFkcyBpdHMgY29uZmlndXJhdGlvbiBmcm9tLlxuICpcbiAqIGB2aXRlLmNvbmZpZy4qYCBpcyBkZWxpYmVyYXRlbHkgbm90IGFtb25nIHRoZW06IGEgcHJvamVjdCB0aGF0IGJ1bmRsZXMgd2l0aCB2aXRlIGFuZCB0ZXN0cyB3aXRoIGplc3QgaGFzIG9uZS5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL3ZpdGVzdC5kZXYvY29uZmlnL31cbiAqL1xuZXhwb3J0IGNvbnN0IFZJVEVTVF9DT05GSUdfRklMRV9OQU1FUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbXG4gICd2aXRlc3QuY29uZmlnLmNqcycsXG4gICd2aXRlc3QuY29uZmlnLmN0cycsXG4gICd2aXRlc3QuY29uZmlnLmpzJyxcbiAgJ3ZpdGVzdC5jb25maWcubWpzJyxcbiAgJ3ZpdGVzdC5jb25maWcubXRzJyxcbiAgJ3ZpdGVzdC5jb25maWcudHMnXG5dO1xuXG5pbnRlcmZhY2UgUnVubmVyRnVuY3Rpb25zIHtcbiAgcmVhZG9ubHkgdGVzdDogKG9wdGlvbnM6IFRlc3RPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSB0ZXN0Q292ZXJhZ2U6IChvcHRpb25zOiBUZXN0Q292ZXJhZ2VPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSB0ZXN0V2F0Y2g6IChvcHRpb25zOiBUZXN0V2F0Y2hPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuXG5jb25zdCBSVU5ORVJTOiBSZWFkb25seTxSZWNvcmQ8VGVzdFJ1bm5lciwgUnVubmVyRnVuY3Rpb25zPj4gPSB7XG4gIGplc3Q6IHtcbiAgICB0ZXN0OiBqZXN0VGVzdCxcbiAgICB0ZXN0Q292ZXJhZ2U6IGplc3RUZXN0Q292ZXJhZ2UsXG4gICAgdGVzdFdhdGNoOiBqZXN0VGVzdFdhdGNoXG4gIH0sXG4gIHZpdGVzdDoge1xuICAgIHRlc3Q6IHZpdGVzdFRlc3QsXG4gICAgdGVzdENvdmVyYWdlOiB2aXRlc3RUZXN0Q292ZXJhZ2UsXG4gICAgdGVzdFdhdGNoOiB2aXRlc3RUZXN0V2F0Y2hcbiAgfVxufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIHdpdGggY292ZXJhZ2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdENvdmVyYWdlT3B0aW9ucyBleHRlbmRzIFRlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIE1pbmltdW0gY292ZXJhZ2UgcGVyY2VudGFnZSByZXF1aXJlZCwgZm9yIGxpbmVzLCBmdW5jdGlvbnMsIGJyYW5jaGVzIGFuZCBzdGF0ZW1lbnRzIGFsaWtlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMGBcbiAgICovXG4gIHJlYWRvbmx5IG1pbkNvdmVyYWdlSW5QZXJjZW50cz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgamVzdCBydW5zIHRoZSBzdWl0ZSBhcyBFUyBtb2R1bGVzLiBWaXRlc3QgaWdub3JlcyBpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgIHdoZW4gYHBhY2thZ2UuanNvbmAgZGVjbGFyZXMgYFwidHlwZVwiOiBcIm1vZHVsZVwiYFxuICAgKi9cbiAgcmVhZG9ubHkgZXNtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByb2plY3RzIHRvIHJ1bi4gVml0ZXN0IGFsc28gcnVucyBlYWNoIG9uZSdzIGBuYW1lOipgIHN1Yi1wcm9qZWN0czsgamVzdCBtYXRjaGVzIGEgYGRpc3BsYXlOYW1lYCBleGFjdGx5LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHJ1bm5lciB0byB1c2UuIE9taXR0ZWQsIHtAbGluayBkZXRlY3RUZXN0UnVubmVyfSBjaG9vc2VzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyPzogVGVzdFJ1bm5lcjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIGluIHdhdGNoIG1vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIFRlc3RXYXRjaE9wdGlvbnMgPSBUZXN0T3B0aW9ucztcblxuLyoqXG4gKiBDaG9vc2VzIHRoZSB0ZXN0IHJ1bm5lciBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGF0IHRoZSBwcm9qZWN0IHJvb3QuXG4gKlxuICogVGhlIG9yZGVyIGlzIGEgdml0ZXN0IGNvbmZpZ3VyYXRpb24sIHRoZW4gYSBqZXN0IG9uZSAoYSBmaWxlLCBvciBhIGBqZXN0YCBrZXkgaW4gYHBhY2thZ2UuanNvbmApLiBBIHByb2plY3Qgd2l0aFxuICogbmVpdGhlciBnZXRzIHZpdGVzdCwgdGhlIHJ1bm5lciBldmVyeSBwYWNrYWdlIG9uIHRoaXMgdG9vbGNoYWluIHVzZWQgYmVmb3JlIGplc3Qgd2FzIHN1cHBvcnRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgcnVubmVyIHRvIHVzZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRldGVjdFRlc3RSdW5uZXIoKTogUHJvbWlzZTxUZXN0UnVubmVyPiB7XG4gIGlmIChWSVRFU1RfQ09ORklHX0ZJTEVfTkFNRVMuc29tZSgoZmlsZU5hbWUpID0+IGV4aXN0c1N5bmMocmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBmaWxlTmFtZSB9KSkpKSB7XG4gICAgcmV0dXJuICd2aXRlc3QnO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IGhhc0plc3RDb25maWcoKSA/ICdqZXN0JyA6ICd2aXRlc3QnO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgd2l0aCB0aGUgcHJvamVjdCdzIHJ1bm5lci5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgVGVzdE9wdGlvbnN9LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSB0ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3Qob3B0aW9uczogVGVzdE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHJ1bm5lciA9IGF3YWl0IGRldGVjdFRlc3RSdW5uZXIoKSwgLi4ucnVubmVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgYXdhaXQgUlVOTkVSU1tydW5uZXJdLnRlc3QocnVubmVyT3B0aW9ucyk7XG59XG5cbi8qKlxuICogUnVucyB0aGUgdGVzdCBzdWl0ZSB3aXRoIGNvdmVyYWdlLCB3aXRoIHRoZSBwcm9qZWN0J3MgcnVubmVyLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBUZXN0Q292ZXJhZ2VPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgdGVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0Q292ZXJhZ2Uob3B0aW9uczogVGVzdENvdmVyYWdlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcnVubmVyID0gYXdhaXQgZGV0ZWN0VGVzdFJ1bm5lcigpLCAuLi5ydW5uZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICBhd2FpdCBSVU5ORVJTW3J1bm5lcl0udGVzdENvdmVyYWdlKHJ1bm5lck9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgaW4gd2F0Y2ggbW9kZSwgd2l0aCB0aGUgcHJvamVjdCdzIHJ1bm5lci5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgVGVzdFdhdGNoT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHdhdGNoZXIgZXhpdHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXN0V2F0Y2gob3B0aW9uczogVGVzdFdhdGNoT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcnVubmVyID0gYXdhaXQgZGV0ZWN0VGVzdFJ1bm5lcigpLCAuLi5ydW5uZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICBhd2FpdCBSVU5ORVJTW3J1bm5lcl0udGVzdFdhdGNoKHJ1bm5lck9wdGlvbnMpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxxQkFBMkI7QUFFM0Isa0JBQXdDO0FBQ3hDLGtCQUtPO0FBQ1Asb0JBSU87QUFjQSxNQUFNLDJCQUE4QztBQUFBLEVBQ3pEO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRjtBQVFBLE1BQU0sVUFBeUQ7QUFBQSxFQUM3RCxNQUFNO0FBQUEsSUFDSixNQUFNLFlBQUFBO0FBQUEsSUFDTixjQUFjLFlBQUFDO0FBQUEsSUFDZCxXQUFXLFlBQUFDO0FBQUEsRUFDYjtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sTUFBTSxjQUFBQztBQUFBLElBQ04sY0FBYyxjQUFBQztBQUFBLElBQ2QsV0FBVyxjQUFBQztBQUFBLEVBQ2I7QUFDRjtBQWlEQSxlQUFzQixtQkFBd0M7QUFDNUQsTUFBSSx5QkFBeUIsS0FBSyxDQUFDLGlCQUFhLCtCQUFXLHFDQUF3QixFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQ3hHLFdBQU87QUFBQSxFQUNUO0FBRUEsU0FBTyxVQUFNLDJCQUFjLElBQUksU0FBUztBQUMxQztBQVFBLGVBQXNCLEtBQUssVUFBdUIsQ0FBQyxHQUFrQjtBQUNuRSxRQUFNLEVBQUUsU0FBUyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsY0FBYyxJQUFJO0FBQ2hFLFFBQU0sUUFBUSxNQUFNLEVBQUUsS0FBSyxhQUFhO0FBQzFDO0FBUUEsZUFBc0IsYUFBYSxVQUErQixDQUFDLEdBQWtCO0FBQ25GLFFBQU0sRUFBRSxTQUFTLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxjQUFjLElBQUk7QUFDaEUsUUFBTSxRQUFRLE1BQU0sRUFBRSxhQUFhLGFBQWE7QUFDbEQ7QUFRQSxlQUFzQixVQUFVLFVBQTRCLENBQUMsR0FBa0I7QUFDN0UsUUFBTSxFQUFFLFNBQVMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLGNBQWMsSUFBSTtBQUNoRSxRQUFNLFFBQVEsTUFBTSxFQUFFLFVBQVUsYUFBYTtBQUMvQzsiLAogICJuYW1lcyI6IFsiamVzdFRlc3QiLCAiamVzdFRlc3RDb3ZlcmFnZSIsICJqZXN0VGVzdFdhdGNoIiwgInZpdGVzdFRlc3QiLCAidml0ZXN0VGVzdENvdmVyYWdlIiwgInZpdGVzdFRlc3RXYXRjaCJdCn0K
@@ -0,0 +1,82 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Runs the tests with whichever runner the project configures: vitest or jest.
6
+ */
7
+ /**
8
+ * A test runner the toolkit runs.
9
+ */
10
+ export type TestRunner = 'jest' | 'vitest';
11
+ /**
12
+ * Every file vitest reads its configuration from.
13
+ *
14
+ * `vite.config.*` is deliberately not among them: a project that bundles with vite and tests with jest has one.
15
+ *
16
+ * @see {@link https://vitest.dev/config/}
17
+ */
18
+ export declare const VITEST_CONFIG_FILE_NAMES: readonly string[];
19
+ /**
20
+ * Options for running tests with coverage.
21
+ */
22
+ export interface TestCoverageOptions extends TestOptions {
23
+ /**
24
+ * Minimum coverage percentage required, for lines, functions, branches and statements alike.
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. Vitest ignores it.
36
+ *
37
+ * @default `true` when `package.json` declares `"type": "module"`
38
+ */
39
+ readonly esm?: boolean;
40
+ /**
41
+ * The projects to run. Vitest also runs each one's `name:*` sub-projects; jest matches a `displayName` exactly.
42
+ */
43
+ readonly projects?: string[];
44
+ /**
45
+ * The runner to use. Omitted, {@link detectTestRunner} chooses it.
46
+ */
47
+ readonly runner?: TestRunner;
48
+ }
49
+ /**
50
+ * Options for running tests in watch mode.
51
+ */
52
+ export type TestWatchOptions = TestOptions;
53
+ /**
54
+ * Chooses the test runner from the configuration files at the project root.
55
+ *
56
+ * The order is a vitest configuration, then a jest one (a file, or a `jest` key in `package.json`). A project with
57
+ * neither gets vitest, the runner every package on this toolchain used before jest was supported.
58
+ *
59
+ * @returns The runner to use.
60
+ */
61
+ export declare function detectTestRunner(): Promise<TestRunner>;
62
+ /**
63
+ * Runs the test suite with the project's runner.
64
+ *
65
+ * @param options - The {@link TestOptions}.
66
+ * @returns A {@link Promise} that resolves when the tests have completed.
67
+ */
68
+ export declare function test(options?: TestOptions): Promise<void>;
69
+ /**
70
+ * Runs the test suite with coverage, with the project's runner.
71
+ *
72
+ * @param options - The {@link TestCoverageOptions}.
73
+ * @returns A {@link Promise} that resolves when the tests have completed.
74
+ */
75
+ export declare function testCoverage(options?: TestCoverageOptions): Promise<void>;
76
+ /**
77
+ * Runs the test suite in watch mode, with the project's runner.
78
+ *
79
+ * @param options - The {@link TestWatchOptions}.
80
+ * @returns A {@link Promise} that resolves when the watcher exits.
81
+ */
82
+ export declare function testWatch(options?: TestWatchOptions): Promise<void>;
@@ -33,15 +33,24 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
33
33
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
34
  var test_runners_exports = {};
35
35
  __export(test_runners_exports, {
36
+ auto: () => auto,
37
+ jest: () => jest,
38
+ "jest-config": () => jest_config,
36
39
  vitest: () => vitest,
37
40
  "vitest-config": () => vitest_config
38
41
  });
39
42
  module.exports = __toCommonJS(test_runners_exports);
43
+ var auto = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./auto.cjs')), 1);
44
+ var jest_config = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./jest-config.cjs')), 1);
45
+ var jest = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./jest.cjs')), 1);
40
46
  var vitest_config = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./vitest-config.cjs')), 1);
41
47
  var vitest = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./vitest.cjs')), 1);
42
48
  // Annotate the CommonJS export names for ESM import in node:
43
49
  0 && (module.exports = {
50
+ auto,
51
+ jest,
52
+ "jest-config": null,
44
53
  vitest,
45
54
  "vitest-config": null
46
55
  });
47
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICd2aXRlc3QtY29uZmlnJyBmcm9tICcuL3ZpdGVzdC1jb25maWcudHMnO1xuZXhwb3J0ICogYXMgJ3ZpdGVzdCcgZnJvbSAnLi92aXRlc3QudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEseUJBQUFBO0FBQUE7QUFBQTtBQUVBLElBQUFBLGdCQUFpQztBQUNqQyxhQUEwQjsiLAogICJuYW1lcyI6IFsidml0ZXN0LWNvbmZpZyJdCn0K
56
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhdXRvJyBmcm9tICcuL2F1dG8udHMnO1xuZXhwb3J0ICogYXMgJ2plc3QtY29uZmlnJyBmcm9tICcuL2plc3QtY29uZmlnLnRzJztcbmV4cG9ydCAqIGFzICdqZXN0JyBmcm9tICcuL2plc3QudHMnO1xuZXhwb3J0ICogYXMgJ3ZpdGVzdC1jb25maWcnIGZyb20gJy4vdml0ZXN0LWNvbmZpZy50cyc7XG5leHBvcnQgKiBhcyAndml0ZXN0JyBmcm9tICcuL3ZpdGVzdC50cyc7XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUFBQTtBQUFBLEVBQUE7QUFBQSx5QkFBQUM7QUFBQTtBQUFBO0FBRUEsV0FBd0I7QUFDeEIsSUFBQUQsY0FBK0I7QUFDL0IsV0FBd0I7QUFDeEIsSUFBQUMsZ0JBQWlDO0FBQ2pDLGFBQTBCOyIsCiAgIm5hbWVzIjogWyJqZXN0LWNvbmZpZyIsICJ2aXRlc3QtY29uZmlnIl0KfQo=
@@ -1,3 +1,6 @@
1
1
  /// <reference path="../library-references.d.cts" />
2
+ export * as 'auto' from './auto.cjs';
3
+ export * as 'jest-config' from './jest-config.cjs';
4
+ export * as 'jest' from './jest.cjs';
2
5
  export * as 'vitest-config' from './vitest-config.cjs';
3
6
  export * as 'vitest' from './vitest.cjs';
@@ -0,0 +1,86 @@
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
+ "use strict";
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
+ var __getOwnPropNames = Object.getOwnPropertyNames;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var jest_config_exports = {};
25
+ __export(jest_config_exports, {
26
+ DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS: () => DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS,
27
+ JEST_RELATIVE_JS_IMPORT_MAPPER: () => JEST_RELATIVE_JS_IMPORT_MAPPER,
28
+ JEST_TYPESCRIPT_TRANSFORM_PATTERN: () => JEST_TYPESCRIPT_TRANSFORM_PATTERN,
29
+ defineJestConfig: () => defineJestConfig,
30
+ isEsmPackage: () => isEsmPackage
31
+ });
32
+ module.exports = __toCommonJS(jest_config_exports);
33
+ var import_node_fs = require('node:fs');
34
+ var import_npm = require('../npm.cjs');
35
+ var import_repo_paths = require('../repo-paths.cjs');
36
+ var import_root = require('../root.cjs');
37
+ var import_vitest_config = require('./vitest-config.cjs');
38
+ const JEST_TYPESCRIPT_TRANSFORM_PATTERN = String.raw`^.+\.[cm]?tsx?$`;
39
+ const JEST_RELATIVE_JS_IMPORT_MAPPER = {
40
+ "^(\\.{1,2}/.*)\\.js$": "$1"
41
+ };
42
+ const DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS = ["/node_modules/", "/dist/"];
43
+ function defineJestConfig(options = {}) {
44
+ const { esm = isEsmPackage(), moduleNameMapper, tsJestOptions, ...overrides } = options;
45
+ return {
46
+ collectCoverageFrom: [
47
+ ...import_vitest_config.LIBRARY_VITEST_COVERAGE.include,
48
+ ...import_vitest_config.LIBRARY_VITEST_COVERAGE.exclude.map((pattern) => `!${pattern}`)
49
+ ],
50
+ coverageDirectory: import_vitest_config.LIBRARY_VITEST_COVERAGE.reportsDirectory,
51
+ coverageProvider: import_vitest_config.LIBRARY_VITEST_COVERAGE.provider,
52
+ coverageReporters: ["text", "lcov", "html"],
53
+ extensionsToTreatAsEsm: esm ? [".ts", ".tsx"] : [],
54
+ moduleNameMapper: {
55
+ ...JEST_RELATIVE_JS_IMPORT_MAPPER,
56
+ ...moduleNameMapper
57
+ },
58
+ roots: ["<rootDir>/src"],
59
+ testEnvironment: "node",
60
+ testMatch: ["**/*.test.ts"],
61
+ testPathIgnorePatterns: [...DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS],
62
+ transform: {
63
+ [JEST_TYPESCRIPT_TRANSFORM_PATTERN]: [
64
+ "ts-jest",
65
+ {
66
+ tsconfig: { isolatedModules: true },
67
+ useESM: esm,
68
+ ...tsJestOptions
69
+ }
70
+ ]
71
+ },
72
+ ...overrides
73
+ };
74
+ }
75
+ function isEsmPackage() {
76
+ return (0, import_node_fs.existsSync)((0, import_root.resolvePathFromRootSafe)({ path: import_repo_paths.RepoPaths.PackageJson })) && (0, import_npm.readPackageJsonSync)().type === "module";
77
+ }
78
+ // Annotate the CommonJS export names for ESM import in node:
79
+ 0 && (module.exports = {
80
+ DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS,
81
+ JEST_RELATIVE_JS_IMPORT_MAPPER,
82
+ JEST_TYPESCRIPT_TRANSFORM_PATTERN,
83
+ defineJestConfig,
84
+ isEsmPackage
85
+ });
86
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9qZXN0LWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBqZXN0IGNvbmZpZ3VyYXRpb24gZm9yIFR5cGVTY3JpcHQgcGFja2FnZXM6IHtAbGluayBkZWZpbmVKZXN0Q29uZmlnfSwgd2hpY2ggZmlsbHMgaW4gdGhlIHRzLWplc3QgdHJhbnNmb3JtLFxuICogdGhlIEVTTSBzZXR0aW5ncywgdGhlIHRlc3QgZXhjbHVkZXMgYW5kIHRoZSBjb3ZlcmFnZSBibG9jayBhIHByb2plY3Qgb3RoZXJ3aXNlIHdyaXRlcyBieSBoYW5kLlxuICpcbiAqIFRoZSBjb3ZlcmFnZSBibG9jayBpcyB0aGUgb25lIHRoZSB2aXRlc3QgbGlicmFyeSBjb25maWd1cmF0aW9uIHVzZXMsIHNvIGEgcGFja2FnZSByZXBvcnRzIHRoZSBzYW1lIGZpbGVzIHdoaWNoZXZlclxuICogcnVubmVyIGl0IHBpY2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29uZmlnIH0gZnJvbSAnamVzdCc7XG5pbXBvcnQgdHlwZSB7IFRzSmVzdFRyYW5zZm9ybWVyT3B0aW9ucyB9IGZyb20gJ3RzLWplc3QnO1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5cbmltcG9ydCB7IHJlYWRQYWNrYWdlSnNvblN5bmMgfSBmcm9tICcuLi9ucG0udHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyByZXNvbHZlUGF0aEZyb21Sb290U2FmZSB9IGZyb20gJy4uL3Jvb3QudHMnO1xuaW1wb3J0IHsgTElCUkFSWV9WSVRFU1RfQ09WRVJBR0UgfSBmcm9tICcuL3ZpdGVzdC1jb25maWcudHMnO1xuXG4vKipcbiAqIFRoZSBmaWxlcyB0cy1qZXN0IGNvbXBpbGVzOiBgLnRzYCwgYC50c3hgLCBgLm10c2AgYW5kIGAuY3RzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEpFU1RfVFlQRVNDUklQVF9UUkFOU0ZPUk1fUEFUVEVSTiA9IFN0cmluZy5yYXdgXi4rXFwuW2NtXT90c3g/JGA7XG5cbi8qKlxuICogTWFwcyBhIHJlbGF0aXZlIGltcG9ydCB3cml0dGVuIHdpdGggYSBgLmpzYCBleHRlbnNpb24gb250byB0aGUgcGF0aCB3aXRob3V0IGFuIGV4dGVuc2lvbiwgd2hpY2ggamVzdCByZXNvbHZlcy5cbiAqXG4gKiBBIHByb2plY3QgY29tcGlsZWQgd2l0aCBgbW9kdWxlOiBub2RlbmV4dGAgd3JpdGVzIGAuL2Zvby5qc2AgZm9yIGAuL2Zvby50c2AsIGFuZCBzbyBkb2VzIFR5cGVTY3JpcHQgaXRzZWxmIHdoZW5cbiAqIGByZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb25zYCB0dXJucyBhIGAuL2Zvby50c2AgaW1wb3J0IGludG8gYC4vZm9vLmpzYC4gSmVzdCBsb29rcyBmb3IgYSBmaWxlIGxpdGVyYWxseSBuYW1lZFxuICogYGZvby5qc2AgYW5kIGZhaWxzIHdpdGggYENhbm5vdCBmaW5kIG1vZHVsZSAnLi9mb28uanMnYCwgc28gdGhlIGV4dGVuc2lvbiBpcyByZW1vdmVkIGFuZCBqZXN0J3Mgb3duXG4gKiBgbW9kdWxlRmlsZUV4dGVuc2lvbnNgIHNlYXJjaCBmaW5kcyBgZm9vLnRzYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEpFU1RfUkVMQVRJVkVfSlNfSU1QT1JUX01BUFBFUjogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7XG4gICdeKFxcXFwuezEsMn0vLiopXFxcXC5qcyQnOiAnJDEnXG59O1xuXG4vKipcbiAqIEZvbGRlcnMgamVzdCBuZXZlciBjb2xsZWN0cyB0ZXN0cyBmcm9tLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9KRVNUX1RFU1RfUEFUSF9JR05PUkVfUEFUVEVSTlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWycvbm9kZV9tb2R1bGVzLycsICcvZGlzdC8nXTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZGVmaW5lSmVzdENvbmZpZ306IGFueSBqZXN0IG9wdGlvbiwgd2hpY2ggd2lucyBvdmVyIHRoZSBkZWZhdWx0IHRoZSBmdW5jdGlvbiB3b3VsZCBvdGhlcndpc2VcbiAqIHNldCwgcGx1cyB0aGUgdHdvIGJlbG93LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUplc3RDb25maWdPcHRpb25zIGV4dGVuZHMgQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgamVzdCBsb2FkcyB0aGUgcHJvamVjdCBhcyBFUyBtb2R1bGVzLlxuICAgKlxuICAgKiBFU00gbmVlZHMgYGV4dGVuc2lvbnNUb1RyZWF0QXNFc21gLCB0cy1qZXN0J3MgYHVzZUVTTWAsIGFuZCBOb2RlJ3MgYC0tZXhwZXJpbWVudGFsLXZtLW1vZHVsZXNgLCB3aGljaCB0aGUgamVzdFxuICAgKiBydW5uZXIgaW4gdGhpcyBwYWNrYWdlIGFkZHMgYnkgdGhlIHNhbWUgcnVsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgIHdoZW4gYHBhY2thZ2UuanNvbmAgZGVjbGFyZXMgYFwidHlwZVwiOiBcIm1vZHVsZVwiYFxuICAgKi9cbiAgcmVhZG9ubHkgZXNtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIHRzLWplc3QgdHJhbnNmb3JtLCBzcHJlYWQgb3ZlciB0aGUgZGVmYXVsdHM6IGB1c2VFU01gIGZyb20ge0BsaW5rIGVzbX0sIGFuZCBhIGB0c2NvbmZpZ2Agb2ZcbiAgICogYHsgaXNvbGF0ZWRNb2R1bGVzOiB0cnVlIH1gLCBzbyBlYWNoIGZpbGUgaXMgdHJhbnNwaWxlZCBvbiBpdHMgb3duLCB3aXRob3V0IGEgdHlwZSBjaGVjaywgYXMgdml0ZXN0IGRvZXMuIEFcbiAgICogYHRzY29uZmlnYCBnaXZlbiBoZXJlIHJlcGxhY2VzIHRoYXQgZGVmYXVsdCByYXRoZXIgdGhhbiBtZXJnaW5nIHdpdGggaXQuXG4gICAqXG4gICAqIElnbm9yZWQgd2hlbiB7QGxpbmsgQ29uZmlnLnRyYW5zZm9ybX0gaXMgZ2l2ZW4uXG4gICAqL1xuICByZWFkb25seSB0c0plc3RPcHRpb25zPzogVHNKZXN0VHJhbnNmb3JtZXJPcHRpb25zO1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBUeXBlU2NyaXB0IHByb2plY3QncyBqZXN0IGNvbmZpZ3VyYXRpb24uXG4gKlxuICogVGhlIGRlZmF1bHRzOiB0aGUgdGVzdHMgYXJlIGBzcmMvKipcXC8qLnRlc3QudHNgLCBydW4gaW4gdGhlIGBub2RlYCBlbnZpcm9ubWVudCwgdHJhbnNmb3JtZWQgYnkgdHMtamVzdCwgYXMgRVNNIHdoZW5cbiAqIHRoZSBwYWNrYWdlIGlzIChzZWUge0BsaW5rIERlZmluZUplc3RDb25maWdPcHRpb25zLmVzbX0pOyBhIGAuanNgIHJlbGF0aXZlIGltcG9ydCByZXNvbHZlcyBvbnRvIGl0cyBgLnRzYCBzb3VyY2U7XG4gKiBjb3ZlcmFnZSBpcyB2OCBvdmVyIGBzcmMvYCwgd2l0aG91dCB0aGUgYmFycmVscywgdGhlIGRlY2xhcmF0aW9ucywgdGhlIHRlc3RzIGFuZCB0aGUgdGVzdCBoZWxwZXJzLCByZXBvcnRlZCBhc1xuICogYHRleHRgLCBgbGNvdmAgYW5kIGBodG1sYCBpbnRvIGBjb3ZlcmFnZS9gLiBFdmVyeSBqZXN0IG9wdGlvbiBpbiBgb3B0aW9uc2AgcmVwbGFjZXMgaXRzIGRlZmF1bHQsIGV4Y2VwdFxuICogYG1vZHVsZU5hbWVNYXBwZXJgLCB3aG9zZSBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUgYC5qc2AgbWFwcGVyLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBqZXN0IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVKZXN0Q29uZmlnKG9wdGlvbnM6IERlZmluZUplc3RDb25maWdPcHRpb25zID0ge30pOiBDb25maWcge1xuICBjb25zdCB7IGVzbSA9IGlzRXNtUGFja2FnZSgpLCBtb2R1bGVOYW1lTWFwcGVyLCB0c0plc3RPcHRpb25zLCAuLi5vdmVycmlkZXMgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBjb2xsZWN0Q292ZXJhZ2VGcm9tOiBbXG4gICAgICAuLi5MSUJSQVJZX1ZJVEVTVF9DT1ZFUkFHRS5pbmNsdWRlLFxuICAgICAgLi4uTElCUkFSWV9WSVRFU1RfQ09WRVJBR0UuZXhjbHVkZS5tYXAoKHBhdHRlcm4pID0+IGAhJHtwYXR0ZXJufWApXG4gICAgXSxcbiAgICBjb3ZlcmFnZURpcmVjdG9yeTogTElCUkFSWV9WSVRFU1RfQ09WRVJBR0UucmVwb3J0c0RpcmVjdG9yeSxcbiAgICBjb3ZlcmFnZVByb3ZpZGVyOiBMSUJSQVJZX1ZJVEVTVF9DT1ZFUkFHRS5wcm92aWRlcixcbiAgICBjb3ZlcmFnZVJlcG9ydGVyczogWyd0ZXh0JywgJ2xjb3YnLCAnaHRtbCddLFxuICAgIGV4dGVuc2lvbnNUb1RyZWF0QXNFc206IGVzbSA/IFsnLnRzJywgJy50c3gnXSA6IFtdLFxuICAgIG1vZHVsZU5hbWVNYXBwZXI6IHtcbiAgICAgIC4uLkpFU1RfUkVMQVRJVkVfSlNfSU1QT1JUX01BUFBFUixcbiAgICAgIC4uLm1vZHVsZU5hbWVNYXBwZXJcbiAgICB9LFxuICAgIHJvb3RzOiBbJzxyb290RGlyPi9zcmMnXSxcbiAgICB0ZXN0RW52aXJvbm1lbnQ6ICdub2RlJyxcbiAgICB0ZXN0TWF0Y2g6IFsnKiovKi50ZXN0LnRzJ10sXG4gICAgdGVzdFBhdGhJZ25vcmVQYXR0ZXJuczogWy4uLkRFRkFVTFRfSkVTVF9URVNUX1BBVEhfSUdOT1JFX1BBVFRFUk5TXSxcbiAgICB0cmFuc2Zvcm06IHtcbiAgICAgIFtKRVNUX1RZUEVTQ1JJUFRfVFJBTlNGT1JNX1BBVFRFUk5dOiBbXG4gICAgICAgICd0cy1qZXN0JyxcbiAgICAgICAge1xuICAgICAgICAgIHRzY29uZmlnOiB7IGlzb2xhdGVkTW9kdWxlczogdHJ1ZSB9LFxuICAgICAgICAgIHVzZUVTTTogZXNtLFxuICAgICAgICAgIC4uLnRzSmVzdE9wdGlvbnNcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgLi4ub3ZlcnJpZGVzXG4gIH07XG59XG5cbi8qKlxuICogU2F5cyB3aGV0aGVyIHRoZSBwcm9qZWN0IGF0IHRoZSByb290IGlzIGFuIEVTIG1vZHVsZSBwYWNrYWdlLlxuICpcbiAqIEByZXR1cm5zIFdoZXRoZXIgaXRzIGBwYWNrYWdlLmpzb25gIGRlY2xhcmVzIGBcInR5cGVcIjogXCJtb2R1bGVcImAuIEEgcHJvamVjdCB3aXRob3V0IGEgYHBhY2thZ2UuanNvbmAgaXMgbm90LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFc21QYWNrYWdlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZXhpc3RzU3luYyhyZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IFJlcG9QYXRocy5QYWNrYWdlSnNvbiB9KSkgJiYgcmVhZFBhY2thZ2VKc29uU3luYygpLnR5cGUgPT09ICdtb2R1bGUnO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFhQSxxQkFBMkI7QUFFM0IsaUJBQW9DO0FBQ3BDLHdCQUEwQjtBQUMxQixrQkFBd0M7QUFDeEMsMkJBQXdDO0FBS2pDLE1BQU0sb0NBQW9DLE9BQU87QUFVakQsTUFBTSxpQ0FBbUU7QUFBQSxFQUM5RSx3QkFBd0I7QUFDMUI7QUFLTyxNQUFNLHlDQUE0RCxDQUFDLGtCQUFrQixRQUFRO0FBdUM3RixTQUFTLGlCQUFpQixVQUFtQyxDQUFDLEdBQVc7QUFDOUUsUUFBTSxFQUFFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixlQUFlLEdBQUcsVUFBVSxJQUFJO0FBRWhGLFNBQU87QUFBQSxJQUNMLHFCQUFxQjtBQUFBLE1BQ25CLEdBQUcsNkNBQXdCO0FBQUEsTUFDM0IsR0FBRyw2Q0FBd0IsUUFBUSxJQUFJLENBQUMsWUFBWSxJQUFJLE9BQU8sRUFBRTtBQUFBLElBQ25FO0FBQUEsSUFDQSxtQkFBbUIsNkNBQXdCO0FBQUEsSUFDM0Msa0JBQWtCLDZDQUF3QjtBQUFBLElBQzFDLG1CQUFtQixDQUFDLFFBQVEsUUFBUSxNQUFNO0FBQUEsSUFDMUMsd0JBQXdCLE1BQU0sQ0FBQyxPQUFPLE1BQU0sSUFBSSxDQUFDO0FBQUEsSUFDakQsa0JBQWtCO0FBQUEsTUFDaEIsR0FBRztBQUFBLE1BQ0gsR0FBRztBQUFBLElBQ0w7QUFBQSxJQUNBLE9BQU8sQ0FBQyxlQUFlO0FBQUEsSUFDdkIsaUJBQWlCO0FBQUEsSUFDakIsV0FBVyxDQUFDLGNBQWM7QUFBQSxJQUMxQix3QkFBd0IsQ0FBQyxHQUFHLHNDQUFzQztBQUFBLElBQ2xFLFdBQVc7QUFBQSxNQUNULENBQUMsaUNBQWlDLEdBQUc7QUFBQSxRQUNuQztBQUFBLFFBQ0E7QUFBQSxVQUNFLFVBQVUsRUFBRSxpQkFBaUIsS0FBSztBQUFBLFVBQ2xDLFFBQVE7QUFBQSxVQUNSLEdBQUc7QUFBQSxRQUNMO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLEdBQUc7QUFBQSxFQUNMO0FBQ0Y7QUFPTyxTQUFTLGVBQXdCO0FBQ3RDLGFBQU8sK0JBQVcscUNBQXdCLEVBQUUsTUFBTSw0QkFBVSxZQUFZLENBQUMsQ0FBQyxTQUFLLGdDQUFvQixFQUFFLFNBQVM7QUFDaEg7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -0,0 +1,71 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * Shared jest configuration for TypeScript packages: {@link defineJestConfig}, which fills in the ts-jest transform,
6
+ * the ESM settings, the test excludes and the coverage block a project otherwise writes by hand.
7
+ *
8
+ * The coverage block is the one the vitest library configuration uses, so a package reports the same files whichever
9
+ * runner it picks.
10
+ */
11
+ import type { Config } from 'jest' with { 'resolution-mode': 'import' };
12
+ import type { TsJestTransformerOptions } from 'ts-jest' with { 'resolution-mode': 'import' };
13
+ /**
14
+ * The files ts-jest compiles: `.ts`, `.tsx`, `.mts` and `.cts`.
15
+ */
16
+ export declare const JEST_TYPESCRIPT_TRANSFORM_PATTERN: string;
17
+ /**
18
+ * Maps a relative import written with a `.js` extension onto the path without an extension, which jest resolves.
19
+ *
20
+ * A project compiled with `module: nodenext` writes `./foo.js` for `./foo.ts`, and so does TypeScript itself when
21
+ * `rewriteRelativeImportExtensions` turns a `./foo.ts` import into `./foo.js`. Jest looks for a file literally named
22
+ * `foo.js` and fails with `Cannot find module './foo.js'`, so the extension is removed and jest's own
23
+ * `moduleFileExtensions` search finds `foo.ts`.
24
+ */
25
+ export declare const JEST_RELATIVE_JS_IMPORT_MAPPER: Readonly<Record<string, string>>;
26
+ /**
27
+ * Folders jest never collects tests from.
28
+ */
29
+ export declare const DEFAULT_JEST_TEST_PATH_IGNORE_PATTERNS: readonly string[];
30
+ /**
31
+ * Options for {@link defineJestConfig}: any jest option, which wins over the default the function would otherwise
32
+ * set, plus the two below.
33
+ */
34
+ export interface DefineJestConfigOptions extends Config {
35
+ /**
36
+ * Whether jest loads the project as ES modules.
37
+ *
38
+ * ESM needs `extensionsToTreatAsEsm`, ts-jest's `useESM`, and Node's `--experimental-vm-modules`, which the jest
39
+ * runner in this package adds by the same rule.
40
+ *
41
+ * @default `true` when `package.json` declares `"type": "module"`
42
+ */
43
+ readonly esm?: boolean;
44
+ /**
45
+ * Options for the ts-jest transform, spread over the defaults: `useESM` from {@link esm}, and a `tsconfig` of
46
+ * `{ isolatedModules: true }`, so each file is transpiled on its own, without a type check, as vitest does. A
47
+ * `tsconfig` given here replaces that default rather than merging with it.
48
+ *
49
+ * Ignored when {@link Config.transform} is given.
50
+ */
51
+ readonly tsJestOptions?: TsJestTransformerOptions;
52
+ }
53
+ /**
54
+ * Defines a TypeScript project's jest configuration.
55
+ *
56
+ * The defaults: the tests are `src/**\/*.test.ts`, run in the `node` environment, transformed by ts-jest, as ESM when
57
+ * the package is (see {@link DefineJestConfigOptions.esm}); a `.js` relative import resolves onto its `.ts` source;
58
+ * coverage is v8 over `src/`, without the barrels, the declarations, the tests and the test helpers, reported as
59
+ * `text`, `lcov` and `html` into `coverage/`. Every jest option in `options` replaces its default, except
60
+ * `moduleNameMapper`, whose entries are added to the `.js` mapper.
61
+ *
62
+ * @param options - The configuration options.
63
+ * @returns The jest configuration.
64
+ */
65
+ export declare function defineJestConfig(options?: DefineJestConfigOptions): Config;
66
+ /**
67
+ * Says whether the project at the root is an ES module package.
68
+ *
69
+ * @returns Whether its `package.json` declares `"type": "module"`. A project without a `package.json` is not.
70
+ */
71
+ export declare function isEsmPackage(): boolean;
@@ -0,0 +1,111 @@
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
+ "use strict";
7
+ var __create = Object.create;
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __getOwnPropNames = Object.getOwnPropertyNames;
11
+ var __getProtoOf = Object.getPrototypeOf;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
26
+ // If the importer is in node compatibility mode or this is not an ESM
27
+ // file that has been converted to a CommonJS file using a Babel-
28
+ // compatible transform (i.e. "__esModule" has not been set), then set
29
+ // "default" to the CommonJS "module.exports" for node compatibility.
30
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
31
+ mod
32
+ ));
33
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
+ var jest_exports = {};
35
+ __export(jest_exports, {
36
+ EXPERIMENTAL_VM_MODULES_FLAG: () => EXPERIMENTAL_VM_MODULES_FLAG,
37
+ JEST_CONFIG_FILE_NAMES: () => JEST_CONFIG_FILE_NAMES,
38
+ hasJestConfig: () => hasJestConfig,
39
+ test: () => test,
40
+ testCoverage: () => testCoverage,
41
+ testWatch: () => testWatch
42
+ });
43
+ module.exports = __toCommonJS(jest_exports);
44
+ var import_node_fs = require('node:fs');
45
+ var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
46
+ var import_npm = require('../npm.cjs');
47
+ var import_package_manager = require('../package-manager.cjs');
48
+ var import_repo_paths = require('../repo-paths.cjs');
49
+ var import_root = require('../root.cjs');
50
+ var import_jest_config = require('./jest-config.cjs');
51
+ const JEST_CONFIG_FILE_NAMES = [
52
+ "jest.config.cjs",
53
+ "jest.config.cts",
54
+ "jest.config.js",
55
+ "jest.config.json",
56
+ "jest.config.mjs",
57
+ "jest.config.mts",
58
+ "jest.config.ts"
59
+ ];
60
+ const EXPERIMENTAL_VM_MODULES_FLAG = "--experimental-vm-modules";
61
+ async function hasJestConfig() {
62
+ if (JEST_CONFIG_FILE_NAMES.some((fileName) => (0, import_node_fs.existsSync)((0, import_root.resolvePathFromRootSafe)({ path: fileName })))) {
63
+ return true;
64
+ }
65
+ if (!(0, import_node_fs.existsSync)((0, import_root.resolvePathFromRootSafe)({ path: import_repo_paths.RepoPaths.PackageJson }))) {
66
+ return false;
67
+ }
68
+ const packageJson = await (0, import_npm.readPackageJson)();
69
+ return Object.hasOwn(packageJson, "jest");
70
+ }
71
+ async function test(options = {}) {
72
+ await runJest([], options);
73
+ }
74
+ async function testCoverage(options = {}) {
75
+ const threshold = options.minCoverageInPercents ?? 0;
76
+ const coverageThreshold = {
77
+ global: {
78
+ branches: threshold,
79
+ functions: threshold,
80
+ lines: threshold,
81
+ statements: threshold
82
+ }
83
+ };
84
+ await runJest(["--coverage", `--coverageThreshold=${JSON.stringify(coverageThreshold)}`], options);
85
+ }
86
+ async function testWatch(options = {}) {
87
+ await runJest(["--watch"], options, true);
88
+ }
89
+ function addExperimentalVmModulesFlag(nodeOptions) {
90
+ const flags = (nodeOptions ?? "").split(/\s+/).filter(Boolean);
91
+ if (!flags.includes(EXPERIMENTAL_VM_MODULES_FLAG)) {
92
+ flags.push(EXPERIMENTAL_VM_MODULES_FLAG);
93
+ }
94
+ return flags.join(" ");
95
+ }
96
+ async function runJest(runArguments, options, isInteractive = false) {
97
+ const { esm = (0, import_jest_config.isEsmPackage)(), projects = [] } = options;
98
+ const projectArguments = projects.length > 0 ? ["--selectProjects", ...projects] : [];
99
+ const env = esm ? { NODE_OPTIONS: addExperimentalVmModulesFlag(import_node_process.default.env["NODE_OPTIONS"]) } : {};
100
+ await (0, import_root.execFromRoot)([...(0, import_package_manager.resolveToolCommand)({ tool: "jest" }), ...runArguments, ...projectArguments], { env, isInteractive });
101
+ }
102
+ // Annotate the CommonJS export names for ESM import in node:
103
+ 0 && (module.exports = {
104
+ EXPERIMENTAL_VM_MODULES_FLAG,
105
+ JEST_CONFIG_FILE_NAMES,
106
+ hasJestConfig,
107
+ test,
108
+ testCoverage,
109
+ testWatch
110
+ });
111
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3Rlc3QtcnVubmVycy9qZXN0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBydW5uaW5nIHRlc3RzIHVzaW5nIHRoZSBKZXN0IGZyYW1ld29yay5cbiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICcuLi9ucG0udHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7IGlzRXNtUGFja2FnZSB9IGZyb20gJy4vamVzdC1jb25maWcudHMnO1xuXG4vKipcbiAqIEV2ZXJ5IGZpbGUgamVzdCByZWFkcyBpdHMgY29uZmlndXJhdGlvbiBmcm9tLCBiZXNpZGVzIHRoZSBgamVzdGAga2V5IG9mIGBwYWNrYWdlLmpzb25gLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vamVzdGpzLmlvL2RvY3MvY29uZmlndXJhdGlvbn1cbiAqL1xuZXhwb3J0IGNvbnN0IEpFU1RfQ09ORklHX0ZJTEVfTkFNRVM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnamVzdC5jb25maWcuY2pzJyxcbiAgJ2plc3QuY29uZmlnLmN0cycsXG4gICdqZXN0LmNvbmZpZy5qcycsXG4gICdqZXN0LmNvbmZpZy5qc29uJyxcbiAgJ2plc3QuY29uZmlnLm1qcycsXG4gICdqZXN0LmNvbmZpZy5tdHMnLFxuICAnamVzdC5jb25maWcudHMnXG5dO1xuXG4vKipcbiAqIFRoZSBOb2RlIGZsYWcgamVzdCdzIEVTTSBsb2FkZXIgbmVlZHM6IGl0IGlzIGJ1aWx0IG9uIGB2bS5TeW50aGV0aWNNb2R1bGVgLCB3aGljaCBOb2RlIG9ubHkgZXhwb3NlcyB1bmRlciBpdC5cbiAqIFdpdGhvdXQgaXQgZXZlcnkgRVNNIHN1aXRlIGZhaWxzIHRvIGxvYWQgd2l0aCBgTXVzdCB1c2UgaW1wb3J0IHRvIGxvYWQgRVMgTW9kdWxlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYUEVSSU1FTlRBTF9WTV9NT0RVTEVTX0ZMQUcgPSAnLS1leHBlcmltZW50YWwtdm0tbW9kdWxlcyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyB0ZXN0cyB3aXRoIGNvdmVyYWdlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RDb3ZlcmFnZU9wdGlvbnMgZXh0ZW5kcyBUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIGNvdmVyYWdlIHBlcmNlbnRhZ2UgcmVxdWlyZWQsIGZvciBsaW5lcywgZnVuY3Rpb25zLCBicmFuY2hlcyBhbmQgc3RhdGVtZW50cyBhbGlrZS4gSWYgdGhlIGFjdHVhbCBjb3ZlcmFnZVxuICAgKiBmYWxscyBiZWxvdyBpdCwgamVzdCBleGl0cyB3aXRoIGEgbm9uLXplcm8gY29kZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDBgXG4gICAqL1xuICByZWFkb25seSBtaW5Db3ZlcmFnZUluUGVyY2VudHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcnVubmluZyB0ZXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGplc3QgcnVucyB0aGUgc3VpdGUgYXMgRVMgbW9kdWxlcywgd2hpY2ggYWRkcyB7QGxpbmsgRVhQRVJJTUVOVEFMX1ZNX01PRFVMRVNfRkxBR30gdG8gYE5PREVfT1BUSU9OU2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYCB3aGVuIGBwYWNrYWdlLmpzb25gIGRlY2xhcmVzIGBcInR5cGVcIjogXCJtb2R1bGVcImAsIHRoZSBydWxlIGBkZWZpbmVKZXN0Q29uZmlnYCBmb2xsb3dzIHRvb1xuICAgKi9cbiAgcmVhZG9ubHkgZXNtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByb2plY3RzIHRvIHJ1biwgYnkgdGhlaXIgYGRpc3BsYXlOYW1lYCwgcGFzc2VkIHRvIGplc3QncyBgLS1zZWxlY3RQcm9qZWN0c2AuIFVubGlrZSB2aXRlc3QncyBydW5uZXIsIGEgbmFtZVxuICAgKiBtYXRjaGVzIG9ubHkgaXRzZWxmOiBqZXN0IGhhcyBubyBgbmFtZToqYCBmb3JtLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBydW5uaW5nIHRlc3RzIGluIHdhdGNoIG1vZGUuXG4gKi9cbmV4cG9ydCB0eXBlIFRlc3RXYXRjaE9wdGlvbnMgPSBUZXN0T3B0aW9ucztcblxuLyoqXG4gKiBTYXlzIHdoZXRoZXIgdGhlIHByb2plY3QgY29uZmlndXJlcyBqZXN0LlxuICpcbiAqIEByZXR1cm5zIFdoZXRoZXIgYSBqZXN0IGNvbmZpZ3VyYXRpb24gZmlsZSwgb3IgYSBgamVzdGAga2V5IGluIGBwYWNrYWdlLmpzb25gLCBleGlzdHMgYXQgdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhc0plc3RDb25maWcoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChKRVNUX0NPTkZJR19GSUxFX05BTUVTLnNvbWUoKGZpbGVOYW1lKSA9PiBleGlzdHNTeW5jKHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogZmlsZU5hbWUgfSkpKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFleGlzdHNTeW5jKHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogUmVwb1BhdGhzLlBhY2thZ2VKc29uIH0pKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKCk7XG4gIHJldHVybiBPYmplY3QuaGFzT3duKHBhY2thZ2VKc29uLCAnamVzdCcpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIHRlc3QuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdChvcHRpb25zOiBUZXN0T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJ1bkplc3QoW10sIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgd2l0aCBjb3ZlcmFnZS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvdmVyYWdlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRlc3RzIGhhdmUgY29tcGxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGVzdENvdmVyYWdlKG9wdGlvbnM6IFRlc3RDb3ZlcmFnZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0aHJlc2hvbGQgPSBvcHRpb25zLm1pbkNvdmVyYWdlSW5QZXJjZW50cyA/PyAwO1xuICBjb25zdCBjb3ZlcmFnZVRocmVzaG9sZCA9IHtcbiAgICBnbG9iYWw6IHtcbiAgICAgIGJyYW5jaGVzOiB0aHJlc2hvbGQsXG4gICAgICBmdW5jdGlvbnM6IHRocmVzaG9sZCxcbiAgICAgIGxpbmVzOiB0aHJlc2hvbGQsXG4gICAgICBzdGF0ZW1lbnRzOiB0aHJlc2hvbGRcbiAgICB9XG4gIH07XG4gIGF3YWl0IHJ1bkplc3QoWyctLWNvdmVyYWdlJywgYC0tY292ZXJhZ2VUaHJlc2hvbGQ9JHtKU09OLnN0cmluZ2lmeShjb3ZlcmFnZVRocmVzaG9sZCl9YF0sIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIHRlc3Qgc3VpdGUgaW4gd2F0Y2ggbW9kZSwgcmUtcnVubmluZyB0aGUgdGVzdHMgdGhlIGNoYW5nZWQgZmlsZXMgYWZmZWN0LiBKZXN0IG5lZWRzIGEgZ2l0IG9yIE1lcmN1cmlhbFxuICogcmVwb3NpdG9yeSBmb3IgdGhhdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgdGVzdC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgd2F0Y2hlciBleGl0cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRlc3RXYXRjaChvcHRpb25zOiBUZXN0V2F0Y2hPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuSmVzdChbJy0td2F0Y2gnXSwgb3B0aW9ucywgdHJ1ZSk7XG59XG5cbi8qKlxuICogQXBwZW5kcyB7QGxpbmsgRVhQRVJJTUVOVEFMX1ZNX01PRFVMRVNfRkxBR30gdG8gYSBgTk9ERV9PUFRJT05TYCB2YWx1ZSwga2VlcGluZyB3aGF0ZXZlciBpdCBhbHJlYWR5IGhvbGRzLlxuICpcbiAqIEBwYXJhbSBub2RlT3B0aW9ucyAtIFRoZSBpbmhlcml0ZWQgYE5PREVfT1BUSU9OU2AuXG4gKiBAcmV0dXJucyBUaGUgYE5PREVfT1BUSU9OU2AgamVzdCBydW5zIHdpdGguXG4gKi9cbmZ1bmN0aW9uIGFkZEV4cGVyaW1lbnRhbFZtTW9kdWxlc0ZsYWcobm9kZU9wdGlvbnM6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIGNvbnN0IGZsYWdzID0gKG5vZGVPcHRpb25zID8/ICcnKS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKCFmbGFncy5pbmNsdWRlcyhFWFBFUklNRU5UQUxfVk1fTU9EVUxFU19GTEFHKSkge1xuICAgIGZsYWdzLnB1c2goRVhQRVJJTUVOVEFMX1ZNX01PRFVMRVNfRkxBRyk7XG4gIH1cblxuICByZXR1cm4gZmxhZ3Muam9pbignICcpO1xufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGplc3QgQ0xJIGZyb20gdGhlIHByb2plY3Qgcm9vdC5cbiAqXG4gKiBAcGFyYW0gcnVuQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0aGF0IHNlbGVjdCB3aGF0IGplc3QgZG9lcy5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBUZXN0T3B0aW9uc30uXG4gKiBAcGFyYW0gaXNJbnRlcmFjdGl2ZSAtIFdoZXRoZXIgamVzdCBnZXRzIHRoZSB0ZXJtaW5hbCwgYXMgaXRzIHdhdGNoIG1vZGUgbmVlZHMgdG8gcmVhZCBrZXlzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGplc3QgZXhpdHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkplc3QocnVuQXJndW1lbnRzOiBzdHJpbmdbXSwgb3B0aW9uczogVGVzdE9wdGlvbnMsIGlzSW50ZXJhY3RpdmUgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGVzbSA9IGlzRXNtUGFja2FnZSgpLCBwcm9qZWN0cyA9IFtdIH0gPSBvcHRpb25zO1xuICBjb25zdCBwcm9qZWN0QXJndW1lbnRzID0gcHJvamVjdHMubGVuZ3RoID4gMCA/IFsnLS1zZWxlY3RQcm9qZWN0cycsIC4uLnByb2plY3RzXSA6IFtdO1xuICBjb25zdCBlbnYgPSBlc20gPyB7IE5PREVfT1BUSU9OUzogYWRkRXhwZXJpbWVudGFsVm1Nb2R1bGVzRmxhZyhwcm9jZXNzLmVudlsnTk9ERV9PUFRJT05TJ10pIH0gOiB7fTtcblxuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdqZXN0JyB9KSwgLi4ucnVuQXJndW1lbnRzLCAuLi5wcm9qZWN0QXJndW1lbnRzXSwgeyBlbnYsIGlzSW50ZXJhY3RpdmUgfSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLHFCQUEyQjtBQUMzQiwwQkFBb0I7QUFFcEIsaUJBQWdDO0FBQ2hDLDZCQUFtQztBQUNuQyx3QkFBMEI7QUFDMUIsa0JBR087QUFDUCx5QkFBNkI7QUFPdEIsTUFBTSx5QkFBNEM7QUFBQSxFQUN2RDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGO0FBTU8sTUFBTSwrQkFBK0I7QUEyQzVDLGVBQXNCLGdCQUFrQztBQUN0RCxNQUFJLHVCQUF1QixLQUFLLENBQUMsaUJBQWEsK0JBQVcscUNBQXdCLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDdEcsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLEtBQUMsK0JBQVcscUNBQXdCLEVBQUUsTUFBTSw0QkFBVSxZQUFZLENBQUMsQ0FBQyxHQUFHO0FBQ3pFLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLFVBQU0sNEJBQWdCO0FBQzFDLFNBQU8sT0FBTyxPQUFPLGFBQWEsTUFBTTtBQUMxQztBQVFBLGVBQXNCLEtBQUssVUFBdUIsQ0FBQyxHQUFrQjtBQUNuRSxRQUFNLFFBQVEsQ0FBQyxHQUFHLE9BQU87QUFDM0I7QUFRQSxlQUFzQixhQUFhLFVBQStCLENBQUMsR0FBa0I7QUFDbkYsUUFBTSxZQUFZLFFBQVEseUJBQXlCO0FBQ25ELFFBQU0sb0JBQW9CO0FBQUEsSUFDeEIsUUFBUTtBQUFBLE1BQ04sVUFBVTtBQUFBLE1BQ1YsV0FBVztBQUFBLE1BQ1gsT0FBTztBQUFBLE1BQ1AsWUFBWTtBQUFBLElBQ2Q7QUFBQSxFQUNGO0FBQ0EsUUFBTSxRQUFRLENBQUMsY0FBYyx1QkFBdUIsS0FBSyxVQUFVLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxPQUFPO0FBQ25HO0FBU0EsZUFBc0IsVUFBVSxVQUE0QixDQUFDLEdBQWtCO0FBQzdFLFFBQU0sUUFBUSxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUk7QUFDMUM7QUFRQSxTQUFTLDZCQUE2QixhQUF5QztBQUM3RSxRQUFNLFNBQVMsZUFBZSxJQUFJLE1BQU0sS0FBSyxFQUFFLE9BQU8sT0FBTztBQUM3RCxNQUFJLENBQUMsTUFBTSxTQUFTLDRCQUE0QixHQUFHO0FBQ2pELFVBQU0sS0FBSyw0QkFBNEI7QUFBQSxFQUN6QztBQUVBLFNBQU8sTUFBTSxLQUFLLEdBQUc7QUFDdkI7QUFVQSxlQUFlLFFBQVEsY0FBd0IsU0FBc0IsZ0JBQWdCLE9BQXNCO0FBQ3pHLFFBQU0sRUFBRSxVQUFNLGlDQUFhLEdBQUcsV0FBVyxDQUFDLEVBQUUsSUFBSTtBQUNoRCxRQUFNLG1CQUFtQixTQUFTLFNBQVMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsSUFBSSxDQUFDO0FBQ3BGLFFBQU0sTUFBTSxNQUFNLEVBQUUsY0FBYyw2QkFBNkIsb0JBQUFBLFFBQVEsSUFBSSxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUM7QUFFakcsWUFBTSwwQkFBYSxDQUFDLE9BQUcsMkNBQW1CLEVBQUUsTUFBTSxPQUFPLENBQUMsR0FBRyxHQUFHLGNBQWMsR0FBRyxnQkFBZ0IsR0FBRyxFQUFFLEtBQUssY0FBYyxDQUFDO0FBQzVIOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
@@ -0,0 +1,77 @@
1
+ /// <reference path="../library-references.d.cts" />
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>;