@prosopo/config 3.3.6 → 3.3.8

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 (66) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +8 -7
  2. package/.turbo/turbo-build$colon$tsc.log +4 -4
  3. package/.turbo/turbo-build.log +9 -8
  4. package/CHANGELOG.md +20 -0
  5. package/dist/cjs/index.cjs +2 -0
  6. package/dist/cjs/vite/index.cjs +2 -0
  7. package/dist/cjs/vite/vite-plugin-modify-exports-files.cjs +43 -0
  8. package/dist/cjs/vite/vite.frontend.config.cjs +6 -1
  9. package/dist/cjs/vite/vite.test.config.cjs +3 -1
  10. package/dist/dependencies.test.d.ts +2 -0
  11. package/dist/dependencies.test.d.ts.map +1 -0
  12. package/dist/dependencies.test.js +160 -0
  13. package/dist/dependencies.test.js.map +1 -0
  14. package/dist/getDependencies.test.d.ts +2 -0
  15. package/dist/getDependencies.test.d.ts.map +1 -0
  16. package/dist/getDependencies.test.js +258 -0
  17. package/dist/getDependencies.test.js.map +1 -0
  18. package/dist/index.js +2 -1
  19. package/dist/vite/bundleConfigs.test.d.ts +2 -0
  20. package/dist/vite/bundleConfigs.test.d.ts.map +1 -0
  21. package/dist/vite/bundleConfigs.test.js +252 -0
  22. package/dist/vite/bundleConfigs.test.js.map +1 -0
  23. package/dist/vite/configs.test.d.ts +2 -0
  24. package/dist/vite/configs.test.d.ts.map +1 -0
  25. package/dist/vite/configs.test.js +163 -0
  26. package/dist/vite/configs.test.js.map +1 -0
  27. package/dist/vite/index.d.ts +1 -0
  28. package/dist/vite/index.d.ts.map +1 -1
  29. package/dist/vite/index.js +2 -1
  30. package/dist/vite/index.js.map +1 -1
  31. package/dist/vite/modifyExportsFiles.test.d.ts +2 -0
  32. package/dist/vite/modifyExportsFiles.test.d.ts.map +1 -0
  33. package/dist/vite/modifyExportsFiles.test.js +28 -0
  34. package/dist/vite/modifyExportsFiles.test.js.map +1 -0
  35. package/dist/vite/plugins.test.d.ts +2 -0
  36. package/dist/vite/plugins.test.d.ts.map +1 -0
  37. package/dist/vite/plugins.test.js +232 -0
  38. package/dist/vite/plugins.test.js.map +1 -0
  39. package/dist/vite/translations.test.d.ts +2 -0
  40. package/dist/vite/translations.test.d.ts.map +1 -0
  41. package/dist/vite/translations.test.js +96 -0
  42. package/dist/vite/translations.test.js.map +1 -0
  43. package/dist/vite/vite-plugin-modify-exports-files.d.ts +4 -0
  44. package/dist/vite/vite-plugin-modify-exports-files.d.ts.map +1 -0
  45. package/dist/vite/vite-plugin-modify-exports-files.js +42 -0
  46. package/dist/vite/vite-plugin-modify-exports-files.js.map +1 -0
  47. package/dist/vite/vite.frontend.config.d.ts.map +1 -1
  48. package/dist/vite/vite.frontend.config.js +6 -1
  49. package/dist/vite/vite.frontend.config.js.map +1 -1
  50. package/dist/vite/vite.test.config.d.ts.map +1 -1
  51. package/dist/vite/vite.test.config.js +3 -1
  52. package/dist/vite/vite.test.config.js.map +1 -1
  53. package/package.json +3 -2
  54. package/src/dependencies.test.ts +249 -0
  55. package/src/getDependencies.test.ts +385 -0
  56. package/src/vite/bundleConfigs.test.ts +405 -0
  57. package/src/vite/configs.test.ts +217 -0
  58. package/src/vite/index.ts +1 -0
  59. package/src/vite/modifyExportsFiles.test.ts +56 -0
  60. package/src/vite/plugins.test.ts +348 -0
  61. package/src/vite/translations.test.ts +164 -0
  62. package/src/vite/vite-plugin-modify-exports-files.ts +64 -0
  63. package/src/vite/vite.frontend.config.ts +13 -0
  64. package/src/vite/vite.test.config.ts +5 -0
  65. package/tsconfig.tsbuildinfo +1 -1
  66. package/vite.test.config.ts +37 -0
