@intlayer/config 9.0.0-canary.0 → 9.0.0-canary.10

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 (68) hide show
  1. package/dist/cjs/bundle/index.cjs +1 -1
  2. package/dist/cjs/configFile/buildBrowserConfiguration.cjs +23 -3
  3. package/dist/cjs/configFile/buildBrowserConfiguration.cjs.map +1 -1
  4. package/dist/cjs/configFile/buildConfigurationFields.cjs +8 -3
  5. package/dist/cjs/configFile/buildConfigurationFields.cjs.map +1 -1
  6. package/dist/cjs/configFile/configurationSchema.cjs +1 -0
  7. package/dist/cjs/configFile/configurationSchema.cjs.map +1 -1
  8. package/dist/cjs/configFile/getConfiguration.cjs +10 -2
  9. package/dist/cjs/configFile/getConfiguration.cjs.map +1 -1
  10. package/dist/cjs/defaultValues/compiler.cjs +1 -1
  11. package/dist/cjs/defaultValues/compiler.cjs.map +1 -1
  12. package/dist/cjs/defaultValues/index.cjs +1 -0
  13. package/dist/cjs/defaultValues/routing.cjs +2 -0
  14. package/dist/cjs/defaultValues/routing.cjs.map +1 -1
  15. package/dist/cjs/envVars/envVars.cjs +21 -0
  16. package/dist/cjs/envVars/envVars.cjs.map +1 -1
  17. package/dist/cjs/envVars/index.cjs +1 -0
  18. package/dist/cjs/loadExternalFile/transpileTSToCJS.cjs +28 -13
  19. package/dist/cjs/loadExternalFile/transpileTSToCJS.cjs.map +1 -1
  20. package/dist/cjs/logger.cjs +1 -1
  21. package/dist/cjs/logger.cjs.map +1 -1
  22. package/dist/cjs/utils/getDictionarySelectorUsage.cjs +28 -0
  23. package/dist/cjs/utils/getDictionarySelectorUsage.cjs.map +1 -0
  24. package/dist/cjs/utils/index.cjs +2 -0
  25. package/dist/esm/configFile/buildBrowserConfiguration.mjs +24 -4
  26. package/dist/esm/configFile/buildBrowserConfiguration.mjs.map +1 -1
  27. package/dist/esm/configFile/buildConfigurationFields.mjs +8 -3
  28. package/dist/esm/configFile/buildConfigurationFields.mjs.map +1 -1
  29. package/dist/esm/configFile/configurationSchema.mjs +1 -0
  30. package/dist/esm/configFile/configurationSchema.mjs.map +1 -1
  31. package/dist/esm/configFile/getConfiguration.mjs +10 -2
  32. package/dist/esm/configFile/getConfiguration.mjs.map +1 -1
  33. package/dist/esm/defaultValues/compiler.mjs +1 -1
  34. package/dist/esm/defaultValues/compiler.mjs.map +1 -1
  35. package/dist/esm/defaultValues/index.mjs +2 -2
  36. package/dist/esm/defaultValues/routing.mjs +2 -1
  37. package/dist/esm/defaultValues/routing.mjs.map +1 -1
  38. package/dist/esm/envVars/envVars.mjs +21 -1
  39. package/dist/esm/envVars/envVars.mjs.map +1 -1
  40. package/dist/esm/envVars/index.mjs +2 -2
  41. package/dist/esm/loadExternalFile/transpileTSToCJS.mjs +28 -13
  42. package/dist/esm/loadExternalFile/transpileTSToCJS.mjs.map +1 -1
  43. package/dist/esm/logger.mjs +1 -1
  44. package/dist/esm/logger.mjs.map +1 -1
  45. package/dist/esm/utils/getDictionarySelectorUsage.mjs +26 -0
  46. package/dist/esm/utils/getDictionarySelectorUsage.mjs.map +1 -0
  47. package/dist/esm/utils/index.mjs +2 -1
  48. package/dist/types/built.browser.d.ts +14 -13
  49. package/dist/types/built.browser.d.ts.map +1 -1
  50. package/dist/types/configFile/buildBrowserConfiguration.d.ts +10 -1
  51. package/dist/types/configFile/buildBrowserConfiguration.d.ts.map +1 -1
  52. package/dist/types/configFile/buildConfigurationFields.d.ts +6 -1
  53. package/dist/types/configFile/buildConfigurationFields.d.ts.map +1 -1
  54. package/dist/types/configFile/configurationSchema.d.ts +4 -2
  55. package/dist/types/configFile/configurationSchema.d.ts.map +1 -1
  56. package/dist/types/configFile/getConfiguration.d.ts.map +1 -1
  57. package/dist/types/defaultValues/compiler.d.ts +1 -1
  58. package/dist/types/defaultValues/index.d.ts +2 -2
  59. package/dist/types/defaultValues/routing.d.ts +2 -1
  60. package/dist/types/defaultValues/routing.d.ts.map +1 -1
  61. package/dist/types/envVars/envVars.d.ts +20 -1
  62. package/dist/types/envVars/envVars.d.ts.map +1 -1
  63. package/dist/types/envVars/index.d.ts +2 -2
  64. package/dist/types/loadExternalFile/transpileTSToCJS.d.ts.map +1 -1
  65. package/dist/types/utils/getDictionarySelectorUsage.d.ts +23 -0
  66. package/dist/types/utils/getDictionarySelectorUsage.d.ts.map +1 -0
  67. package/dist/types/utils/index.d.ts +2 -1
  68. package/package.json +5 -5
@@ -92,6 +92,7 @@ const routingSchema = z.object({
92
92
  "no-prefix",
93
93
  "search-params"
94
94
  ]).optional(),
95
+ enableProxy: z.boolean().optional(),
95
96
  storage: storageSchema.optional(),
96
97
  basePath: z.string().optional(),
97
98
  domains: z.record(z.string(), z.string()).optional()
