@intlify/bundle-utils 11.0.3 → 11.1.0

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.
package/lib/index.cjs CHANGED
@@ -309,6 +309,38 @@ function generateResourceAst(msg, options = {}, path) {
309
309
  const code = !occured ? `${shared.friendlyJSONstringify(ast)}` : `\`${_msg}\``;
310
310
  return { code, ast, map, errors };
311
311
  }
312
+ function filterMessageKeys(messages, shouldKeep, parentPath = []) {
313
+ const result = {};
314
+ for (const [key, value] of Object.entries(messages)) {
315
+ const currentPath = [...parentPath, key];
316
+ const dotPath = currentPath.join(".");
317
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
318
+ const filtered = filterMessageKeys(value, shouldKeep, currentPath);
319
+ if (Object.keys(filtered).length > 0) {
320
+ result[key] = filtered;
321
+ }
322
+ } else {
323
+ if (shouldKeep(dotPath)) {
324
+ result[key] = value;
325
+ }
326
+ }
327
+ }
328
+ return result;
329
+ }
330
+ function filterMultiLocaleMessages(messages, shouldKeep) {
331
+ const result = {};
332
+ for (const [locale, localeMessages] of Object.entries(messages)) {
333
+ if (typeof localeMessages === "object" && localeMessages !== null && !Array.isArray(localeMessages)) {
334
+ const filtered = filterMessageKeys(localeMessages, shouldKeep);
335
+ if (Object.keys(filtered).length > 0) {
336
+ result[locale] = filtered;
337
+ }
338
+ } else {
339
+ result[locale] = localeMessages;
340
+ }
341
+ }
342
+ return result;
343
+ }
312
344
  function excludeLocales({
313
345
  messages,
314
346
  onlyLocales
@@ -637,7 +669,8 @@ function generate$2(targetSource, {
637
669
  onError = void 0,
638
670
  strictMessage = true,
639
671
  escapeHtml = false,
640
- jit = false
672
+ jit = false,
673
+ usedKeyFilter = void 0
641
674
  }) {
642
675
  let value = Buffer.isBuffer(targetSource) ? targetSource.toString() : targetSource;
643
676
  const options = {
@@ -672,6 +705,14 @@ function generate$2(targetSource, {
672
705
  options.locale = "";
673
706
  options.source = void 0;
674
707
  }
708
+ if (usedKeyFilter) {
709
+ const messages = jsoncEslintParser.getStaticJSONValue(ast);
710
+ const isMultiLocale = !locale && type === "sfc";
711
+ const filtered = isMultiLocale ? filterMultiLocaleMessages(messages, usedKeyFilter) : filterMessageKeys(messages, usedKeyFilter);
712
+ value = JSON.stringify(filtered);
713
+ ast = jsoncEslintParser.parseJSON(value, { filePath: filename });
714
+ options.source = value;
715
+ }
675
716
  const generator = createCodeGenerator(options);
676
717
  const codeMaps = _generate$1(generator, ast, options);
677
718
  const { code, map } = generator.context();
@@ -839,7 +880,8 @@ function generate(targetSource, {
839
880
  onError = void 0,
840
881
  strictMessage = true,
841
882
  escapeHtml = false,
842
- jit = false
883
+ jit = false,
884
+ usedKeyFilter = void 0
843
885
  }) {
844
886
  let value = Buffer.isBuffer(targetSource) ? targetSource.toString() : targetSource;
845
887
  const options = {
@@ -874,6 +916,14 @@ function generate(targetSource, {
874
916
  options.locale = "";
875
917
  options.source = void 0;
876
918
  }
919
+ if (usedKeyFilter) {
920
+ const messages = yamlEslintParser.getStaticYAMLValue(ast);
921
+ const isMultiLocale = !locale && type === "sfc";
922
+ const filtered = isMultiLocale ? filterMultiLocaleMessages(messages, usedKeyFilter) : filterMessageKeys(messages, usedKeyFilter);
923
+ value = JSON.stringify(filtered);
924
+ ast = yamlEslintParser.parseYAML(value, { filePath: filename });
925
+ options.source = value;
926
+ }
877
927
  const generator = createCodeGenerator(options);
878
928
  const codeMaps = _generate(generator, ast, options);
879
929
  const { code, map } = generator.context();
package/lib/index.d.cts CHANGED
@@ -36,6 +36,11 @@ interface CodeGenOptions {
36
36
  jit?: boolean;
37
37
  minify?: boolean;
38
38
  transformI18nBlock?: (source: string | Buffer) => string;
39
+ /**
40
+ * When provided, only keys matching this filter will be included in output.
41
+ * The function receives a dot-separated key path and returns true to keep.
42
+ */
43
+ usedKeyFilter?: (keyPath: string) => boolean;
39
44
  onWarn?: (msg: string) => void;
40
45
  onError?: (msg: string, extra?: {
41
46
  source: string;
@@ -65,7 +70,7 @@ declare function generate$3(targetSource: string | Buffer, options: CodeGenOptio
65
70
  * Code / AST generator for i18n json/json5 resource
66
71
  */
67
72
 
68
- declare function generate$2(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit }: CodeGenOptions): CodeGenResult<JSONProgram>;
73
+ declare function generate$2(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit, usedKeyFilter }: CodeGenOptions): CodeGenResult<JSONProgram>;
69
74
 
70
75
  /**
71
76
  * Code generator for i18n ts resource
@@ -85,7 +90,7 @@ declare function generate$1(targetSource: string | Buffer, options: CodeGenOptio
85
90
  /**
86
91
  * @internal
87
92
  */
88
- declare function generate(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit }: CodeGenOptions): CodeGenResult<YAMLProgram>;
93
+ declare function generate(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit, usedKeyFilter }: CodeGenOptions): CodeGenResult<YAMLProgram>;
89
94
 
90
95
  export { checkInstallPackage, generate$2 as generateJSON, generate$3 as generateJavaScript, generate$1 as generateTypescript, generate as generateYAML, getVueI18nVersion };
91
96
  export type { CodeGenOptions, CodeGenResult, DevEnv, InstalledPackage };
package/lib/index.d.mts CHANGED
@@ -36,6 +36,11 @@ interface CodeGenOptions {
36
36
  jit?: boolean;
37
37
  minify?: boolean;
38
38
  transformI18nBlock?: (source: string | Buffer) => string;
39
+ /**
40
+ * When provided, only keys matching this filter will be included in output.
41
+ * The function receives a dot-separated key path and returns true to keep.
42
+ */
43
+ usedKeyFilter?: (keyPath: string) => boolean;
39
44
  onWarn?: (msg: string) => void;
40
45
  onError?: (msg: string, extra?: {
41
46
  source: string;
@@ -65,7 +70,7 @@ declare function generate$3(targetSource: string | Buffer, options: CodeGenOptio
65
70
  * Code / AST generator for i18n json/json5 resource
66
71
  */
67
72
 
68
- declare function generate$2(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit }: CodeGenOptions): CodeGenResult<JSONProgram>;
73
+ declare function generate$2(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit, usedKeyFilter }: CodeGenOptions): CodeGenResult<JSONProgram>;
69
74
 
70
75
  /**
71
76
  * Code generator for i18n ts resource
@@ -85,7 +90,7 @@ declare function generate$1(targetSource: string | Buffer, options: CodeGenOptio
85
90
  /**
86
91
  * @internal
87
92
  */
88
- declare function generate(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit }: CodeGenOptions): CodeGenResult<YAMLProgram>;
93
+ declare function generate(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit, usedKeyFilter }: CodeGenOptions): CodeGenResult<YAMLProgram>;
89
94
 
90
95
  export { checkInstallPackage, generate$2 as generateJSON, generate$3 as generateJavaScript, generate$1 as generateTypescript, generate as generateYAML, getVueI18nVersion };
91
96
  export type { CodeGenOptions, CodeGenResult, DevEnv, InstalledPackage };
package/lib/index.d.ts CHANGED
@@ -36,6 +36,11 @@ interface CodeGenOptions {
36
36
  jit?: boolean;
37
37
  minify?: boolean;
38
38
  transformI18nBlock?: (source: string | Buffer) => string;
39
+ /**
40
+ * When provided, only keys matching this filter will be included in output.
41
+ * The function receives a dot-separated key path and returns true to keep.
42
+ */
43
+ usedKeyFilter?: (keyPath: string) => boolean;
39
44
  onWarn?: (msg: string) => void;
40
45
  onError?: (msg: string, extra?: {
41
46
  source: string;
@@ -65,7 +70,7 @@ declare function generate$3(targetSource: string | Buffer, options: CodeGenOptio
65
70
  * Code / AST generator for i18n json/json5 resource
66
71
  */
67
72
 
68
- declare function generate$2(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit }: CodeGenOptions): CodeGenResult<JSONProgram>;
73
+ declare function generate$2(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit, usedKeyFilter }: CodeGenOptions): CodeGenResult<JSONProgram>;
69
74
 
70
75
  /**
71
76
  * Code generator for i18n ts resource
@@ -85,7 +90,7 @@ declare function generate$1(targetSource: string | Buffer, options: CodeGenOptio
85
90
  /**
86
91
  * @internal
87
92
  */
88
- declare function generate(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit }: CodeGenOptions): CodeGenResult<YAMLProgram>;
93
+ declare function generate(targetSource: string | Buffer, { type, onlyLocales, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, strictMessage, escapeHtml, jit, usedKeyFilter }: CodeGenOptions): CodeGenResult<YAMLProgram>;
89
94
 
90
95
  export { checkInstallPackage, generate$2 as generateJSON, generate$3 as generateJavaScript, generate$1 as generateTypescript, generate as generateYAML, getVueI18nVersion };
91
96
  export type { CodeGenOptions, CodeGenResult, DevEnv, InstalledPackage };
package/lib/index.mjs CHANGED
@@ -302,6 +302,38 @@ function generateResourceAst(msg, options = {}, path) {
302
302
  const code = !occured ? `${friendlyJSONstringify(ast)}` : `\`${_msg}\``;
303
303
  return { code, ast, map, errors };
304
304
  }
305
+ function filterMessageKeys(messages, shouldKeep, parentPath = []) {
306
+ const result = {};
307
+ for (const [key, value] of Object.entries(messages)) {
308
+ const currentPath = [...parentPath, key];
309
+ const dotPath = currentPath.join(".");
310
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
311
+ const filtered = filterMessageKeys(value, shouldKeep, currentPath);
312
+ if (Object.keys(filtered).length > 0) {
313
+ result[key] = filtered;
314
+ }
315
+ } else {
316
+ if (shouldKeep(dotPath)) {
317
+ result[key] = value;
318
+ }
319
+ }
320
+ }
321
+ return result;
322
+ }
323
+ function filterMultiLocaleMessages(messages, shouldKeep) {
324
+ const result = {};
325
+ for (const [locale, localeMessages] of Object.entries(messages)) {
326
+ if (typeof localeMessages === "object" && localeMessages !== null && !Array.isArray(localeMessages)) {
327
+ const filtered = filterMessageKeys(localeMessages, shouldKeep);
328
+ if (Object.keys(filtered).length > 0) {
329
+ result[locale] = filtered;
330
+ }
331
+ } else {
332
+ result[locale] = localeMessages;
333
+ }
334
+ }
335
+ return result;
336
+ }
305
337
  function excludeLocales({
306
338
  messages,
307
339
  onlyLocales
@@ -630,7 +662,8 @@ function generate$2(targetSource, {
630
662
  onError = void 0,
631
663
  strictMessage = true,
632
664
  escapeHtml = false,
633
- jit = false
665
+ jit = false,
666
+ usedKeyFilter = void 0
634
667
  }) {
635
668
  let value = Buffer.isBuffer(targetSource) ? targetSource.toString() : targetSource;
636
669
  const options = {
@@ -665,6 +698,14 @@ function generate$2(targetSource, {
665
698
  options.locale = "";
666
699
  options.source = void 0;
667
700
  }
701
+ if (usedKeyFilter) {
702
+ const messages = getStaticJSONValue(ast);
703
+ const isMultiLocale = !locale && type === "sfc";
704
+ const filtered = isMultiLocale ? filterMultiLocaleMessages(messages, usedKeyFilter) : filterMessageKeys(messages, usedKeyFilter);
705
+ value = JSON.stringify(filtered);
706
+ ast = parseJSON(value, { filePath: filename });
707
+ options.source = value;
708
+ }
668
709
  const generator = createCodeGenerator(options);
669
710
  const codeMaps = _generate$1(generator, ast, options);
670
711
  const { code, map } = generator.context();
@@ -832,7 +873,8 @@ function generate(targetSource, {
832
873
  onError = void 0,
833
874
  strictMessage = true,
834
875
  escapeHtml = false,
835
- jit = false
876
+ jit = false,
877
+ usedKeyFilter = void 0
836
878
  }) {
837
879
  let value = Buffer.isBuffer(targetSource) ? targetSource.toString() : targetSource;
838
880
  const options = {
@@ -867,6 +909,14 @@ function generate(targetSource, {
867
909
  options.locale = "";
868
910
  options.source = void 0;
869
911
  }
912
+ if (usedKeyFilter) {
913
+ const messages = getStaticYAMLValue(ast);
914
+ const isMultiLocale = !locale && type === "sfc";
915
+ const filtered = isMultiLocale ? filterMultiLocaleMessages(messages, usedKeyFilter) : filterMessageKeys(messages, usedKeyFilter);
916
+ value = JSON.stringify(filtered);
917
+ ast = parseYAML(value, { filePath: filename });
918
+ options.source = value;
919
+ }
870
920
  const generator = createCodeGenerator(options);
871
921
  const codeMaps = _generate(generator, ast, options);
872
922
  const { code, map } = generator.context();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@intlify/bundle-utils",
3
3
  "description": "Bundle utilities for Intlify project",
4
- "version": "11.0.3",
4
+ "version": "11.1.0",
5
5
  "author": {
6
6
  "name": "kazuya kawaguchi",
7
7
  "email": "kawakazu80@gmail.com"