@intlayer/babel 9.3.0 → 9.3.2

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 (76) hide show
  1. package/README.md +24 -24
  2. package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -2
  3. package/dist/cjs/babel-plugin-intlayer-extract.cjs.map +1 -1
  4. package/dist/cjs/babel-plugin-intlayer-field-rename.cjs +66 -8
  5. package/dist/cjs/babel-plugin-intlayer-field-rename.cjs.map +1 -1
  6. package/dist/cjs/babel-plugin-intlayer-optimize.cjs +9 -5
  7. package/dist/cjs/babel-plugin-intlayer-optimize.cjs.map +1 -1
  8. package/dist/cjs/babel-plugin-intlayer-purge.cjs.map +1 -1
  9. package/dist/cjs/babel-plugin-intlayer-usage-analyzer.cjs +142 -54
  10. package/dist/cjs/babel-plugin-intlayer-usage-analyzer.cjs.map +1 -1
  11. package/dist/cjs/babelParser.cjs.map +1 -1
  12. package/dist/cjs/extractContent/babelProcessor.cjs +57 -57
  13. package/dist/cjs/extractContent/babelProcessor.cjs.map +1 -1
  14. package/dist/cjs/extractContent/contentWriter.cjs +3 -2
  15. package/dist/cjs/extractContent/contentWriter.cjs.map +1 -1
  16. package/dist/cjs/extractContent/extractContent.cjs +7 -6
  17. package/dist/cjs/extractContent/extractContent.cjs.map +1 -1
  18. package/dist/cjs/extractContent/index.cjs +0 -1
  19. package/dist/cjs/extractContent/processTsxFile.cjs.map +1 -1
  20. package/dist/cjs/extractContent/utils/constants.cjs +0 -14
  21. package/dist/cjs/extractContent/utils/constants.cjs.map +1 -1
  22. package/dist/cjs/extractContent/utils/detectPackageName.cjs.map +1 -1
  23. package/dist/cjs/extractContent/utils/extractDictionaryInfo.cjs +5 -3
  24. package/dist/cjs/extractContent/utils/extractDictionaryInfo.cjs.map +1 -1
  25. package/dist/cjs/extractContent/utils/extractDictionaryKey.cjs.map +1 -1
  26. package/dist/cjs/extractContent/utils/generateKey.cjs +0 -1
  27. package/dist/cjs/extractContent/utils/generateKey.cjs.map +1 -1
  28. package/dist/cjs/extractContent/utils/getExistingIntlayerInfo.cjs.map +1 -1
  29. package/dist/cjs/extractContent/utils/index.cjs +1 -4
  30. package/dist/cjs/extractContent/utils/resolveDictionaryKey.cjs.map +1 -1
  31. package/dist/cjs/extractScriptBlocks.cjs.map +1 -1
  32. package/dist/cjs/getExtractPluginOptions.cjs +4 -2
  33. package/dist/cjs/getExtractPluginOptions.cjs.map +1 -1
  34. package/dist/cjs/getOptimizePluginOptions.cjs.map +1 -1
  35. package/dist/cjs/getPurgePluginOptions.cjs.map +1 -1
  36. package/dist/cjs/index.cjs +1 -1
  37. package/dist/cjs/transformers.cjs.map +1 -1
  38. package/dist/esm/babel-plugin-intlayer-field-rename.mjs +67 -9
  39. package/dist/esm/babel-plugin-intlayer-field-rename.mjs.map +1 -1
  40. package/dist/esm/babel-plugin-intlayer-optimize.mjs +9 -5
  41. package/dist/esm/babel-plugin-intlayer-optimize.mjs.map +1 -1
  42. package/dist/esm/babel-plugin-intlayer-usage-analyzer.mjs +142 -54
  43. package/dist/esm/babel-plugin-intlayer-usage-analyzer.mjs.map +1 -1
  44. package/dist/esm/extractContent/babelProcessor.mjs +51 -51
  45. package/dist/esm/extractContent/babelProcessor.mjs.map +1 -1
  46. package/dist/esm/extractContent/contentWriter.mjs +3 -2
  47. package/dist/esm/extractContent/contentWriter.mjs.map +1 -1
  48. package/dist/esm/extractContent/extractContent.mjs +5 -4
  49. package/dist/esm/extractContent/extractContent.mjs.map +1 -1
  50. package/dist/esm/extractContent/index.mjs +2 -2
  51. package/dist/esm/extractContent/utils/constants.mjs +1 -13
  52. package/dist/esm/extractContent/utils/constants.mjs.map +1 -1
  53. package/dist/esm/extractContent/utils/extractDictionaryInfo.mjs +5 -3
  54. package/dist/esm/extractContent/utils/extractDictionaryInfo.mjs.map +1 -1
  55. package/dist/esm/extractContent/utils/getExistingIntlayerInfo.mjs.map +1 -1
  56. package/dist/esm/extractContent/utils/index.mjs +2 -3
  57. package/dist/esm/getExtractPluginOptions.mjs +4 -2
  58. package/dist/esm/getExtractPluginOptions.mjs.map +1 -1
  59. package/dist/esm/index.mjs +3 -3
  60. package/dist/types/babel-plugin-intlayer-field-rename.d.ts.map +1 -1
  61. package/dist/types/babel-plugin-intlayer-usage-analyzer.d.ts +16 -1
  62. package/dist/types/babel-plugin-intlayer-usage-analyzer.d.ts.map +1 -1
  63. package/dist/types/extractContent/babelProcessor.d.ts.map +1 -1
  64. package/dist/types/extractContent/extractContent.d.ts.map +1 -1
  65. package/dist/types/extractContent/index.d.ts +2 -2
  66. package/dist/types/extractContent/utils/constants.d.ts +1 -7
  67. package/dist/types/extractContent/utils/constants.d.ts.map +1 -1
  68. package/dist/types/extractContent/utils/index.d.ts +2 -3
  69. package/dist/types/index.d.ts +3 -3
  70. package/package.json +9 -10
  71. package/dist/cjs/extractContent/utils/shouldExtract.cjs +0 -39
  72. package/dist/cjs/extractContent/utils/shouldExtract.cjs.map +0 -1
  73. package/dist/esm/extractContent/utils/shouldExtract.mjs +0 -37
  74. package/dist/esm/extractContent/utils/shouldExtract.mjs.map +0 -1
  75. package/dist/types/extractContent/utils/shouldExtract.d.ts +0 -15
  76. package/dist/types/extractContent/utils/shouldExtract.d.ts.map +0 -1