@@ -1,5 +1,5 @@
1
1
 
2
- > @prosopo/config@3.3.6 build:cjs
2
+ > @prosopo/config@3.3.8 build:cjs
3
3
  > NODE_ENV=${NODE_ENV:-production}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
4
4
 
5
5
  ViteCommonJSConfig: .
@@ -9,7 +9,7 @@ ViteCommonJSConfig: .
9
9
  vite v8.1.5 building ssr environment for production...
10
10
  Bundle build started
11
11
  
12
- ✓ 19 modules transformed.
12
+ ✓ 20 modules transformed.
13
13
  rendering chunks...
14
14
  computing gzip size...
15
15
  dist/cjs/webpack/index.cjs 0.00 kB │ gzip: 0.02 kB
@@ -18,18 +18,19 @@ dist/cjs/vite/TsNoCheckPlugin.cjs 0.37 kB │ gzip:
18
18
  dist/cjs/vite/vite-plugin-fix-absolute-imports.cjs 0.60 kB │ gzip: 0.34 kB
19
19
  dist/cjs/vite/vite-plugin-externalize-obfuscator-deadcode.cjs 0.68 kB │ gzip: 0.37 kB
20
20
  dist/cjs/_virtual/_rolldown/runtime.cjs 1.00 kB │ gzip: 0.50 kB
21
+ dist/cjs/vite/vite-plugin-modify-exports-files.cjs 1.36 kB │ gzip: 0.70 kB
21
22
  dist/cjs/vite/vite-plugin-copy.cjs 1.60 kB │ gzip: 0.65 kB
22
23
  dist/cjs/vite/vite-plugin-close-and-copy.cjs 1.77 kB │ gzip: 0.67 kB
23
- dist/cjs/vite/index.cjs 2.07 kB │ gzip: 0.46 kB
24
+ dist/cjs/vite/index.cjs 2.26 kB │ gzip: 0.50 kB
24
25
  dist/cjs/vite/vite-plugin-remove-unused-translations.cjs 2.34 kB │ gzip: 1.01 kB
25
26
  dist/cjs/vite/vite.esm.config.cjs 2.39 kB │ gzip: 0.92 kB
26
27
  dist/cjs/vite/vite.commonjs.config.cjs 2.52 kB │ gzip: 0.99 kB
27
28
  dist/cjs/vite/vite.threads.test.config.cjs 2.52 kB │ gzip: 1.00 kB
28
- dist/cjs/index.cjs 2.54 kB │ gzip: 0.57 kB
29
- dist/cjs/vite/vite.test.config.cjs 2.67 kB │ gzip: 1.03 kB
29
+ dist/cjs/vite/vite.test.config.cjs 2.72 kB │ gzip: 1.04 kB
30
+ dist/cjs/index.cjs 2.74 kB │ gzip: 0.61 kB
30
31
  dist/cjs/vite/vite.backend.config.cjs 3.63 kB │ gzip: 1.35 kB
31
32
  dist/cjs/webpack/webpack.config.cjs 3.72 kB │ gzip: 1.30 kB
32
33
  dist/cjs/dependencies.cjs 5.87 kB │ gzip: 1.92 kB
33
- dist/cjs/vite/vite.frontend.config.cjs 6.66 kB │ gzip: 2.32 kB
34
+ dist/cjs/vite/vite.frontend.config.cjs 6.78 kB │ gzip: 2.36 kB
34
35
 
35
- ✓ built in 72ms
36
+ ✓ built in 62ms
@@ -1,11 +1,11 @@
1
1
 
