@prosopo/config 3.3.7 → 3.3.9

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @prosopo/config@3.3.7 build:cjs
2
+ > @prosopo/config@3.3.9 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
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.89 kB │ gzip: 2.40 kB
34
35
 
35
- ✓ built in 67ms
36
+ ✓ built in 60ms
@@ -1,11 +1,11 @@
1
1
 
2
- > @prosopo/config@3.3.7 build:tsc
2
+ > @prosopo/config@3.3.9 build:tsc
3
3
  > tsc --build --verbose
4
4
 
5
- 1:56:26 PM - Projects in this build:
5
+ 8:00:57 PM - Projects in this build:
6
6
  * tsconfig.json
7
7
 
8
- 1:56:27 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
8
+ 8:00:57 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
9
9
 
10
- 1:56:27 PM - Building project '/home/runner/work/captcha/captcha/dev/config/tsconfig.json'...
10
+ 8:00:57 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.7 build
2
+ > @prosopo/config@3.3.9 build
3
3
  > npm run build:cross-env -- --mode ${NODE_ENV:-development}
4
4
 
5
5
 
6
- > @prosopo/config@3.3.7 build:cross-env
6
+ > @prosopo/config@3.3.9 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,10 +23,11 @@ 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
@@ -34,6 +35,6 @@ dist/vite/vite.test.config.js 2.29 kB │ gzip: 0.96
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.91 kB │ gzip: 2.27 kB
38
39
 
39
- ✓ built in 53ms
40
+ ✓ built in 46ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,58 @@
1
1
  # @prosopo/config
2
2
 
3
+ ## 3.3.9
4
+ ### Patch Changes
5
+
6
+ - e46e0bd: Keep the server-only i18next backend out of frontend bundles.
7
+
8
+ `i18next-fs-backend` has been on the frontend config's exclusion list for a long
9
+ time, but it was still being bundled. `external` only ever matches a specifier
10
+ exactly, and `i18nBackend.ts` imports the subpath `i18next-fs-backend/cjs`
11
+ (i18next/i18next-fs-backend#57), which is a different string. So the fs backend
12
+ shipped in the browser artifact along with its YAML, JSON5 and JSONC parsers.
13
+ `i18next-http-middleware` — Express request handling — was never on the list at
14
+ all.
15
+
16
+ The subpath is now listed literally, and `i18next-http-middleware` joins the
17
+ exclusion list.
18
+
19
+ Both are listed one by one rather than by matching `pkg/*` against the whole
20
+ exclusion list. That broader rule looks tidier but is wrong: the `vite` filter
21
+ is a substring match, so it also selects `vite-plugin-node-polyfills`, and
22
+ `vite-plugin-node-polyfills/shims/process` is injected into the served and IIFE
23
+ bundles as a bare import. Externalising it leaves the browser unable to resolve
24
+ the specifier and the widget dies on load.
25
+
26
+ Measured on `@prosopo/procaptcha-bundle`, production mode:
27
+
28
+ | | before | after |
29
+ | --- | --- | --- |
30
+ | `i18nBackend` chunk, raw | 153,593 | 788 |
31
+ | all chunks, raw | 1,247,449 | 1,094,644 (−12.2%) |
32
+ | all chunks, gzip | 474,695 | 434,408 (−8.5%) |
33
+
34
+ This is not a first-paint change — the critical path is unchanged, because the
35
+ chunk is only reachable through `loadI18next(true)` and the widget always calls
36
+ `loadI18next(false, language)`. It is dead weight in the published artifact.
37
+
38
+ No browser behaviour can regress: that chunk already imported `node:path`, which
39
+ is already external, so it was never loadable in a browser to begin with. The
40
+ i18next packages the browser does use — `http-backend`,
41
+ `browser-languagedetector`, `chained-backend`, `resources-to-backend` — are
42
+ unaffected and still bundled.
43
+
44
+ ## 3.3.8
45
+ ### Patch Changes
46
+
47
+ - bde0cb9: Enable whitespace minification for production frontend bundles.
48
+
49
+ For a `lib` + `es` build, Vite downgrades `build.minify: true` to
50
+ `{ compress: true, mangle: true, codegen: false }`, so bundles shipped compressed
51
+ and mangled but still pretty-printed. Setting `output.minify` explicitly fixes it.
52
+
53
+ On `@prosopo/procaptcha-bundle`, the critical path drops 22.5% raw (658KB → 510KB)
54
+ and 9.6% gzipped. Chunk membership is unchanged. Production builds only.
55
+
3
56
  ## 3.3.7
4
57
  ### Patch Changes
5
58
 
@@ -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;
@@ -50,13 +50,16 @@ async function vite_frontend_config_default(packageName, bundleName, dir, entry,
50
50
  "aws",
51
51
  "webpack",
52
52
  "vite",
53
- "i18next-fs-backend"
53
+ "i18next-fs-backend",
54
+ "i18next-http-middleware"
54
55
  ]);