@@ -146,6 +146,21 @@ declare const createPruneContext: () => PruneContext;
146
146
  * fields, as returned by `getNestedDictionaryReferences`.
147
147
  */
148
148
  declare const preserveNestedDictionaryFields: (pruneContext: PruneContext, nestedDictionaryReferences: Map<string, NestedFieldReferences>) => void;
149
+ /**
150
+ * Methods the runtime attaches to a resolved content object rather than fields
151
+ * declared in a `.content` file.
152
+ *
153
+ * `vanilla-intlayer`'s `useIntlayer` / `useDictionary` assign `onChange` onto
154
+ * the content they return, so `useIntlayer('app').onChange(cb)` is a
155
+ * subscription — not a read of a field named `onChange`. Without this list the
156
+ * analyser records `onChange` as the only consumed field and the purge pass
157
+ * strips every real field from the compiled dictionary.
158
+ *
159
+ * The analyser looks *through* these calls: the callback parameter is analysed
160
+ * as a fresh content root, and the call result is analysed again because the
161
+ * helpers return the content object for chaining.
162
+ */
163
+ declare const CHAINABLE_RUNTIME_METHOD_NAMES: Set<string>;
149
164
  /** Canonical intlayer caller names that trigger usage analysis. */
150
165
  declare const INTLAYER_CALLER_NAMES: readonly ['useIntlayer', 'getIntlayer'];
151
166
  type IntlayerCallerName = (typeof INTLAYER_CALLER_NAMES)[number];
@@ -187,5 +202,5 @@ declare const makeUsageAnalyzerBabelPlugin: (pruneContext: PruneContext, options
187
202
  types: typeof BabelTypes;
188
203
  }) => PluginObject;
189
204
  //#endregion
190
- export { type CallerDescriptor, type CallerResultShape, type CallerValueSource, CompatCallerConfig, DEFAULT_COMPAT_CALLERS, DictionaryFieldUsage, INTLAYER_CALLER_NAMES, IntlayerCallerName, NestedRenameEntry, NestedRenameMap, OpaqueFieldOccurrence, PruneContext, createPruneContext, makeUsageAnalyzerBabelPlugin, preserveNestedDictionaryFields };
205
+ export { CHAINABLE_RUNTIME_METHOD_NAMES, type CallerDescriptor, type CallerResultShape, type CallerValueSource, CompatCallerConfig, DEFAULT_COMPAT_CALLERS, DictionaryFieldUsage, INTLAYER_CALLER_NAMES, IntlayerCallerName, NestedRenameEntry, NestedRenameMap, OpaqueFieldOccurrence, PruneContext, createPruneContext, makeUsageAnalyzerBabelPlugin, preserveNestedDictionaryFields };
191
206
  //# sourceMappingURL=babel-plugin-intlayer-usage-analyzer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"babel-plugin-intlayer-usage-analyzer.d.ts","names":[],"sources":["../../src/babel-plugin-intlayer-usage-analyzer.ts"],"mappings":";;;;;;;;;;;;KAiBY,uBAAuB;;;;;;;;KASvB;EACV;EACA,UAAU;;;KAIA,kBAAkB,YAAY;;;;;;;KAQ9B;;;;;;EAMV;;EAGA;;;;;;;;;KAUU;;;;;;EAMV,8BAA8B,YAAY;;;;;EAM1C,2BAA2B;;;;;;EAO3B;;;;;;EAOA,qCAAqC;;;;;;EAOrC,+BAA+B,YAAY;;;;;;;;;;;;EAa3C,gCAAgC,YAE9B,YAAY;;;;;;;;;;;;;EAed,iCAAiC;;;;;;;;;;;EAYjC,0BAA0B;IAEtB;IAAsB;;;cAIf,0BAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAyCzB,iCAA8B,cAC3B,cAAY,4BACE,YAAY;;cAwC7B;KACD,6BAA6B;;;;;;;KAmB7B,qBAAqB;;;;;;;;;;;cAYpB,wBAAwB;;;;;;;;;;;;;;;cAmiCxB,+BAA4B,cAEvB,cAAY;EACd,gBAAgB;SAAsB,OAAA;EAE1B,cAAc;MAAe"}