2
- > @prosopo/config@3.3.6 build:tsc
2
+ > @prosopo/config@3.3.8 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 11:09:15 AM - Projects in this build:
5
+ 3:30:33 PM - Projects in this build:
6
6
  * tsconfig.json
7
7
 
8
- 11:09:15 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
8
+ 3:30:33 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
9
9
 
10
- 11:09:15 AM - Building project '/home/runner/work/captcha/captcha/dev/config/tsconfig.json'...
10
+ 3:30:33 PM - Building project '/home/runner/work/captcha/captcha/dev/config/tsconfig.json'...
11
11
 
@@ -1,9 +1,9 @@
1
1
 
2
- > @prosopo/config@3.3.6 build
2
+ > @prosopo/config@3.3.8 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/config@3.3.6 build:cross-env
6
+ > @prosopo/config@3.3.8 build:cross-env
7
7
  > vite build --config vite.esm.config.ts --mode production
8
8
 
9
9
  ViteEsmConfig: .
@@ -13,7 +13,7 @@ ViteEsmConfig: .
13
13
  vite v8.1.5 building ssr environment for production...
14
14
  Bundle build started
15
15
  
16
- ✓ 19 modules transformed.
16
+ ✓ 20 modules transformed.
17
17
  rendering chunks...
18
18
  computing gzip size...
19
19
  dist/webpack/index.js 0.01 kB │ gzip: 0.03 kB
@@ -23,17 +23,18 @@ dist/vite/TsNoCheckPlugin.js 0.36 kB │ gzip: 0.23
23
23
  dist/vite/vite-plugin-fix-absolute-imports.js 0.59 kB │ gzip: 0.33 kB
24
24
  dist/vite/vite-plugin-externalize-obfuscator-deadcode.js 0.69 kB │ gzip: 0.38 kB
25
25
  dist/vite/vite-plugin-copy.js 1.22 kB │ gzip: 0.57 kB
26
+ dist/vite/vite-plugin-modify-exports-files.js 1.33 kB │ gzip: 0.70 kB
26
27
  dist/vite/vite-plugin-close-and-copy.js 1.46 kB │ gzip: 0.61 kB
27
- dist/vite/index.js 1.47 kB │ gzip: 0.40 kB
28
- dist/index.js 1.77 kB │ gzip: 0.48 kB
28
+ dist/vite/index.js 1.61 kB │ gzip: 0.44 kB
29
29
  dist/vite/vite.esm.config.js 1.90 kB │ gzip: 0.84 kB
30
+ dist/index.js 1.91 kB │ gzip: 0.51 kB
30
31
  dist/vite/vite.commonjs.config.js 2.00 kB │ gzip: 0.90 kB
31
32
  dist/vite/vite-plugin-remove-unused-translations.js 2.03 kB │ gzip: 0.92 kB
32
33
  dist/vite/vite.threads.test.config.js 2.19 kB │ gzip: 0.94 kB
33
- dist/vite/vite.test.config.js 2.24 kB │ gzip: 0.95 kB
34
+ dist/vite/vite.test.config.js 2.29 kB │ gzip: 0.96 kB
34
35
  dist/webpack/webpack.config.js 3.08 kB │ gzip: 1.23 kB
35
36
  dist/vite/vite.backend.config.js 3.10 kB │ gzip: 1.27 kB
36
37
  dist/dependencies.js 5.31 kB │ gzip: 1.81 kB
37
- dist/vite/vite.frontend.config.js 5.68 kB │ gzip: 2.19 kB
38
+ dist/vite/vite.frontend.config.js 5.80 kB │ gzip: 2.23 kB
38
39
 
39
- ✓ built in 53ms
40
+ ✓ built in 51ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @prosopo/config
2
2
 