56
+ const serverOnlySubpaths = ["i18next-fs-backend/cjs"];
55
57
  const allExternal = [
56
58
  ...node_module.builtinModules,
57
59
  ...node_module.builtinModules.map((m) => `node:${m}`),
58
60
  ...external,
59
- ...optionalPeerDependencies
61
+ ...optionalPeerDependencies,
62
+ ...serverOnlySubpaths
60
63
  ];
61
64
  console.debug(`Bundling. ${JSON.stringify(internal.slice(0, 10), null, 2)}... ${internal.length} deps`);
62
65
  const proto = RegExp.prototype;
@@ -127,7 +130,12 @@ async function vite_frontend_config_default(packageName, bundleName, dir, entry,
127
130
  watch: false,
128
131
  output: {
129
132
  dir: node_path.default.resolve(dir, "dist/bundle"),
130
- entryFileNames: `${bundleName}.bundle.js`
133
+ entryFileNames: `${bundleName}.bundle.js`,
134
+ ...isProduction ? { minify: {
135
+ compress: true,
136
+ mangle: true,
137
+ codegen: true
138
+ } } : {}
131
139
  },
132
140
  plugins: [
133
141
  (0, rollup_plugin_import_css.default)(),
package/dist/index.js CHANGED
@@ -13,4 +13,5 @@ import vite_commonjs_config_default from "./vite/vite.commonjs.config.js";
13
13
  import vite_esm_config_default from "./vite/vite.esm.config.js";
14
14
  import VitePluginRemoveUnusedTranslations from "./vite/vite-plugin-remove-unused-translations.js";
15
15
  import { tsNoCheckPlugin } from "./vite/TsNoCheckPlugin.js";
16
- export { vite_backend_config_default as ViteBackendConfig, vite_commonjs_config_default as ViteCommonJSConfig, vite_esm_config_default as ViteEsmConfig, vite_frontend_config_default as ViteFrontendConfig, VitePluginCloseAndCopy, VitePluginCopy, VitePluginExternalizeObfuscatorDeadCode, VitePluginFixAbsoluteImports, VitePluginRemoveUnusedTranslations, VitePluginSourcemapExclude as VitePluginSourceMapExclude, vite_test_config_default as ViteTestConfig, vite_threads_test_config_default as ViteThreadsTestConfig, filterDependencies, getDependencies, getExternalsFromReferences, getTsConfigs, tsNoCheckPlugin };
16
+ import modifyExportsFilesPlugin from "./vite/vite-plugin-modify-exports-files.js";
17
+ export { vite_backend_config_default as ViteBackendConfig, vite_commonjs_config_default as ViteCommonJSConfig, vite_esm_config_default as ViteEsmConfig, vite_frontend_config_default as ViteFrontendConfig, VitePluginCloseAndCopy, VitePluginCopy, VitePluginExternalizeObfuscatorDeadCode, VitePluginFixAbsoluteImports, modifyExportsFilesPlugin as VitePluginModifyExportsFiles, VitePluginRemoveUnusedTranslations, VitePluginSourcemapExclude as VitePluginSourceMapExclude, vite_test_config_default as ViteTestConfig, vite_threads_test_config_default as ViteThreadsTestConfig, filterDependencies, getDependencies, getExternalsFromReferences, getTsConfigs, tsNoCheckPlugin };
@@ -11,4 +11,5 @@ export { default as ViteEsmConfig } from "./vite.esm.config.js";
11
11
  export { default as VitePluginRemoveUnusedTranslations } from "./vite-plugin-remove-unused-translations.js";
12
12
  export * from "./TsNoCheckPlugin.js";
13
13
  export { default as VitePluginCopy } from "./vite-plugin-copy.js";
14
+ export { default as VitePluginModifyExportsFiles } from "./vite-plugin-modify-exports-files.js";
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,uCAAuC,EAAE,MAAM,kDAAkD,CAAC;AACtH,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAChG,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AAC5G,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,uCAAuC,EAAE,MAAM,kDAAkD,CAAC;AACtH,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAChG,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AAC5G,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,uCAAuC,CAAC"}
@@ -11,4 +11,5 @@ import vite_commonjs_config_default from "./vite.commonjs.config.js";
11
11
  import vite_esm_config_default from "./vite.esm.config.js";
12
12
  import VitePluginRemoveUnusedTranslations from "./vite-plugin-remove-unused-translations.js";
13
13
  import { tsNoCheckPlugin } from "./TsNoCheckPlugin.js";
14
- export { vite_backend_config_default as ViteBackendConfig, vite_commonjs_config_default as ViteCommonJSConfig, vite_esm_config_default as ViteEsmConfig, vite_frontend_config_default as ViteFrontendConfig, VitePluginCloseAndCopy, VitePluginCopy, VitePluginExternalizeObfuscatorDeadCode, VitePluginFixAbsoluteImports, VitePluginRemoveUnusedTranslations, VitePluginSourcemapExclude as VitePluginSourceMapExclude, vite_test_config_default as ViteTestConfig, vite_threads_test_config_default as ViteThreadsTestConfig, tsNoCheckPlugin };
14
+ import modifyExportsFilesPlugin from "./vite-plugin-modify-exports-files.js";
15
+ export { vite_backend_config_default as ViteBackendConfig, vite_commonjs_config_default as ViteCommonJSConfig, vite_esm_config_default as ViteEsmConfig, vite_frontend_config_default as ViteFrontendConfig, VitePluginCloseAndCopy, VitePluginCopy, VitePluginExternalizeObfuscatorDeadCode, VitePluginFixAbsoluteImports, modifyExportsFilesPlugin as VitePluginModifyExportsFiles, VitePluginRemoveUnusedTranslations, VitePluginSourcemapExclude as VitePluginSourceMapExclude, vite_test_config_default as ViteTestConfig, vite_threads_test_config_default as ViteThreadsTestConfig, tsNoCheckPlugin };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,uCAAuC,EAAE,MAAM,kDAAkD,CAAC;AACtH,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAChG,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AAC5G,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,uCAAuC,EAAE,MAAM,kDAAkD,CAAC;AACtH,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAChG,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,kCAAkC,EAAE,MAAM,6CAA6C,CAAC;AAC5G,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=modifyExportsFiles.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modifyExportsFiles.test.d.ts","sourceRoot":"","sources":["../../src/vite/modifyExportsFiles.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { emptyExportsFiles } from "./vite-plugin-modify-exports-files.js";
3
+ describe("emptyExportsFiles", () => {
4
+ test("empties an assignment and keeps the code around it", () => {
5
+ expect(emptyExportsFiles('a();\nexports2.FILES = ["a.js", "b.js"];\nb();')).toBe("a();\nexports2.FILES = [];\n\nb();");
6
+ });
7
+ test("empties every assignment, not just the first", () => {
8
+ const out = emptyExportsFiles('exports2.FILES = ["a"];exports2.FILES = ["b"];');
9
+ expect(out).toBe("exports2.FILES = [];\nexports2.FILES = [];\n");
10
+ });
11
+ test("spans newlines, as a formatted listing does", () => {
12
+ expect(emptyExportsFiles('exports2.FILES = [\n\t"a.js"\n];')).toBe("exports2.FILES = [];\n");
13
+ });
14
+ test("leaves code with no assignment untouched", () => {
15
+ expect(emptyExportsFiles("const FILES = [];")).toBe("const FILES = [];");
16
+ });
17
+ test("leaves an unterminated assignment alone rather than truncating", () => {
18
+ const code = 'exports2.FILES = ["a.js"';
19
+ expect(emptyExportsFiles(code)).toBe(code);
20
+ });
21
+ test("stays linear on many unterminated assignments", () => {
22
+ const code = "exports2.FILES = [".repeat(20000);
23
+ const started = performance.now();
24
+ expect(emptyExportsFiles(code)).toBe(code);
25
+ expect(performance.now() - started).toBeLessThan(1000);
26
+ });
27
+ });
28
+ //# sourceMappingURL=modifyExportsFiles.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modifyExportsFiles.test.js","sourceRoot":"","sources":["../../src/vite/modifyExportsFiles.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAE1E,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC/D,MAAM,CACL,iBAAiB,CAAC,gDAAgD,CAAC,CACnE,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACzD,MAAM,GAAG,GAAG,iBAAiB,CAC5B,gDAAgD,CAChD,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACxD,MAAM,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,CAAC,CAAC,IAAI,CACjE,wBAAwB,CACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;QAE3E,MAAM,IAAI,GAAG,0BAA0B,CAAC;QACxC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;QAG1D,MAAM,IAAI,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from "vite";
2
+ export declare const emptyExportsFiles: (code: string) => string;
3
+ export default function modifyExportsFilesPlugin(): Plugin;
4
+ //# sourceMappingURL=vite-plugin-modify-exports-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-plugin-modify-exports-files.d.ts","sourceRoot":"","sources":["../../src/vite/vite-plugin-modify-exports-files.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAkBnC,eAAO,MAAM,iBAAiB,SAAU,MAAM,KAAG,MAkBhD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,wBAAwB,IAAI,MAAM,CAYzD"}
@@ -0,0 +1,42 @@
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
+ export { modifyExportsFilesPlugin as default, emptyExportsFiles };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite-plugin-modify-exports-files.js","sourceRoot":"","sources":["../../src/vite/vite-plugin-modify-exports-files.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,GAAG,oBAAoB,CAAC;AACxC,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAU7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAU,EAAE;IACzD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,SAAS,CAAC;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM;QACP,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAChE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YAGhB,MAAM;QACP,CAAC;QACD,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC;QAC/C,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,wBAAwB;IAC/C,OAAO;QACN,IAAI,EAAE,sBAAsB;QAC5B,cAAc,CAAC,QAAQ,EAAE,MAAM;YAC9B,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrC,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACF,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"vite.frontend.config.d.ts","sourceRoot":"","sources":["../../src/vite/vite.frontend.config.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAIvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAG1E,yBACC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,kBAAkB,EAChC,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,aAAa,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,CAAC,CAuPrB"}
1
+ {"version":3,"file":"vite.frontend.config.d.ts","sourceRoot":"","sources":["../../src/vite/vite.frontend.config.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAIvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAG1E,yBACC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,kBAAkB,EAChC,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,aAAa,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,CAAC,CA8RrB"}
@@ -44,13 +44,16 @@ async function vite_frontend_config_default(packageName, bundleName, dir, entry,
44
44
  "aws",
45
45
  "webpack",
46
46
  "vite",
47
- "i18next-fs-backend"
47
+ "i18next-fs-backend",
48
+ "i18next-http-middleware"
48
49
  ]);
50
+ const serverOnlySubpaths = ["i18next-fs-backend/cjs"];
49
51
  const allExternal = [
50
52
  ...builtinModules,
51
53
  ...builtinModules.map((m) => `node:${m}`),
52
54
  ...external,
53
- ...optionalPeerDependencies
55
+ ...optionalPeerDependencies,
56
+ ...serverOnlySubpaths
54
57
  ];
55
58
  console.debug(`Bundling. ${JSON.stringify(internal.slice(0, 10), null, 2)}... ${internal.length} deps`);
56
59
  const proto = RegExp.prototype;
@@ -121,7 +124,12 @@ async function vite_frontend_config_default(packageName, bundleName, dir, entry,
121
124
  watch: false,
122
125
  output: {
123
126
  dir: path.resolve(dir, "dist/bundle"),
124
- entryFileNames: `${bundleName}.bundle.js`
127
+ entryFileNames: `${bundleName}.bundle.js`,
128
+ ...isProduction ? { minify: {
129
+ compress: true,
130
+ mangle: true,
131
+ codegen: true
132
+ } } : {}
125
133
  },
126
134
  plugins: [
127
135
  css(),
@@ -1 +1 @@
1
- {"version":3,"file":"vite.frontend.config.js","sourceRoot":"","sources":["../../src/vite/vite.frontend.config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite.frontend.config.js","sourceRoot":"","sources":["../../src/vite/vite.frontend.config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/config",
3
- "version": "3.3.7",
3
+ "version": "3.3.9",
4
4
  "description": "Prosopo config library",
5
5
  "type": "module",
6
6
  "scripts": {
package/src/vite/index.ts CHANGED
@@ -24,3 +24,4 @@ export { default as ViteEsmConfig } from "./vite.esm.config.js";
24
24
  export { default as VitePluginRemoveUnusedTranslations } from "./vite-plugin-remove-unused-translations.js";
25
25
  export * from "./TsNoCheckPlugin.js";
26
26
  export { default as VitePluginCopy } from "./vite-plugin-copy.js";
27
+ export { default as VitePluginModifyExportsFiles } from "./vite-plugin-modify-exports-files.js";
@@ -0,0 +1,56 @@
1
+ // Copyright 2021-2026 Prosopo (UK) Ltd.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ import { describe, expect, test } from "vitest";
16
+ import { emptyExportsFiles } from "./vite-plugin-modify-exports-files.js";
17
+
18
+ describe("emptyExportsFiles", () => {
19
+ test("empties an assignment and keeps the code around it", () => {
20
+ expect(
21
+ emptyExportsFiles('a();\nexports2.FILES = ["a.js", "b.js"];\nb();'),
22
+ ).toBe("a();\nexports2.FILES = [];\n\nb();");
23
+ });
24
+
25
+ test("empties every assignment, not just the first", () => {
26
+ const out = emptyExportsFiles(
27
+ 'exports2.FILES = ["a"];exports2.FILES = ["b"];',
28
+ );
29
+ expect(out).toBe("exports2.FILES = [];\nexports2.FILES = [];\n");
30
+ });
31
+
32
+ test("spans newlines, as a formatted listing does", () => {
33
+ expect(emptyExportsFiles('exports2.FILES = [\n\t"a.js"\n];')).toBe(
34
+ "exports2.FILES = [];\n",
35
+ );
36
+ });
37
+
38
+ test("leaves code with no assignment untouched", () => {
39
+ expect(emptyExportsFiles("const FILES = [];")).toBe("const FILES = [];");
40
+ });
41
+
42
+ test("leaves an unterminated assignment alone rather than truncating", () => {
43
+ // Cutting to the end of the chunk here would delete real code.
44
+ const code = 'exports2.FILES = ["a.js"';
45
+ expect(emptyExportsFiles(code)).toBe(code);
46
+ });
47
+
48
+ test("stays linear on many unterminated assignments", () => {
49
+ // The regex this replaced backtracked quadratically on exactly this
50
+ // shape, which is what CodeQL flagged.
51
+ const code = "exports2.FILES = [".repeat(20000);
52
+ const started = performance.now();
53
+ expect(emptyExportsFiles(code)).toBe(code);
54
+ expect(performance.now() - started).toBeLessThan(1000);
55
+ });
56
+ });
@@ -0,0 +1,64 @@
1
+ // Copyright 2021-2026 Prosopo (UK) Ltd.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ import type { Plugin } from "vite";
15
+
16
+ /**
17
+ * Empties the generated `exports2.FILES` array in every emitted chunk so that
18
+ * bundled file listings are not leaked into the output.
19
+ */
20
+ const ASSIGNMENT = "exports2.FILES = [";
21
+ const TERMINATOR = "];";
22
+ const REPLACEMENT = "exports2.FILES = [];\n";
23
+
24
+ /**
25
+ * Blank every `exports2.FILES = [...]` assignment in a chunk.
26
+ *
27
+ * Done with indexOf rather than a regex: `\[[\s\S]*?\];` backtracks
28
+ * quadratically on a chunk holding many unterminated assignments, and chunk
29
+ * contents are whatever the bundled sources happened to contain. Scanning
30
+ * forward is linear regardless.
31
+ */
32
+ export const emptyExportsFiles = (code: string): string => {
33
+ let out = "";
34
+ let cursor = 0;
35
+ for (;;) {
36
+ const start = code.indexOf(ASSIGNMENT, cursor);
37
+ if (start === -1) {
38
+ break;
39
+ }
40
+ const end = code.indexOf(TERMINATOR, start + ASSIGNMENT.length);
41
+ if (end === -1) {
42
+ // Unterminated: leave it and everything after it alone rather than
43
+ // truncating the chunk.
44
+ break;
45
+ }
46
+ out += code.slice(cursor, start) + REPLACEMENT;
47
+ cursor = end + TERMINATOR.length;
48
+ }
49
+ return out + code.slice(cursor);
50
+ };
51
+
52
+ export default function modifyExportsFilesPlugin(): Plugin {
53
+ return {
54
+ name: "modify-exports-files",
55
+ generateBundle(_options, bundle) {
56
+ for (const fileName in bundle) {
57
+ const chunk = bundle[fileName];
58
+ if (chunk && chunk.type === "chunk") {
59
+ chunk.code = emptyExportsFiles(chunk.code);
60
+ }
61
+ }
62
+ },
63
+ };
64
+ }