@@ -1 +1 @@
1
- {"version":3,"file":"configurationSchema.mjs","names":[],"sources":["../../../src/configFile/configurationSchema.ts"],"sourcesContent":["import { AiProviders } from '@intlayer/types/config';\nimport z from 'zod';\n\nexport const internationalizationSchema = z.object({\n locales: z.array(z.string()).min(1),\n requiredLocales: z.array(z.string()).optional(),\n strictMode: z.enum(['strict', 'inclusive', 'loose']).optional(),\n defaultLocale: z.string().optional(),\n});\n\n/**\n * Cross-realm-safe `Date` check.\n *\n * Configuration files are executed inside a `node:vm` sandbox, so a `Date`\n * created there is an instance of the sandbox realm's `Date`, not the host\n * realm's. `instanceof Date` (used by `z.date()`) therefore returns `false`\n * for those values, which would reject a perfectly valid `Date`.\n */\nconst isDateLike = (value: unknown): value is Date =>\n value instanceof Date ||\n Object.prototype.toString.call(value) === '[object Date]';\n\n/**\n * Cookie expiry: a number of days, an absolute `Date`, or an ISO date string\n * (the form a `Date` takes once the configuration is serialized).\n */\nconst cookieExpiresSchema = z.union([\n z.custom<Date>(isDateLike, { message: 'Expected a Date' }),\n z.number(),\n z.string().refine((value) => !Number.isNaN(Date.parse(value)), {\n message: 'Expected a valid date string',\n }),\n]);\n\nexport const cookiesAttributesSchema = z.object({\n type: z.literal('cookie'),\n name: z.string().optional(),\n domain: z.string().optional(),\n path: z.string().optional(),\n secure: z.boolean().optional(),\n httpOnly: z.boolean().optional(),\n sameSite: z.enum(['strict', 'lax', 'none']).optional(),\n expires: cookieExpiresSchema.optional(),\n maxAge: z.number().optional(),\n});\n\nexport const storageAttributesSchema = z.object({\n type: z.enum(['localStorage', 'sessionStorage', 'header']),\n name: z.string().optional(),\n});\n\nexport const storageSchema = z.union([\n z.literal(false),\n z.enum(['cookie', 'localStorage', 'sessionStorage', 'header']),\n cookiesAttributesSchema,\n storageAttributesSchema,\n z.array(\n z.union([\n z.enum(['cookie', 'localStorage', 'sessionStorage', 'header']),\n cookiesAttributesSchema,\n storageAttributesSchema,\n ])\n ),\n]);\n\nexport const rewriteRuleSchema = z.object({\n canonical: z.string(),\n localized: z.record(z.string(), z.string()),\n});\n\nexport const rewriteRulesSchema = z.object({\n rules: z.array(rewriteRuleSchema),\n});\n\nexport const rewriteObjectSchema = z.object({\n url: rewriteRulesSchema,\n nextjs: rewriteRulesSchema.optional(),\n vite: rewriteRulesSchema.optional(),\n});\n\nexport const routingSchema = z.object({\n rewrite: z\n .union([\n z.record(z.string(), z.record(z.string(), z.string())),\n rewriteObjectSchema,\n ])\n .optional(),\n mode: z\n .enum(['prefix-no-default', 'prefix-all', 'no-prefix', 'search-params'])\n .optional(),\n storage: storageSchema.optional(),\n basePath: z.string().optional(),\n domains: z.record(z.string(), z.string()).optional(),\n});\n\nexport const systemSchema = z.object({\n baseDir: z.string().optional(),\n moduleAugmentationDir: z.string().optional(),\n unmergedDictionariesDir: z.string().optional(),\n remoteDictionariesDir: z.string().optional(),\n dictionariesDir: z.string().optional(),\n dynamicDictionariesDir: z.string().optional(),\n fetchDictionariesDir: z.string().optional(),\n typesDir: z.string().optional(),\n mainDir: z.string().optional(),\n configDir: z.string().optional(),\n cacheDir: z.string().optional(),\n tempDir: z.string().optional(),\n});\n\nexport const contentSchema = z.object({\n fileExtensions: z.array(z.string()).optional(),\n contentDir: z.array(z.string()).optional(),\n codeDir: z.array(z.string()).optional(),\n excludedPath: z.array(z.string()).optional(),\n watch: z.boolean().optional(),\n formatCommand: z.string().optional(),\n});\n\nexport const editorSchema = z.object({\n applicationURL: z.union([z.url(), z.literal('')]).optional(),\n editorURL: z.union([z.url(), z.literal('')]).optional(),\n cmsURL: z.union([z.url(), z.literal('')]).optional(),\n backendURL: z.union([z.url(), z.literal('')]).optional(),\n port: z.number().int().positive().max(65535).optional(),\n enabled: z.boolean().optional(),\n clientId: z.string().optional(),\n clientSecret: z.string().optional(),\n dictionaryPriorityStrategy: z\n .enum(['local_first', 'distant_first'])\n .optional(),\n liveSync: z.boolean().optional(),\n liveSyncPort: z.number().int().positive().max(65535).optional(),\n liveSyncURL: z.union([z.url(), z.literal('')]).optional(),\n});\n\nexport const logSchema = z.object({\n mode: z.enum(['default', 'verbose', 'disabled']).optional(),\n prefix: z.string().optional(),\n error: z.function().optional(),\n log: z.function().optional(),\n info: z.function().optional(),\n warn: z.function().optional(),\n});\n\nexport const aiSchema = z.object({\n provider: z.enum(AiProviders).optional(),\n apiKey: z.string().optional(),\n model: z.string().optional(),\n temperature: z.number().min(0).max(2).optional(),\n applicationContext: z.string().optional(),\n baseURL: z.url().optional(),\n dataSerialization: z.enum(['json', 'toon']).optional(),\n});\n\nexport const buildSchema = z.object({\n mode: z.enum(['auto', 'manual']).optional(),\n optimize: z.boolean().optional(),\n importMode: z.enum(['static', 'dynamic', 'fetch']).optional(),\n traversePattern: z.array(z.string()).optional(),\n outputFormat: z.array(z.enum(['cjs', 'esm'])).optional(),\n cache: z.boolean().optional(),\n require: z.unknown().optional(),\n checkTypes: z.boolean().optional(),\n});\n\nexport const compilerSchema = z.object({\n enabled: z.union([z.boolean(), z.literal('build-only')]).optional(),\n dictionaryKeyPrefix: z.string().optional(),\n transformPattern: z.union([z.string(), z.array(z.string())]).optional(),\n excludePattern: z.union([z.string(), z.array(z.string())]).optional(),\n output: z.unknown().optional(),\n noMetadata: z.boolean().optional(),\n saveComponents: z.boolean().optional(),\n});\n\nexport const dictionarySchema = z.object({\n fill: z.unknown().optional(),\n contentAutoTransformation: z\n .union([\n z.boolean(),\n z.object({\n markdown: z.boolean().optional(),\n html: z.boolean().optional(),\n insertion: z.boolean().optional(),\n }),\n ])\n .optional(),\n location: z.string().optional(),\n locale: z.string().optional(),\n title: z.string().optional(),\n});\n\nexport const intlayerConfigSchema = z.object({\n internationalization: internationalizationSchema.optional(),\n routing: routingSchema.optional(),\n content: contentSchema.optional(),\n system: systemSchema.optional(),\n editor: editorSchema.optional(),\n log: logSchema.optional(),\n ai: aiSchema.optional(),\n build: buildSchema.optional(),\n compiler: compilerSchema.optional(),\n dictionary: dictionarySchema.optional(),\n plugins: z.array(z.unknown()).optional(),\n schemas: z.record(z.string(), z.unknown()).optional(),\n metadata: z\n .object({\n name: z.string().optional(),\n version: z.string().optional(),\n doc: z.string().optional(),\n })\n .optional(),\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"configurationSchema.mjs","names":[],"sources":["../../../src/configFile/configurationSchema.ts"],"sourcesContent":["import { AiProviders } from '@intlayer/types/config';\nimport z from 'zod';\n\nexport const internationalizationSchema = z.object({\n locales: z.array(z.string()).min(1),\n requiredLocales: z.array(z.string()).optional(),\n strictMode: z.enum(['strict', 'inclusive', 'loose']).optional(),\n defaultLocale: z.string().optional(),\n});\n\n/**\n * Cross-realm-safe `Date` check.\n *\n * Configuration files are executed inside a `node:vm` sandbox, so a `Date`\n * created there is an instance of the sandbox realm's `Date`, not the host\n * realm's. `instanceof Date` (used by `z.date()`) therefore returns `false`\n * for those values, which would reject a perfectly valid `Date`.\n */\nconst isDateLike = (value: unknown): value is Date =>\n value instanceof Date ||\n Object.prototype.toString.call(value) === '[object Date]';\n\n/**\n * Cookie expiry: a number of days, an absolute `Date`, or an ISO date string\n * (the form a `Date` takes once the configuration is serialized).\n */\nconst cookieExpiresSchema = z.union([\n z.custom<Date>(isDateLike, { message: 'Expected a Date' }),\n z.number(),\n z.string().refine((value) => !Number.isNaN(Date.parse(value)), {\n message: 'Expected a valid date string',\n }),\n]);\n\nexport const cookiesAttributesSchema = z.object({\n type: z.literal('cookie'),\n name: z.string().optional(),\n domain: z.string().optional(),\n path: z.string().optional(),\n secure: z.boolean().optional(),\n httpOnly: z.boolean().optional(),\n sameSite: z.enum(['strict', 'lax', 'none']).optional(),\n expires: cookieExpiresSchema.optional(),\n maxAge: z.number().optional(),\n});\n\nexport const storageAttributesSchema = z.object({\n type: z.enum(['localStorage', 'sessionStorage', 'header']),\n name: z.string().optional(),\n});\n\nexport const storageSchema = z.union([\n z.literal(false),\n z.enum(['cookie', 'localStorage', 'sessionStorage', 'header']),\n cookiesAttributesSchema,\n storageAttributesSchema,\n z.array(\n z.union([\n z.enum(['cookie', 'localStorage', 'sessionStorage', 'header']),\n cookiesAttributesSchema,\n storageAttributesSchema,\n ])\n ),\n]);\n\nexport const rewriteRuleSchema = z.object({\n canonical: z.string(),\n localized: z.record(z.string(), z.string()),\n});\n\nexport const rewriteRulesSchema = z.object({\n rules: z.array(rewriteRuleSchema),\n});\n\nexport const rewriteObjectSchema = z.object({\n url: rewriteRulesSchema,\n nextjs: rewriteRulesSchema.optional(),\n vite: rewriteRulesSchema.optional(),\n});\n\nexport const routingSchema = z.object({\n rewrite: z\n .union([\n z.record(z.string(), z.record(z.string(), z.string())),\n rewriteObjectSchema,\n ])\n .optional(),\n mode: z\n .enum(['prefix-no-default', 'prefix-all', 'no-prefix', 'search-params'])\n .optional(),\n enableProxy: z.boolean().optional(),\n storage: storageSchema.optional(),\n basePath: z.string().optional(),\n domains: z.record(z.string(), z.string()).optional(),\n});\n\nexport const systemSchema = z.object({\n baseDir: z.string().optional(),\n moduleAugmentationDir: z.string().optional(),\n unmergedDictionariesDir: z.string().optional(),\n remoteDictionariesDir: z.string().optional(),\n dictionariesDir: z.string().optional(),\n dynamicDictionariesDir: z.string().optional(),\n fetchDictionariesDir: z.string().optional(),\n typesDir: z.string().optional(),\n mainDir: z.string().optional(),\n configDir: z.string().optional(),\n cacheDir: z.string().optional(),\n tempDir: z.string().optional(),\n});\n\nexport const contentSchema = z.object({\n fileExtensions: z.array(z.string()).optional(),\n contentDir: z.array(z.string()).optional(),\n codeDir: z.array(z.string()).optional(),\n excludedPath: z.array(z.string()).optional(),\n watch: z.boolean().optional(),\n formatCommand: z.string().optional(),\n});\n\nexport const editorSchema = z.object({\n applicationURL: z.union([z.url(), z.literal('')]).optional(),\n editorURL: z.union([z.url(), z.literal('')]).optional(),\n cmsURL: z.union([z.url(), z.literal('')]).optional(),\n backendURL: z.union([z.url(), z.literal('')]).optional(),\n port: z.number().int().positive().max(65535).optional(),\n enabled: z.boolean().optional(),\n clientId: z.string().optional(),\n clientSecret: z.string().optional(),\n dictionaryPriorityStrategy: z\n .enum(['local_first', 'distant_first'])\n .optional(),\n liveSync: z.boolean().optional(),\n liveSyncPort: z.number().int().positive().max(65535).optional(),\n liveSyncURL: z.union([z.url(), z.literal('')]).optional(),\n});\n\nexport const logSchema = z.object({\n mode: z.enum(['default', 'verbose', 'disabled']).optional(),\n prefix: z.string().optional(),\n error: z.function().optional(),\n log: z.function().optional(),\n info: z.function().optional(),\n warn: z.function().optional(),\n});\n\nexport const aiSchema = z.object({\n provider: z.enum(AiProviders).optional(),\n apiKey: z.string().optional(),\n model: z.string().optional(),\n temperature: z.number().min(0).max(2).optional(),\n applicationContext: z.string().optional(),\n baseURL: z.url().optional(),\n dataSerialization: z.enum(['json', 'toon']).optional(),\n});\n\nexport const buildSchema = z.object({\n mode: z.enum(['auto', 'manual']).optional(),\n optimize: z.boolean().optional(),\n importMode: z.enum(['static', 'dynamic', 'fetch']).optional(),\n traversePattern: z.array(z.string()).optional(),\n outputFormat: z.array(z.enum(['cjs', 'esm'])).optional(),\n cache: z.boolean().optional(),\n require: z.unknown().optional(),\n checkTypes: z.boolean().optional(),\n});\n\nexport const compilerSchema = z.object({\n enabled: z.union([z.boolean(), z.literal('build-only')]).optional(),\n dictionaryKeyPrefix: z.string().optional(),\n transformPattern: z.union([z.string(), z.array(z.string())]).optional(),\n excludePattern: z.union([z.string(), z.array(z.string())]).optional(),\n output: z.unknown().optional(),\n noMetadata: z.boolean().optional(),\n saveComponents: z.boolean().optional(),\n});\n\nexport const dictionarySchema = z.object({\n fill: z.unknown().optional(),\n contentAutoTransformation: z\n .union([\n z.boolean(),\n z.object({\n markdown: z.boolean().optional(),\n html: z.boolean().optional(),\n insertion: z.boolean().optional(),\n }),\n ])\n .optional(),\n location: z.string().optional(),\n locale: z.string().optional(),\n title: z.string().optional(),\n});\n\nexport const intlayerConfigSchema = z.object({\n internationalization: internationalizationSchema.optional(),\n routing: routingSchema.optional(),\n content: contentSchema.optional(),\n system: systemSchema.optional(),\n editor: editorSchema.optional(),\n log: logSchema.optional(),\n ai: aiSchema.optional(),\n build: buildSchema.optional(),\n compiler: compilerSchema.optional(),\n dictionary: dictionarySchema.optional(),\n plugins: z.array(z.unknown()).optional(),\n schemas: z.record(z.string(), z.unknown()).optional(),\n metadata: z\n .object({\n name: z.string().optional(),\n version: z.string().optional(),\n doc: z.string().optional(),\n })\n .optional(),\n});\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { cacheMemory } from "../utils/cacheMemory.mjs";
2
2
  import { getPackageJsonPath } from "../utils/getPackageJsonPath.mjs";
3
3
  import { buildConfigurationFields } from "./buildConfigurationFields.mjs";
4
+ import { loadEnvFile } from "../loadEnvFile.mjs";
4
5
  import { loadConfigurationFile } from "./loadConfigurationFile.mjs";
5
6
  import { searchConfigurationFile } from "./searchConfigurationFile.mjs";
6
7
  import { defu } from "defu";
@@ -24,6 +25,13 @@ const getConfigurationAndFilePath = (options) => {
24
25
  const cachedConfiguration = cacheMemory.get(options);
25
26
  if (cachedConfiguration) return cachedConfiguration;
26
27
  const { configurationFilePath, numCustomConfiguration } = searchConfigurationFile(baseDir);
28
+ const env = {
29
+ ...process.env,
30
+ ...loadEnvFile({
31
+ env: options?.env,
32
+ envFile: options?.envFile
33
+ })
34
+ };
27
35
  let storedConfiguration;
28
36
  let customConfiguration;
29
37
  if (configurationFilePath) {
@@ -37,8 +45,8 @@ const getConfigurationAndFilePath = (options) => {
37
45
  aliases: options?.aliases,
38
46
  buildOptions: options?.buildOptions
39
47
  });
40
- storedConfiguration = buildConfigurationFields(customConfiguration, options?.baseDir, options?.logFunctions);
41
- } else storedConfiguration = buildConfigurationFields({}, options?.baseDir, options?.logFunctions);
48
+ storedConfiguration = buildConfigurationFields(customConfiguration, options?.baseDir, options?.logFunctions, env);
49
+ } else storedConfiguration = buildConfigurationFields({}, options?.baseDir, options?.logFunctions, env);
42
50
  const configWithProjectRequire = defu(options?.require ? { build: {
43
51
  require: options?.require,
44
52
  cache: options?.cache
@@ -1 +1 @@
1
- {"version":3,"file":"getConfiguration.mjs","names":[],"sources":["../../../src/configFile/getConfiguration.ts"],"sourcesContent":["import type {\n CustomIntlayerConfig,\n IntlayerConfig,\n LogFunctions,\n} from '@intlayer/types/config';\nimport { defu } from 'defu';\nimport type { LoadExternalFileOptions } from '../loadExternalFile/loadExternalFile';\nimport type { SandBoxContextOptions } from '../loadExternalFile/parseFileContent';\nimport { cacheMemory } from '../utils/cacheMemory';\nimport { getPackageJsonPath } from '../utils/getPackageJsonPath';\nimport { buildConfigurationFields } from './buildConfigurationFields';\nimport { loadConfigurationFile } from './loadConfigurationFile';\nimport { searchConfigurationFile } from './searchConfigurationFile';\n\nexport type GetConfigurationOptions = {\n baseDir?: string;\n override?: CustomIntlayerConfig;\n // Dotenv options\n env?: string;\n envFile?: string;\n // Log functions\n logFunctions?: LogFunctions;\n // Require function\n require?: NodeJS.Require;\n // cache\n cache?: boolean;\n // Build options for TypeScript transpilation (e.g. custom esbuild instance)\n buildOptions?: LoadExternalFileOptions['buildOptions'];\n} & Omit<SandBoxContextOptions, 'projectRequire'>;\n\nexport type GetConfigurationAndFilePathResult = {\n configuration: IntlayerConfig;\n customConfiguration: CustomIntlayerConfig | undefined;\n numCustomConfiguration: number;\n configurationFilePath: string | undefined;\n};\n\n/**\n * Get the configuration for the intlayer by reading the configuration file (e.g. intlayer.config.js)\n */\nexport const getConfigurationAndFilePath = (\n options?: GetConfigurationOptions\n): GetConfigurationAndFilePathResult => {\n let baseDir: string | undefined;\n\n try {\n // Can fail in some environments (e.g. MCP server, VScode extension)\n baseDir = options?.baseDir ?? getPackageJsonPath().baseDir;\n } catch (_err) {\n // Return default config if the package.json is not found\n return {\n configuration: buildConfigurationFields(\n {},\n options?.baseDir,\n options?.logFunctions\n ),\n customConfiguration: undefined,\n numCustomConfiguration: 0,\n configurationFilePath: undefined,\n };\n }\n\n const cachedConfiguration =\n cacheMemory.get<GetConfigurationAndFilePathResult>(options);\n\n if (cachedConfiguration) return cachedConfiguration;\n\n // Search for configuration files\n const { configurationFilePath, numCustomConfiguration } =\n searchConfigurationFile(baseDir);\n\n let storedConfiguration: IntlayerConfig;\n let customConfiguration: CustomIntlayerConfig | undefined;\n\n if (configurationFilePath) {\n // Load the custom configuration\n customConfiguration = loadConfigurationFile(configurationFilePath, {\n projectRequire: options?.require,\n // Dotenv options\n envVarOptions: {\n env: options?.env,\n envFile: options?.envFile,\n },\n // Sandbox context additional variables\n additionalEnvVars: options?.additionalEnvVars,\n aliases: options?.aliases,\n // Build options for TypeScript transpilation (e.g. custom esbuild instance)\n buildOptions: options?.buildOptions,\n });\n\n // Save the configuration to avoid reading the file again\n storedConfiguration = buildConfigurationFields(\n customConfiguration,\n options?.baseDir,\n options?.logFunctions\n );\n } else {\n // No configuration file found, use default configuration\n storedConfiguration = buildConfigurationFields(\n {},\n options?.baseDir,\n options?.logFunctions\n );\n }\n\n // Log warning if multiple configuration files are found\n const projectRequireConfig: CustomIntlayerConfig = options?.require\n ? {\n build: {\n require: options?.require,\n cache: options?.cache,\n },\n }\n : {};\n\n const configWithProjectRequire = defu(\n projectRequireConfig,\n storedConfiguration\n ) as IntlayerConfig;\n\n const configuration = defu(\n options?.override ?? {},\n configWithProjectRequire\n ) as IntlayerConfig;\n\n cacheMemory.set(options, {\n configuration,\n customConfiguration,\n numCustomConfiguration,\n configurationFilePath,\n });\n\n return {\n configuration,\n customConfiguration,\n numCustomConfiguration,\n configurationFilePath,\n };\n};\n\n/**\n * Get the configuration for the intlayer by reading the configuration file (e.g. intlayer.config.js)\n */\nexport const getConfiguration = (\n options?: GetConfigurationOptions\n): IntlayerConfig => getConfigurationAndFilePath(options).configuration;\n"],"mappings":";;;;;;;;;;;AAwCA,MAAa,+BACX,YACsC;CACtC,IAAI;AAEJ,KAAI;AAEF,YAAU,SAAS,WAAW,oBAAoB,CAAC;UAC5C,MAAM;AAEb,SAAO;GACL,eAAe,yBACb,EAAE,EACF,SAAS,SACT,SAAS,aACV;GACD,qBAAqB;GACrB,wBAAwB;GACxB,uBAAuB;GACxB;;CAGH,MAAM,sBACJ,YAAY,IAAuC,QAAQ;AAE7D,KAAI,oBAAqB,QAAO;CAGhC,MAAM,EAAE,uBAAuB,2BAC7B,wBAAwB,QAAQ;CAElC,IAAI;CACJ,IAAI;AAEJ,KAAI,uBAAuB;AAEzB,wBAAsB,sBAAsB,uBAAuB;GACjE,gBAAgB,SAAS;GAEzB,eAAe;IACb,KAAK,SAAS;IACd,SAAS,SAAS;IACnB;GAED,mBAAmB,SAAS;GAC5B,SAAS,SAAS;GAElB,cAAc,SAAS;GACxB,CAAC;AAGF,wBAAsB,yBACpB,qBACA,SAAS,SACT,SAAS,aACV;OAGD,uBAAsB,yBACpB,EAAE,EACF,SAAS,SACT,SAAS,aACV;CAaH,MAAM,2BAA2B,KATkB,SAAS,UACxD,EACE,OAAO;EACL,SAAS,SAAS;EAClB,OAAO,SAAS;EACjB,EACF,GACD,EAAE,EAIJ,oBACD;CAED,MAAM,gBAAgB,KACpB,SAAS,YAAY,EAAE,EACvB,yBACD;AAED,aAAY,IAAI,SAAS;EACvB;EACA;EACA;EACA;EACD,CAAC;AAEF,QAAO;EACL;EACA;EACA;EACA;EACD;;;;;AAMH,MAAa,oBACX,YACmB,4BAA4B,QAAQ,CAAC"}
1
+ {"version":3,"file":"getConfiguration.mjs","names":[],"sources":["../../../src/configFile/getConfiguration.ts"],"sourcesContent":["import type {\n CustomIntlayerConfig,\n IntlayerConfig,\n LogFunctions,\n} from '@intlayer/types/config';\nimport { defu } from 'defu';\nimport { loadEnvFile } from '../loadEnvFile';\nimport type { LoadExternalFileOptions } from '../loadExternalFile/loadExternalFile';\nimport type { SandBoxContextOptions } from '../loadExternalFile/parseFileContent';\nimport { cacheMemory } from '../utils/cacheMemory';\nimport { getPackageJsonPath } from '../utils/getPackageJsonPath';\nimport { buildConfigurationFields } from './buildConfigurationFields';\nimport { loadConfigurationFile } from './loadConfigurationFile';\nimport { searchConfigurationFile } from './searchConfigurationFile';\n\nexport type GetConfigurationOptions = {\n baseDir?: string;\n override?: CustomIntlayerConfig;\n // Dotenv options\n env?: string;\n envFile?: string;\n // Log functions\n logFunctions?: LogFunctions;\n // Require function\n require?: NodeJS.Require;\n // cache\n cache?: boolean;\n // Build options for TypeScript transpilation (e.g. custom esbuild instance)\n buildOptions?: LoadExternalFileOptions['buildOptions'];\n} & Omit<SandBoxContextOptions, 'projectRequire'>;\n\nexport type GetConfigurationAndFilePathResult = {\n configuration: IntlayerConfig;\n customConfiguration: CustomIntlayerConfig | undefined;\n numCustomConfiguration: number;\n configurationFilePath: string | undefined;\n};\n\n/**\n * Get the configuration for the intlayer by reading the configuration file (e.g. intlayer.config.js)\n */\nexport const getConfigurationAndFilePath = (\n options?: GetConfigurationOptions\n): GetConfigurationAndFilePathResult => {\n let baseDir: string | undefined;\n\n try {\n // Can fail in some environments (e.g. MCP server, VScode extension)\n baseDir = options?.baseDir ?? getPackageJsonPath().baseDir;\n } catch (_err) {\n // Return default config if the package.json is not found\n return {\n configuration: buildConfigurationFields(\n {},\n options?.baseDir,\n options?.logFunctions\n ),\n customConfiguration: undefined,\n numCustomConfiguration: 0,\n configurationFilePath: undefined,\n };\n }\n\n const cachedConfiguration =\n cacheMemory.get<GetConfigurationAndFilePathResult>(options);\n\n if (cachedConfiguration) return cachedConfiguration;\n\n // Search for configuration files\n const { configurationFilePath, numCustomConfiguration } =\n searchConfigurationFile(baseDir);\n\n // Merge the variables from the resolved env file (e.g. the CLI `--env-file`)\n // on top of `process.env` without mutating the real environment. This lets\n // credential fallbacks (`INTLAYER_CLIENT_ID` / `INTLAYER_CLIENT_SECRET`) be\n // resolved from the env file even when the configuration file does not wire\n // `process.env` into `editor.clientId` / `editor.clientSecret` itself.\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n ...loadEnvFile({ env: options?.env, envFile: options?.envFile }),\n };\n\n let storedConfiguration: IntlayerConfig;\n let customConfiguration: CustomIntlayerConfig | undefined;\n\n if (configurationFilePath) {\n // Load the custom configuration\n customConfiguration = loadConfigurationFile(configurationFilePath, {\n projectRequire: options?.require,\n // Dotenv options\n envVarOptions: {\n env: options?.env,\n envFile: options?.envFile,\n },\n // Sandbox context additional variables\n additionalEnvVars: options?.additionalEnvVars,\n aliases: options?.aliases,\n // Build options for TypeScript transpilation (e.g. custom esbuild instance)\n buildOptions: options?.buildOptions,\n });\n\n // Save the configuration to avoid reading the file again\n storedConfiguration = buildConfigurationFields(\n customConfiguration,\n options?.baseDir,\n options?.logFunctions,\n env\n );\n } else {\n // No configuration file found, use default configuration\n storedConfiguration = buildConfigurationFields(\n {},\n options?.baseDir,\n options?.logFunctions,\n env\n );\n }\n\n // Log warning if multiple configuration files are found\n const projectRequireConfig: CustomIntlayerConfig = options?.require\n ? {\n build: {\n require: options?.require,\n cache: options?.cache,\n },\n }\n : {};\n\n const configWithProjectRequire = defu(\n projectRequireConfig,\n storedConfiguration\n ) as IntlayerConfig;\n\n const configuration = defu(\n options?.override ?? {},\n configWithProjectRequire\n ) as IntlayerConfig;\n\n cacheMemory.set(options, {\n configuration,\n customConfiguration,\n numCustomConfiguration,\n configurationFilePath,\n });\n\n return {\n configuration,\n customConfiguration,\n numCustomConfiguration,\n configurationFilePath,\n };\n};\n\n/**\n * Get the configuration for the intlayer by reading the configuration file (e.g. intlayer.config.js)\n */\nexport const getConfiguration = (\n options?: GetConfigurationOptions\n): IntlayerConfig => getConfigurationAndFilePath(options).configuration;\n"],"mappings":";;;;;;;;;;;;AAyCA,MAAa,+BACX,YACsC;CACtC,IAAI;AAEJ,KAAI;AAEF,YAAU,SAAS,WAAW,oBAAoB,CAAC;UAC5C,MAAM;AAEb,SAAO;GACL,eAAe,yBACb,EAAE,EACF,SAAS,SACT,SAAS,aACV;GACD,qBAAqB;GACrB,wBAAwB;GACxB,uBAAuB;GACxB;;CAGH,MAAM,sBACJ,YAAY,IAAuC,QAAQ;AAE7D,KAAI,oBAAqB,QAAO;CAGhC,MAAM,EAAE,uBAAuB,2BAC7B,wBAAwB,QAAQ;CAOlC,MAAM,MAAyB;EAC7B,GAAG,QAAQ;EACX,GAAG,YAAY;GAAE,KAAK,SAAS;GAAK,SAAS,SAAS;GAAS,CAAC;EACjE;CAED,IAAI;CACJ,IAAI;AAEJ,KAAI,uBAAuB;AAEzB,wBAAsB,sBAAsB,uBAAuB;GACjE,gBAAgB,SAAS;GAEzB,eAAe;IACb,KAAK,SAAS;IACd,SAAS,SAAS;IACnB;GAED,mBAAmB,SAAS;GAC5B,SAAS,SAAS;GAElB,cAAc,SAAS;GACxB,CAAC;AAGF,wBAAsB,yBACpB,qBACA,SAAS,SACT,SAAS,cACT,IACD;OAGD,uBAAsB,yBACpB,EAAE,EACF,SAAS,SACT,SAAS,cACT,IACD;CAaH,MAAM,2BAA2B,KATkB,SAAS,UACxD,EACE,OAAO;EACL,SAAS,SAAS;EAClB,OAAO,SAAS;EACjB,EACF,GACD,EAAE,EAIJ,oBACD;CAED,MAAM,gBAAgB,KACpB,SAAS,YAAY,EAAE,EACvB,yBACD;AAED,aAAY,IAAI,SAAS;EACvB;EACA;EACA;EACA;EACD,CAAC;AAEF,QAAO;EACL;EACA;EACA;EACA;EACD;;;;;AAMH,MAAa,oBACX,YACmB,4BAA4B,QAAQ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  //#region src/defaultValues/compiler.ts
2
- const COMPILER_ENABLED = true;
2
+ const COMPILER_ENABLED = false;
3
3
  const COMPILER_DICTIONARY_KEY_PREFIX = "";
4
4
  const COMPILER_NO_METADATA = false;
5
5
  const COMPILER_SAVE_COMPONENTS = false;
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.mjs","names":[],"sources":["../../../src/defaultValues/compiler.ts"],"sourcesContent":["export const COMPILER_ENABLED = true;\n\nexport const COMPILER_DICTIONARY_KEY_PREFIX = '';\n\nexport const COMPILER_NO_METADATA = false;\n\nexport const COMPILER_SAVE_COMPONENTS = false;\n"],"mappings":";AAAA,MAAa,mBAAmB;AAEhC,MAAa,iCAAiC;AAE9C,MAAa,uBAAuB;AAEpC,MAAa,2BAA2B"}
1
+ {"version":3,"file":"compiler.mjs","names":[],"sources":["../../../src/defaultValues/compiler.ts"],"sourcesContent":["export const COMPILER_ENABLED = false;\n\nexport const COMPILER_DICTIONARY_KEY_PREFIX = '';\n\nexport const COMPILER_NO_METADATA = false;\n\nexport const COMPILER_SAVE_COMPONENTS = false;\n"],"mappings":";AAAA,MAAa,mBAAmB;AAEhC,MAAa,iCAAiC;AAE9C,MAAa,uBAAuB;AAEpC,MAAa,2BAA2B"}
@@ -3,9 +3,9 @@ import { COMPILER_DICTIONARY_KEY_PREFIX, COMPILER_ENABLED, COMPILER_NO_METADATA,
3
3
  import { CODE_DIR, CONTENT_DIR, EXCLUDED_PATHS, FILE_EXTENSIONS, I18NEXT_DICTIONARIES_DIR, REACT_INTL_MESSAGES_DIR, WATCH } from "./content.mjs";
4
4
  import { CONTENT_AUTO_TRANSFORMATION, FILL, IMPORT_MODE, LOCATION } from "./dictionary.mjs";
5
5
  import { CACHE_DIR, CONFIG_DIR, DICTIONARIES_DIR, DYNAMIC_DICTIONARIES_DIR, FETCH_DICTIONARIES_DIR, MAIN_DIR, MASKS_DIR, MODULE_AUGMENTATION_DIR, REMOTE_DICTIONARIES_DIR, TEMP_DIR, TYPES_DIR, UNMERGED_DICTIONARIES_DIR } from "./system.mjs";
6
- import { BASE_PATH, COOKIE_NAME, HEADER_NAME, LOCALE_STORAGE_NAME, ROUTING_MODE, SERVER_SET_COOKIE, STORAGE } from "./routing.mjs";
6
+ import { BASE_PATH, COOKIE_NAME, ENABLE_PROXY, HEADER_NAME, LOCALE_STORAGE_NAME, ROUTING_MODE, SERVER_SET_COOKIE, STORAGE } from "./routing.mjs";
7
7
  import { APPLICATION_URL, BACKEND_URL, CMS_URL, DICTIONARY_PRIORITY_STRATEGY, EDITOR_URL, IS_ENABLED, LIVE_SYNC, LIVE_SYNC_PORT, PORT } from "./editor.mjs";
8
8
  import { DEFAULT_LOCALE, LOCALES, REQUIRED_LOCALES, STRICT_MODE } from "./internationalization.mjs";
9
9
  import { MODE, PREFIX } from "./log.mjs";
10
10
 
11
- export { APPLICATION_URL, BACKEND_URL, BASE_PATH, BUILD_MODE, CACHE, CACHE_DIR, CMS_URL, CODE_DIR, COMPILER_DICTIONARY_KEY_PREFIX, COMPILER_ENABLED, COMPILER_NO_METADATA, COMPILER_SAVE_COMPONENTS, CONFIG_DIR, CONTENT_AUTO_TRANSFORMATION, CONTENT_DIR, COOKIE_NAME, DEFAULT_LOCALE, DICTIONARIES_DIR, DICTIONARY_PRIORITY_STRATEGY, DYNAMIC_DICTIONARIES_DIR, EDITOR_URL, EXCLUDED_PATHS, FETCH_DICTIONARIES_DIR, FILE_EXTENSIONS, FILL, HEADER_NAME, I18NEXT_DICTIONARIES_DIR, IMPORT_MODE, IS_ENABLED, LIVE_SYNC, LIVE_SYNC_PORT, LOCALES, LOCALE_STORAGE_NAME, LOCATION, MAIN_DIR, MASKS_DIR, MINIFY, MODE, MODULE_AUGMENTATION_DIR, OPTIMIZE, OUTPUT_FORMAT, PORT, PREFIX, PURGE, REACT_INTL_MESSAGES_DIR, REMOTE_DICTIONARIES_DIR, REQUIRED_LOCALES, ROUTING_MODE, SERVER_SET_COOKIE, STORAGE, STRICT_MODE, TEMP_DIR, TRAVERSE_PATTERN, TYPES_DIR, TYPE_CHECKING, UNMERGED_DICTIONARIES_DIR, WATCH };
11
+ export { APPLICATION_URL, BACKEND_URL, BASE_PATH, BUILD_MODE, CACHE, CACHE_DIR, CMS_URL, CODE_DIR, COMPILER_DICTIONARY_KEY_PREFIX, COMPILER_ENABLED, COMPILER_NO_METADATA, COMPILER_SAVE_COMPONENTS, CONFIG_DIR, CONTENT_AUTO_TRANSFORMATION, CONTENT_DIR, COOKIE_NAME, DEFAULT_LOCALE, DICTIONARIES_DIR, DICTIONARY_PRIORITY_STRATEGY, DYNAMIC_DICTIONARIES_DIR, EDITOR_URL, ENABLE_PROXY, EXCLUDED_PATHS, FETCH_DICTIONARIES_DIR, FILE_EXTENSIONS, FILL, HEADER_NAME, I18NEXT_DICTIONARIES_DIR, IMPORT_MODE, IS_ENABLED, LIVE_SYNC, LIVE_SYNC_PORT, LOCALES, LOCALE_STORAGE_NAME, LOCATION, MAIN_DIR, MASKS_DIR, MINIFY, MODE, MODULE_AUGMENTATION_DIR, OPTIMIZE, OUTPUT_FORMAT, PORT, PREFIX, PURGE, REACT_INTL_MESSAGES_DIR, REMOTE_DICTIONARIES_DIR, REQUIRED_LOCALES, ROUTING_MODE, SERVER_SET_COOKIE, STORAGE, STRICT_MODE, TEMP_DIR, TRAVERSE_PATTERN, TYPES_DIR, TYPE_CHECKING, UNMERGED_DICTIONARIES_DIR, WATCH };
@@ -5,8 +5,9 @@ const LOCALE_STORAGE_NAME = "INTLAYER_LOCALE";
5
5
  const BASE_PATH = "";
6
6
  const SERVER_SET_COOKIE = "always";
7
7
  const ROUTING_MODE = "prefix-no-default";
8
+ const ENABLE_PROXY = true;
8
9
  const STORAGE = ["cookie", "header"];
9
10
 
10
11
  //#endregion
11
- export { BASE_PATH, COOKIE_NAME, HEADER_NAME, LOCALE_STORAGE_NAME, ROUTING_MODE, SERVER_SET_COOKIE, STORAGE };
12
+ export { BASE_PATH, COOKIE_NAME, ENABLE_PROXY, HEADER_NAME, LOCALE_STORAGE_NAME, ROUTING_MODE, SERVER_SET_COOKIE, STORAGE };
12
13
  //# sourceMappingURL=routing.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"routing.mjs","names":[],"sources":["../../../src/defaultValues/routing.ts"],"sourcesContent":["import type { RoutingStorageInput } from '@intlayer/types/config';\n\nexport const HEADER_NAME = 'x-intlayer-locale';\n\nexport const COOKIE_NAME = 'INTLAYER_LOCALE';\nexport const LOCALE_STORAGE_NAME = 'INTLAYER_LOCALE';\n\nexport const BASE_PATH = '';\n\nexport const SERVER_SET_COOKIE = 'always';\n\nexport const ROUTING_MODE = 'prefix-no-default';\n\nexport const STORAGE: RoutingStorageInput = ['cookie', 'header'];\n"],"mappings":";AAEA,MAAa,cAAc;AAE3B,MAAa,cAAc;AAC3B,MAAa,sBAAsB;AAEnC,MAAa,YAAY;AAEzB,MAAa,oBAAoB;AAEjC,MAAa,eAAe;AAE5B,MAAa,UAA+B,CAAC,UAAU,SAAS"}
1
+ {"version":3,"file":"routing.mjs","names":[],"sources":["../../../src/defaultValues/routing.ts"],"sourcesContent":["import type { RoutingStorageInput } from '@intlayer/types/config';\n\nexport const HEADER_NAME = 'x-intlayer-locale';\n\nexport const COOKIE_NAME = 'INTLAYER_LOCALE';\nexport const LOCALE_STORAGE_NAME = 'INTLAYER_LOCALE';\n\nexport const BASE_PATH = '';\n\nexport const SERVER_SET_COOKIE = 'always';\n\nexport const ROUTING_MODE = 'prefix-no-default';\n\nexport const ENABLE_PROXY = true;\n\nexport const STORAGE: RoutingStorageInput = ['cookie', 'header'];\n"],"mappings":";AAEA,MAAa,cAAc;AAE3B,MAAa,cAAc;AAC3B,MAAa,sBAAsB;AAEnC,MAAa,YAAY;AAEzB,MAAa,oBAAoB;AAEjC,MAAa,eAAe;AAE5B,MAAa,eAAe;AAE5B,MAAa,UAA+B,CAAC,UAAU,SAAS"}
@@ -24,6 +24,25 @@ const formatNodeTypeToEnvVar = (nodeTypes, wrapKey = (key) => key, wrapValue = (
24
24
  return acc;
25
25
  }, {});
26
26
  /**
27
+ * Returns the env-var definition disabling the dictionary-selector resolution
28
+ * path (collections, variants) when no built dictionary declares
29
+ * a qualifier. Set to `"false"` so bundlers can dead-code-eliminate the
30
+ * selector branch in `getIntlayer` / `useIntlayer`.
31
+ *
32
+ * Emits nothing when selectors are used, leaving the runtime default in place.
33
+ *
34
+ * @example
35
+ * formatDictionarySelectorEnvVar(false)
36
+ * // { INTLAYER_DICTIONARY_SELECTOR: '"false"' }
37
+ *
38
+ * formatDictionarySelectorEnvVar(true)
39
+ * // {}
40
+ *
41
+ * formatDictionarySelectorEnvVar(false, (k) => `process.env.${k}`, (v) => `"${v}"`)
42
+ * // { 'process.env.INTLAYER_DICTIONARY_SELECTOR': '"false"' }
43
+ */
44
+ const formatDictionarySelectorEnvVar = (hasDictionarySelector, wrapKey = (key) => key, wrapValue = (value) => value) => hasDictionarySelector ? {} : { [wrapKey("INTLAYER_DICTIONARY_SELECTOR")]: wrapValue("false") };
45
+ /**
27
46
  * Returns env-var definitions for the full Intlayer config to be injected at
28
47
  * build time. Allows bundlers to dead-code-eliminate unused routing modes,
29
48
  * rewrite logic, storage mechanisms, and editor code.
@@ -38,6 +57,7 @@ const formatNodeTypeToEnvVar = (nodeTypes, wrapKey = (key) => key, wrapValue = (
38
57
  const getConfigEnvVars = (config, wrapKey = (key) => key, wrapValue = (value) => value) => {
39
58
  const { routing, editor } = config;
40
59
  const envVars = { [wrapKey("INTLAYER_ROUTING_MODE")]: wrapValue(routing.mode) };
60
+ if (routing.enableProxy === false) envVars[wrapKey("INTLAYER_ROUTING_ENABLE_PROXY")] = wrapValue("false");
41
61
  if (!routing.rewrite) envVars[wrapKey("INTLAYER_ROUTING_REWRITE_RULES")] = wrapValue("false");
42
62
  if (!routing.domains || Object.keys(routing.domains).length === 0) envVars[wrapKey("INTLAYER_ROUTING_DOMAINS")] = wrapValue("false");
43
63
  if (!routing.storage.cookies || routing.storage.cookies.length === 0) envVars[wrapKey("INTLAYER_ROUTING_STORAGE_COOKIES")] = wrapValue("false");
@@ -49,5 +69,5 @@ const getConfigEnvVars = (config, wrapKey = (key) => key, wrapValue = (value) =>
49
69
  };
50
70
 
51
71
  //#endregion
52
- export { formatNodeTypeToEnvVar, getConfigEnvVars };
72
+ export { formatDictionarySelectorEnvVar, formatNodeTypeToEnvVar, getConfigEnvVars };
53
73
  //# sourceMappingURL=envVars.mjs.map
@@ -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 camelCase node-type string to SCREAMING_SNAKE_CASE so that\n * the generated env-var name matches what the plugin source files check.\n *\n * @example\n * toScreamingSnakeCase('reactNode') // 'REACT_NODE'\n * toScreamingSnakeCase('markdown') // 'MARKDOWN'\n */\nconst toScreamingSnakeCase = (str: string): string =>\n str\n .replace(/([A-Z])/g, '_$1')\n .toUpperCase()\n .replace(/^_/, ''); // strip any leading underscore\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(['reactNode'], (k) => `process.env.${k}`, (v) => `\"${v}\"`)\n * // { 'process.env.INTLAYER_NODE_TYPE_REACT_NODE': '\"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_${toScreamingSnakeCase(nodeType)}`)] =\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.domains || Object.keys(routing.domains).length === 0) {\n envVars[wrapKey('INTLAYER_ROUTING_DOMAINS')] = 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":";;;;;;;;;AAUA,MAAM,wBAAwB,QAC5B,IACG,QAAQ,YAAY,MAAM,CAC1B,aAAa,CACb,QAAQ,MAAM,GAAG;;;;;;;;;;;;AAatB,MAAa,0BACX,WACA,WAAW,QAAgB,KAC3B,aAAa,UAAkB,UAE/B,UAAU,QACP,KAAK,aAAa;AACjB,KAAI,QAAQ,sBAAsB,qBAAqB,SAAS,GAAG,IACjE,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,WAAW,OAAO,KAAK,QAAQ,QAAQ,CAAC,WAAW,EAC9D,SAAQ,QAAQ,2BAA2B,IAAI,UAAU,QAAQ;AAGnE,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"}
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 camelCase node-type string to SCREAMING_SNAKE_CASE so that\n * the generated env-var name matches what the plugin source files check.\n *\n * @example\n * toScreamingSnakeCase('reactNode') // 'REACT_NODE'\n * toScreamingSnakeCase('markdown') // 'MARKDOWN'\n */\nconst toScreamingSnakeCase = (str: string): string =>\n str\n .replace(/([A-Z])/g, '_$1')\n .toUpperCase()\n .replace(/^_/, ''); // strip any leading underscore\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(['reactNode'], (k) => `process.env.${k}`, (v) => `\"${v}\"`)\n * // { 'process.env.INTLAYER_NODE_TYPE_REACT_NODE': '\"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_${toScreamingSnakeCase(nodeType)}`)] =\n wrapValue('false');\n return acc;\n },\n {} as Record<string, string>\n );\n\n/**\n * Returns the env-var definition disabling the dictionary-selector resolution\n * path (collections, variants) when no built dictionary declares\n * a qualifier. Set to `\"false\"` so bundlers can dead-code-eliminate the\n * selector branch in `getIntlayer` / `useIntlayer`.\n *\n * Emits nothing when selectors are used, leaving the runtime default in place.\n *\n * @example\n * formatDictionarySelectorEnvVar(false)\n * // { INTLAYER_DICTIONARY_SELECTOR: '\"false\"' }\n *\n * formatDictionarySelectorEnvVar(true)\n * // {}\n *\n * formatDictionarySelectorEnvVar(false, (k) => `process.env.${k}`, (v) => `\"${v}\"`)\n * // { 'process.env.INTLAYER_DICTIONARY_SELECTOR': '\"false\"' }\n */\nexport const formatDictionarySelectorEnvVar = (\n hasDictionarySelector: boolean,\n wrapKey = (key: string) => key,\n wrapValue = (value: string) => value\n): Record<string, string> =>\n hasDictionarySelector\n ? {}\n : { [wrapKey('INTLAYER_DICTIONARY_SELECTOR')]: wrapValue('false') };\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.enableProxy === false) {\n envVars[wrapKey('INTLAYER_ROUTING_ENABLE_PROXY')] = wrapValue('false');\n }\n\n if (!routing.rewrite) {\n envVars[wrapKey('INTLAYER_ROUTING_REWRITE_RULES')] = wrapValue('false');\n }\n\n if (!routing.domains || Object.keys(routing.domains).length === 0) {\n envVars[wrapKey('INTLAYER_ROUTING_DOMAINS')] = 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":";;;;;;;;;AAUA,MAAM,wBAAwB,QAC5B,IACG,QAAQ,YAAY,MAAM,CAC1B,aAAa,CACb,QAAQ,MAAM,GAAG;;;;;;;;;;;;AAatB,MAAa,0BACX,WACA,WAAW,QAAgB,KAC3B,aAAa,UAAkB,UAE/B,UAAU,QACP,KAAK,aAAa;AACjB,KAAI,QAAQ,sBAAsB,qBAAqB,SAAS,GAAG,IACjE,UAAU,QAAQ;AACpB,QAAO;GAET,EAAE,CACH;;;;;;;;;;;;;;;;;;;AAoBH,MAAa,kCACX,uBACA,WAAW,QAAgB,KAC3B,aAAa,UAAkB,UAE/B,wBACI,EAAE,GACF,GAAG,QAAQ,+BAA+B,GAAG,UAAU,QAAQ,EAAE;;;;;;;;;;;;;AAcvE,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,QAAQ,gBAAgB,MAC1B,SAAQ,QAAQ,gCAAgC,IAAI,UAAU,QAAQ;AAGxE,KAAI,CAAC,QAAQ,QACX,SAAQ,QAAQ,iCAAiC,IAAI,UAAU,QAAQ;AAGzE,KAAI,CAAC,QAAQ,WAAW,OAAO,KAAK,QAAQ,QAAQ,CAAC,WAAW,EAC9D,SAAQ,QAAQ,2BAA2B,IAAI,UAAU,QAAQ;AAGnE,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"}
@@ -1,3 +1,3 @@
1
- import { formatNodeTypeToEnvVar, getConfigEnvVars } from "./envVars.mjs";
1
+ import { formatDictionarySelectorEnvVar, formatNodeTypeToEnvVar, getConfigEnvVars } from "./envVars.mjs";
2
2
 
3
- export { formatNodeTypeToEnvVar, getConfigEnvVars };
3
+ export { formatDictionarySelectorEnvVar, formatNodeTypeToEnvVar, getConfigEnvVars };
@@ -39,21 +39,36 @@ const transpileTSToCJSSync = (code, filePath, options) => {
39
39
  const loader = getLoader(extname(filePath));
40
40
  const { esbuildInstance, ...buildOptions } = options ?? {};
41
41
  const esbuildBuildSync = esbuildInstance?.buildSync ?? buildSync;
42
- if (typeof globalThis.__filename !== "string") try {
42
+ const g = globalThis;
43
+ const hadFilename = typeof g.__filename === "string";
44
+ const prevFilename = g.__filename;
45
+ const prevDirname = g.__dirname;
46
+ if (!hadFilename) try {
43
47
  const esbuildEntry = createRequire(import.meta.url).resolve("esbuild");
44
- globalThis.__filename = esbuildEntry;
45
- globalThis.__dirname = dirname(esbuildEntry);
48
+ g.__filename = esbuildEntry;
49
+ g.__dirname = dirname(esbuildEntry);
46
50
  } catch {}
47
- return esbuildBuildSync({
48
- stdin: {
49
- contents: code,
50
- loader,
51
- resolveDir: dirname(filePath),
52
- sourcefile: filePath
53
- },
54
- ...getTransformationOptions(filePath),
55
- ...buildOptions
56
- }).outputFiles?.[0].text;
51
+ let moduleResult;
52
+ try {
53
+ moduleResult = esbuildBuildSync({
54
+ stdin: {
55
+ contents: code,
56
+ loader,
57
+ resolveDir: dirname(filePath),
58
+ sourcefile: filePath
59
+ },
60
+ ...getTransformationOptions(filePath),
61
+ ...buildOptions
62
+ });
63
+ } finally {
64
+ if (!hadFilename) {
65
+ if (prevFilename === void 0) delete g.__filename;
66
+ else g.__filename = prevFilename;
67
+ if (prevDirname === void 0) delete g.__dirname;
68
+ else g.__dirname = prevDirname;
69
+ }
70
+ }
71
+ return moduleResult.outputFiles?.[0]?.text;
57
72
  };
58
73
  const transpileTSToCJS = async (code, filePath, options) => {
59
74
  const loader = getLoader(extname(filePath));
@@ -1 +1 @@
1
- {"version":3,"file":"transpileTSToCJS.mjs","names":[],"sources":["../../../src/loadExternalFile/transpileTSToCJS.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { dirname, extname, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport {\n type BuildOptions,\n type BuildResult,\n buildSync,\n context,\n} from 'esbuild';\nimport { getPackageJsonPath } from '../utils/getPackageJsonPath';\nimport { getLoader } from './bundleFile';\n\nexport type TranspileOptions = BuildOptions & {\n /**\n * Optional custom esbuild instance to use for transpilation.\n * Useful in environments (e.g. VS Code extensions) where the bundled\n * esbuild binary may not match the host platform.\n * When provided, its `buildSync`/`build` methods are used instead of\n * the ones imported from the `esbuild` package.\n */\n esbuildInstance?: typeof import('esbuild');\n};\n\nconst getTsConfigPath = (filePath: string): string | undefined => {\n const tsconfigPath = join(\n getPackageJsonPath(dirname(filePath)).baseDir,\n 'tsconfig.json'\n );\n\n // Only return the tsconfig path if it exists\n return existsSync(tsconfigPath) ? tsconfigPath : undefined;\n};\n\nconst getTransformationOptions = (filePath: string): BuildOptions => ({\n loader: {\n '.js': 'js',\n '.jsx': 'jsx',\n '.mjs': 'js',\n '.ts': 'ts',\n '.tsx': 'tsx',\n '.cjs': 'js',\n '.json': 'json',\n '.md': 'text',\n '.mdx': 'text',\n },\n format: 'cjs',\n target: 'node20',\n platform: 'node',\n write: false,\n packages: 'external',\n bundle: true,\n tsconfig: getTsConfigPath(filePath),\n define: {\n 'import.meta.url': JSON.stringify(pathToFileURL(filePath).href),\n 'import.meta.env': 'process.env',\n },\n});\n\nexport const transpileTSToCJSSync = (\n code: string,\n filePath: string,\n options?: TranspileOptions\n): string | undefined => {\n const extension = extname(filePath);\n const loader = getLoader(extension);\n\n const { esbuildInstance, ...buildOptions } = options ?? {};\n const esbuildBuildSync = esbuildInstance?.buildSync ?? buildSync;\n\n // esbuild's worker thread service calls `new Worker(__filename, …)` on first use.\n // In Vite's SSR module runner the SSR-optimised chunk is ESM and __filename is\n // never declared (confirmed: accessing it throws ReferenceError, not undefined).\n // Because there is no local declaration the bare `__filename` lookup falls\n // through to globalThis, so we set it there to esbuild's own CJS entry-point –\n // the exact path esbuild would use if it were loaded in a normal CJS context.\n if (typeof (globalThis as Record<string, unknown>).__filename !== 'string') {\n try {\n const _require = createRequire(import.meta.url);\n const esbuildEntry = _require.resolve('esbuild');\n (globalThis as Record<string, unknown>).__filename = esbuildEntry;\n (globalThis as Record<string, unknown>).__dirname = dirname(esbuildEntry);\n } catch {\n // Best-effort: if esbuild can't be resolved the caller's catch handles it\n }\n }\n\n const moduleResult: BuildResult = esbuildBuildSync({\n stdin: {\n contents: code,\n loader,\n resolveDir: dirname(filePath), // Add resolveDir to resolve imports relative to the file's location\n sourcefile: filePath, // Add sourcefile for better error messages\n },\n ...getTransformationOptions(filePath),\n ...buildOptions,\n });\n\n const moduleResultString = moduleResult.outputFiles?.[0].text;\n\n return moduleResultString;\n};\n\nexport const transpileTSToCJS = async (\n code: string,\n filePath: string,\n options?: TranspileOptions\n): Promise<string | undefined> => {\n const extension = extname(filePath);\n const loader = getLoader(extension);\n\n const { esbuildInstance, ...buildOptions } = options ?? {};\n // Use context() + rebuild() + dispose() so esbuild deterministically releases\n // Go-subprocess resources for each one-shot transpilation, preventing them\n // from accumulating between rapid HMR-driven file changes.\n const esbuildContext = esbuildInstance?.context ?? context;\n\n const ctx = await esbuildContext({\n stdin: {\n contents: code,\n loader,\n resolveDir: dirname(filePath),\n sourcefile: filePath,\n },\n ...getTransformationOptions(filePath),\n ...buildOptions,\n });\n\n try {\n const moduleResult = await ctx.rebuild();\n return moduleResult.outputFiles?.[0].text;\n } finally {\n await ctx.dispose();\n }\n};\n"],"mappings":";;;;;;;;;AAwBA,MAAM,mBAAmB,aAAyC;CAChE,MAAM,eAAe,KACnB,mBAAmB,QAAQ,SAAS,CAAC,CAAC,SACtC,gBACD;AAGD,QAAO,WAAW,aAAa,GAAG,eAAe;;AAGnD,MAAM,4BAA4B,cAAoC;CACpE,QAAQ;EACN,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,OAAO;EACP,QAAQ;EACT;CACD,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,OAAO;CACP,UAAU;CACV,QAAQ;CACR,UAAU,gBAAgB,SAAS;CACnC,QAAQ;EACN,mBAAmB,KAAK,UAAU,cAAc,SAAS,CAAC,KAAK;EAC/D,mBAAmB;EACpB;CACF;AAED,MAAa,wBACX,MACA,UACA,YACuB;CAEvB,MAAM,SAAS,UADG,QAAQ,SACQ,CAAC;CAEnC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,WAAW,EAAE;CAC1D,MAAM,mBAAmB,iBAAiB,aAAa;AAQvD,KAAI,OAAQ,WAAuC,eAAe,SAChE,KAAI;EAEF,MAAM,eADW,cAAc,OAAO,KAAK,IACd,CAAC,QAAQ,UAAU;AAChD,EAAC,WAAuC,aAAa;AACrD,EAAC,WAAuC,YAAY,QAAQ,aAAa;SACnE;AAkBV,QAbkC,iBAAiB;EACjD,OAAO;GACL,UAAU;GACV;GACA,YAAY,QAAQ,SAAS;GAC7B,YAAY;GACb;EACD,GAAG,yBAAyB,SAAS;EACrC,GAAG;EACJ,CAEsC,CAAC,cAAc,GAAG;;AAK3D,MAAa,mBAAmB,OAC9B,MACA,UACA,YACgC;CAEhC,MAAM,SAAS,UADG,QAAQ,SACQ,CAAC;CAEnC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,WAAW,EAAE;CAM1D,MAAM,MAAM,OAFW,iBAAiB,WAAW,SAElB;EAC/B,OAAO;GACL,UAAU;GACV;GACA,YAAY,QAAQ,SAAS;GAC7B,YAAY;GACb;EACD,GAAG,yBAAyB,SAAS;EACrC,GAAG;EACJ,CAAC;AAEF,KAAI;AAEF,UAAO,MADoB,IAAI,SAAS,EACpB,cAAc,GAAG;WAC7B;AACR,QAAM,IAAI,SAAS"}
1
+ {"version":3,"file":"transpileTSToCJS.mjs","names":[],"sources":["../../../src/loadExternalFile/transpileTSToCJS.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { dirname, extname, join } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport {\n type BuildOptions,\n type BuildResult,\n buildSync,\n context,\n} from 'esbuild';\nimport { getPackageJsonPath } from '../utils/getPackageJsonPath';\nimport { getLoader } from './bundleFile';\n\nexport type TranspileOptions = BuildOptions & {\n /**\n * Optional custom esbuild instance to use for transpilation.\n * Useful in environments (e.g. VS Code extensions) where the bundled\n * esbuild binary may not match the host platform.\n * When provided, its `buildSync`/`build` methods are used instead of\n * the ones imported from the `esbuild` package.\n */\n esbuildInstance?: typeof import('esbuild');\n};\n\nconst getTsConfigPath = (filePath: string): string | undefined => {\n const tsconfigPath = join(\n getPackageJsonPath(dirname(filePath)).baseDir,\n 'tsconfig.json'\n );\n\n // Only return the tsconfig path if it exists\n return existsSync(tsconfigPath) ? tsconfigPath : undefined;\n};\n\nconst getTransformationOptions = (filePath: string): BuildOptions => ({\n loader: {\n '.js': 'js',\n '.jsx': 'jsx',\n '.mjs': 'js',\n '.ts': 'ts',\n '.tsx': 'tsx',\n '.cjs': 'js',\n '.json': 'json',\n '.md': 'text',\n '.mdx': 'text',\n },\n format: 'cjs',\n target: 'node20',\n platform: 'node',\n write: false,\n packages: 'external',\n bundle: true,\n tsconfig: getTsConfigPath(filePath),\n define: {\n 'import.meta.url': JSON.stringify(pathToFileURL(filePath).href),\n 'import.meta.env': 'process.env',\n },\n});\n\nexport const transpileTSToCJSSync = (\n code: string,\n filePath: string,\n options?: TranspileOptions\n): string | undefined => {\n const extension = extname(filePath);\n const loader = getLoader(extension);\n\n const { esbuildInstance, ...buildOptions } = options ?? {};\n const esbuildBuildSync = esbuildInstance?.buildSync ?? buildSync;\n\n // esbuild's worker thread service calls `new Worker(__filename, …)` on first use.\n // In Vite's SSR module runner the SSR-optimised chunk is ESM and __filename is\n // never declared (confirmed: accessing it throws ReferenceError, not undefined).\n // Because there is no local declaration the bare `__filename` lookup falls\n // through to globalThis, so we set it there to esbuild's own CJS entry-point –\n // the exact path esbuild would use if it were loaded in a normal CJS context.\n //\n // IMPORTANT: We save/restore the globals so this temporary shim does not leak\n // to other Vite plugins (e.g. `@vitejs/plugin-react-swc`) that check\n // `typeof __dirname !== \"undefined\"` to locate their own assets.\n const g = globalThis as Record<string, unknown>;\n const hadFilename = typeof g.__filename === 'string';\n const prevFilename = g.__filename;\n const prevDirname = g.__dirname;\n\n if (!hadFilename) {\n try {\n const _require = createRequire(import.meta.url);\n const esbuildEntry = _require.resolve('esbuild');\n g.__filename = esbuildEntry;\n g.__dirname = dirname(esbuildEntry);\n } catch {\n // Best-effort: if esbuild can't be resolved the caller's catch handles it\n }\n }\n\n let moduleResult: BuildResult;\n try {\n moduleResult = esbuildBuildSync({\n stdin: {\n contents: code,\n loader,\n resolveDir: dirname(filePath), // Add resolveDir to resolve imports relative to the file's location\n sourcefile: filePath, // Add sourcefile for better error messages\n },\n ...getTransformationOptions(filePath),\n ...buildOptions,\n });\n } finally {\n // Always restore the previous values so the globals don't linger.\n if (!hadFilename) {\n if (prevFilename === undefined) {\n delete g.__filename;\n } else {\n g.__filename = prevFilename;\n }\n if (prevDirname === undefined) {\n delete g.__dirname;\n } else {\n g.__dirname = prevDirname;\n }\n }\n }\n\n const moduleResultString = moduleResult!.outputFiles?.[0]?.text;\n\n return moduleResultString;\n};\n\nexport const transpileTSToCJS = async (\n code: string,\n filePath: string,\n options?: TranspileOptions\n): Promise<string | undefined> => {\n const extension = extname(filePath);\n const loader = getLoader(extension);\n\n const { esbuildInstance, ...buildOptions } = options ?? {};\n // Use context() + rebuild() + dispose() so esbuild deterministically releases\n // Go-subprocess resources for each one-shot transpilation, preventing them\n // from accumulating between rapid HMR-driven file changes.\n const esbuildContext = esbuildInstance?.context ?? context;\n\n const ctx = await esbuildContext({\n stdin: {\n contents: code,\n loader,\n resolveDir: dirname(filePath),\n sourcefile: filePath,\n },\n ...getTransformationOptions(filePath),\n ...buildOptions,\n });\n\n try {\n const moduleResult = await ctx.rebuild();\n return moduleResult.outputFiles?.[0].text;\n } finally {\n await ctx.dispose();\n }\n};\n"],"mappings":";;;;;;;;;AAwBA,MAAM,mBAAmB,aAAyC;CAChE,MAAM,eAAe,KACnB,mBAAmB,QAAQ,SAAS,CAAC,CAAC,SACtC,gBACD;AAGD,QAAO,WAAW,aAAa,GAAG,eAAe;;AAGnD,MAAM,4BAA4B,cAAoC;CACpE,QAAQ;EACN,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,SAAS;EACT,OAAO;EACP,QAAQ;EACT;CACD,QAAQ;CACR,QAAQ;CACR,UAAU;CACV,OAAO;CACP,UAAU;CACV,QAAQ;CACR,UAAU,gBAAgB,SAAS;CACnC,QAAQ;EACN,mBAAmB,KAAK,UAAU,cAAc,SAAS,CAAC,KAAK;EAC/D,mBAAmB;EACpB;CACF;AAED,MAAa,wBACX,MACA,UACA,YACuB;CAEvB,MAAM,SAAS,UADG,QAAQ,SACQ,CAAC;CAEnC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,WAAW,EAAE;CAC1D,MAAM,mBAAmB,iBAAiB,aAAa;CAYvD,MAAM,IAAI;CACV,MAAM,cAAc,OAAO,EAAE,eAAe;CAC5C,MAAM,eAAe,EAAE;CACvB,MAAM,cAAc,EAAE;AAEtB,KAAI,CAAC,YACH,KAAI;EAEF,MAAM,eADW,cAAc,OAAO,KAAK,IACd,CAAC,QAAQ,UAAU;AAChD,IAAE,aAAa;AACf,IAAE,YAAY,QAAQ,aAAa;SAC7B;CAKV,IAAI;AACJ,KAAI;AACF,iBAAe,iBAAiB;GAC9B,OAAO;IACL,UAAU;IACV;IACA,YAAY,QAAQ,SAAS;IAC7B,YAAY;IACb;GACD,GAAG,yBAAyB,SAAS;GACrC,GAAG;GACJ,CAAC;WACM;AAER,MAAI,CAAC,aAAa;AAChB,OAAI,iBAAiB,OACnB,QAAO,EAAE;OAET,GAAE,aAAa;AAEjB,OAAI,gBAAgB,OAClB,QAAO,EAAE;OAET,GAAE,YAAY;;;AAOpB,QAF2B,aAAc,cAAc,IAAI;;AAK7D,MAAa,mBAAmB,OAC9B,MACA,UACA,YACgC;CAEhC,MAAM,SAAS,UADG,QAAQ,SACQ,CAAC;CAEnC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,WAAW,EAAE;CAM1D,MAAM,MAAM,OAFW,iBAAiB,WAAW,SAElB;EAC/B,OAAO;GACL,UAAU;GACV;GACA,YAAY,QAAQ,SAAS;GAC7B,YAAY;GACb;EACD,GAAG,yBAAyB,SAAS;EACrC,GAAG;EACJ,CAAC;AAEF,KAAI;AAEF,UAAO,MADoB,IAAI,SAAS,EACpB,cAAc,GAAG;WAC7B;AACR,QAAM,IAAI,SAAS"}
@@ -43,7 +43,7 @@ const getAppLogger = (configuration, globalDetails) => (content, details) => log
43
43
  ...details?.config ?? {}
44
44
  }
45
45
  });
46
- const colorize = (string, color, reset) => color ? `${color}${string}${reset ? typeof reset === "boolean" ? RESET : reset : RESET}` : string;
46
+ const colorize = (string, color, reset) => color && typeof window === "undefined" ? `${color}${string}${reset ? typeof reset === "boolean" ? RESET : reset : RESET}` : string;
47
47
  const colorizeLocales = (locales, color = GREEN, reset = RESET) => [locales].flat().map((locale) => colorize(locale, color, reset)).join(`, `);
48
48
  const colorizeKey = (keyPath, color = BEIGE, reset = RESET) => [keyPath].flat().map((key) => colorize(key, color, reset)).join(`, `);
49
49
  const colorizePath = (path, color = GREY, reset = RESET) => [path].flat().map((path) => colorize(path, color, reset)).join(`, `);
@@ -1 +1 @@
1
- {"version":3,"file":"logger.mjs","names":[],"sources":["../../src/logger.ts"],"sourcesContent":["import type { Locale } from '@intlayer/types/allLocales';\nimport type {\n CustomIntlayerConfig,\n IntlayerConfig,\n} from '@intlayer/types/config';\nimport type * as ANSIColorsTypes from './colors';\nimport {\n BEIGE,\n BLUE,\n GREEN,\n GREY,\n GREY_DARK,\n GREY_LIGHT,\n RED,\n RESET,\n WHITE,\n} from './colors';\n\nexport type ANSIColorsType =\n (typeof ANSIColorsTypes)[keyof typeof ANSIColorsTypes];\n\nexport type Details = {\n isVerbose?: boolean;\n level?: 'info' | 'warn' | 'error' | 'debug';\n config?: CustomIntlayerConfig['log'];\n};\n\nexport type Logger = (content: any, details?: Details) => void;\n\nlet loggerPrefix: string | undefined;\n\nexport const setPrefix = (prefix: string | undefined) => {\n loggerPrefix = prefix;\n};\n\nexport const getPrefix = (configPrefix?: string): string | undefined => {\n if (typeof loggerPrefix !== 'undefined') {\n return loggerPrefix;\n }\n\n return configPrefix;\n};\n\nexport const logger: Logger = (content, details) => {\n const config = details?.config ?? {};\n const mode = config.mode ?? 'default';\n\n if (mode === 'disabled' || (details?.isVerbose && mode !== 'verbose')) return;\n\n const prefix = getPrefix(config.prefix);\n const flatContent = prefix ? [prefix, ...[content].flat()] : [content].flat();\n const level = details?.level ?? 'info';\n\n const logMethod =\n config[level] ?? console[level] ?? config.log ?? console.log;\n\n logMethod(...flatContent);\n};\n\nexport const spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\n/**\n * The appLogger function takes the logger and merges it with the configuration from the intlayer config file.\n * It allows overriding the default configuration by passing a config object in the details parameter.\n * The configuration is merged with the default configuration from the intlayer config file.\n */\nexport const getAppLogger =\n (configuration?: Pick<IntlayerConfig, 'log'>, globalDetails?: Details) =>\n (content: any, details?: Details) =>\n logger(content, {\n ...(details ?? {}),\n config: {\n ...configuration?.log,\n ...globalDetails?.config,\n ...(details?.config ?? {}),\n },\n });\n\nexport const colorize = (\n string: string,\n color?: ANSIColorsType,\n reset?: boolean | ANSIColorsType\n): string =>\n color\n ? `${color}${string}${reset ? (typeof reset === 'boolean' ? RESET : reset) : RESET}`\n : string;\n\nexport const colorizeLocales = (\n locales: Locale | Locale[],\n color: ANSIColorsType = GREEN,\n reset: boolean | ANSIColorsType = RESET\n) =>\n [locales]\n .flat()\n .map((locale) => colorize(locale, color, reset))\n .join(`, `);\n\nexport const colorizeKey = (\n keyPath: string | string[],\n color: ANSIColorsType = BEIGE,\n reset: boolean | ANSIColorsType = RESET\n) =>\n [keyPath]\n .flat()\n .map((key) => colorize(key, color, reset))\n .join(`, `);\n\nexport const colorizePath = (\n path: string | string[],\n color: ANSIColorsType = GREY,\n reset: boolean | ANSIColorsType = RESET\n) =>\n [path]\n .flat()\n .map((path) => colorize(path, color, reset))\n .join(`, `);\n\nexport const colorizeNumber = (\n number: number | string,\n options: Partial<Record<Intl.LDMLPluralRule, ANSIColorsType>> = {\n zero: BLUE,\n one: BLUE,\n two: BLUE,\n few: BLUE,\n many: BLUE,\n other: BLUE,\n }\n): string => {\n if (number === 0 || number === '0') {\n const color = options.zero ?? GREEN;\n return colorize(number.toString(), color);\n }\n\n // Kept inside the function. Top-level instantiation of classes/APIs\n // is treated as a side-effect and prevents tree-shaking if the function is unused.\n const rule = new Intl.PluralRules('en').select(Number(number));\n const color = options[rule];\n return colorize(number.toString(), color);\n};\n\nexport const colorizeObject = (\n obj: any,\n indentLevel = 0,\n indentSize = 2,\n key?: string\n): string => {\n const indent = ' '.repeat(indentLevel * indentSize);\n const nextIndent = ' '.repeat((indentLevel + 1) * indentSize);\n\n if (obj === null) {\n return colorize('null', BLUE);\n }\n\n if (typeof obj === 'boolean') {\n return colorize(obj.toString(), BLUE);\n }\n\n if (typeof obj === 'number') {\n return colorize(obj.toString(), BLUE);\n }\n\n if (typeof obj === 'string') {\n const isDateString = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.test(obj);\n const isUrl = obj.startsWith('http://') || obj.startsWith('https://');\n const isGlob = obj.includes('*') || obj.includes('?') || obj.includes('{');\n const isPath =\n obj.startsWith('/') ||\n obj.startsWith('./') ||\n obj.startsWith('../') ||\n /\\.[a-zA-Z0-9]{2,5}$/.test(obj);\n const isSecret =\n /^[0-9a-fA-F]{24,}$/.test(obj) || (obj.length >= 40 && !/\\s/.test(obj));\n const hasSpaces = /\\s/.test(obj);\n\n if (isDateString) return colorize(`\"${obj}\"`, BEIGE);\n if (isUrl) return colorize(`\"${obj}\"`, GREY_DARK);\n if (isGlob) return colorize(`\"${obj}\"`, GREY);\n if (isPath) return colorize(`\"${obj}\"`, GREY_DARK);\n if (isSecret) return colorize(`\"${obj}\"`, GREY);\n if (hasSpaces) return colorize(`\"${obj}\"`, WHITE);\n return colorize(`\"${obj}\"`, BLUE);\n }\n\n if (Array.isArray(obj)) {\n if (obj.length === 0) {\n return '[]';\n }\n const items = obj\n .map(\n (item) =>\n `${nextIndent}${colorizeObject(item, indentLevel + 1, indentSize, key)}`\n )\n .join(',\\n');\n return `[\\n${items}\\n${indent}]`;\n }\n\n if (typeof obj === 'object') {\n const keys = Object.keys(obj);\n\n if (keys.length === 0) {\n return '{}';\n }\n\n const fields = keys\n .map((key) => {\n const coloredKey = colorize(`\"${key}\"`, GREY_LIGHT);\n const value = obj[key];\n const coloredValue = colorizeObject(\n value,\n indentLevel + 1,\n indentSize,\n key\n );\n return `${nextIndent}${coloredKey}: ${coloredValue}`;\n })\n .join(',\\n');\n return `{\\n${fields}\\n${indent}}`;\n }\n\n return colorize(String(obj), GREY);\n};\n\nexport const removeColor = (text: string) =>\n // biome-ignore lint/suspicious/noControlCharactersInRegex: we need to remove the color codes\n text.replace(/\\x1b\\[[0-9;]*m/g, '');\n\nconst getLength = (length: number | number[] | string | string[]): number => {\n let value: number = 0;\n if (typeof length === 'number') {\n value = length;\n }\n if (typeof length === 'string') {\n value = length.length;\n }\n if (\n Array.isArray(length) &&\n length.every((locale) => typeof locale === 'string')\n ) {\n value = Math.max(...length.map((str) => str.length));\n }\n if (\n Array.isArray(length) &&\n length.every((locale) => typeof locale === 'number')\n ) {\n value = Math.max(...length);\n }\n return Math.max(value, 0);\n};\n\nconst defaultColonOptions = {\n colSize: 0,\n minSize: 0,\n maxSize: Infinity,\n pad: 'right',\n padChar: '0',\n};\n\n/**\n * Create a string of spaces of a given length.\n *\n * @param colSize - The length of the string to create.\n * @returns A string of spaces.\n */\nexport const colon = (\n text: string | string[],\n options?: {\n colSize?: number | number[] | string | string[];\n minSize?: number;\n maxSize?: number;\n pad?: 'left' | 'right';\n padChar?: string;\n }\n): string =>\n [text]\n .flat()\n .map((text) => {\n const { colSize, minSize, maxSize, pad } = {\n ...defaultColonOptions,\n ...(options ?? {}),\n };\n\n const length = getLength(colSize);\n const spacesLength = Math.max(\n minSize!,\n Math.min(maxSize!, length - removeColor(text).length)\n );\n\n if (pad === 'left') {\n return `${' '.repeat(spacesLength)}${text}`;\n }\n\n return `${text}${' '.repeat(spacesLength)}`;\n })\n .join('');\n\nexport const x = colorize('✗', RED);\nexport const v = colorize('✓', GREEN);\nexport const clock = colorize('⏲', BLUE);\n"],"mappings":"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"}
1
+ {"version":3,"file":"logger.mjs","names":[],"sources":["../../src/logger.ts"],"sourcesContent":["import type { Locale } from '@intlayer/types/allLocales';\nimport type {\n CustomIntlayerConfig,\n IntlayerConfig,\n} from '@intlayer/types/config';\nimport type * as ANSIColorsTypes from './colors';\nimport {\n BEIGE,\n BLUE,\n GREEN,\n GREY,\n GREY_DARK,\n GREY_LIGHT,\n RED,\n RESET,\n WHITE,\n} from './colors';\n\nexport type ANSIColorsType =\n (typeof ANSIColorsTypes)[keyof typeof ANSIColorsTypes];\n\nexport type Details = {\n isVerbose?: boolean;\n level?: 'info' | 'warn' | 'error' | 'debug';\n config?: CustomIntlayerConfig['log'];\n};\n\nexport type Logger = (content: any, details?: Details) => void;\n\nlet loggerPrefix: string | undefined;\n\nexport const setPrefix = (prefix: string | undefined) => {\n loggerPrefix = prefix;\n};\n\nexport const getPrefix = (configPrefix?: string): string | undefined => {\n if (typeof loggerPrefix !== 'undefined') {\n return loggerPrefix;\n }\n\n return configPrefix;\n};\n\nexport const logger: Logger = (content, details) => {\n const config = details?.config ?? {};\n const mode = config.mode ?? 'default';\n\n if (mode === 'disabled' || (details?.isVerbose && mode !== 'verbose')) return;\n\n const prefix = getPrefix(config.prefix);\n const flatContent = prefix ? [prefix, ...[content].flat()] : [content].flat();\n const level = details?.level ?? 'info';\n\n const logMethod =\n config[level] ?? console[level] ?? config.log ?? console.log;\n\n logMethod(...flatContent);\n};\n\nexport const spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\n/**\n * The appLogger function takes the logger and merges it with the configuration from the intlayer config file.\n * It allows overriding the default configuration by passing a config object in the details parameter.\n * The configuration is merged with the default configuration from the intlayer config file.\n */\nexport const getAppLogger =\n (configuration?: Pick<IntlayerConfig, 'log'>, globalDetails?: Details) =>\n (content: any, details?: Details) =>\n logger(content, {\n ...(details ?? {}),\n config: {\n ...configuration?.log,\n ...globalDetails?.config,\n ...(details?.config ?? {}),\n },\n });\n\nexport const colorize = (\n string: string,\n color?: ANSIColorsType,\n reset?: boolean | ANSIColorsType\n): string =>\n color && typeof window === 'undefined'\n ? `${color}${string}${reset ? (typeof reset === 'boolean' ? RESET : reset) : RESET}`\n : string;\n\nexport const colorizeLocales = (\n locales: Locale | Locale[],\n color: ANSIColorsType = GREEN,\n reset: boolean | ANSIColorsType = RESET\n) =>\n [locales]\n .flat()\n .map((locale) => colorize(locale, color, reset))\n .join(`, `);\n\nexport const colorizeKey = (\n keyPath: string | string[],\n color: ANSIColorsType = BEIGE,\n reset: boolean | ANSIColorsType = RESET\n) =>\n [keyPath]\n .flat()\n .map((key) => colorize(key, color, reset))\n .join(`, `);\n\nexport const colorizePath = (\n path: string | string[],\n color: ANSIColorsType = GREY,\n reset: boolean | ANSIColorsType = RESET\n) =>\n [path]\n .flat()\n .map((path) => colorize(path, color, reset))\n .join(`, `);\n\nexport const colorizeNumber = (\n number: number | string,\n options: Partial<Record<Intl.LDMLPluralRule, ANSIColorsType>> = {\n zero: BLUE,\n one: BLUE,\n two: BLUE,\n few: BLUE,\n many: BLUE,\n other: BLUE,\n }\n): string => {\n if (number === 0 || number === '0') {\n const color = options.zero ?? GREEN;\n return colorize(number.toString(), color);\n }\n\n // Kept inside the function. Top-level instantiation of classes/APIs\n // is treated as a side-effect and prevents tree-shaking if the function is unused.\n const rule = new Intl.PluralRules('en').select(Number(number));\n const color = options[rule];\n return colorize(number.toString(), color);\n};\n\nexport const colorizeObject = (\n obj: any,\n indentLevel = 0,\n indentSize = 2,\n key?: string\n): string => {\n const indent = ' '.repeat(indentLevel * indentSize);\n const nextIndent = ' '.repeat((indentLevel + 1) * indentSize);\n\n if (obj === null) {\n return colorize('null', BLUE);\n }\n\n if (typeof obj === 'boolean') {\n return colorize(obj.toString(), BLUE);\n }\n\n if (typeof obj === 'number') {\n return colorize(obj.toString(), BLUE);\n }\n\n if (typeof obj === 'string') {\n const isDateString = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/.test(obj);\n const isUrl = obj.startsWith('http://') || obj.startsWith('https://');\n const isGlob = obj.includes('*') || obj.includes('?') || obj.includes('{');\n const isPath =\n obj.startsWith('/') ||\n obj.startsWith('./') ||\n obj.startsWith('../') ||\n /\\.[a-zA-Z0-9]{2,5}$/.test(obj);\n const isSecret =\n /^[0-9a-fA-F]{24,}$/.test(obj) || (obj.length >= 40 && !/\\s/.test(obj));\n const hasSpaces = /\\s/.test(obj);\n\n if (isDateString) return colorize(`\"${obj}\"`, BEIGE);\n if (isUrl) return colorize(`\"${obj}\"`, GREY_DARK);\n if (isGlob) return colorize(`\"${obj}\"`, GREY);\n if (isPath) return colorize(`\"${obj}\"`, GREY_DARK);\n if (isSecret) return colorize(`\"${obj}\"`, GREY);\n if (hasSpaces) return colorize(`\"${obj}\"`, WHITE);\n return colorize(`\"${obj}\"`, BLUE);\n }\n\n if (Array.isArray(obj)) {\n if (obj.length === 0) {\n return '[]';\n }\n const items = obj\n .map(\n (item) =>\n `${nextIndent}${colorizeObject(item, indentLevel + 1, indentSize, key)}`\n )\n .join(',\\n');\n return `[\\n${items}\\n${indent}]`;\n }\n\n if (typeof obj === 'object') {\n const keys = Object.keys(obj);\n\n if (keys.length === 0) {\n return '{}';\n }\n\n const fields = keys\n .map((key) => {\n const coloredKey = colorize(`\"${key}\"`, GREY_LIGHT);\n const value = obj[key];\n const coloredValue = colorizeObject(\n value,\n indentLevel + 1,\n indentSize,\n key\n );\n return `${nextIndent}${coloredKey}: ${coloredValue}`;\n })\n .join(',\\n');\n return `{\\n${fields}\\n${indent}}`;\n }\n\n return colorize(String(obj), GREY);\n};\n\nexport const removeColor = (text: string) =>\n // biome-ignore lint/suspicious/noControlCharactersInRegex: we need to remove the color codes\n text.replace(/\\x1b\\[[0-9;]*m/g, '');\n\nconst getLength = (length: number | number[] | string | string[]): number => {\n let value: number = 0;\n if (typeof length === 'number') {\n value = length;\n }\n if (typeof length === 'string') {\n value = length.length;\n }\n if (\n Array.isArray(length) &&\n length.every((locale) => typeof locale === 'string')\n ) {\n value = Math.max(...length.map((str) => str.length));\n }\n if (\n Array.isArray(length) &&\n length.every((locale) => typeof locale === 'number')\n ) {\n value = Math.max(...length);\n }\n return Math.max(value, 0);\n};\n\nconst defaultColonOptions = {\n colSize: 0,\n minSize: 0,\n maxSize: Infinity,\n pad: 'right',\n padChar: '0',\n};\n\n/**\n * Create a string of spaces of a given length.\n *\n * @param colSize - The length of the string to create.\n * @returns A string of spaces.\n */\nexport const colon = (\n text: string | string[],\n options?: {\n colSize?: number | number[] | string | string[];\n minSize?: number;\n maxSize?: number;\n pad?: 'left' | 'right';\n padChar?: string;\n }\n): string =>\n [text]\n .flat()\n .map((text) => {\n const { colSize, minSize, maxSize, pad } = {\n ...defaultColonOptions,\n ...(options ?? {}),\n };\n\n const length = getLength(colSize);\n const spacesLength = Math.max(\n minSize!,\n Math.min(maxSize!, length - removeColor(text).length)\n );\n\n if (pad === 'left') {\n return `${' '.repeat(spacesLength)}${text}`;\n }\n\n return `${text}${' '.repeat(spacesLength)}`;\n })\n .join('');\n\nexport const x = colorize('✗', RED);\nexport const v = colorize('✓', GREEN);\nexport const clock = colorize('⏲', BLUE);\n"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ //#region src/utils/getDictionarySelectorUsage.ts
2
+ /**
3
+ * Detects whether any built dictionary declares qualifier dimensions
4
+ * (collections or variants).
5
+ *
6
+ * The merge step emits a {@link QualifiedDictionaryGroup} — carrying a
7
+ * non-empty `qualifierTypes` array — for every key whose declarations use a
8
+ * selector. When no group is present, the selector-object resolution path in
9
+ * `getIntlayer` / `useIntlayer` is dead code, and bundlers can eliminate it via
10
+ * the `INTLAYER_DICTIONARY_SELECTOR` env var.
11
+ *
12
+ * @example
13
+ * getHasDictionarySelector(getDictionaries(config));
14
+ * // true → at least one collection / variant / meta dictionary
15
+ * // false → only plain dictionaries (selector logic can be stripped)
16
+ */
17
+ const getHasDictionarySelector = (dictionaries) => {
18
+ return (Array.isArray(dictionaries) ? dictionaries : Object.values(dictionaries)).some((dictionary) => {
19
+ const { qualifierTypes } = dictionary;
20
+ return Array.isArray(qualifierTypes) && qualifierTypes.length > 0;
21
+ });
22
+ };
23
+
24
+ //#endregion
25
+ export { getHasDictionarySelector };
26
+ //# sourceMappingURL=getDictionarySelectorUsage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDictionarySelectorUsage.mjs","names":[],"sources":["../../../src/utils/getDictionarySelectorUsage.ts"],"sourcesContent":["import type {\n Dictionary,\n QualifiedDictionaryGroup,\n} from '@intlayer/types/dictionary';\n\ntype DictionaryOrGroup = Dictionary | QualifiedDictionaryGroup;\n\n/**\n * Detects whether any built dictionary declares qualifier dimensions\n * (collections or variants).\n *\n * The merge step emits a {@link QualifiedDictionaryGroup} — carrying a\n * non-empty `qualifierTypes` array — for every key whose declarations use a\n * selector. When no group is present, the selector-object resolution path in\n * `getIntlayer` / `useIntlayer` is dead code, and bundlers can eliminate it via\n * the `INTLAYER_DICTIONARY_SELECTOR` env var.\n *\n * @example\n * getHasDictionarySelector(getDictionaries(config));\n * // true → at least one collection / variant / meta dictionary\n * // false → only plain dictionaries (selector logic can be stripped)\n */\nexport const getHasDictionarySelector = (\n dictionaries: Record<string, DictionaryOrGroup> | DictionaryOrGroup[]\n): boolean => {\n const dictionariesArray = Array.isArray(dictionaries)\n ? dictionaries\n : Object.values(dictionaries);\n\n return dictionariesArray.some((dictionary) => {\n const { qualifierTypes } = dictionary as QualifiedDictionaryGroup;\n\n return Array.isArray(qualifierTypes) && qualifierTypes.length > 0;\n });\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAsBA,MAAa,4BACX,iBACY;AAKZ,SAJ0B,MAAM,QAAQ,aAAa,GACjD,eACA,OAAO,OAAO,aAAa,EAEN,MAAM,eAAe;EAC5C,MAAM,EAAE,mBAAmB;AAE3B,SAAO,MAAM,QAAQ,eAAe,IAAI,eAAe,SAAS;GAChE"}
@@ -8,6 +8,7 @@ import { configESMxCJSRequire, getProjectRequire, isESModule } from "./ESMxCJSHe
8
8
  import { clearModuleCache } from "./clearModuleCache.mjs";
9
9
  import { compareVersions } from "./compareVersions.mjs";
10
10
  import { extractErrorMessage } from "./extractErrorMessage.mjs";
11
+ import { getHasDictionarySelector } from "./getDictionarySelectorUsage.mjs";
11
12
  import { getStorageAttributes } from "./getStorageAttributes.mjs";
12
13
  import { getUnusedNodeTypes, getUnusedNodeTypesAsync, getUsedNodeTypes, getUsedNodeTypesAsync } from "./getUsedNodeTypes.mjs";
13
14
  import { logStack } from "./logStack.mjs";
@@ -20,4 +21,4 @@ import { camelCaseToSentence } from "./stringFormatter/camelCaseToSentence.mjs";
20
21
  import { kebabCaseToCamelCase } from "./stringFormatter/kebabCaseToCamelCase.mjs";
21
22
  import { toLowerCamelCase } from "./stringFormatter/toLowerCamelCase.mjs";
22
23
 
23
- export { assertPathWithin, cacheDisk, cacheMemory, camelCaseToKebabCase, camelCaseToSentence, clearAllCache, clearCache, clearDiskCacheMemory, clearModuleCache, compareVersions, computeKeyId, configESMxCJSRequire, extractErrorMessage, getAlias, getCache, getExtension, getPackageJsonPath, getProjectRequire, getStorageAttributes, getUnusedNodeTypes, getUnusedNodeTypesAsync, getUsedNodeTypes, getUsedNodeTypesAsync, isESModule, kebabCaseToCamelCase, logStack, normalizePath, parseFilePathPattern, parseStringPattern, retryManager, setCache, setIntlayerIdentifier, stableStringify, toLowerCamelCase };
24
+ export { assertPathWithin, cacheDisk, cacheMemory, camelCaseToKebabCase, camelCaseToSentence, clearAllCache, clearCache, clearDiskCacheMemory, clearModuleCache, compareVersions, computeKeyId, configESMxCJSRequire, extractErrorMessage, getAlias, getCache, getExtension, getHasDictionarySelector, getPackageJsonPath, getProjectRequire, getStorageAttributes, getUnusedNodeTypes, getUnusedNodeTypesAsync, getUsedNodeTypes, getUsedNodeTypesAsync, isESModule, kebabCaseToCamelCase, logStack, normalizePath, parseFilePathPattern, parseStringPattern, retryManager, setCache, setIntlayerIdentifier, stableStringify, toLowerCamelCase };
@@ -1,5 +1,6 @@
1
- import * as _$_intlayer_types0 from "@intlayer/types";
1
+ import * as _$_intlayer_types_config0 from "@intlayer/types/config";
2
2
  import { IntlayerConfig } from "@intlayer/types/config";
3
+ import * as _$_intlayer_types_plugin0 from "@intlayer/types/plugin";
3
4
 
4
5
  //#region src/built.browser.d.ts
5
6
  /**
@@ -9,18 +10,18 @@ import { IntlayerConfig } from "@intlayer/types/config";
9
10
  * only read when a property is first accessed.
10
11
  */
11
12
  declare const configuration: IntlayerConfig;
12
- declare const internationalization: _$_intlayer_types0.InternationalizationConfig;
13
- declare const dictionary: Partial<_$_intlayer_types0.DictionaryConfig>;
14
- declare const routing: _$_intlayer_types0.RoutingConfig;
15
- declare const content: _$_intlayer_types0.ContentConfig;
16
- declare const system: _$_intlayer_types0.SystemConfig;
17
- declare const editor: _$_intlayer_types0.EditorConfig;
18
- declare const log: _$_intlayer_types0.LogConfig;
19
- declare const ai: Partial<_$_intlayer_types0.AiConfig>;
20
- declare const build: _$_intlayer_types0.BuildConfig;
21
- declare const compiler: _$_intlayer_types0.CompilerConfig;
22
- declare const schemas: Record<string, _$_intlayer_types0.ConfigSchema>;
23
- declare const plugins: _$_intlayer_types0.Plugin[];
13
+ declare const internationalization: _$_intlayer_types_config0.InternationalizationConfig;
14
+ declare const dictionary: Partial<_$_intlayer_types_config0.DictionaryConfig>;
15
+ declare const routing: _$_intlayer_types_config0.RoutingConfig;
16
+ declare const content: _$_intlayer_types_config0.ContentConfig;
17
+ declare const system: _$_intlayer_types_config0.SystemConfig;
18
+ declare const editor: _$_intlayer_types_config0.EditorConfig;
19
+ declare const log: _$_intlayer_types_config0.LogConfig;
20
+ declare const ai: Partial<_$_intlayer_types_config0.AiConfig>;
21
+ declare const build: _$_intlayer_types_config0.BuildConfig;
22
+ declare const compiler: _$_intlayer_types_config0.CompilerConfig;
23
+ declare const schemas: Record<string, _$_intlayer_types_config0.ConfigSchema>;
24
+ declare const plugins: _$_intlayer_types_plugin0.Plugin[];
24
25
  //#endregion
25
26
  export { ai, build, compiler, content, configuration as default, dictionary, editor, internationalization, log, plugins, routing, schemas, system };
26
27
  //# sourceMappingURL=built.browser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"built.browser.d.ts","names":[],"sources":["../../src/built.browser.ts"],"mappings":";;;;;;;;AAuCA;;cAfM,aAAA,EAAa,cAAA;AAAA,cAaN,oBAAA,EAAyD,kBAAA,CAArC,0BAAA;AAAA,cACpB,UAAA,EAAU,OAAA,CAA2B,kBAAA,CAA3B,gBAAA;AAAA,cACV,OAAA,EAA+B,kBAAA,CAAxB,aAAA;AAAA,cACP,OAAA,EAA+B,kBAAA,CAAxB,aAAA;AAAA,cACP,MAAA,EAA6B,kBAAA,CAAvB,YAAA;AAAA,cACN,MAAA,EAA6B,kBAAA,CAAvB,YAAA;AAAA,cACN,GAAA,EAAuB,kBAAA,CAApB,SAAA;AAAA,cACH,EAAA,EAAE,OAAA,CAAmB,kBAAA,CAAnB,QAAA;AAAA,cACF,KAAA,EAA2B,kBAAA,CAAtB,WAAA;AAAA,cACL,QAAA,EAAiC,kBAAA,CAAzB,cAAA;AAAA,cACR,OAAA,EAAO,MAAA,SAAwB,kBAAA,CAAxB,YAAA;AAAA,cACP,OAAA,EAA+B,kBAAA,CAAxB,MAAA"}
1
+ {"version":3,"file":"built.browser.d.ts","names":[],"sources":["../../src/built.browser.ts"],"mappings":";;;;;AAsCA;;;;;AACA;AADA,cAdM,aAAA,EAAa,cAAA;AAAA,cAaN,oBAAA,EAAyD,yBAAA,CAArC,0BAAA;AAAA,cACpB,UAAA,EAAU,OAAA,CAA2B,yBAAA,CAA3B,gBAAA;AAAA,cACV,OAAA,EAA+B,yBAAA,CAAxB,aAAA;AAAA,cACP,OAAA,EAA+B,yBAAA,CAAxB,aAAA;AAAA,cACP,MAAA,EAA6B,yBAAA,CAAvB,YAAA;AAAA,cACN,MAAA,EAA6B,yBAAA,CAAvB,YAAA;AAAA,cACN,GAAA,EAAuB,yBAAA,CAApB,SAAA;AAAA,cACH,EAAA,EAAE,OAAA,CAAmB,yBAAA,CAAnB,QAAA;AAAA,cACF,KAAA,EAA2B,yBAAA,CAAtB,WAAA;AAAA,cACL,QAAA,EAAiC,yBAAA,CAAzB,cAAA;AAAA,cACR,OAAA,EAAO,MAAA,SAAwB,yBAAA,CAAxB,YAAA;AAAA,cACP,OAAA,EAA+B,yBAAA,CAAxB,MAAA"}
@@ -41,10 +41,19 @@ declare const buildRoutingFields: (customConfiguration?: Partial<CustomRoutingCo
41
41
  * (`clientId`, `clientSecret`). The browser-safe {@link BrowserIntlayerConfig}
42
42
  * omits those fields when exposing config to the client.
43
43
  *
44
+ * When the user does not explicitly set `clientId` / `clientSecret` in the
45
+ * configuration file, they fall back to the `INTLAYER_CLIENT_ID` /
46
+ * `INTLAYER_CLIENT_SECRET` environment variables read from `env`. This lets
47
+ * users authenticate purely through their `.env` file (including files passed
48
+ * via the CLI `--env-file` flag) without having to wire `process.env` into the
49
+ * configuration manually.
50
+ *
44
51
  * @param customConfiguration - Partial user-supplied editor config.
52
+ * @param env - Environment variables used to resolve credential fallbacks.
53
+ * Defaults to `process.env`.
45
54
  * @returns A fully-defaulted {@link EditorConfig}.
46
55
  */
47
- declare const buildEditorFields: (customConfiguration?: Partial<EditorConfig>) => EditorConfig;
56
+ declare const buildEditorFields: (customConfiguration?: Partial<EditorConfig>, env?: NodeJS.ProcessEnv) => EditorConfig;
48
57
  /**
49
58
  * Build the log section of the Intlayer configuration.
50
59
  *
@@ -1 +1 @@
1
- {"version":3,"file":"buildBrowserConfiguration.d.ts","names":[],"sources":["../../../src/configFile/buildBrowserConfiguration.ts"],"mappings":";;;;;AA0CA;;;;;KAAY,qBAAA;EACV,oBAAA,EAAsB,IAAA,CACpB,0BAAA;EAGF,OAAA,EAAS,aAAA;EACT,MAAA,EAAQ,IAAA,CAAK,YAAA;EACb,GAAA,EAAK,IAAA,CAAK,SAAA;AAAA;AAAA,QAGJ,MAAA;EAAA,UACI,MAAA;IAVY;IAYpB,eAAA,GAAkB,qBAAA;EAAA;AAAA;;;;;;;cAiBT,+BAAA,GACX,mBAAA,GAAsB,OAAA,CAAQ,0BAAA,MAC7B,0BAAA;;AAxBD;;;;;cAuEW,kBAAA,GACX,mBAAA,GAAsB,OAAA,CAAQ,mBAAA,MAC7B,aAAA;;;;;;AAnDH;;;;;cAuJa,iBAAA,GACX,mBAAA,GAAsB,OAAA,CAAQ,YAAA,MAC7B,YAAA;;;;;;;;cAmIU,cAAA,GACX,mBAAA,GAAsB,OAAA,CAAQ,SAAA,GAC9B,YAAA,GAAe,YAAA,KACd,SAAA;AA9OH;;;;;;;;;;;;;;AAsGA;;;;;;;;AAtGA,cAsSa,yBAAA,GACX,YAAA,GAAe,oBAAA,KACd,qBAAA;;;;;;AA7DH;;;;;;cA4Fa,2BAAA,GACX,MAAA,EAAQ,cAAA,KACP,qBAAA"}
1
+ {"version":3,"file":"buildBrowserConfiguration.d.ts","names":[],"sources":["../../../src/configFile/buildBrowserConfiguration.ts"],"mappings":";;;;;AA+CA;;;;;KAAY,qBAAA;EACV,oBAAA,EAAsB,IAAA,CACpB,0BAAA;EAGF,OAAA,EAAS,aAAA;EACT,MAAA,EAAQ,IAAA,CAAK,YAAA;EACb,GAAA,EAAK,IAAA,CAAK,SAAA;AAAA;AAAA,QAGJ,MAAA;EAAA,UACI,MAAA;IAVY;IAYpB,eAAA,GAAkB,qBAAA;EAAA;AAAA;;;;;;;cAiBT,+BAAA,GACX,mBAAA,GAAsB,OAAA,CAAQ,0BAAA,MAC7B,0BAAA;;AAxBD;;;;;cAuEW,kBAAA,GACX,mBAAA,GAAsB,OAAA,CAAQ,mBAAA,MAC7B,aAAA;;;;;;AAnDH;;;;;;;;;;;;;;cA2Ka,iBAAA,GACX,mBAAA,GAAsB,OAAA,CAAQ,YAAA,GAC9B,GAAA,GAAK,MAAA,CAAO,UAAA,KACX,YAAA;;;;;;;;cAoIU,cAAA,GACX,mBAAA,GAAsB,OAAA,CAAQ,SAAA,GAC9B,YAAA,GAAe,YAAA,KACd,SAAA;;;;;;AA1IH;;;;;;;;;;;;;;;;;cAkMa,yBAAA,GACX,YAAA,GAAe,oBAAA,KACd,qBAAA;AA7DH;;;;;;;;;;;AAAA,cA4Fa,2BAAA,GACX,MAAA,EAAQ,cAAA,KACP,qBAAA"}
@@ -18,9 +18,14 @@ import { CustomIntlayerConfig, IntlayerConfig, LogFunctions } from "@intlayer/ty
18
18
  * @param customConfiguration - Optional user-supplied configuration object.
19
19
  * @param baseDir - Project root directory. Defaults to `process.cwd()`.
20
20
  * @param logFunctions - Optional custom logging functions.
21
+ * @param env - Environment variables used to resolve credential fallbacks
22
+ * (e.g. `INTLAYER_CLIENT_ID` / `INTLAYER_CLIENT_SECRET`). Defaults to
23
+ * `process.env`. Callers loading a custom env file (such as the CLI
24
+ * `--env-file` flag) should pass the merged env so credentials defined there
25
+ * are picked up without polluting `process.env`.
21
26
  * @returns A fully-built {@link IntlayerConfig}.
22
27
  */
23
- declare const buildConfigurationFields: (customConfiguration?: CustomIntlayerConfig, baseDir?: string, logFunctions?: LogFunctions) => IntlayerConfig;
28
+ declare const buildConfigurationFields: (customConfiguration?: CustomIntlayerConfig, baseDir?: string, logFunctions?: LogFunctions, env?: NodeJS.ProcessEnv) => IntlayerConfig;
24
29
  //#endregion
25
30
  export { type BrowserIntlayerConfig, buildBrowserConfiguration, buildConfigurationFields, buildEditorFields, buildInternationalizationFields, buildLogFields, buildRoutingFields, extractBrowserConfiguration };
26
31
  //# sourceMappingURL=buildConfigurationFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildConfigurationFields.d.ts","names":[],"sources":["../../../src/configFile/buildConfigurationFields.ts"],"mappings":";;;;;;AA0uBA;;;;;;;;;;;;;;;;cAAa,wBAAA,GACX,mBAAA,GAAsB,oBAAA,EACtB,OAAA,WACA,YAAA,GAAe,YAAA,KACd,cAAA"}
1
+ {"version":3,"file":"buildConfigurationFields.d.ts","names":[],"sources":["../../../src/configFile/buildConfigurationFields.ts"],"mappings":";;;;;;AA+uBA;;;;;;;;;;;;;;;;;;;;;cAAa,wBAAA,GACX,mBAAA,GAAsB,oBAAA,EACtB,OAAA,WACA,YAAA,GAAe,YAAA,EACf,GAAA,GAAK,MAAA,CAAO,UAAA,KACX,cAAA"}