3
+ ## 3.3.8
4
+ ### Patch Changes
5
+
6
+ - bde0cb9: Enable whitespace minification for production frontend bundles.
7
+
8
+ For a `lib` + `es` build, Vite downgrades `build.minify: true` to
9
+ `{ compress: true, mangle: true, codegen: false }`, so bundles shipped compressed
10
+ and mangled but still pretty-printed. Setting `output.minify` explicitly fixes it.
11
+
12
+ On `@prosopo/procaptcha-bundle`, the critical path drops 22.5% raw (658KB → 510KB)
13
+ and 9.6% gzipped. Chunk membership is unchanged. Production builds only.
14
+
15
+ ## 3.3.7
16
+ ### Patch Changes
17
+
18
+ - a6518a1: Add unit tests for the shared build config: dependency resolution, the vite bundle and library configs, the plugin set and the translations plugin. No behaviour changes.
19
+ - 2aabe73: Remove the client-controlled `detectorUnavailable` frictionless bypass. A client could set the flag and be handed a PoW challenge without any detection running. The flag is gone from the wire format, the API client and the widget; the only remaining bypasses are provider-side (maintenance mode, empty detector bundle pool).
20
+
21
+ The frictionless decision machine now gates on payload presence after the access-rule ladder: no token serves a 3-round image captcha, a token without its head hash serves a 2-round one.
22
+
3
23
  ## 3.3.6
4
24
  ### Patch Changes
5
25
 
@@ -13,6 +13,7 @@ const require_vite_commonjs_config = require("./vite/vite.commonjs.config.cjs");
13
13
  const require_vite_esm_config = require("./vite/vite.esm.config.cjs");
14
14
  const require_vite_plugin_remove_unused_translations = require("./vite/vite-plugin-remove-unused-translations.cjs");
15
15
  const require_TsNoCheckPlugin = require("./vite/TsNoCheckPlugin.cjs");
16
+ const require_vite_plugin_modify_exports_files = require("./vite/vite-plugin-modify-exports-files.cjs");
16
17
  exports.ViteBackendConfig = require_vite_backend_config.default;
17
18
  exports.ViteCommonJSConfig = require_vite_commonjs_config.default;
18
19
  exports.ViteEsmConfig = require_vite_esm_config.default;
@@ -21,6 +22,7 @@ exports.VitePluginCloseAndCopy = require_vite_plugin_close_and_copy.default;
21
22
  exports.VitePluginCopy = require_vite_plugin_copy.default;
22
23
  exports.VitePluginExternalizeObfuscatorDeadCode = require_vite_plugin_externalize_obfuscator_deadcode.default;
23
24
  exports.VitePluginFixAbsoluteImports = require_vite_plugin_fix_absolute_imports.default;
25
+ exports.VitePluginModifyExportsFiles = require_vite_plugin_modify_exports_files.default;
24
26
  exports.VitePluginRemoveUnusedTranslations = require_vite_plugin_remove_unused_translations.default;
25
27
  exports.VitePluginSourceMapExclude = require_vite_plugin_sourcemap_exclude.default;
26
28
  exports.ViteTestConfig = require_vite_test_config.default;
@@ -11,6 +11,7 @@ const require_vite_commonjs_config = require("./vite.commonjs.config.cjs");
11
11
  const require_vite_esm_config = require("./vite.esm.config.cjs");
12
12
  const require_vite_plugin_remove_unused_translations = require("./vite-plugin-remove-unused-translations.cjs");
13
13
  const require_TsNoCheckPlugin = require("./TsNoCheckPlugin.cjs");
14
+ const require_vite_plugin_modify_exports_files = require("./vite-plugin-modify-exports-files.cjs");
14
15
  exports.ViteBackendConfig = require_vite_backend_config.default;
15
16
  exports.ViteCommonJSConfig = require_vite_commonjs_config.default;
16
17
  exports.ViteEsmConfig = require_vite_esm_config.default;
@@ -19,6 +20,7 @@ exports.VitePluginCloseAndCopy = require_vite_plugin_close_and_copy.default;
19
20
  exports.VitePluginCopy = require_vite_plugin_copy.default;
20
21
  exports.VitePluginExternalizeObfuscatorDeadCode = require_vite_plugin_externalize_obfuscator_deadcode.default;
21
22
  exports.VitePluginFixAbsoluteImports = require_vite_plugin_fix_absolute_imports.default;