1
+ {"version":3,"file":"babel-plugin-intlayer-usage-analyzer.d.ts","names":[],"sources":["../../src/babel-plugin-intlayer-usage-analyzer.ts"],"mappings":";;;;;;;;;;;;KAiBY,uBAAuB;;;;;;;;KASvB;EACV;EACA,UAAU;;;KAIA,kBAAkB,YAAY;;;;;;;KAQ9B;;;;;;EAMV;;EAGA;;;;;;;;;KAUU;;;;;;EAMV,8BAA8B,YAAY;;;;;EAM1C,2BAA2B;;;;;;EAO3B;;;;;;EAOA,qCAAqC;;;;;;EAOrC,+BAA+B,YAAY;;;;;;;;;;;;EAa3C,gCAAgC,YAE9B,YAAY;;;;;;;;;;;;;EAed,iCAAiC;;;;;;;;;;;EAYjC,0BAA0B;IAEtB;IAAsB;;;cAIf,0BAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAyCzB,iCAA8B,cAC3B,cAAY,4BACE,YAAY;;;;;;;;;;;;;;;cAqD7B,gCAA8B;;cAG9B;KACD,6BAA6B;;;;;;;KAmB7B,qBAAqB;;;;;;;;;;;cAYpB,wBAAwB;;;;;;;;;;;;;;;cAwsCxB,+BAA4B,cAEvB,cAAY;EACd,gBAAgB;SAAsB,OAAA;EAE1B,cAAc;MAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"babelProcessor.d.ts","names":[],"sources":["../../../src/extractContent/babelProcessor.ts"],"mappings":";;;;;;KAaY;EACV,MAAM;EACN;EACA;EAOA;EACA,oBAAoB,EAAE;EACtB;;;;;;cA4IW,0BAAuB,MAC5B,SAAS,EAAE,aAAa,EAAE,cAAY,kBAC5B,cACF,aAAW,yBACA,MAAM,qBAAmB,kBAChC,eAAe,yBAAuB,cAC1C,oBAAkB,cAClB,IAAI,EAAE;;;;;cAwIT,mCAAgC,KACtC,EAAE,MAAI,kBACK,cACF,aAAW,oBACP,eACH,gBAAc,kBACb,uBACM;EAEtB,kBAAkB,eAAe;EACjC,cAAc;EACd,wBAAwB,IAAI;EAC5B,iBAAiB,IAAI,EAAE;EACvB,gBAAgB;EAChB,SAAS,IAAI,EAAE;;EAEf,oBAAoB,IAAI,EAAE,MAAM;EAChC;;;;;cA6ZW,mBAAgB,KACtB,EAAE,MAAI,kBACK,cACF,aAAW,eACV,gBAAc,kBACb,uBACM;EAEtB,kBAAkB;EAClB,cAAc"}
1
+ {"version":3,"file":"babelProcessor.d.ts","names":[],"sources":["../../../src/extractContent/babelProcessor.ts"],"mappings":";;;;;;KAYY;EACV,MAAM;EACN;EACA;EAOA;EACA,oBAAoB,EAAE;EACtB;;;;;;cA4IW,0BAAuB,MAC5B,SAAS,EAAE,aAAa,EAAE,cAAY,kBAC5B,cACF,aAAW,yBACA,MAAM,qBAAmB,kBAChC,eAAe,yBAAuB,cAC1C,oBAAkB,cAClB,IAAI,EAAE;;;;;cAwIT,mCAAgC,KACtC,EAAE,MAAI,kBACK,cACF,aAAW,oBACP,eACH,gBAAc,kBACb,uBACM;EAEtB,kBAAkB,eAAe;EACjC,cAAc;EACd,wBAAwB,IAAI;EAC5B,iBAAiB,IAAI,EAAE;EACvB,gBAAgB;EAChB,SAAS,IAAI,EAAE;;EAEf,oBAAoB,IAAI,EAAE,MAAM;EAChC;;;;;cA6ZW,mBAAgB,KACtB,EAAE,MAAI,kBACK,cACF,aAAW,eACV,gBAAc,kBACb,uBACM;EAEtB,kBAAkB;EAClB,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"file":"extractContent.d.ts","names":[],"sources":["../../../src/extractContent/extractContent.ts"],"mappings":";;;;;KA0BY;EACV,gBAAgB;EAChB;EACA;EACA,uBAAuB;EACvB,gBAAgB;EAChB;EACA,aAAa;IACX;IACA,SAAS;IACT;eACW;;KAsRV;EACH;EACA,qBAAqB,eAAe;;cAmCzB,iBAAc,kBACT,aACH,aAAW,UACd,2BACT,QAAQ;;;;;;;;;;;cA8EE,qBAAkB,kBACb,aACH,aAAW,UACd,2BACT"}
1
+ {"version":3,"file":"extractContent.d.ts","names":[],"sources":["../../../src/extractContent/extractContent.ts"],"mappings":";;;;;KAsBY;EACV,gBAAgB;EAChB;EACA;EACA,uBAAuB;EACvB,gBAAgB;EAChB;EACA,aAAa;IACX;IACA,SAAS;IACT;eACW;;KAsRV;EACH;EACA,qBAAqB,eAAe;;cAmCzB,iBAAc,kBACT,aACH,aAAW,UACd,2BACT,QAAQ;;;;;;;;;;;cA8EE,qBAAkB,kBACb,aACH,aAAW,UACd,2BACT"}
@@ -1,4 +1,4 @@
1
- import { ATTRIBUTES_TO_EXTRACT, PackageName, SERVER_CAPABLE_PACKAGES, packageList } from "./utils/constants.js";
1
+ import { PackageName, SERVER_CAPABLE_PACKAGES, packageList } from "./utils/constants.js";
2
2
  import { detectPackageName } from "./utils/detectPackageName.js";
3
3
  import { ExtractDictionaryInfoOptions, ResolveContentFilePaths, extractDictionaryInfo, getOutput, resolveContentFilePaths } from "./utils/extractDictionaryInfo.js";
4
4
  import { extractDictionaryKey, extractDictionaryKeyFromPath } from "./utils/extractDictionaryKey.js";
@@ -6,4 +6,4 @@ import { generateKey } from "./utils/generateKey.js";
6
6
  import { getComponentName } from "./utils/getComponentName.js";
7
7
  import { mergeWithExistingMultilingualDictionary, mergeWithExistingPerLocaleDictionary, writeContentHelper } from "./contentWriter.js";
8
8
  import { ExtractIntlayerOptions, extractContent, extractContentSync } from "./extractContent.js";
9
- export { ATTRIBUTES_TO_EXTRACT, ExtractDictionaryInfoOptions, ExtractIntlayerOptions, PackageName, ResolveContentFilePaths, SERVER_CAPABLE_PACKAGES, detectPackageName, extractContent, extractContentSync, extractDictionaryInfo, extractDictionaryKey, extractDictionaryKeyFromPath, generateKey, getComponentName, getOutput, mergeWithExistingMultilingualDictionary, mergeWithExistingPerLocaleDictionary, packageList, resolveContentFilePaths, writeContentHelper };
9
+ export { ExtractDictionaryInfoOptions, ExtractIntlayerOptions, PackageName, ResolveContentFilePaths, SERVER_CAPABLE_PACKAGES, detectPackageName, extractContent, extractContentSync, extractDictionaryInfo, extractDictionaryKey, extractDictionaryKeyFromPath, generateKey, getComponentName, getOutput, mergeWithExistingMultilingualDictionary, mergeWithExistingPerLocaleDictionary, packageList, resolveContentFilePaths, writeContentHelper };
@@ -1,10 +1,4 @@
1
1
  //#region src/extractContent/utils/constants.d.ts
2
- /**
3
- * Attributes that should be extracted as translatable strings from JSX/HTML elements.
4
- * This is the single source of truth shared across all Intlayer compiler packages
5
- * (@intlayer/babel, @intlayer/vue-compiler, @intlayer/svelte-compiler, @intlayer/engine).
6
- */
7
- declare const ATTRIBUTES_TO_EXTRACT: readonly ['title', 'placeholder', 'alt', 'aria-label', 'label'];
8
2
  /**
9
3
  * The list of supported Intlayer integration packages.
10
4
  * This is the single source of truth for package name validation.
@@ -16,5 +10,5 @@ declare const packageList: readonly ['next-intlayer', 'react-intlayer', 'vue-int
16
10
  declare const SERVER_CAPABLE_PACKAGES: ReadonlySet<string>;
17
11
  type PackageName = (typeof packageList)[number];
18
12
  //#endregion
19
- export { ATTRIBUTES_TO_EXTRACT, PackageName, SERVER_CAPABLE_PACKAGES, packageList };
13
+ export { PackageName, SERVER_CAPABLE_PACKAGES, packageList };
20
14
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","names":[],"sources":["../../../../src/extractContent/utils/constants.ts"],"mappings":";;;;;;cAKa;;;;;;;cAcA;;cAiBA,yBAAyB;KAI1B,sBAAsB"}
1
+ {"version":3,"file":"constants.d.ts","names":[],"sources":["../../../../src/extractContent/utils/constants.ts"],"mappings":";;;;;;;cAMa;;cAiBA,yBAAyB;KAI1B,sBAAsB"}
@@ -1,4 +1,4 @@
1
- import { ATTRIBUTES_TO_EXTRACT, PackageName, SERVER_CAPABLE_PACKAGES, packageList } from "./constants.js";
1
+ import { PackageName, SERVER_CAPABLE_PACKAGES, packageList } from "./constants.js";
2
2
  import { detectPackageName } from "./detectPackageName.js";
3
3
  import { ExtractDictionaryInfoOptions, ResolveContentFilePaths, extractDictionaryInfo, getOutput, resolveContentFilePaths } from "./extractDictionaryInfo.js";
4
4
  import { extractDictionaryKey, extractDictionaryKeyFromPath } from "./extractDictionaryKey.js";
@@ -7,5 +7,4 @@ import { getComponentName } from "./getComponentName.js";
7
7
  import { ExistingIntlayerInfo, getExistingIntlayerInfo } from "./getExistingIntlayerInfo.js";
8
8
  import { getOrGenerateKey } from "./getOrGenerateKey.js";
9
9
  import { resolveDictionaryKey } from "./resolveDictionaryKey.js";
10
- import { shouldExtract } from "./shouldExtract.js";
11
- export { ATTRIBUTES_TO_EXTRACT, ExistingIntlayerInfo, ExtractDictionaryInfoOptions, PackageName, ResolveContentFilePaths, SERVER_CAPABLE_PACKAGES, detectPackageName, extractDictionaryInfo, extractDictionaryKey, extractDictionaryKeyFromPath, generateKey, getComponentName, getExistingIntlayerInfo, getOrGenerateKey, getOutput, packageList, resolveContentFilePaths, resolveDictionaryKey, shouldExtract };
10
+ export { ExistingIntlayerInfo, ExtractDictionaryInfoOptions, PackageName, ResolveContentFilePaths, SERVER_CAPABLE_PACKAGES, detectPackageName, extractDictionaryInfo, extractDictionaryKey, extractDictionaryKeyFromPath, generateKey, getComponentName, getExistingIntlayerInfo, getOrGenerateKey, getOutput, packageList, resolveContentFilePaths, resolveDictionaryKey };
@@ -1,6 +1,6 @@
1
- import { ATTRIBUTES_TO_EXTRACT, PackageName, SERVER_CAPABLE_PACKAGES, packageList } from "./extractContent/utils/constants.js";
1
+ import { PackageName, SERVER_CAPABLE_PACKAGES, packageList } from "./extractContent/utils/constants.js";
2
2
  import { ExtractPluginOptions, ExtractResult, intlayerExtractBabelPlugin } from "./babel-plugin-intlayer-extract.js";
3
- import { CallerDescriptor, CallerResultShape, CallerValueSource, CompatCallerConfig, DEFAULT_COMPAT_CALLERS, DictionaryFieldUsage, INTLAYER_CALLER_NAMES, IntlayerCallerName, NestedRenameEntry, NestedRenameMap, OpaqueFieldOccurrence, PruneContext, createPruneContext, makeUsageAnalyzerBabelPlugin, preserveNestedDictionaryFields } from "./babel-plugin-intlayer-usage-analyzer.js";
3
+ import { CHAINABLE_RUNTIME_METHOD_NAMES, CallerDescriptor, CallerResultShape, CallerValueSource, CompatCallerConfig, DEFAULT_COMPAT_CALLERS, DictionaryFieldUsage, INTLAYER_CALLER_NAMES, IntlayerCallerName, NestedRenameEntry, NestedRenameMap, OpaqueFieldOccurrence, PruneContext, createPruneContext, makeUsageAnalyzerBabelPlugin, preserveNestedDictionaryFields } from "./babel-plugin-intlayer-usage-analyzer.js";
4
4
  import { SerializedFieldRenameEntry, SerializedFieldRenameMap, buildNestedRenameMapFromContent, generateShortFieldName, getNestedRenameEntryAtPath, makeFieldRenameBabelPlugin, renameIntlayerFieldAccesses, serializeFieldRenameMap } from "./babel-plugin-intlayer-field-rename.js";
5
5
  import { MinifyPluginOptions, intlayerMinifyBabelPlugin } from "./babel-plugin-intlayer-minify.js";
6
6
  import { OptimizePluginOptions, intlayerOptimizeBabelPlugin } from "./babel-plugin-intlayer-optimize.js";
@@ -18,4 +18,4 @@ import { CompilerMode, getExtractPluginOptions } from "./getExtractPluginOptions
18
18
  import { getOptimizePluginOptions } from "./getOptimizePluginOptions.js";
19
19
  import { getMinifyPluginOptions, getPurgePluginOptions } from "./getPurgePluginOptions.js";
20
20
  import { BABEL_PARSER_OPTIONS, INTLAYER_USAGE_REGEX, SOURCE_FILE_REGEX, analyzeFieldUsageInFile, buildUsageCheckRegex, getUsageCheckRegex, optimizeSourceFile, renameFieldsInCode, renameFieldsInSourceFile } from "./transformers.js";
21
- export { ATTRIBUTES_TO_EXTRACT, BABEL_PARSER_OPTIONS, type CallerDescriptor, type CallerResultShape, type CallerValueSource, CompatCallerConfig, CompilerMode, DEFAULT_COMPAT_CALLERS, DictionaryFieldUsage, ExtractDictionaryInfoOptions, ExtractIntlayerOptions, ExtractPluginOptions, ExtractResult, INTLAYER_CALLER_NAMES, INTLAYER_USAGE_REGEX, IntlayerCallerName, MinifyPluginOptions, NestedRenameEntry, NestedRenameMap, OpaqueFieldOccurrence, OptimizePluginOptions, PackageName, PruneContext, PurgePluginOptions, ResolveContentFilePaths, SERVER_CAPABLE_PACKAGES, SOURCE_FILE_REGEX, ScriptBlock, SerializedFieldRenameEntry, SerializedFieldRenameMap, analyzeFieldUsageInFile, buildNestedRenameMapFromContent, buildUsageCheckRegex, createPruneContext, detectPackageName, extractContent, extractContentSync, extractDictionaryInfo, extractDictionaryKey, extractDictionaryKeyFromPath, extractScriptBlocks, generateKey, generateShortFieldName, getComponentName, getExtractPluginOptions, getMinifyPluginOptions, getNestedRenameEntryAtPath, getOptimizePluginOptions, getOutput, getPurgePluginOptions, getSharedPruneContext, getUsageCheckRegex, injectScriptBlocks, intlayerExtractBabelPlugin, intlayerMinifyBabelPlugin, intlayerOptimizeBabelPlugin, intlayerPurgeBabelPlugin, makeFieldRenameBabelPlugin, makeUsageAnalyzerBabelPlugin, mergeWithExistingMultilingualDictionary, mergeWithExistingPerLocaleDictionary, optimizeSourceFile, packageList, preserveNestedDictionaryFields, renameFieldsInCode, renameFieldsInSourceFile, renameIntlayerFieldAccesses, resolveContentFilePaths, runIntlayerPurgePipeline, serializeFieldRenameMap, writeContentHelper };
21
+ export { BABEL_PARSER_OPTIONS, CHAINABLE_RUNTIME_METHOD_NAMES, type CallerDescriptor, type CallerResultShape, type CallerValueSource, CompatCallerConfig, CompilerMode, DEFAULT_COMPAT_CALLERS, DictionaryFieldUsage, ExtractDictionaryInfoOptions, ExtractIntlayerOptions, ExtractPluginOptions, ExtractResult, INTLAYER_CALLER_NAMES, INTLAYER_USAGE_REGEX, IntlayerCallerName, MinifyPluginOptions, NestedRenameEntry, NestedRenameMap, OpaqueFieldOccurrence, OptimizePluginOptions, PackageName, PruneContext, PurgePluginOptions, ResolveContentFilePaths, SERVER_CAPABLE_PACKAGES, SOURCE_FILE_REGEX, ScriptBlock, SerializedFieldRenameEntry, SerializedFieldRenameMap, analyzeFieldUsageInFile, buildNestedRenameMapFromContent, buildUsageCheckRegex, createPruneContext, detectPackageName, extractContent, extractContentSync, extractDictionaryInfo, extractDictionaryKey, extractDictionaryKeyFromPath, extractScriptBlocks, generateKey, generateShortFieldName, getComponentName, getExtractPluginOptions, getMinifyPluginOptions, getNestedRenameEntryAtPath, getOptimizePluginOptions, getOutput, getPurgePluginOptions, getSharedPruneContext, getUsageCheckRegex, injectScriptBlocks, intlayerExtractBabelPlugin, intlayerMinifyBabelPlugin, intlayerOptimizeBabelPlugin, intlayerPurgeBabelPlugin, makeFieldRenameBabelPlugin, makeUsageAnalyzerBabelPlugin, mergeWithExistingMultilingualDictionary, mergeWithExistingPerLocaleDictionary, optimizeSourceFile, packageList, preserveNestedDictionaryFields, renameFieldsInCode, renameFieldsInSourceFile, renameIntlayerFieldAccesses, resolveContentFilePaths, runIntlayerPurgePipeline, serializeFieldRenameMap, writeContentHelper };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/babel",
3
- "version": "9.3.0",
3
+ "version": "9.3.2",
4
4
  "private": false,
5
5
  "description": "A Babel plugin for Intlayer that transforms declaration files and provides internationalization features during the build process according to the Intlayer configuration.",
6
6
  "keywords": [
@@ -89,19 +89,18 @@
89
89
  "@babel/plugin-syntax-jsx": "8.0.1",
90
90
  "@babel/traverse": "8.0.4",
91
91
  "@babel/types": "8.0.4",
92
- "@intlayer/config": "9.3.0",
93
- "@intlayer/core": "9.3.0",
94
- "@intlayer/dictionaries-entry": "9.3.0",
95
- "@intlayer/engine": "9.3.0",
96
- "@intlayer/types": "9.3.0",
97
- "@intlayer/unmerged-dictionaries-entry": "9.3.0"
92
+ "@intlayer/config": "9.3.2",
93
+ "@intlayer/core": "9.3.2",
94
+ "@intlayer/dictionaries-entry": "9.3.2",
95
+ "@intlayer/engine": "9.3.2",
96
+ "@intlayer/types": "9.3.2",
97
+ "@intlayer/unmerged-dictionaries-entry": "9.3.2"
98
98
  },
99
99
  "devDependencies": {
100
100
  "@babel/plugin-syntax-jsx": "8.0.1",
101
101
  "@types/babel__core": "7.20.5",
102
102
  "@types/babel__generator": "7.27.0",
103
103
  "@types/babel__traverse": "7.28.0",
104
- "@types/convert-source-map": "^2.0.3",
105
104
  "@types/node": "26.2.0",
106
105
  "@utils/ts-config": "1.0.4",
107
106
  "@utils/ts-config-types": "1.0.4",
@@ -113,8 +112,8 @@
113
112
  "vitest": "4.1.10"
114
113
  },
115
114
  "peerDependencies": {
116
- "@intlayer/svelte-compiler": "9.3.0",
117
- "@intlayer/vue-compiler": "9.3.0"
115
+ "@intlayer/svelte-compiler": "9.3.2",
116
+ "@intlayer/vue-compiler": "9.3.2"
118
117
  },
119
118
  "peerDependenciesMeta": {
120
119
  "@intlayer/svelte-compiler": {
@@ -1,39 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
-
3
- //#region src/extractContent/utils/shouldExtract.ts
4
- /**
5
- * Checks whether the given text should be extracted as a translatable string.
6
- *
7
- * Filters out:
8
- * - Empty strings
9
- * - Emails
10
- * - Single capitalized words (likely brand/proper nouns, e.g. "Intlayer")
11
- * - Uncapitalized strings of 2 words or fewer (likely technical terms)
12
- * - Dynamic content patterns like Vue bindings (`v-`) or object patterns (`{`)
13
- */
14
- const shouldExtract = (text) => {
15
- const trimmed = text.trim();
16
- if (!trimmed) return false;
17
- if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) return false;
18
- if (trimmed.startsWith("{") && !trimmed.startsWith("{{") || trimmed.startsWith("v-")) return false;
19
- if (trimmed.includes("=>") || trimmed.includes(");") || trimmed.includes("(){") || trimmed.includes("==") || trimmed.includes("window.") || trimmed.startsWith("(function") || trimmed.startsWith("function(")) return false;
20
- if ((trimmed.match(/[^\p{L}\p{N}\s.,!?;:'"()[\]{}–—/«»„“\p{Sc}%&*+#@^_+=<>/~]/gu) || []).length > 5) return false;
21
- const wordCount = trimmed.split(/\s+/).length;
22
- const cssClassTokenRegex = /^!?([a-z][a-z0-9-]*:)*[a-z][a-z0-9]*(-[a-z0-9[\].,%#/]+)*(\/[a-z0-9]+)?$/;
23
- if (wordCount > 1) {
24
- const tokens = trimmed.split(/\s+/);
25
- if (tokens.every((token) => cssClassTokenRegex.test(token)) && tokens.some((token) => token.includes("-"))) return false;
26
- }
27
- const isCapitalized = /^['"([]*\p{Lu}/u.test(trimmed);
28
- if (wordCount === 1 && isCapitalized) return false;
29
- if (wordCount === 1) {
30
- if (/[a-z]\p{Lu}/u.test(trimmed)) return false;
31
- if (trimmed.includes("-") || trimmed.includes("_")) return false;
32
- }
33
- if (!isCapitalized && wordCount <= 2) return false;
34
- return true;
35
- };
36
-
37
- //#endregion
38
- exports.shouldExtract = shouldExtract;
39
- //# sourceMappingURL=shouldExtract.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shouldExtract.cjs","names":[],"sources":["../../../../src/extractContent/utils/shouldExtract.ts"],"sourcesContent":["/**\n * Checks whether the given text should be extracted as a translatable string.\n *\n * Filters out:\n * - Empty strings\n * - Emails\n * - Single capitalized words (likely brand/proper nouns, e.g. \"Intlayer\")\n * - Uncapitalized strings of 2 words or fewer (likely technical terms)\n * - Dynamic content patterns like Vue bindings (`v-`) or object patterns (`{`)\n */\nexport const shouldExtract = (text: string): boolean => {\n const trimmed = text.trim();\n\n if (!trimmed) return false;\n\n // Ignore emails\n if (/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(trimmed)) return false;\n\n // Ignore dynamic content patterns, but allow {{placeholder}} which is intlayer's insertion format\n if (\n (trimmed.startsWith('{') && !trimmed.startsWith('{{')) ||\n trimmed.startsWith('v-')\n )\n return false;\n\n // Ignore explicit code patterns (markers)\n if (\n trimmed.includes('=>') ||\n trimmed.includes(');') ||\n trimmed.includes('(){') ||\n trimmed.includes('==') ||\n trimmed.includes('window.') ||\n trimmed.startsWith('(function') ||\n trimmed.startsWith('function(')\n ) {\n return false;\n }\n\n // Heuristic: check for characters that are common in code but rare in natural text.\n // Whitelist: letters, numbers, spaces, and frequent text symbols (including punctuation, braces, and technical symbols)\n const nonTextualRegex =\n /[^\\p{L}\\p{N}\\s.,!?;:'\"()[\\]{}–—/«»„“\\p{Sc}%&*+#@^_+=<>/~]/gu;\n const nonTextualMatches = trimmed.match(nonTextualRegex) || [];\n\n // If a string contains a high density of truly exceptional symbols (like |, \\, etc.),\n // it is highly likely to be code or complex technical data.\n if (nonTextualMatches.length > 5) return false;\n\n const wordCount = trimmed.split(/\\s+/).length;\n\n // Ignore CSS/Tailwind utility class strings. A string whose tokens all look\n // like CSS utility classes (lowercase, optional responsive/state prefix like\n // \"sm:\" or \"hover:\", optional hyphenated suffix like \"-4\" or \"-full\") and\n // where at least one token contains a hyphen is almost certainly a className\n // value, not translatable text.\n const cssClassTokenRegex =\n /^!?([a-z][a-z0-9-]*:)*[a-z][a-z0-9]*(-[a-z0-9[\\].,%#/]+)*(\\/[a-z0-9]+)?$/;\n if (wordCount > 1) {\n const tokens = trimmed.split(/\\s+/);\n if (\n tokens.every((token) => cssClassTokenRegex.test(token)) &&\n tokens.some((token) => token.includes('-'))\n ) {\n return false;\n }\n }\n\n // Check if starts with a capital letter (including after an opening parenthesis/quote)\n const isCapitalized = /^['\"([]*\\p{Lu}/u.test(trimmed);\n\n // Ignore single capitalized words (e.g. brand or proper nouns like \"Intlayer\").\n // A lone word starting with a capital is almost always a name/identifier rather\n // than a translatable sentence or label.\n if (wordCount === 1 && isCapitalized) return false;\n\n // Ignore technical identifiers (one word strings with camelCase, kebab-case, snake_case etc.)\n if (wordCount === 1) {\n // CamelCase or internal capitals (like camelCaseProperty or CamelCaseProperty)\n if (/[a-z]\\p{Lu}/u.test(trimmed)) return false;\n // kebab-case or snake_case\n if (trimmed.includes('-') || trimmed.includes('_')) return false;\n }\n\n // We usually want to extract full sentences or labels, not single/short technical words.\n // Extract if capitalized, or if it contains more than 2 words.\n if (!isCapitalized && wordCount <= 2) return false;\n\n return true;\n};\n"],"mappings":";;;;;;;;;;;;;AAUA,MAAa,iBAAiB,SAA0B;CACtD,MAAM,UAAU,KAAK,KAAK;CAE1B,IAAI,CAAC,SAAS,OAAO;CAGrB,IAAI,6BAA6B,KAAK,OAAO,GAAG,OAAO;CAGvD,IACG,QAAQ,WAAW,GAAG,KAAK,CAAC,QAAQ,WAAW,IAAI,KACpD,QAAQ,WAAW,IAAI,GAEvB,OAAO;CAGT,IACE,QAAQ,SAAS,IAAI,KACrB,QAAQ,SAAS,IAAI,KACrB,QAAQ,SAAS,KAAK,KACtB,QAAQ,SAAS,IAAI,KACrB,QAAQ,SAAS,SAAS,KAC1B,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,WAAW,GAE9B,OAAO;CAWT,KAJ0B,QAAQ,MAAM,6DAAe,KAAK,CAAC,EAIxC,CAAC,SAAS,GAAG,OAAO;CAEzC,MAAM,YAAY,QAAQ,MAAM,KAAK,CAAC,CAAC;CAOvC,MAAM,qBACJ;CACF,IAAI,YAAY,GAAG;EACjB,MAAM,SAAS,QAAQ,MAAM,KAAK;EAClC,IACE,OAAO,OAAO,UAAU,mBAAmB,KAAK,KAAK,CAAC,KACtD,OAAO,MAAM,UAAU,MAAM,SAAS,GAAG,CAAC,GAE1C,OAAO;CAEX;CAGA,MAAM,gBAAgB,kBAAkB,KAAK,OAAO;CAKpD,IAAI,cAAc,KAAK,eAAe,OAAO;CAG7C,IAAI,cAAc,GAAG;EAEnB,IAAI,eAAe,KAAK,OAAO,GAAG,OAAO;EAEzC,IAAI,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG,OAAO;CAC7D;CAIA,IAAI,CAAC,iBAAiB,aAAa,GAAG,OAAO;CAE7C,OAAO;AACT"}
@@ -1,37 +0,0 @@
1
- //#region src/extractContent/utils/shouldExtract.ts
2
- /**
3
- * Checks whether the given text should be extracted as a translatable string.
4
- *
5
- * Filters out:
6
- * - Empty strings
7
- * - Emails
8
- * - Single capitalized words (likely brand/proper nouns, e.g. "Intlayer")
9
- * - Uncapitalized strings of 2 words or fewer (likely technical terms)
10
- * - Dynamic content patterns like Vue bindings (`v-`) or object patterns (`{`)
11
- */
12
- const shouldExtract = (text) => {
13
- const trimmed = text.trim();
14
- if (!trimmed) return false;
15
- if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(trimmed)) return false;
16
- if (trimmed.startsWith("{") && !trimmed.startsWith("{{") || trimmed.startsWith("v-")) return false;
17
- if (trimmed.includes("=>") || trimmed.includes(");") || trimmed.includes("(){") || trimmed.includes("==") || trimmed.includes("window.") || trimmed.startsWith("(function") || trimmed.startsWith("function(")) return false;
18
- if ((trimmed.match(/[^\p{L}\p{N}\s.,!?;:'"()[\]{}–—/«»„“\p{Sc}%&*+#@^_+=<>/~]/gu) || []).length > 5) return false;
19
- const wordCount = trimmed.split(/\s+/).length;
20
- const cssClassTokenRegex = /^!?([a-z][a-z0-9-]*:)*[a-z][a-z0-9]*(-[a-z0-9[\].,%#/]+)*(\/[a-z0-9]+)?$/;
21
- if (wordCount > 1) {
22
- const tokens = trimmed.split(/\s+/);
23
- if (tokens.every((token) => cssClassTokenRegex.test(token)) && tokens.some((token) => token.includes("-"))) return false;
24
- }
25
- const isCapitalized = /^['"([]*\p{Lu}/u.test(trimmed);
26
- if (wordCount === 1 && isCapitalized) return false;
27
- if (wordCount === 1) {
28
- if (/[a-z]\p{Lu}/u.test(trimmed)) return false;
29
- if (trimmed.includes("-") || trimmed.includes("_")) return false;
30
- }
31
- if (!isCapitalized && wordCount <= 2) return false;
32
- return true;
33
- };
34
-
35
- //#endregion
36
- export { shouldExtract };
37
- //# sourceMappingURL=shouldExtract.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shouldExtract.mjs","names":[],"sources":["../../../../src/extractContent/utils/shouldExtract.ts"],"sourcesContent":["/**\n * Checks whether the given text should be extracted as a translatable string.\n *\n * Filters out:\n * - Empty strings\n * - Emails\n * - Single capitalized words (likely brand/proper nouns, e.g. \"Intlayer\")\n * - Uncapitalized strings of 2 words or fewer (likely technical terms)\n * - Dynamic content patterns like Vue bindings (`v-`) or object patterns (`{`)\n */\nexport const shouldExtract = (text: string): boolean => {\n const trimmed = text.trim();\n\n if (!trimmed) return false;\n\n // Ignore emails\n if (/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(trimmed)) return false;\n\n // Ignore dynamic content patterns, but allow {{placeholder}} which is intlayer's insertion format\n if (\n (trimmed.startsWith('{') && !trimmed.startsWith('{{')) ||\n trimmed.startsWith('v-')\n )\n return false;\n\n // Ignore explicit code patterns (markers)\n if (\n trimmed.includes('=>') ||\n trimmed.includes(');') ||\n trimmed.includes('(){') ||\n trimmed.includes('==') ||\n trimmed.includes('window.') ||\n trimmed.startsWith('(function') ||\n trimmed.startsWith('function(')\n ) {\n return false;\n }\n\n // Heuristic: check for characters that are common in code but rare in natural text.\n // Whitelist: letters, numbers, spaces, and frequent text symbols (including punctuation, braces, and technical symbols)\n const nonTextualRegex =\n /[^\\p{L}\\p{N}\\s.,!?;:'\"()[\\]{}–—/«»„“\\p{Sc}%&*+#@^_+=<>/~]/gu;\n const nonTextualMatches = trimmed.match(nonTextualRegex) || [];\n\n // If a string contains a high density of truly exceptional symbols (like |, \\, etc.),\n // it is highly likely to be code or complex technical data.\n if (nonTextualMatches.length > 5) return false;\n\n const wordCount = trimmed.split(/\\s+/).length;\n\n // Ignore CSS/Tailwind utility class strings. A string whose tokens all look\n // like CSS utility classes (lowercase, optional responsive/state prefix like\n // \"sm:\" or \"hover:\", optional hyphenated suffix like \"-4\" or \"-full\") and\n // where at least one token contains a hyphen is almost certainly a className\n // value, not translatable text.\n const cssClassTokenRegex =\n /^!?([a-z][a-z0-9-]*:)*[a-z][a-z0-9]*(-[a-z0-9[\\].,%#/]+)*(\\/[a-z0-9]+)?$/;\n if (wordCount > 1) {\n const tokens = trimmed.split(/\\s+/);\n if (\n tokens.every((token) => cssClassTokenRegex.test(token)) &&\n tokens.some((token) => token.includes('-'))\n ) {\n return false;\n }\n }\n\n // Check if starts with a capital letter (including after an opening parenthesis/quote)\n const isCapitalized = /^['\"([]*\\p{Lu}/u.test(trimmed);\n\n // Ignore single capitalized words (e.g. brand or proper nouns like \"Intlayer\").\n // A lone word starting with a capital is almost always a name/identifier rather\n // than a translatable sentence or label.\n if (wordCount === 1 && isCapitalized) return false;\n\n // Ignore technical identifiers (one word strings with camelCase, kebab-case, snake_case etc.)\n if (wordCount === 1) {\n // CamelCase or internal capitals (like camelCaseProperty or CamelCaseProperty)\n if (/[a-z]\\p{Lu}/u.test(trimmed)) return false;\n // kebab-case or snake_case\n if (trimmed.includes('-') || trimmed.includes('_')) return false;\n }\n\n // We usually want to extract full sentences or labels, not single/short technical words.\n // Extract if capitalized, or if it contains more than 2 words.\n if (!isCapitalized && wordCount <= 2) return false;\n\n return true;\n};\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,iBAAiB,SAA0B;CACtD,MAAM,UAAU,KAAK,KAAK;CAE1B,IAAI,CAAC,SAAS,OAAO;CAGrB,IAAI,6BAA6B,KAAK,OAAO,GAAG,OAAO;CAGvD,IACG,QAAQ,WAAW,GAAG,KAAK,CAAC,QAAQ,WAAW,IAAI,KACpD,QAAQ,WAAW,IAAI,GAEvB,OAAO;CAGT,IACE,QAAQ,SAAS,IAAI,KACrB,QAAQ,SAAS,IAAI,KACrB,QAAQ,SAAS,KAAK,KACtB,QAAQ,SAAS,IAAI,KACrB,QAAQ,SAAS,SAAS,KAC1B,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,WAAW,GAE9B,OAAO;CAWT,KAJ0B,QAAQ,MAAM,6DAAe,KAAK,CAAC,EAIxC,CAAC,SAAS,GAAG,OAAO;CAEzC,MAAM,YAAY,QAAQ,MAAM,KAAK,CAAC,CAAC;CAOvC,MAAM,qBACJ;CACF,IAAI,YAAY,GAAG;EACjB,MAAM,SAAS,QAAQ,MAAM,KAAK;EAClC,IACE,OAAO,OAAO,UAAU,mBAAmB,KAAK,KAAK,CAAC,KACtD,OAAO,MAAM,UAAU,MAAM,SAAS,GAAG,CAAC,GAE1C,OAAO;CAEX;CAGA,MAAM,gBAAgB,kBAAkB,KAAK,OAAO;CAKpD,IAAI,cAAc,KAAK,eAAe,OAAO;CAG7C,IAAI,cAAc,GAAG;EAEnB,IAAI,eAAe,KAAK,OAAO,GAAG,OAAO;EAEzC,IAAI,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG,OAAO;CAC7D;CAIA,IAAI,CAAC,iBAAiB,aAAa,GAAG,OAAO;CAE7C,OAAO;AACT"}
@@ -1,15 +0,0 @@
1
- //#region src/extractContent/utils/shouldExtract.d.ts
2
- /**
3
- * Checks whether the given text should be extracted as a translatable string.
4
- *
5
- * Filters out:
6
- * - Empty strings
7
- * - Emails
8
- * - Single capitalized words (likely brand/proper nouns, e.g. "Intlayer")
9
- * - Uncapitalized strings of 2 words or fewer (likely technical terms)
10
- * - Dynamic content patterns like Vue bindings (`v-`) or object patterns (`{`)
11
- */
12
- declare const shouldExtract: (text: string) => boolean;
13
- //#endregion
14
- export { shouldExtract };
15
- //# sourceMappingURL=shouldExtract.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shouldExtract.d.ts","names":[],"sources":["../../../../src/extractContent/utils/shouldExtract.ts"],"mappings":";;;;;;;;;;;cAUa,gBAAa"}