@intlayer/config 8.6.4 → 8.6.5

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 (35) hide show
  1. package/dist/cjs/bundle/index.cjs +130 -0
  2. package/dist/cjs/bundle/index.cjs.map +1 -0
  3. package/dist/cjs/bundle/logBundle.cjs +79 -0
  4. package/dist/cjs/bundle/logBundle.cjs.map +1 -0
  5. package/dist/cjs/envVars/envVars.cjs +10 -11
  6. package/dist/cjs/envVars/envVars.cjs.map +1 -1
  7. package/dist/cjs/node.cjs +0 -4
  8. package/dist/cjs/utils/index.cjs +0 -4
  9. package/dist/esm/bundle/index.mjs +126 -0
  10. package/dist/esm/bundle/index.mjs.map +1 -0
  11. package/dist/esm/bundle/logBundle.mjs +78 -0
  12. package/dist/esm/bundle/logBundle.mjs.map +1 -0
  13. package/dist/esm/envVars/envVars.mjs +10 -11
  14. package/dist/esm/envVars/envVars.mjs.map +1 -1
  15. package/dist/esm/node.mjs +1 -2
  16. package/dist/esm/utils/cacheDisk.mjs +4 -4
  17. package/dist/esm/utils/cacheDisk.mjs.map +1 -1
  18. package/dist/esm/utils/index.mjs +1 -2
  19. package/dist/types/bundle/index.d.ts +23 -0
  20. package/dist/types/bundle/index.d.ts.map +1 -0
  21. package/dist/types/bundle/logBundle.d.ts +23 -0
  22. package/dist/types/bundle/logBundle.d.ts.map +1 -0
  23. package/dist/types/configFile/configurationSchema.d.ts +9 -9
  24. package/dist/types/configFile/index.d.ts +1 -1
  25. package/dist/types/envVars/envVars.d.ts +2 -2
  26. package/dist/types/envVars/envVars.d.ts.map +1 -1
  27. package/dist/types/node.d.ts +2 -3
  28. package/dist/types/utils/index.d.ts +1 -2
  29. package/package.json +10 -2
  30. package/dist/cjs/utils/importMap.cjs +0 -73
  31. package/dist/cjs/utils/importMap.cjs.map +0 -1
  32. package/dist/esm/utils/importMap.mjs +0 -70
  33. package/dist/esm/utils/importMap.mjs.map +0 -1
  34. package/dist/types/utils/importMap.d.ts +0 -85
  35. package/dist/types/utils/importMap.d.ts.map +0 -1