23
+ exports.VitePluginModifyExportsFiles = require_vite_plugin_modify_exports_files.default;
22
24
  exports.VitePluginRemoveUnusedTranslations = require_vite_plugin_remove_unused_translations.default;
23
25
  exports.VitePluginSourceMapExclude = require_vite_plugin_sourcemap_exclude.default;
24
26
  exports.ViteTestConfig = require_vite_test_config.default;
@@ -0,0 +1,43 @@
1
+ //#region src/vite/vite-plugin-modify-exports-files.ts
2
+ /**
3
+ * Empties the generated `exports2.FILES` array in every emitted chunk so that
4
+ * bundled file listings are not leaked into the output.
5
+ */
6
+ var ASSIGNMENT = "exports2.FILES = [";
7
+ var TERMINATOR = "];";
8
+ var REPLACEMENT = "exports2.FILES = [];\n";
9
+ /**
10
+ * Blank every `exports2.FILES = [...]` assignment in a chunk.
11
+ *
12
+ * Done with indexOf rather than a regex: `\[[\s\S]*?\];` backtracks
13
+ * quadratically on a chunk holding many unterminated assignments, and chunk
14
+ * contents are whatever the bundled sources happened to contain. Scanning
15
+ * forward is linear regardless.
16
+ */
17
+ var emptyExportsFiles = (code) => {
18
+ let out = "";
19
+ let cursor = 0;
20
+ for (;;) {
21
+ const start = code.indexOf(ASSIGNMENT, cursor);
22
+ if (start === -1) break;
23
+ const end = code.indexOf(TERMINATOR, start + 18);
24
+ if (end === -1) break;
25
+ out += code.slice(cursor, start) + REPLACEMENT;
26
+ cursor = end + 2;
27
+ }
28
+ return out + code.slice(cursor);
29
+ };
30
+ function modifyExportsFilesPlugin() {
31
+ return {
32
+ name: "modify-exports-files",
33
+ generateBundle(_options, bundle) {
34
+ for (const fileName in bundle) {
35
+ const chunk = bundle[fileName];
36
+ if (chunk && chunk.type === "chunk") chunk.code = emptyExportsFiles(chunk.code);
37
+ }
38
+ }
39
+ };
40
+ }
41
+ //#endregion
42
+ exports.default = modifyExportsFilesPlugin;
43
+ exports.emptyExportsFiles = emptyExportsFiles;
@@ -127,7 +127,12 @@ async function vite_frontend_config_default(packageName, bundleName, dir, entry,
127
127
  watch: false,
128
128
  output: {
129
129
  dir: node_path.default.resolve(dir, "dist/bundle"),
130
- entryFileNames: `${bundleName}.bundle.js`
130
+ entryFileNames: `${bundleName}.bundle.js`,
131
+ ...isProduction ? { minify: {
132
+ compress: true,
133
+ mangle: true,
134
+ codegen: true
135
+ } } : {}
131
136
  },
132
137
  plugins: [
133
138
  (0, rollup_plugin_import_css.default)(),
@@ -29,7 +29,9 @@ function vite_test_config_default(tsConfigPath) {
29
29
  "src/**/*.test.ts",
30
30
  "src/**/*.spec.ts",
31
31
  "src/**/*.test.tsx",
32
- "src/**/*.spec.tsx"
32
+ "src/**/*.spec.tsx",
33
+ "src/**/*.test-d.ts",
34
+ "src/**/*.test-d.tsx"
33
35
  ] : [
34
36
  "**/tests/**/*",
35
37
  "**/*.d.ts",
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dependencies.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.test.d.ts","sourceRoot":"","sources":["../src/dependencies.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,160 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
+ import { filterDependencies, getExternalsFromReferences, getTsConfigs, } from "./dependencies.js";
6
+ let root;
7
+ const writeProject = (dir, references, packageName) => {
8
+ const absolute = path.join(root, dir);
9
+ fs.mkdirSync(absolute, { recursive: true });
10
+ const tsConfigPath = path.join(absolute, "tsconfig.json");
11
+ fs.writeFileSync(tsConfigPath, JSON.stringify({ references: references.map((p) => ({ path: p })) }));
12
+ if (packageName) {
13
+ fs.writeFileSync(path.join(absolute, "package.json"), JSON.stringify({ name: packageName }));
14
+ }
15
+ return tsConfigPath;
16
+ };
17
+ beforeEach(() => {
18
+ root = fs.mkdtempSync(path.join(os.tmpdir(), "prosopo-config-test-"));
19
+ });
20
+ afterEach(() => {
21
+ fs.rmSync(root, { recursive: true, force: true });
22
+ });
23
+ describe("getTsConfigs", () => {
24
+ it("returns just the starting config when it has no references", () => {
25
+ const entry = writeProject("a", []);
26
+ expect(getTsConfigs(entry)).toEqual([entry]);
27
+ });
28
+ it("returns nothing when the starting config is excluded and has no references", () => {
29
+ const entry = writeProject("a", []);
30
+ expect(getTsConfigs(entry, [], [], false)).toEqual([]);
31
+ });
32
+ it("walks references transitively", () => {
33
+ const c = writeProject("c", []);
34
+ const b = writeProject("b", ["../c"]);
35
+ const a = writeProject("a", ["../b"]);
36
+ expect(getTsConfigs(a, [/nothing-matches/], []).sort()).toEqual([a, b, c].sort());
37
+ });
38
+ it("skips references matching an ignore pattern, and everything under them", () => {
39
+ writeProject("keep", []);
40
+ writeProject("skip", []);
41
+ const a = writeProject("a", ["../keep/", "../skip/"]);
42
+ expect(getTsConfigs(a, [/skip/], [])).toEqual([
43
+ a,
44
+ path.join(root, "keep", "tsconfig.json"),
45
+ ]);
46
+ });
47
+ it("builds the ignore expression from the stringified patterns, delimiters included", () => {
48
+ writeProject("skip", []);
49
+ const a = writeProject("a", ["../skip"]);
50
+ expect(getTsConfigs(a, [/skip/], [])).toHaveLength(2);
51
+ });
52
+ it("drops every reference when no ignore pattern is given", () => {
53
+ writeProject("b", []);
54
+ const a = writeProject("a", ["../b"]);
55
+ expect(getTsConfigs(a)).toEqual([a]);
56
+ });
57
+ it("appends tsconfig.json to a reference that names a directory", () => {
58
+ writeProject("b", []);
59
+ const a = writeProject("a", ["../b"]);
60
+ expect(getTsConfigs(a, [/\.\./], [])).toContain(path.join(root, "b", "tsconfig.json"));
61
+ });
62
+ it("honours a reference that names a config file explicitly", () => {
63
+ fs.mkdirSync(path.join(root, "b"), { recursive: true });
64
+ const explicit = path.join(root, "b", "tsconfig.build.json");
65
+ fs.writeFileSync(explicit, JSON.stringify({ references: [] }));
66
+ const a = writeProject("a", ["../b/tsconfig.build.json"]);
67
+ expect(getTsConfigs(a, [/\.\./], [])).toContain(explicit);
68
+ });
69
+ it("does not loop forever on a reference cycle", () => {
70
+ const a = path.join(root, "a", "tsconfig.json");
71
+ const b = path.join(root, "b", "tsconfig.json");
72
+ writeProject("a", ["../b"]);
73
+ writeProject("b", ["../a"]);
74
+ expect(getTsConfigs(a, [/\.\./], []).sort()).toEqual([a, b].sort());
75
+ });
76
+ it("visits a diamond dependency only once", () => {
77
+ writeProject("d", []);
78
+ writeProject("b", ["../d"]);
79
+ writeProject("c", ["../d"]);
80
+ const a = writeProject("a", ["../b", "../c"]);
81
+ const result = getTsConfigs(a, [/\.\./], []);
82
+ expect(new Set(result).size).toBe(result.length);
83
+ expect(result).toHaveLength(4);
84
+ });
85
+ it("keeps configs that were already accumulated", () => {
86
+ const existing = "/already/seen/tsconfig.json";
87
+ const a = writeProject("a", []);
88
+ expect(getTsConfigs(a, [], [existing])).toEqual([existing, a]);
89
+ });
90
+ it("returns the accumulator untouched when the config was already seen", () => {
91
+ const a = writeProject("a", []);
92
+ expect(getTsConfigs(a, [], [a])).toEqual([a]);
93
+ });
94
+ it("throws for a config path that does not exist", () => {
95
+ expect(() => getTsConfigs(path.join(root, "missing.json"))).toThrow();
96
+ });
97
+ it("throws for a config that is not valid JSON", () => {
98
+ const broken = path.join(root, "broken.json");
99
+ fs.writeFileSync(broken, "{ not json");
100
+ expect(() => getTsConfigs(broken)).toThrow();
101
+ });
102
+ });
103
+ describe("getExternalsFromReferences", () => {
104
+ it("returns the package name of every referenced project", async () => {
105
+ writeProject("b", [], "@prosopo/b");
106
+ writeProject("c", [], "@prosopo/c");
107
+ const a = writeProject("a", ["../b", "../c"], "@prosopo/a");
108
+ await expect(getExternalsFromReferences(a, [/\.\./])).resolves.toEqual([
109
+ "@prosopo/b",
110
+ "@prosopo/c",
111
+ ]);
112
+ });
113
+ it("returns nothing when there are no followed references", async () => {
114
+ const a = writeProject("a", [], "@prosopo/a");
115
+ await expect(getExternalsFromReferences(a)).resolves.toEqual([]);
116
+ });
117
+ it("rejects when a referenced project has no package.json", async () => {
118
+ writeProject("b", []);
119
+ const a = writeProject("a", ["../b"], "@prosopo/a");
120
+ await expect(getExternalsFromReferences(a, [/\.\./])).rejects.toBeDefined();
121
+ });
122
+ });
123
+ describe("filterDependencies", () => {
124
+ it("splits on the filter patterns, sorted", () => {
125
+ expect(filterDependencies(["zod", "@prosopo/util", "axios"], ["@prosopo"])).toEqual({
126
+ internal: ["axios", "zod"],
127
+ external: ["@prosopo/util"],
128
+ });
129
+ });
130
+ it("treats the filters as alternatives in a single expression", () => {
131
+ expect(filterDependencies(["a-one", "b-two", "c-three"], ["one", "two"])).toEqual({ internal: ["c-three"], external: ["a-one", "b-two"] });
132
+ });
133
+ it("deduplicates before splitting", () => {
134
+ expect(filterDependencies(["zod", "zod", "zod"], ["nope"]).internal).toEqual(["zod"]);
135
+ });
136
+ it("drops empty strings", () => {
137
+ expect(filterDependencies(["", "zod", ""], ["nope"])).toEqual({
138
+ internal: ["zod"],
139
+ external: [],
140
+ });
141
+ });
142
+ it("returns two empty lists for no dependencies", () => {
143
+ expect(filterDependencies([], ["@prosopo"])).toEqual({
144
+ internal: [],
145
+ external: [],
146
+ });
147
+ });
148
+ it("puts everything in external when a filter matches all", () => {
149
+ expect(filterDependencies(["a", "b"], [""]).external).toEqual(["a", "b"]);
150
+ });
151
+ it("puts everything in internal when no filter is supplied", () => {
152
+ expect(filterDependencies(["a", "b"], []).external).toEqual(["a", "b"]);
153
+ });
154
+ it("does not mutate the input", () => {
155
+ const deps = ["zod", "axios"];
156
+ filterDependencies(deps, ["zod"]);
157
+ expect(deps).toEqual(["zod", "axios"]);
158
+ });
159
+ });
160
+ //# sourceMappingURL=dependencies.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.test.js","sourceRoot":"","sources":["../src/dependencies.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getDependencies.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDependencies.test.d.ts","sourceRoot":"","sources":["../src/getDependencies.test.ts"],"names":[],"mappings":""}