@@ -0,0 +1,130 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
3
+ const require_utils_alias = require('../utils/alias.cjs');
4
+ const require_configFile_getConfiguration = require('../configFile/getConfiguration.cjs');
5
+ const require_envVars_envVars = require('../envVars/envVars.cjs');
6
+ const require_bundle_logBundle = require('./logBundle.cjs');
7
+ let node_path = require("node:path");
8
+ let node_fs_promises = require("node:fs/promises");
9
+ let _intlayer_types_package_json = require("@intlayer/types/package.json");
10
+ _intlayer_types_package_json = require_runtime.__toESM(_intlayer_types_package_json);
11
+ let esbuild = require("esbuild");
12
+ let node_child_process = require("node:child_process");
13
+ let node_util = require("node:util");
14
+
15
+ //#region src/bundle/index.ts
16
+ const execAsync = (0, node_util.promisify)(node_child_process.exec);
17
+ const packageList = [
18
+ "next-intlayer",
19
+ "react-intlayer",
20
+ "vue-intlayer",
21
+ "svelte-intlayer",
22
+ "preact-intlayer",
23
+ "solid-intlayer",
24
+ "angular-intlayer",
25
+ "lit-intlayer",
26
+ "express-intlayer",
27
+ "hono-intlayer",
28
+ "fastify-intlayer",
29
+ "adonis-intlayer",
30
+ "vanilla-intlayer",
31
+ "intlayer"
32
+ ];
33
+ const defaultVersion = _intlayer_types_package_json.default.version;
34
+ /**
35
+ * Bundle the application content using esbuild.
36
+ * It uses the Intlayer configuration to set up aliases and other esbuild options.
37
+ *
38
+ * @param options - Bundle options including entryPoint, outfile, and esbuild options.
39
+ * @returns The build result.
40
+ */
41
+ const bundleIntlayer = async (options) => {
42
+ const { outfile = "intlayer-bundle.js", configOptions, bundlePackages = [...packageList], version = defaultVersion, ...esbuildOptions } = options;
43
+ const intlayerConfig = require_configFile_getConfiguration.getConfiguration(configOptions);
44
+ const logger = new require_bundle_logBundle.BundleLogger(intlayerConfig);
45
+ const alias = require_utils_alias.getAlias({
46
+ configuration: intlayerConfig,
47
+ formatter: (value) => (0, node_path.resolve)(process.cwd(), value)
48
+ });
49
+ const treeShakingDefines = require_envVars_envVars.getConfigEnvVars(intlayerConfig, (key) => `process.env.${key}`, (value) => `"${value}"`);
50
+ const intlayerBundlePlugin = {
51
+ name: "intlayer-bundle-plugin",
52
+ setup(build) {
53
+ const packagesRegex = new RegExp(`^(${bundlePackages.map((packages) => packages.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")})(\\/.*)?$`);
54
+ build.onResolve({ filter: packagesRegex }, () => ({ external: false }));
55
+ build.onResolve({ filter: /^@intlayer\// }, () => ({ external: false }));
56
+ }
57
+ };
58
+ const tempDir = (0, node_path.join)(intlayerConfig.system.tempDir, "intlayer-bundle-tmp");
59
+ logger.setStatus("installing");
60
+ try {
61
+ await (0, node_fs_promises.rm)(tempDir, {
62
+ recursive: true,
63
+ force: true
64
+ });
65
+ await (0, node_fs_promises.mkdir)(tempDir, { recursive: true });
66
+ const deps = Object.fromEntries(bundlePackages.map((pkg) => [pkg, version]));
67
+ await (0, node_fs_promises.writeFile)((0, node_path.join)(tempDir, "package.json"), JSON.stringify({
68
+ dependencies: deps,
69
+ type: "module"
70
+ }));
71
+ let pm = "npm install";
72
+ try {
73
+ await execAsync("bun --version");
74
+ pm = "bun install";
75
+ } catch {}
76
+ await execAsync(pm, { cwd: tempDir });
77
+ const buildOptions = {
78
+ bundle: true,
79
+ outfile: (0, node_path.isAbsolute)(outfile) ? outfile : (0, node_path.join)(process.cwd(), outfile),
80
+ absWorkingDir: tempDir,
81
+ platform: "browser",
82
+ conditions: [
83
+ "browser",
84
+ "module",
85
+ "import",
86
+ "default"
87
+ ],
88
+ minify: true,
89
+ minifyIdentifiers: true,
90
+ treeShaking: true,
91
+ format: "iife",
92
+ ignoreAnnotations: true,
93
+ stdin: {
94
+ contents: bundlePackages.map((packageName) => {
95
+ const globalName = packageName.split("-").map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`).join("");
96
+ return `import * as ${globalName} from '${packageName}';\nif (typeof window !== 'undefined') { window['${globalName}'] = ${globalName}; }`;
97
+ }).join("\n"),
98
+ resolveDir: tempDir
99
+ },
100
+ define: {
101
+ "process.env": "{}",
102
+ ...treeShakingDefines,
103
+ ...esbuildOptions.define
104
+ },
105
+ alias: {
106
+ ...alias,
107
+ ...esbuildOptions.alias
108
+ },
109
+ ...esbuildOptions,
110
+ plugins: [intlayerBundlePlugin, ...esbuildOptions.plugins || []]
111
+ };
112
+ logger.setStatus("bundling");
113
+ const result = await (0, esbuild.build)(buildOptions);
114
+ logger.setStatus("success");
115
+ return result;
116
+ } catch (error) {
117
+ logger.setError(error);
118
+ throw error;
119
+ } finally {
120
+ await (0, node_fs_promises.rm)(tempDir, {
121
+ recursive: true,
122
+ force: true
123
+ });
124
+ }
125
+ };
126
+
127
+ //#endregion
128
+ exports.bundleIntlayer = bundleIntlayer;
129
+ exports.packageList = packageList;
130
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["exec","packageJSON","getConfiguration","BundleLogger","getAlias","getConfigEnvVars"],"sources":["../../../src/bundle/index.ts"],"sourcesContent":["import { exec } from 'node:child_process';\nimport { mkdir, rm, writeFile } from 'node:fs/promises';\nimport { isAbsolute, join, resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport packageJSON from '@intlayer/types/package.json' with { type: 'json' };\nimport { type BuildOptions, build, type Plugin } from 'esbuild';\nimport {\n type GetConfigurationOptions,\n getConfiguration,\n} from '../configFile/getConfiguration';\nimport { getConfigEnvVars } from '../envVars/envVars';\nimport { getAlias } from '../utils/alias';\nimport { BundleLogger } from './logBundle';\n\nconst execAsync = promisify(exec);\n\nexport const packageList = [\n 'next-intlayer',\n 'react-intlayer',\n 'vue-intlayer',\n 'svelte-intlayer',\n 'preact-intlayer',\n 'solid-intlayer',\n 'angular-intlayer',\n 'lit-intlayer',\n 'express-intlayer',\n 'hono-intlayer',\n 'fastify-intlayer',\n 'adonis-intlayer',\n 'vanilla-intlayer',\n 'intlayer',\n] as const;\n\nconst defaultVersion = packageJSON.version;\n\nexport type BundleIntlayerOptions = {\n outfile?: string;\n configOptions?: GetConfigurationOptions;\n bundlePackages?: string[];\n version?: string;\n} & BuildOptions;\n\n/**\n * Bundle the application content using esbuild.\n * It uses the Intlayer configuration to set up aliases and other esbuild options.\n *\n * @param options - Bundle options including entryPoint, outfile, and esbuild options.\n * @returns The build result.\n */\nexport const bundleIntlayer = async (options: BundleIntlayerOptions) => {\n const {\n outfile = 'intlayer-bundle.js',\n configOptions,\n bundlePackages = [...packageList],\n version = defaultVersion,\n ...esbuildOptions\n } = options;\n\n const intlayerConfig = getConfiguration(configOptions);\n\n const logger = new BundleLogger(intlayerConfig);\n\n const alias = getAlias({\n configuration: intlayerConfig,\n formatter: (value: string) => resolve(process.cwd(), value),\n });\n\n // Fetch dictionaries and calculate tree-shaking variables\n\n const treeShakingDefines = getConfigEnvVars(\n intlayerConfig,\n (key) => `process.env.${key}`,\n (value) => `\"${value}\"` // Properly wraps the string in quotes\n );\n\n const intlayerBundlePlugin: Plugin = {\n name: 'intlayer-bundle-plugin',\n setup(build) {\n // Create a regex that matches the provided packages\n // It matches both the package name and any sub-exports\n const packagesRegex = new RegExp(\n `^(${bundlePackages\n .map((packages) => packages.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('|')})(\\\\/.*)?$`\n );\n\n build.onResolve({ filter: packagesRegex }, () => ({\n external: false,\n }));\n\n // Also ensure @intlayer/ packages are bundled if not explicitly excluded\n build.onResolve({ filter: /^@intlayer\\// }, () => ({\n external: false,\n }));\n },\n };\n\n const tempDir = join(intlayerConfig.system.tempDir, 'intlayer-bundle-tmp');\n\n logger.setStatus('installing');\n\n try {\n // Clean and prepare temp directory\n await rm(tempDir, { recursive: true, force: true });\n await mkdir(tempDir, { recursive: true });\n\n // Write package.json to fetch packages via npm/bun\n const deps = Object.fromEntries(\n bundlePackages.map((pkg) => [pkg, version])\n );\n await writeFile(\n join(tempDir, 'package.json'),\n JSON.stringify({ dependencies: deps, type: 'module' })\n );\n\n // Determine package manager (prefer bun if available)\n let pm = 'npm install';\n try {\n await execAsync('bun --version');\n pm = 'bun install';\n } catch {}\n\n // Install the packages in the temp directory\n await execAsync(pm, { cwd: tempDir });\n\n const absoluteOutfile = isAbsolute(outfile)\n ? outfile\n : join(process.cwd(), outfile);\n\n const buildOptions: BuildOptions = {\n bundle: true,\n outfile: absoluteOutfile,\n absWorkingDir: tempDir,\n platform: 'browser',\n conditions: ['browser', 'module', 'import', 'default'],\n minify: true,\n minifyIdentifiers: true,\n treeShaking: true,\n format: 'iife',\n ignoreAnnotations: true,\n stdin: {\n contents: bundlePackages\n .map((packageName) => {\n // Convert package name to global name (e.g. vanilla-intlayer -> VanillaIntlayer)\n const globalName = packageName\n .split('-')\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join('');\n // Create a global variable for each package\n return `import * as ${globalName} from '${packageName}';\\nif (typeof window !== 'undefined') { window['${globalName}'] = ${globalName}; }`;\n })\n .join('\\n'),\n resolveDir: tempDir,\n },\n define: {\n 'process.env': '{}', // Fix ReferenceError: process is not defined\n // Inject generated environment variables\n ...treeShakingDefines,\n ...esbuildOptions.define,\n },\n alias: {\n ...alias,\n ...esbuildOptions.alias,\n },\n ...esbuildOptions,\n plugins: [intlayerBundlePlugin, ...(esbuildOptions.plugins || [])],\n };\n\n logger.setStatus('bundling');\n const result = await build(buildOptions);\n logger.setStatus('success');\n return result;\n } catch (error) {\n logger.setError(error);\n throw error;\n } finally {\n // Clean up temp directory\n await rm(tempDir, { recursive: true, force: true });\n }\n};\n"],"mappings":";;;;;;;;;;;;;;;AAcA,MAAM,qCAAsBA,wBAAK;AAEjC,MAAa,cAAc;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,iBAAiBC,qCAAY;;;;;;;;AAgBnC,MAAa,iBAAiB,OAAO,YAAmC;CACtE,MAAM,EACJ,UAAU,sBACV,eACA,iBAAiB,CAAC,GAAG,YAAY,EACjC,UAAU,gBACV,GAAG,mBACD;CAEJ,MAAM,iBAAiBC,qDAAiB,cAAc;CAEtD,MAAM,SAAS,IAAIC,sCAAa,eAAe;CAE/C,MAAM,QAAQC,6BAAS;EACrB,eAAe;EACf,YAAY,iCAA0B,QAAQ,KAAK,EAAE,MAAM;EAC5D,CAAC;CAIF,MAAM,qBAAqBC,yCACzB,iBACC,QAAQ,eAAe,QACvB,UAAU,IAAI,MAAM,GACtB;CAED,MAAM,uBAA+B;EACnC,MAAM;EACN,MAAM,OAAO;GAGX,MAAM,gBAAgB,IAAI,OACxB,KAAK,eACF,KAAK,aAAa,SAAS,QAAQ,uBAAuB,OAAO,CAAC,CAClE,KAAK,IAAI,CAAC,YACd;AAED,SAAM,UAAU,EAAE,QAAQ,eAAe,SAAS,EAChD,UAAU,OACX,EAAE;AAGH,SAAM,UAAU,EAAE,QAAQ,gBAAgB,SAAS,EACjD,UAAU,OACX,EAAE;;EAEN;CAED,MAAM,8BAAe,eAAe,OAAO,SAAS,sBAAsB;AAE1E,QAAO,UAAU,aAAa;AAE9B,KAAI;AAEF,iCAAS,SAAS;GAAE,WAAW;GAAM,OAAO;GAAM,CAAC;AACnD,oCAAY,SAAS,EAAE,WAAW,MAAM,CAAC;EAGzC,MAAM,OAAO,OAAO,YAClB,eAAe,KAAK,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAC5C;AACD,4DACO,SAAS,eAAe,EAC7B,KAAK,UAAU;GAAE,cAAc;GAAM,MAAM;GAAU,CAAC,CACvD;EAGD,IAAI,KAAK;AACT,MAAI;AACF,SAAM,UAAU,gBAAgB;AAChC,QAAK;UACC;AAGR,QAAM,UAAU,IAAI,EAAE,KAAK,SAAS,CAAC;EAMrC,MAAM,eAA6B;GACjC,QAAQ;GACR,mCANiC,QAAQ,GACvC,8BACK,QAAQ,KAAK,EAAE,QAAQ;GAK9B,eAAe;GACf,UAAU;GACV,YAAY;IAAC;IAAW;IAAU;IAAU;IAAU;GACtD,QAAQ;GACR,mBAAmB;GACnB,aAAa;GACb,QAAQ;GACR,mBAAmB;GACnB,OAAO;IACL,UAAU,eACP,KAAK,gBAAgB;KAEpB,MAAM,aAAa,YAChB,MAAM,IAAI,CACV,KAAK,SAAS,GAAG,KAAK,OAAO,EAAE,CAAC,aAAa,GAAG,KAAK,MAAM,EAAE,GAAG,CAChE,KAAK,GAAG;AAEX,YAAO,eAAe,WAAW,SAAS,YAAY,mDAAmD,WAAW,OAAO,WAAW;MACtI,CACD,KAAK,KAAK;IACb,YAAY;IACb;GACD,QAAQ;IACN,eAAe;IAEf,GAAG;IACH,GAAG,eAAe;IACnB;GACD,OAAO;IACL,GAAG;IACH,GAAG,eAAe;IACnB;GACD,GAAG;GACH,SAAS,CAAC,sBAAsB,GAAI,eAAe,WAAW,EAAE,CAAE;GACnE;AAED,SAAO,UAAU,WAAW;EAC5B,MAAM,SAAS,yBAAY,aAAa;AACxC,SAAO,UAAU,UAAU;AAC3B,SAAO;UACA,OAAO;AACd,SAAO,SAAS,MAAM;AACtB,QAAM;WACE;AAER,iCAAS,SAAS;GAAE,WAAW;GAAM,OAAO;GAAM,CAAC"}
@@ -0,0 +1,79 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_colors = require('../colors.cjs');
3
+ const require_utils_extractErrorMessage = require('../utils/extractErrorMessage.cjs');
4
+ const require_logger = require('../logger.cjs');
5
+
6
+ //#region src/bundle/logBundle.ts
7
+ var BundleLogger = class {
8
+ status = "pending";
9
+ spinnerTimer = null;
10
+ spinnerIndex = 0;
11
+ renderedLines = 0;
12
+ isFinished = false;
13
+ prefix;
14
+ lastRenderedState = "";
15
+ error;
16
+ constructor(configuration) {
17
+ this.prefix = require_logger.getPrefix(configuration?.log?.prefix) ?? "";
18
+ }
19
+ setStatus(status) {
20
+ if (this.isFinished) return;
21
+ this.status = status;
22
+ if (status === "success") this.finish();
23
+ else {
24
+ this.startSpinner();
25
+ this.render();
26
+ }
27
+ }
28
+ setError(error) {
29
+ if (this.isFinished) return;
30
+ this.status = "error";
31
+ this.error = require_utils_extractErrorMessage.extractErrorMessage(error);
32
+ this.finish();
33
+ }
34
+ startSpinner() {
35
+ if (this.spinnerTimer || this.isFinished) return;
36
+ this.spinnerTimer = setInterval(() => {
37
+ this.spinnerIndex = (this.spinnerIndex + 1) % require_logger.spinnerFrames.length;
38
+ this.render();
39
+ }, 100);
40
+ }
41
+ stopSpinner() {
42
+ if (!this.spinnerTimer) return;
43
+ clearInterval(this.spinnerTimer);
44
+ this.spinnerTimer = null;
45
+ }
46
+ finish() {
47
+ this.isFinished = true;
48
+ this.stopSpinner();
49
+ this.render();
50
+ }
51
+ render() {
52
+ const frame = require_logger.spinnerFrames[this.spinnerIndex];
53
+ const clock = require_logger.colorize(frame, require_colors.BLUE);
54
+ const lines = [];
55
+ if (this.status === "installing") lines.push(`${this.prefix} ${clock} Fetching and resolving packages...`);
56
+ else if (this.status === "bundling") {
57
+ lines.push(`${this.prefix} ${require_logger.v} Fetching and resolving packages...`);
58
+ lines.push(`${this.prefix} ${clock} Bundling application...`);
59
+ } else if (this.status === "success") {
60
+ lines.push(`${this.prefix} ${require_logger.v} Fetching and resolving packages...`);
61
+ lines.push(`${this.prefix} ${require_logger.v} Bundling application...`);
62
+ } else if (this.status === "error") lines.push(`${this.prefix} ${require_logger.x} Bundle failed: ${require_logger.colorize(this.error ?? "Unknown error", require_colors.RED)}`);
63
+ const currentState = lines.join("\n");
64
+ if (currentState === this.lastRenderedState) return;
65
+ this.lastRenderedState = currentState;
66
+ if (this.renderedLines > 0) process.stdout.write(`\x1b[${this.renderedLines}F`);
67
+ const totalLinesToClear = Math.max(this.renderedLines, lines.length);
68
+ for (let i = 0; i < totalLinesToClear; i++) {
69
+ process.stdout.write("\x1B[2K");
70
+ if (lines[i] !== void 0) process.stdout.write(lines[i]);
71
+ process.stdout.write("\n");
72
+ }
73
+ this.renderedLines = lines.length;
74
+ }
75
+ };
76
+
77
+ //#endregion
78
+ exports.BundleLogger = BundleLogger;
79
+ //# sourceMappingURL=logBundle.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logBundle.cjs","names":["getPrefix","extractErrorMessage","spinnerFrames","colorize","v","x"],"sources":["../../../src/bundle/logBundle.ts"],"sourcesContent":["import type { IntlayerConfig } from '@intlayer/types/config';\nimport * as ANSIColors from '../colors';\nimport { colorize, getPrefix, spinnerFrames, v, x } from '../logger';\nimport { extractErrorMessage } from '../utils/extractErrorMessage';\n\nexport class BundleLogger {\n private status: 'pending' | 'installing' | 'bundling' | 'success' | 'error' =\n 'pending';\n private spinnerTimer: NodeJS.Timeout | null = null;\n private spinnerIndex = 0;\n private renderedLines = 0;\n private isFinished = false;\n private readonly prefix: string;\n private lastRenderedState = '';\n private error: string | undefined;\n\n constructor(configuration?: IntlayerConfig) {\n this.prefix = getPrefix(configuration?.log?.prefix) ?? '';\n }\n\n setStatus(status: 'installing' | 'bundling' | 'success') {\n if (this.isFinished) return;\n this.status = status;\n if (status === 'success') {\n this.finish();\n } else {\n this.startSpinner();\n this.render();\n }\n }\n\n setError(error?: unknown) {\n if (this.isFinished) return;\n this.status = 'error';\n this.error = extractErrorMessage(error);\n this.finish();\n }\n\n private startSpinner() {\n if (this.spinnerTimer || this.isFinished) return;\n this.spinnerTimer = setInterval(() => {\n this.spinnerIndex = (this.spinnerIndex + 1) % spinnerFrames.length;\n this.render();\n }, 100);\n }\n\n private stopSpinner() {\n if (!this.spinnerTimer) return;\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = null;\n }\n\n private finish() {\n this.isFinished = true;\n this.stopSpinner();\n this.render();\n }\n\n private render() {\n const frame = spinnerFrames[this.spinnerIndex];\n const clock = colorize(frame, ANSIColors.BLUE);\n const lines: string[] = [];\n\n if (this.status === 'installing') {\n lines.push(`${this.prefix} ${clock} Fetching and resolving packages...`);\n } else if (this.status === 'bundling') {\n lines.push(`${this.prefix} ${v} Fetching and resolving packages...`);\n lines.push(`${this.prefix} ${clock} Bundling application...`);\n } else if (this.status === 'success') {\n lines.push(`${this.prefix} ${v} Fetching and resolving packages...`);\n lines.push(`${this.prefix} ${v} Bundling application...`);\n } else if (this.status === 'error') {\n lines.push(\n `${this.prefix} ${x} Bundle failed: ${colorize(this.error ?? 'Unknown error', ANSIColors.RED)}`\n );\n }\n\n const currentState = lines.join('\\n');\n if (currentState === this.lastRenderedState) return;\n this.lastRenderedState = currentState;\n\n if (this.renderedLines > 0) {\n process.stdout.write(`\\x1b[${this.renderedLines}F`);\n }\n\n const totalLinesToClear = Math.max(this.renderedLines, lines.length);\n for (let i = 0; i < totalLinesToClear; i++) {\n process.stdout.write('\\x1b[2K');\n if (lines[i] !== undefined) {\n process.stdout.write(lines[i]);\n }\n process.stdout.write('\\n');\n }\n\n this.renderedLines = lines.length;\n }\n}\n"],"mappings":";;;;;;AAKA,IAAa,eAAb,MAA0B;CACxB,AAAQ,SACN;CACF,AAAQ,eAAsC;CAC9C,AAAQ,eAAe;CACvB,AAAQ,gBAAgB;CACxB,AAAQ,aAAa;CACrB,AAAiB;CACjB,AAAQ,oBAAoB;CAC5B,AAAQ;CAER,YAAY,eAAgC;AAC1C,OAAK,SAASA,yBAAU,eAAe,KAAK,OAAO,IAAI;;CAGzD,UAAU,QAA+C;AACvD,MAAI,KAAK,WAAY;AACrB,OAAK,SAAS;AACd,MAAI,WAAW,UACb,MAAK,QAAQ;OACR;AACL,QAAK,cAAc;AACnB,QAAK,QAAQ;;;CAIjB,SAAS,OAAiB;AACxB,MAAI,KAAK,WAAY;AACrB,OAAK,SAAS;AACd,OAAK,QAAQC,sDAAoB,MAAM;AACvC,OAAK,QAAQ;;CAGf,AAAQ,eAAe;AACrB,MAAI,KAAK,gBAAgB,KAAK,WAAY;AAC1C,OAAK,eAAe,kBAAkB;AACpC,QAAK,gBAAgB,KAAK,eAAe,KAAKC,6BAAc;AAC5D,QAAK,QAAQ;KACZ,IAAI;;CAGT,AAAQ,cAAc;AACpB,MAAI,CAAC,KAAK,aAAc;AACxB,gBAAc,KAAK,aAAa;AAChC,OAAK,eAAe;;CAGtB,AAAQ,SAAS;AACf,OAAK,aAAa;AAClB,OAAK,aAAa;AAClB,OAAK,QAAQ;;CAGf,AAAQ,SAAS;EACf,MAAM,QAAQA,6BAAc,KAAK;EACjC,MAAM,QAAQC,wBAAS,2BAAuB;EAC9C,MAAM,QAAkB,EAAE;AAE1B,MAAI,KAAK,WAAW,aAClB,OAAM,KAAK,GAAG,KAAK,OAAO,GAAG,MAAM,qCAAqC;WAC/D,KAAK,WAAW,YAAY;AACrC,SAAM,KAAK,GAAG,KAAK,OAAO,GAAGC,iBAAE,qCAAqC;AACpE,SAAM,KAAK,GAAG,KAAK,OAAO,GAAG,MAAM,0BAA0B;aACpD,KAAK,WAAW,WAAW;AACpC,SAAM,KAAK,GAAG,KAAK,OAAO,GAAGA,iBAAE,qCAAqC;AACpE,SAAM,KAAK,GAAG,KAAK,OAAO,GAAGA,iBAAE,0BAA0B;aAChD,KAAK,WAAW,QACzB,OAAM,KACJ,GAAG,KAAK,OAAO,GAAGC,iBAAE,kBAAkBF,wBAAS,KAAK,SAAS,oCAAgC,GAC9F;EAGH,MAAM,eAAe,MAAM,KAAK,KAAK;AACrC,MAAI,iBAAiB,KAAK,kBAAmB;AAC7C,OAAK,oBAAoB;AAEzB,MAAI,KAAK,gBAAgB,EACvB,SAAQ,OAAO,MAAM,QAAQ,KAAK,cAAc,GAAG;EAGrD,MAAM,oBAAoB,KAAK,IAAI,KAAK,eAAe,MAAM,OAAO;AACpE,OAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,KAAK;AAC1C,WAAQ,OAAO,MAAM,UAAU;AAC/B,OAAI,MAAM,OAAO,OACf,SAAQ,OAAO,MAAM,MAAM,GAAG;AAEhC,WAAQ,OAAO,MAAM,KAAK;;AAG5B,OAAK,gBAAgB,MAAM"}
@@ -12,8 +12,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
12
12
  * formatNodeTypeToEnvVar(['enumeration'], true)
13
13
  * // { 'process.env.INTLAYER_NODE_TYPE_ENUMERATION': '"false"' }
14
14
  */
15
- const formatNodeTypeToEnvVar = (nodeTypes, addProcessEnv = false) => nodeTypes.reduce((acc, nodeType) => {
16
- acc[addProcessEnv ? `process.env.INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}` : `INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`] = "\"false\"";
15
+ const formatNodeTypeToEnvVar = (nodeTypes, wrapKey = (key) => key, wrapValue = (value) => value) => nodeTypes.reduce((acc, nodeType) => {
16
+ acc[wrapKey(`INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`)] = wrapValue("false");
17
17
  return acc;
18
18
  }, {});
19
19
  /**
@@ -28,16 +28,15 @@ const formatNodeTypeToEnvVar = (nodeTypes, addProcessEnv = false) => nodeTypes.r
28
28
  * getConfigEnvVars(config, true)
29
29
  * // { 'process.env.INTLAYER_ROUTING_MODE': '"prefix-no-default"', ... }
30
30
  */
31
- const getConfigEnvVars = (config, addProcessEnv = false, wrapValue = (value) => value) => {
32
- const prefix = addProcessEnv ? "process.env." : "";
31
+ const getConfigEnvVars = (config, wrapKey = (key) => key, wrapValue = (value) => value) => {
33
32
  const { routing, editor } = config;
34
- const envVars = { [`${prefix}INTLAYER_ROUTING_MODE`]: wrapValue(routing.mode) };
35
- if (!routing.rewrite) envVars[`${prefix}INTLAYER_ROUTING_REWRITE_RULES`] = wrapValue("false");
36
- if (!routing.storage.cookies || routing.storage.cookies.length === 0) envVars[`${prefix}INTLAYER_ROUTING_STORAGE_COOKIES`] = wrapValue("false");
37
- if (!routing.storage.localStorage || routing.storage.localStorage.length === 0) envVars[`${prefix}INTLAYER_ROUTING_STORAGE_LOCALSTORAGE`] = wrapValue("false");
38
- if (!routing.storage.sessionStorage || routing.storage.sessionStorage.length === 0) envVars[`${prefix}INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE`] = wrapValue("false");
39
- if (!routing.storage.headers || routing.storage.headers.length === 0) envVars[`${prefix}INTLAYER_ROUTING_STORAGE_HEADERS`] = wrapValue("false");
40
- if (editor?.enabled === false) envVars[`${prefix}INTLAYER_EDITOR_ENABLED`] = wrapValue("false");
33
+ const envVars = { [wrapKey("INTLAYER_ROUTING_MODE")]: wrapValue(routing.mode) };
34
+ if (!routing.rewrite) envVars[wrapKey("INTLAYER_ROUTING_REWRITE_RULES")] = wrapValue("false");
35
+ if (!routing.storage.cookies || routing.storage.cookies.length === 0) envVars[wrapKey("INTLAYER_ROUTING_STORAGE_COOKIES")] = wrapValue("false");
36
+ if (!routing.storage.localStorage || routing.storage.localStorage.length === 0) envVars[wrapKey("INTLAYER_ROUTING_STORAGE_LOCALSTORAGE")] = wrapValue("false");
37
+ if (!routing.storage.sessionStorage || routing.storage.sessionStorage.length === 0) envVars[wrapKey("INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE")] = wrapValue("false");
38
+ if (!routing.storage.headers || routing.storage.headers.length === 0) envVars[wrapKey("INTLAYER_ROUTING_STORAGE_HEADERS")] = wrapValue("false");
39
+ if (editor?.enabled === false) envVars[wrapKey("INTLAYER_EDITOR_ENABLED")] = wrapValue("false");
41
40
  return envVars;
42
41
  };
43
42
 
@@ -1 +1 @@
1
- {"version":3,"file":"envVars.cjs","names":[],"sources":["../../../src/envVars/envVars.ts"],"sourcesContent":["import type { IntlayerConfig } from '@intlayer/types/config';\n\n/**\n * Converts a list of unused NodeType keys into env-var definitions.\n * Set to `\"false\"` so bundlers can eliminate the corresponding plugin code.\n *\n * @example\n * formatNodeTypeToEnvVar(['enumeration'])\n * // { 'INTLAYER_NODE_TYPE_ENUMERATION': '\"false\"' }\n *\n * formatNodeTypeToEnvVar(['enumeration'], true)\n * // { 'process.env.INTLAYER_NODE_TYPE_ENUMERATION': '\"false\"' }\n */\nexport const formatNodeTypeToEnvVar = (\n nodeTypes: string[],\n addProcessEnv: boolean = false\n): Record<string, string> =>\n nodeTypes.reduce(\n (acc, nodeType) => {\n acc[\n addProcessEnv\n ? `process.env.INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`\n : `INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`\n ] = '\"false\"';\n return acc;\n },\n {} as Record<string, string>\n );\n\n/**\n * Returns env-var definitions for the full Intlayer config to be injected at\n * build time. Allows bundlers to dead-code-eliminate unused routing modes,\n * rewrite logic, storage mechanisms, and editor code.\n *\n * @example\n * getConfigEnvVars(config)\n * // { INTLAYER_ROUTING_MODE: '\"prefix-no-default\"', INTLAYER_ROUTING_REWRITE_RULES: '\"false\"', ... }\n *\n * getConfigEnvVars(config, true)\n * // { 'process.env.INTLAYER_ROUTING_MODE': '\"prefix-no-default\"', ... }\n */\nexport const getConfigEnvVars = (\n config: IntlayerConfig,\n addProcessEnv: boolean = false,\n wrapValue: (value: string) => string = (value) => value\n): Record<string, string> => {\n const prefix = addProcessEnv ? 'process.env.' : '';\n const { routing, editor } = config;\n\n const envVars: Record<string, string> = {\n [`${prefix}INTLAYER_ROUTING_MODE`]: wrapValue(routing.mode),\n };\n\n if (!routing.rewrite) {\n envVars[`${prefix}INTLAYER_ROUTING_REWRITE_RULES`] = wrapValue('false');\n }\n\n if (!routing.storage.cookies || routing.storage.cookies.length === 0) {\n envVars[`${prefix}INTLAYER_ROUTING_STORAGE_COOKIES`] = wrapValue('false');\n }\n\n if (\n !routing.storage.localStorage ||\n routing.storage.localStorage.length === 0\n ) {\n envVars[`${prefix}INTLAYER_ROUTING_STORAGE_LOCALSTORAGE`] =\n wrapValue('false');\n }\n\n if (\n !routing.storage.sessionStorage ||\n routing.storage.sessionStorage.length === 0\n ) {\n envVars[`${prefix}INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE`] =\n wrapValue('false');\n }\n\n if (!routing.storage.headers || routing.storage.headers.length === 0) {\n envVars[`${prefix}INTLAYER_ROUTING_STORAGE_HEADERS`] = wrapValue('false');\n }\n\n if (editor?.enabled === false) {\n envVars[`${prefix}INTLAYER_EDITOR_ENABLED`] = wrapValue('false');\n }\n\n return envVars;\n};\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAa,0BACX,WACA,gBAAyB,UAEzB,UAAU,QACP,KAAK,aAAa;AACjB,KACE,gBACI,kCAAkC,SAAS,aAAa,KACxD,sBAAsB,SAAS,aAAa,MAC9C;AACJ,QAAO;GAET,EAAE,CACH;;;;;;;;;;;;;AAcH,MAAa,oBACX,QACA,gBAAyB,OACzB,aAAwC,UAAU,UACvB;CAC3B,MAAM,SAAS,gBAAgB,iBAAiB;CAChD,MAAM,EAAE,SAAS,WAAW;CAE5B,MAAM,UAAkC,GACrC,GAAG,OAAO,yBAAyB,UAAU,QAAQ,KAAK,EAC5D;AAED,KAAI,CAAC,QAAQ,QACX,SAAQ,GAAG,OAAO,mCAAmC,UAAU,QAAQ;AAGzE,KAAI,CAAC,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,WAAW,EACjE,SAAQ,GAAG,OAAO,qCAAqC,UAAU,QAAQ;AAG3E,KACE,CAAC,QAAQ,QAAQ,gBACjB,QAAQ,QAAQ,aAAa,WAAW,EAExC,SAAQ,GAAG,OAAO,0CAChB,UAAU,QAAQ;AAGtB,KACE,CAAC,QAAQ,QAAQ,kBACjB,QAAQ,QAAQ,eAAe,WAAW,EAE1C,SAAQ,GAAG,OAAO,4CAChB,UAAU,QAAQ;AAGtB,KAAI,CAAC,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,WAAW,EACjE,SAAQ,GAAG,OAAO,qCAAqC,UAAU,QAAQ;AAG3E,KAAI,QAAQ,YAAY,MACtB,SAAQ,GAAG,OAAO,4BAA4B,UAAU,QAAQ;AAGlE,QAAO"}
1
+ {"version":3,"file":"envVars.cjs","names":[],"sources":["../../../src/envVars/envVars.ts"],"sourcesContent":["import type { IntlayerConfig } from '@intlayer/types/config';\n\n/**\n * Converts a list of unused NodeType keys into env-var definitions.\n * Set to `\"false\"` so bundlers can eliminate the corresponding plugin code.\n *\n * @example\n * formatNodeTypeToEnvVar(['enumeration'])\n * // { 'INTLAYER_NODE_TYPE_ENUMERATION': '\"false\"' }\n *\n * formatNodeTypeToEnvVar(['enumeration'], true)\n * // { 'process.env.INTLAYER_NODE_TYPE_ENUMERATION': '\"false\"' }\n */\nexport const formatNodeTypeToEnvVar = (\n nodeTypes: string[],\n wrapKey = (key: string) => key,\n wrapValue = (value: string) => value\n): Record<string, string> =>\n nodeTypes.reduce(\n (acc, nodeType) => {\n acc[wrapKey(`INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`)] =\n wrapValue('false');\n return acc;\n },\n {} as Record<string, string>\n );\n\n/**\n * Returns env-var definitions for the full Intlayer config to be injected at\n * build time. Allows bundlers to dead-code-eliminate unused routing modes,\n * rewrite logic, storage mechanisms, and editor code.\n *\n * @example\n * getConfigEnvVars(config)\n * // { INTLAYER_ROUTING_MODE: '\"prefix-no-default\"', INTLAYER_ROUTING_REWRITE_RULES: '\"false\"', ... }\n *\n * getConfigEnvVars(config, true)\n * // { 'process.env.INTLAYER_ROUTING_MODE': '\"prefix-no-default\"', ... }\n */\nexport const getConfigEnvVars = (\n config: IntlayerConfig,\n wrapKey = (key: string) => key,\n wrapValue = (value: string) => value\n): Record<string, string> => {\n const { routing, editor } = config;\n\n const envVars: Record<string, string> = {\n [wrapKey('INTLAYER_ROUTING_MODE')]: wrapValue(routing.mode),\n };\n\n if (!routing.rewrite) {\n envVars[wrapKey('INTLAYER_ROUTING_REWRITE_RULES')] = wrapValue('false');\n }\n\n if (!routing.storage.cookies || routing.storage.cookies.length === 0) {\n envVars[wrapKey('INTLAYER_ROUTING_STORAGE_COOKIES')] = wrapValue('false');\n }\n\n if (\n !routing.storage.localStorage ||\n routing.storage.localStorage.length === 0\n ) {\n envVars[wrapKey('INTLAYER_ROUTING_STORAGE_LOCALSTORAGE')] =\n wrapValue('false');\n }\n\n if (\n !routing.storage.sessionStorage ||\n routing.storage.sessionStorage.length === 0\n ) {\n envVars[wrapKey('INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE')] =\n wrapValue('false');\n }\n\n if (!routing.storage.headers || routing.storage.headers.length === 0) {\n envVars[wrapKey('INTLAYER_ROUTING_STORAGE_HEADERS')] = wrapValue('false');\n }\n\n if (editor?.enabled === false) {\n envVars[wrapKey('INTLAYER_EDITOR_ENABLED')] = wrapValue('false');\n }\n\n return envVars;\n};\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAa,0BACX,WACA,WAAW,QAAgB,KAC3B,aAAa,UAAkB,UAE/B,UAAU,QACP,KAAK,aAAa;AACjB,KAAI,QAAQ,sBAAsB,SAAS,aAAa,GAAG,IACzD,UAAU,QAAQ;AACpB,QAAO;GAET,EAAE,CACH;;;;;;;;;;;;;AAcH,MAAa,oBACX,QACA,WAAW,QAAgB,KAC3B,aAAa,UAAkB,UACJ;CAC3B,MAAM,EAAE,SAAS,WAAW;CAE5B,MAAM,UAAkC,GACrC,QAAQ,wBAAwB,GAAG,UAAU,QAAQ,KAAK,EAC5D;AAED,KAAI,CAAC,QAAQ,QACX,SAAQ,QAAQ,iCAAiC,IAAI,UAAU,QAAQ;AAGzE,KAAI,CAAC,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,WAAW,EACjE,SAAQ,QAAQ,mCAAmC,IAAI,UAAU,QAAQ;AAG3E,KACE,CAAC,QAAQ,QAAQ,gBACjB,QAAQ,QAAQ,aAAa,WAAW,EAExC,SAAQ,QAAQ,wCAAwC,IACtD,UAAU,QAAQ;AAGtB,KACE,CAAC,QAAQ,QAAQ,kBACjB,QAAQ,QAAQ,eAAe,WAAW,EAE1C,SAAQ,QAAQ,0CAA0C,IACxD,UAAU,QAAQ;AAGtB,KAAI,CAAC,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,WAAW,EACjE,SAAQ,QAAQ,mCAAmC,IAAI,UAAU,QAAQ;AAG3E,KAAI,QAAQ,YAAY,MACtB,SAAQ,QAAQ,0BAA0B,IAAI,UAAU,QAAQ;AAGlE,QAAO"}
package/dist/cjs/node.cjs CHANGED
@@ -1,5 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_utils_importMap = require('./utils/importMap.cjs');
3
2
  const require_configFile_buildBrowserConfiguration = require('./configFile/buildBrowserConfiguration.cjs');
4
3
  const require_configFile_configurationSchema = require('./configFile/configurationSchema.cjs');
5
4
  const require_configFile_buildConfigurationFields = require('./configFile/buildConfigurationFields.cjs');
@@ -23,9 +22,6 @@ exports.editorSchema = require_configFile_configurationSchema.editorSchema;
23
22
  exports.extractBrowserConfiguration = require_configFile_buildBrowserConfiguration.extractBrowserConfiguration;
24
23
  exports.getConfiguration = require_configFile_getConfiguration.getConfiguration;
25
24
  exports.getConfigurationAndFilePath = require_configFile_getConfiguration.getConfigurationAndFilePath;
26
- exports.getImportMap = require_utils_importMap.getImportMap;
27
- exports.getImportMapContent = require_utils_importMap.getImportMapContent;
28
- exports.getImportMapScript = require_utils_importMap.getImportMapScript;
29
25
  exports.internationalizationSchema = require_configFile_configurationSchema.internationalizationSchema;
30
26
  exports.intlayerConfigSchema = require_configFile_configurationSchema.intlayerConfigSchema;
31
27
  exports.logSchema = require_configFile_configurationSchema.logSchema;
@@ -10,7 +10,6 @@ const require_utils_clearModuleCache = require('./clearModuleCache.cjs');
10
10
  const require_utils_compareVersions = require('./compareVersions.cjs');
11
11
  const require_utils_extractErrorMessage = require('./extractErrorMessage.cjs');
12
12
  const require_utils_getStorageAttributes = require('./getStorageAttributes.cjs');
13
- const require_utils_importMap = require('./importMap.cjs');
14
13
  const require_utils_getUsedNodeTypes = require('./getUsedNodeTypes.cjs');
15
14
  const require_utils_logStack = require('./logStack.cjs');
16
15
  const require_utils_parseFilePathPattern = require('./parseFilePathPattern.cjs');
@@ -36,9 +35,6 @@ exports.extractErrorMessage = require_utils_extractErrorMessage.extractErrorMess
36
35
  exports.getAlias = require_utils_alias.getAlias;
37
36
  exports.getCache = require_utils_cacheMemory.getCache;
38
37
  exports.getExtension = require_utils_getExtension.getExtension;
39
- exports.getImportMap = require_utils_importMap.getImportMap;
40
- exports.getImportMapContent = require_utils_importMap.getImportMapContent;
41
- exports.getImportMapScript = require_utils_importMap.getImportMapScript;
42
38
  exports.getPackageJsonPath = require_utils_getPackageJsonPath.getPackageJsonPath;
43
39
  exports.getProjectRequire = require_utils_ESMxCJSHelpers.getProjectRequire;
44
40
  exports.getStorageAttributes = require_utils_getStorageAttributes.getStorageAttributes;
@@ -0,0 +1,126 @@
1
+ import { getAlias } from "../utils/alias.mjs";
2
+ import { getConfiguration } from "../configFile/getConfiguration.mjs";
3
+ import { getConfigEnvVars } from "../envVars/envVars.mjs";
4
+ import { BundleLogger } from "./logBundle.mjs";
5
+ import { isAbsolute, join, resolve } from "node:path";
6
+ import { mkdir, rm, writeFile } from "node:fs/promises";
7
+ import packageJSON from "@intlayer/types/package.json" with { type: "json" };
8
+ import { build } from "esbuild";
9
+ import { exec } from "node:child_process";
10
+ import { promisify } from "node:util";
11
+
12
+ //#region src/bundle/index.ts
13
+ const execAsync = promisify(exec);
14
+ const packageList = [
15
+ "next-intlayer",
16
+ "react-intlayer",
17
+ "vue-intlayer",
18
+ "svelte-intlayer",
19
+ "preact-intlayer",
20
+ "solid-intlayer",
21
+ "angular-intlayer",
22
+ "lit-intlayer",
23
+ "express-intlayer",
24
+ "hono-intlayer",
25
+ "fastify-intlayer",
26
+ "adonis-intlayer",
27
+ "vanilla-intlayer",
28
+ "intlayer"
29
+ ];
30
+ const defaultVersion = packageJSON.version;
31
+ /**
32
+ * Bundle the application content using esbuild.
33
+ * It uses the Intlayer configuration to set up aliases and other esbuild options.
34
+ *
35
+ * @param options - Bundle options including entryPoint, outfile, and esbuild options.
36
+ * @returns The build result.
37
+ */
38
+ const bundleIntlayer = async (options) => {
39
+ const { outfile = "intlayer-bundle.js", configOptions, bundlePackages = [...packageList], version = defaultVersion, ...esbuildOptions } = options;
40
+ const intlayerConfig = getConfiguration(configOptions);
41
+ const logger = new BundleLogger(intlayerConfig);
42
+ const alias = getAlias({
43
+ configuration: intlayerConfig,
44
+ formatter: (value) => resolve(process.cwd(), value)
45
+ });
46
+ const treeShakingDefines = getConfigEnvVars(intlayerConfig, (key) => `process.env.${key}`, (value) => `"${value}"`);
47
+ const intlayerBundlePlugin = {
48
+ name: "intlayer-bundle-plugin",
49
+ setup(build) {
50
+ const packagesRegex = new RegExp(`^(${bundlePackages.map((packages) => packages.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|")})(\\/.*)?$`);
51
+ build.onResolve({ filter: packagesRegex }, () => ({ external: false }));
52
+ build.onResolve({ filter: /^@intlayer\// }, () => ({ external: false }));
53
+ }
54
+ };
55
+ const tempDir = join(intlayerConfig.system.tempDir, "intlayer-bundle-tmp");
56
+ logger.setStatus("installing");
57
+ try {
58
+ await rm(tempDir, {
59
+ recursive: true,
60
+ force: true
61
+ });
62
+ await mkdir(tempDir, { recursive: true });
63
+ const deps = Object.fromEntries(bundlePackages.map((pkg) => [pkg, version]));
64
+ await writeFile(join(tempDir, "package.json"), JSON.stringify({
65
+ dependencies: deps,
66
+ type: "module"
67
+ }));
68
+ let pm = "npm install";
69
+ try {
70
+ await execAsync("bun --version");
71
+ pm = "bun install";
72
+ } catch {}
73
+ await execAsync(pm, { cwd: tempDir });
74
+ const buildOptions = {
75
+ bundle: true,
76
+ outfile: isAbsolute(outfile) ? outfile : join(process.cwd(), outfile),
77
+ absWorkingDir: tempDir,
78
+ platform: "browser",
79
+ conditions: [
80
+ "browser",
81
+ "module",
82
+ "import",
83
+ "default"
84
+ ],
85
+ minify: true,
86
+ minifyIdentifiers: true,
87
+ treeShaking: true,
88
+ format: "iife",
89
+ ignoreAnnotations: true,
90
+ stdin: {
91
+ contents: bundlePackages.map((packageName) => {
92
+ const globalName = packageName.split("-").map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`).join("");
93
+ return `import * as ${globalName} from '${packageName}';\nif (typeof window !== 'undefined') { window['${globalName}'] = ${globalName}; }`;
94
+ }).join("\n"),
95
+ resolveDir: tempDir
96
+ },
97
+ define: {
98
+ "process.env": "{}",
99
+ ...treeShakingDefines,
100
+ ...esbuildOptions.define
101
+ },
102
+ alias: {
103
+ ...alias,
104
+ ...esbuildOptions.alias
105
+ },
106
+ ...esbuildOptions,
107
+ plugins: [intlayerBundlePlugin, ...esbuildOptions.plugins || []]
108
+ };
109
+ logger.setStatus("bundling");
110
+ const result = await build(buildOptions);
111
+ logger.setStatus("success");
112
+ return result;
113
+ } catch (error) {
114
+ logger.setError(error);
115
+ throw error;
116
+ } finally {
117
+ await rm(tempDir, {
118
+ recursive: true,
119
+ force: true
120
+ });
121
+ }
122
+ };
123
+
124
+ //#endregion
125
+ export { bundleIntlayer, packageList };
126
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/bundle/index.ts"],"sourcesContent":["import { exec } from 'node:child_process';\nimport { mkdir, rm, writeFile } from 'node:fs/promises';\nimport { isAbsolute, join, resolve } from 'node:path';\nimport { promisify } from 'node:util';\nimport packageJSON from '@intlayer/types/package.json' with { type: 'json' };\nimport { type BuildOptions, build, type Plugin } from 'esbuild';\nimport {\n type GetConfigurationOptions,\n getConfiguration,\n} from '../configFile/getConfiguration';\nimport { getConfigEnvVars } from '../envVars/envVars';\nimport { getAlias } from '../utils/alias';\nimport { BundleLogger } from './logBundle';\n\nconst execAsync = promisify(exec);\n\nexport const packageList = [\n 'next-intlayer',\n 'react-intlayer',\n 'vue-intlayer',\n 'svelte-intlayer',\n 'preact-intlayer',\n 'solid-intlayer',\n 'angular-intlayer',\n 'lit-intlayer',\n 'express-intlayer',\n 'hono-intlayer',\n 'fastify-intlayer',\n 'adonis-intlayer',\n 'vanilla-intlayer',\n 'intlayer',\n] as const;\n\nconst defaultVersion = packageJSON.version;\n\nexport type BundleIntlayerOptions = {\n outfile?: string;\n configOptions?: GetConfigurationOptions;\n bundlePackages?: string[];\n version?: string;\n} & BuildOptions;\n\n/**\n * Bundle the application content using esbuild.\n * It uses the Intlayer configuration to set up aliases and other esbuild options.\n *\n * @param options - Bundle options including entryPoint, outfile, and esbuild options.\n * @returns The build result.\n */\nexport const bundleIntlayer = async (options: BundleIntlayerOptions) => {\n const {\n outfile = 'intlayer-bundle.js',\n configOptions,\n bundlePackages = [...packageList],\n version = defaultVersion,\n ...esbuildOptions\n } = options;\n\n const intlayerConfig = getConfiguration(configOptions);\n\n const logger = new BundleLogger(intlayerConfig);\n\n const alias = getAlias({\n configuration: intlayerConfig,\n formatter: (value: string) => resolve(process.cwd(), value),\n });\n\n // Fetch dictionaries and calculate tree-shaking variables\n\n const treeShakingDefines = getConfigEnvVars(\n intlayerConfig,\n (key) => `process.env.${key}`,\n (value) => `\"${value}\"` // Properly wraps the string in quotes\n );\n\n const intlayerBundlePlugin: Plugin = {\n name: 'intlayer-bundle-plugin',\n setup(build) {\n // Create a regex that matches the provided packages\n // It matches both the package name and any sub-exports\n const packagesRegex = new RegExp(\n `^(${bundlePackages\n .map((packages) => packages.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('|')})(\\\\/.*)?$`\n );\n\n build.onResolve({ filter: packagesRegex }, () => ({\n external: false,\n }));\n\n // Also ensure @intlayer/ packages are bundled if not explicitly excluded\n build.onResolve({ filter: /^@intlayer\\// }, () => ({\n external: false,\n }));\n },\n };\n\n const tempDir = join(intlayerConfig.system.tempDir, 'intlayer-bundle-tmp');\n\n logger.setStatus('installing');\n\n try {\n // Clean and prepare temp directory\n await rm(tempDir, { recursive: true, force: true });\n await mkdir(tempDir, { recursive: true });\n\n // Write package.json to fetch packages via npm/bun\n const deps = Object.fromEntries(\n bundlePackages.map((pkg) => [pkg, version])\n );\n await writeFile(\n join(tempDir, 'package.json'),\n JSON.stringify({ dependencies: deps, type: 'module' })\n );\n\n // Determine package manager (prefer bun if available)\n let pm = 'npm install';\n try {\n await execAsync('bun --version');\n pm = 'bun install';\n } catch {}\n\n // Install the packages in the temp directory\n await execAsync(pm, { cwd: tempDir });\n\n const absoluteOutfile = isAbsolute(outfile)\n ? outfile\n : join(process.cwd(), outfile);\n\n const buildOptions: BuildOptions = {\n bundle: true,\n outfile: absoluteOutfile,\n absWorkingDir: tempDir,\n platform: 'browser',\n conditions: ['browser', 'module', 'import', 'default'],\n minify: true,\n minifyIdentifiers: true,\n treeShaking: true,\n format: 'iife',\n ignoreAnnotations: true,\n stdin: {\n contents: bundlePackages\n .map((packageName) => {\n // Convert package name to global name (e.g. vanilla-intlayer -> VanillaIntlayer)\n const globalName = packageName\n .split('-')\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join('');\n // Create a global variable for each package\n return `import * as ${globalName} from '${packageName}';\\nif (typeof window !== 'undefined') { window['${globalName}'] = ${globalName}; }`;\n })\n .join('\\n'),\n resolveDir: tempDir,\n },\n define: {\n 'process.env': '{}', // Fix ReferenceError: process is not defined\n // Inject generated environment variables\n ...treeShakingDefines,\n ...esbuildOptions.define,\n },\n alias: {\n ...alias,\n ...esbuildOptions.alias,\n },\n ...esbuildOptions,\n plugins: [intlayerBundlePlugin, ...(esbuildOptions.plugins || [])],\n };\n\n logger.setStatus('bundling');\n const result = await build(buildOptions);\n logger.setStatus('success');\n return result;\n } catch (error) {\n logger.setError(error);\n throw error;\n } finally {\n // Clean up temp directory\n await rm(tempDir, { recursive: true, force: true });\n }\n};\n"],"mappings":";;;;;;;;;;;;AAcA,MAAM,YAAY,UAAU,KAAK;AAEjC,MAAa,cAAc;CACzB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,iBAAiB,YAAY;;;;;;;;AAgBnC,MAAa,iBAAiB,OAAO,YAAmC;CACtE,MAAM,EACJ,UAAU,sBACV,eACA,iBAAiB,CAAC,GAAG,YAAY,EACjC,UAAU,gBACV,GAAG,mBACD;CAEJ,MAAM,iBAAiB,iBAAiB,cAAc;CAEtD,MAAM,SAAS,IAAI,aAAa,eAAe;CAE/C,MAAM,QAAQ,SAAS;EACrB,eAAe;EACf,YAAY,UAAkB,QAAQ,QAAQ,KAAK,EAAE,MAAM;EAC5D,CAAC;CAIF,MAAM,qBAAqB,iBACzB,iBACC,QAAQ,eAAe,QACvB,UAAU,IAAI,MAAM,GACtB;CAED,MAAM,uBAA+B;EACnC,MAAM;EACN,MAAM,OAAO;GAGX,MAAM,gBAAgB,IAAI,OACxB,KAAK,eACF,KAAK,aAAa,SAAS,QAAQ,uBAAuB,OAAO,CAAC,CAClE,KAAK,IAAI,CAAC,YACd;AAED,SAAM,UAAU,EAAE,QAAQ,eAAe,SAAS,EAChD,UAAU,OACX,EAAE;AAGH,SAAM,UAAU,EAAE,QAAQ,gBAAgB,SAAS,EACjD,UAAU,OACX,EAAE;;EAEN;CAED,MAAM,UAAU,KAAK,eAAe,OAAO,SAAS,sBAAsB;AAE1E,QAAO,UAAU,aAAa;AAE9B,KAAI;AAEF,QAAM,GAAG,SAAS;GAAE,WAAW;GAAM,OAAO;GAAM,CAAC;AACnD,QAAM,MAAM,SAAS,EAAE,WAAW,MAAM,CAAC;EAGzC,MAAM,OAAO,OAAO,YAClB,eAAe,KAAK,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAC5C;AACD,QAAM,UACJ,KAAK,SAAS,eAAe,EAC7B,KAAK,UAAU;GAAE,cAAc;GAAM,MAAM;GAAU,CAAC,CACvD;EAGD,IAAI,KAAK;AACT,MAAI;AACF,SAAM,UAAU,gBAAgB;AAChC,QAAK;UACC;AAGR,QAAM,UAAU,IAAI,EAAE,KAAK,SAAS,CAAC;EAMrC,MAAM,eAA6B;GACjC,QAAQ;GACR,SANsB,WAAW,QAAQ,GACvC,UACA,KAAK,QAAQ,KAAK,EAAE,QAAQ;GAK9B,eAAe;GACf,UAAU;GACV,YAAY;IAAC;IAAW;IAAU;IAAU;IAAU;GACtD,QAAQ;GACR,mBAAmB;GACnB,aAAa;GACb,QAAQ;GACR,mBAAmB;GACnB,OAAO;IACL,UAAU,eACP,KAAK,gBAAgB;KAEpB,MAAM,aAAa,YAChB,MAAM,IAAI,CACV,KAAK,SAAS,GAAG,KAAK,OAAO,EAAE,CAAC,aAAa,GAAG,KAAK,MAAM,EAAE,GAAG,CAChE,KAAK,GAAG;AAEX,YAAO,eAAe,WAAW,SAAS,YAAY,mDAAmD,WAAW,OAAO,WAAW;MACtI,CACD,KAAK,KAAK;IACb,YAAY;IACb;GACD,QAAQ;IACN,eAAe;IAEf,GAAG;IACH,GAAG,eAAe;IACnB;GACD,OAAO;IACL,GAAG;IACH,GAAG,eAAe;IACnB;GACD,GAAG;GACH,SAAS,CAAC,sBAAsB,GAAI,eAAe,WAAW,EAAE,CAAE;GACnE;AAED,SAAO,UAAU,WAAW;EAC5B,MAAM,SAAS,MAAM,MAAM,aAAa;AACxC,SAAO,UAAU,UAAU;AAC3B,SAAO;UACA,OAAO;AACd,SAAO,SAAS,MAAM;AACtB,QAAM;WACE;AAER,QAAM,GAAG,SAAS;GAAE,WAAW;GAAM,OAAO;GAAM,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { BLUE, RED } from "../colors.mjs";
2
+ import { extractErrorMessage } from "../utils/extractErrorMessage.mjs";
3
+ import { colorize, getPrefix, spinnerFrames, v, x } from "../logger.mjs";
4
+
5
+ //#region src/bundle/logBundle.ts
6
+ var BundleLogger = class {
7
+ status = "pending";
8
+ spinnerTimer = null;
9
+ spinnerIndex = 0;
10
+ renderedLines = 0;
11
+ isFinished = false;
12
+ prefix;
13
+ lastRenderedState = "";
14
+ error;
15
+ constructor(configuration) {
16
+ this.prefix = getPrefix(configuration?.log?.prefix) ?? "";
17
+ }
18
+ setStatus(status) {
19
+ if (this.isFinished) return;
20
+ this.status = status;
21
+ if (status === "success") this.finish();
22
+ else {
23
+ this.startSpinner();
24
+ this.render();
25
+ }
26
+ }
27
+ setError(error) {
28
+ if (this.isFinished) return;
29
+ this.status = "error";
30
+ this.error = extractErrorMessage(error);
31
+ this.finish();
32
+ }
33
+ startSpinner() {
34
+ if (this.spinnerTimer || this.isFinished) return;
35
+ this.spinnerTimer = setInterval(() => {
36
+ this.spinnerIndex = (this.spinnerIndex + 1) % spinnerFrames.length;
37
+ this.render();
38
+ }, 100);
39
+ }
40
+ stopSpinner() {
41
+ if (!this.spinnerTimer) return;
42
+ clearInterval(this.spinnerTimer);
43
+ this.spinnerTimer = null;
44
+ }
45
+ finish() {
46
+ this.isFinished = true;
47
+ this.stopSpinner();
48
+ this.render();
49
+ }
50
+ render() {
51
+ const frame = spinnerFrames[this.spinnerIndex];
52
+ const clock = colorize(frame, BLUE);
53
+ const lines = [];
54
+ if (this.status === "installing") lines.push(`${this.prefix} ${clock} Fetching and resolving packages...`);
55
+ else if (this.status === "bundling") {
56
+ lines.push(`${this.prefix} ${v} Fetching and resolving packages...`);
57
+ lines.push(`${this.prefix} ${clock} Bundling application...`);
58
+ } else if (this.status === "success") {
59
+ lines.push(`${this.prefix} ${v} Fetching and resolving packages...`);
60
+ lines.push(`${this.prefix} ${v} Bundling application...`);
61
+ } else if (this.status === "error") lines.push(`${this.prefix} ${x} Bundle failed: ${colorize(this.error ?? "Unknown error", RED)}`);
62
+ const currentState = lines.join("\n");
63
+ if (currentState === this.lastRenderedState) return;
64
+ this.lastRenderedState = currentState;
65
+ if (this.renderedLines > 0) process.stdout.write(`\x1b[${this.renderedLines}F`);
66
+ const totalLinesToClear = Math.max(this.renderedLines, lines.length);
67
+ for (let i = 0; i < totalLinesToClear; i++) {
68
+ process.stdout.write("\x1B[2K");
69
+ if (lines[i] !== void 0) process.stdout.write(lines[i]);
70
+ process.stdout.write("\n");
71
+ }
72
+ this.renderedLines = lines.length;
73
+ }
74
+ };
75
+
76
+ //#endregion
77
+ export { BundleLogger };
78
+ //# sourceMappingURL=logBundle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logBundle.mjs","names":["ANSIColors.BLUE","ANSIColors.RED"],"sources":["../../../src/bundle/logBundle.ts"],"sourcesContent":["import type { IntlayerConfig } from '@intlayer/types/config';\nimport * as ANSIColors from '../colors';\nimport { colorize, getPrefix, spinnerFrames, v, x } from '../logger';\nimport { extractErrorMessage } from '../utils/extractErrorMessage';\n\nexport class BundleLogger {\n private status: 'pending' | 'installing' | 'bundling' | 'success' | 'error' =\n 'pending';\n private spinnerTimer: NodeJS.Timeout | null = null;\n private spinnerIndex = 0;\n private renderedLines = 0;\n private isFinished = false;\n private readonly prefix: string;\n private lastRenderedState = '';\n private error: string | undefined;\n\n constructor(configuration?: IntlayerConfig) {\n this.prefix = getPrefix(configuration?.log?.prefix) ?? '';\n }\n\n setStatus(status: 'installing' | 'bundling' | 'success') {\n if (this.isFinished) return;\n this.status = status;\n if (status === 'success') {\n this.finish();\n } else {\n this.startSpinner();\n this.render();\n }\n }\n\n setError(error?: unknown) {\n if (this.isFinished) return;\n this.status = 'error';\n this.error = extractErrorMessage(error);\n this.finish();\n }\n\n private startSpinner() {\n if (this.spinnerTimer || this.isFinished) return;\n this.spinnerTimer = setInterval(() => {\n this.spinnerIndex = (this.spinnerIndex + 1) % spinnerFrames.length;\n this.render();\n }, 100);\n }\n\n private stopSpinner() {\n if (!this.spinnerTimer) return;\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = null;\n }\n\n private finish() {\n this.isFinished = true;\n this.stopSpinner();\n this.render();\n }\n\n private render() {\n const frame = spinnerFrames[this.spinnerIndex];\n const clock = colorize(frame, ANSIColors.BLUE);\n const lines: string[] = [];\n\n if (this.status === 'installing') {\n lines.push(`${this.prefix} ${clock} Fetching and resolving packages...`);\n } else if (this.status === 'bundling') {\n lines.push(`${this.prefix} ${v} Fetching and resolving packages...`);\n lines.push(`${this.prefix} ${clock} Bundling application...`);\n } else if (this.status === 'success') {\n lines.push(`${this.prefix} ${v} Fetching and resolving packages...`);\n lines.push(`${this.prefix} ${v} Bundling application...`);\n } else if (this.status === 'error') {\n lines.push(\n `${this.prefix} ${x} Bundle failed: ${colorize(this.error ?? 'Unknown error', ANSIColors.RED)}`\n );\n }\n\n const currentState = lines.join('\\n');\n if (currentState === this.lastRenderedState) return;\n this.lastRenderedState = currentState;\n\n if (this.renderedLines > 0) {\n process.stdout.write(`\\x1b[${this.renderedLines}F`);\n }\n\n const totalLinesToClear = Math.max(this.renderedLines, lines.length);\n for (let i = 0; i < totalLinesToClear; i++) {\n process.stdout.write('\\x1b[2K');\n if (lines[i] !== undefined) {\n process.stdout.write(lines[i]);\n }\n process.stdout.write('\\n');\n }\n\n this.renderedLines = lines.length;\n }\n}\n"],"mappings":";;;;;AAKA,IAAa,eAAb,MAA0B;CACxB,AAAQ,SACN;CACF,AAAQ,eAAsC;CAC9C,AAAQ,eAAe;CACvB,AAAQ,gBAAgB;CACxB,AAAQ,aAAa;CACrB,AAAiB;CACjB,AAAQ,oBAAoB;CAC5B,AAAQ;CAER,YAAY,eAAgC;AAC1C,OAAK,SAAS,UAAU,eAAe,KAAK,OAAO,IAAI;;CAGzD,UAAU,QAA+C;AACvD,MAAI,KAAK,WAAY;AACrB,OAAK,SAAS;AACd,MAAI,WAAW,UACb,MAAK,QAAQ;OACR;AACL,QAAK,cAAc;AACnB,QAAK,QAAQ;;;CAIjB,SAAS,OAAiB;AACxB,MAAI,KAAK,WAAY;AACrB,OAAK,SAAS;AACd,OAAK,QAAQ,oBAAoB,MAAM;AACvC,OAAK,QAAQ;;CAGf,AAAQ,eAAe;AACrB,MAAI,KAAK,gBAAgB,KAAK,WAAY;AAC1C,OAAK,eAAe,kBAAkB;AACpC,QAAK,gBAAgB,KAAK,eAAe,KAAK,cAAc;AAC5D,QAAK,QAAQ;KACZ,IAAI;;CAGT,AAAQ,cAAc;AACpB,MAAI,CAAC,KAAK,aAAc;AACxB,gBAAc,KAAK,aAAa;AAChC,OAAK,eAAe;;CAGtB,AAAQ,SAAS;AACf,OAAK,aAAa;AAClB,OAAK,aAAa;AAClB,OAAK,QAAQ;;CAGf,AAAQ,SAAS;EACf,MAAM,QAAQ,cAAc,KAAK;EACjC,MAAM,QAAQ,SAAS,OAAOA,KAAgB;EAC9C,MAAM,QAAkB,EAAE;AAE1B,MAAI,KAAK,WAAW,aAClB,OAAM,KAAK,GAAG,KAAK,OAAO,GAAG,MAAM,qCAAqC;WAC/D,KAAK,WAAW,YAAY;AACrC,SAAM,KAAK,GAAG,KAAK,OAAO,GAAG,EAAE,qCAAqC;AACpE,SAAM,KAAK,GAAG,KAAK,OAAO,GAAG,MAAM,0BAA0B;aACpD,KAAK,WAAW,WAAW;AACpC,SAAM,KAAK,GAAG,KAAK,OAAO,GAAG,EAAE,qCAAqC;AACpE,SAAM,KAAK,GAAG,KAAK,OAAO,GAAG,EAAE,0BAA0B;aAChD,KAAK,WAAW,QACzB,OAAM,KACJ,GAAG,KAAK,OAAO,GAAG,EAAE,kBAAkB,SAAS,KAAK,SAAS,iBAAiBC,IAAe,GAC9F;EAGH,MAAM,eAAe,MAAM,KAAK,KAAK;AACrC,MAAI,iBAAiB,KAAK,kBAAmB;AAC7C,OAAK,oBAAoB;AAEzB,MAAI,KAAK,gBAAgB,EACvB,SAAQ,OAAO,MAAM,QAAQ,KAAK,cAAc,GAAG;EAGrD,MAAM,oBAAoB,KAAK,IAAI,KAAK,eAAe,MAAM,OAAO;AACpE,OAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,KAAK;AAC1C,WAAQ,OAAO,MAAM,UAAU;AAC/B,OAAI,MAAM,OAAO,OACf,SAAQ,OAAO,MAAM,MAAM,GAAG;AAEhC,WAAQ,OAAO,MAAM,KAAK;;AAG5B,OAAK,gBAAgB,MAAM"}
@@ -10,8 +10,8 @@
10
10
  * formatNodeTypeToEnvVar(['enumeration'], true)
11
11
  * // { 'process.env.INTLAYER_NODE_TYPE_ENUMERATION': '"false"' }
12
12
  */
13
- const formatNodeTypeToEnvVar = (nodeTypes, addProcessEnv = false) => nodeTypes.reduce((acc, nodeType) => {
14
- acc[addProcessEnv ? `process.env.INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}` : `INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`] = "\"false\"";
13
+ const formatNodeTypeToEnvVar = (nodeTypes, wrapKey = (key) => key, wrapValue = (value) => value) => nodeTypes.reduce((acc, nodeType) => {
14
+ acc[wrapKey(`INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`)] = wrapValue("false");
15
15
  return acc;
16
16
  }, {});
17
17
  /**
@@ -26,16 +26,15 @@ const formatNodeTypeToEnvVar = (nodeTypes, addProcessEnv = false) => nodeTypes.r
26
26
  * getConfigEnvVars(config, true)
27
27
  * // { 'process.env.INTLAYER_ROUTING_MODE': '"prefix-no-default"', ... }
28
28
  */
29
- const getConfigEnvVars = (config, addProcessEnv = false, wrapValue = (value) => value) => {
30
- const prefix = addProcessEnv ? "process.env." : "";
29
+ const getConfigEnvVars = (config, wrapKey = (key) => key, wrapValue = (value) => value) => {
31
30
  const { routing, editor } = config;
32
- const envVars = { [`${prefix}INTLAYER_ROUTING_MODE`]: wrapValue(routing.mode) };
33
- if (!routing.rewrite) envVars[`${prefix}INTLAYER_ROUTING_REWRITE_RULES`] = wrapValue("false");
34
- if (!routing.storage.cookies || routing.storage.cookies.length === 0) envVars[`${prefix}INTLAYER_ROUTING_STORAGE_COOKIES`] = wrapValue("false");
35
- if (!routing.storage.localStorage || routing.storage.localStorage.length === 0) envVars[`${prefix}INTLAYER_ROUTING_STORAGE_LOCALSTORAGE`] = wrapValue("false");
36
- if (!routing.storage.sessionStorage || routing.storage.sessionStorage.length === 0) envVars[`${prefix}INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE`] = wrapValue("false");
37
- if (!routing.storage.headers || routing.storage.headers.length === 0) envVars[`${prefix}INTLAYER_ROUTING_STORAGE_HEADERS`] = wrapValue("false");
38
- if (editor?.enabled === false) envVars[`${prefix}INTLAYER_EDITOR_ENABLED`] = wrapValue("false");
31
+ const envVars = { [wrapKey("INTLAYER_ROUTING_MODE")]: wrapValue(routing.mode) };
32
+ if (!routing.rewrite) envVars[wrapKey("INTLAYER_ROUTING_REWRITE_RULES")] = wrapValue("false");
33
+ if (!routing.storage.cookies || routing.storage.cookies.length === 0) envVars[wrapKey("INTLAYER_ROUTING_STORAGE_COOKIES")] = wrapValue("false");
34
+ if (!routing.storage.localStorage || routing.storage.localStorage.length === 0) envVars[wrapKey("INTLAYER_ROUTING_STORAGE_LOCALSTORAGE")] = wrapValue("false");
35
+ if (!routing.storage.sessionStorage || routing.storage.sessionStorage.length === 0) envVars[wrapKey("INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE")] = wrapValue("false");
36
+ if (!routing.storage.headers || routing.storage.headers.length === 0) envVars[wrapKey("INTLAYER_ROUTING_STORAGE_HEADERS")] = wrapValue("false");
37
+ if (editor?.enabled === false) envVars[wrapKey("INTLAYER_EDITOR_ENABLED")] = wrapValue("false");
39
38
  return envVars;
40
39
  };
41
40
 
@@ -1 +1 @@
1
- {"version":3,"file":"envVars.mjs","names":[],"sources":["../../../src/envVars/envVars.ts"],"sourcesContent":["import type { IntlayerConfig } from '@intlayer/types/config';\n\n/**\n * Converts a list of unused NodeType keys into env-var definitions.\n * Set to `\"false\"` so bundlers can eliminate the corresponding plugin code.\n *\n * @example\n * formatNodeTypeToEnvVar(['enumeration'])\n * // { 'INTLAYER_NODE_TYPE_ENUMERATION': '\"false\"' }\n *\n * formatNodeTypeToEnvVar(['enumeration'], true)\n * // { 'process.env.INTLAYER_NODE_TYPE_ENUMERATION': '\"false\"' }\n */\nexport const formatNodeTypeToEnvVar = (\n nodeTypes: string[],\n addProcessEnv: boolean = false\n): Record<string, string> =>\n nodeTypes.reduce(\n (acc, nodeType) => {\n acc[\n addProcessEnv\n ? `process.env.INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`\n : `INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`\n ] = '\"false\"';\n return acc;\n },\n {} as Record<string, string>\n );\n\n/**\n * Returns env-var definitions for the full Intlayer config to be injected at\n * build time. Allows bundlers to dead-code-eliminate unused routing modes,\n * rewrite logic, storage mechanisms, and editor code.\n *\n * @example\n * getConfigEnvVars(config)\n * // { INTLAYER_ROUTING_MODE: '\"prefix-no-default\"', INTLAYER_ROUTING_REWRITE_RULES: '\"false\"', ... }\n *\n * getConfigEnvVars(config, true)\n * // { 'process.env.INTLAYER_ROUTING_MODE': '\"prefix-no-default\"', ... }\n */\nexport const getConfigEnvVars = (\n config: IntlayerConfig,\n addProcessEnv: boolean = false,\n wrapValue: (value: string) => string = (value) => value\n): Record<string, string> => {\n const prefix = addProcessEnv ? 'process.env.' : '';\n const { routing, editor } = config;\n\n const envVars: Record<string, string> = {\n [`${prefix}INTLAYER_ROUTING_MODE`]: wrapValue(routing.mode),\n };\n\n if (!routing.rewrite) {\n envVars[`${prefix}INTLAYER_ROUTING_REWRITE_RULES`] = wrapValue('false');\n }\n\n if (!routing.storage.cookies || routing.storage.cookies.length === 0) {\n envVars[`${prefix}INTLAYER_ROUTING_STORAGE_COOKIES`] = wrapValue('false');\n }\n\n if (\n !routing.storage.localStorage ||\n routing.storage.localStorage.length === 0\n ) {\n envVars[`${prefix}INTLAYER_ROUTING_STORAGE_LOCALSTORAGE`] =\n wrapValue('false');\n }\n\n if (\n !routing.storage.sessionStorage ||\n routing.storage.sessionStorage.length === 0\n ) {\n envVars[`${prefix}INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE`] =\n wrapValue('false');\n }\n\n if (!routing.storage.headers || routing.storage.headers.length === 0) {\n envVars[`${prefix}INTLAYER_ROUTING_STORAGE_HEADERS`] = wrapValue('false');\n }\n\n if (editor?.enabled === false) {\n envVars[`${prefix}INTLAYER_EDITOR_ENABLED`] = wrapValue('false');\n }\n\n return envVars;\n};\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,0BACX,WACA,gBAAyB,UAEzB,UAAU,QACP,KAAK,aAAa;AACjB,KACE,gBACI,kCAAkC,SAAS,aAAa,KACxD,sBAAsB,SAAS,aAAa,MAC9C;AACJ,QAAO;GAET,EAAE,CACH;;;;;;;;;;;;;AAcH,MAAa,oBACX,QACA,gBAAyB,OACzB,aAAwC,UAAU,UACvB;CAC3B,MAAM,SAAS,gBAAgB,iBAAiB;CAChD,MAAM,EAAE,SAAS,WAAW;CAE5B,MAAM,UAAkC,GACrC,GAAG,OAAO,yBAAyB,UAAU,QAAQ,KAAK,EAC5D;AAED,KAAI,CAAC,QAAQ,QACX,SAAQ,GAAG,OAAO,mCAAmC,UAAU,QAAQ;AAGzE,KAAI,CAAC,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,WAAW,EACjE,SAAQ,GAAG,OAAO,qCAAqC,UAAU,QAAQ;AAG3E,KACE,CAAC,QAAQ,QAAQ,gBACjB,QAAQ,QAAQ,aAAa,WAAW,EAExC,SAAQ,GAAG,OAAO,0CAChB,UAAU,QAAQ;AAGtB,KACE,CAAC,QAAQ,QAAQ,kBACjB,QAAQ,QAAQ,eAAe,WAAW,EAE1C,SAAQ,GAAG,OAAO,4CAChB,UAAU,QAAQ;AAGtB,KAAI,CAAC,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,WAAW,EACjE,SAAQ,GAAG,OAAO,qCAAqC,UAAU,QAAQ;AAG3E,KAAI,QAAQ,YAAY,MACtB,SAAQ,GAAG,OAAO,4BAA4B,UAAU,QAAQ;AAGlE,QAAO"}
1
+ {"version":3,"file":"envVars.mjs","names":[],"sources":["../../../src/envVars/envVars.ts"],"sourcesContent":["import type { IntlayerConfig } from '@intlayer/types/config';\n\n/**\n * Converts a list of unused NodeType keys into env-var definitions.\n * Set to `\"false\"` so bundlers can eliminate the corresponding plugin code.\n *\n * @example\n * formatNodeTypeToEnvVar(['enumeration'])\n * // { 'INTLAYER_NODE_TYPE_ENUMERATION': '\"false\"' }\n *\n * formatNodeTypeToEnvVar(['enumeration'], true)\n * // { 'process.env.INTLAYER_NODE_TYPE_ENUMERATION': '\"false\"' }\n */\nexport const formatNodeTypeToEnvVar = (\n nodeTypes: string[],\n wrapKey = (key: string) => key,\n wrapValue = (value: string) => value\n): Record<string, string> =>\n nodeTypes.reduce(\n (acc, nodeType) => {\n acc[wrapKey(`INTLAYER_NODE_TYPE_${nodeType.toUpperCase()}`)] =\n wrapValue('false');\n return acc;\n },\n {} as Record<string, string>\n );\n\n/**\n * Returns env-var definitions for the full Intlayer config to be injected at\n * build time. Allows bundlers to dead-code-eliminate unused routing modes,\n * rewrite logic, storage mechanisms, and editor code.\n *\n * @example\n * getConfigEnvVars(config)\n * // { INTLAYER_ROUTING_MODE: '\"prefix-no-default\"', INTLAYER_ROUTING_REWRITE_RULES: '\"false\"', ... }\n *\n * getConfigEnvVars(config, true)\n * // { 'process.env.INTLAYER_ROUTING_MODE': '\"prefix-no-default\"', ... }\n */\nexport const getConfigEnvVars = (\n config: IntlayerConfig,\n wrapKey = (key: string) => key,\n wrapValue = (value: string) => value\n): Record<string, string> => {\n const { routing, editor } = config;\n\n const envVars: Record<string, string> = {\n [wrapKey('INTLAYER_ROUTING_MODE')]: wrapValue(routing.mode),\n };\n\n if (!routing.rewrite) {\n envVars[wrapKey('INTLAYER_ROUTING_REWRITE_RULES')] = wrapValue('false');\n }\n\n if (!routing.storage.cookies || routing.storage.cookies.length === 0) {\n envVars[wrapKey('INTLAYER_ROUTING_STORAGE_COOKIES')] = wrapValue('false');\n }\n\n if (\n !routing.storage.localStorage ||\n routing.storage.localStorage.length === 0\n ) {\n envVars[wrapKey('INTLAYER_ROUTING_STORAGE_LOCALSTORAGE')] =\n wrapValue('false');\n }\n\n if (\n !routing.storage.sessionStorage ||\n routing.storage.sessionStorage.length === 0\n ) {\n envVars[wrapKey('INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE')] =\n wrapValue('false');\n }\n\n if (!routing.storage.headers || routing.storage.headers.length === 0) {\n envVars[wrapKey('INTLAYER_ROUTING_STORAGE_HEADERS')] = wrapValue('false');\n }\n\n if (editor?.enabled === false) {\n envVars[wrapKey('INTLAYER_EDITOR_ENABLED')] = wrapValue('false');\n }\n\n return envVars;\n};\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,0BACX,WACA,WAAW,QAAgB,KAC3B,aAAa,UAAkB,UAE/B,UAAU,QACP,KAAK,aAAa;AACjB,KAAI,QAAQ,sBAAsB,SAAS,aAAa,GAAG,IACzD,UAAU,QAAQ;AACpB,QAAO;GAET,EAAE,CACH;;;;;;;;;;;;;AAcH,MAAa,oBACX,QACA,WAAW,QAAgB,KAC3B,aAAa,UAAkB,UACJ;CAC3B,MAAM,EAAE,SAAS,WAAW;CAE5B,MAAM,UAAkC,GACrC,QAAQ,wBAAwB,GAAG,UAAU,QAAQ,KAAK,EAC5D;AAED,KAAI,CAAC,QAAQ,QACX,SAAQ,QAAQ,iCAAiC,IAAI,UAAU,QAAQ;AAGzE,KAAI,CAAC,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,WAAW,EACjE,SAAQ,QAAQ,mCAAmC,IAAI,UAAU,QAAQ;AAG3E,KACE,CAAC,QAAQ,QAAQ,gBACjB,QAAQ,QAAQ,aAAa,WAAW,EAExC,SAAQ,QAAQ,wCAAwC,IACtD,UAAU,QAAQ;AAGtB,KACE,CAAC,QAAQ,QAAQ,kBACjB,QAAQ,QAAQ,eAAe,WAAW,EAE1C,SAAQ,QAAQ,0CAA0C,IACxD,UAAU,QAAQ;AAGtB,KAAI,CAAC,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,QAAQ,WAAW,EACjE,SAAQ,QAAQ,mCAAmC,IAAI,UAAU,QAAQ;AAG3E,KAAI,QAAQ,YAAY,MACtB,SAAQ,QAAQ,0BAA0B,IAAI,UAAU,QAAQ;AAGlE,QAAO"}