@intlify/bundle-utils 5.2.0 → 5.3.1

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/codegen.d.ts CHANGED
@@ -24,6 +24,7 @@ export interface SourceLocationable {
24
24
  */
25
25
  export interface CodeGenOptions {
26
26
  type?: 'plain' | 'sfc' | 'bare';
27
+ legacy?: boolean;
27
28
  bridge?: boolean;
28
29
  exportESM?: boolean;
29
30
  source?: string;
package/lib/js.js CHANGED
@@ -113,12 +113,7 @@ function generateNode(generator, node, options, injector) {
113
113
  const { forceStringify } = generator.context();
114
114
  const codeMaps = new Map();
115
115
  const { type, bridge, exportESM, sourceMap, isGlobal, locale, useClassComponent } = options;
116
- // prettier-ignore
117
- const componentNamespace = bridge
118
- ? `Component.options`
119
- : useClassComponent
120
- ? `Component.__o`
121
- : `Component`;
116
+ const componentNamespace = '_Component';
122
117
  (0, estree_walker_1.walk)(node, {
123
118
  /**
124
119
  * NOTE:
@@ -144,6 +139,14 @@ function generateNode(generator, node, options, injector) {
144
139
  : `export default`;
145
140
  generator.push(`${exportSyntax} function (Component) {`);
146
141
  generator.indent();
142
+ // prettier-ignore
143
+ const componentVariable = bridge
144
+ ? `Component.options || Component`
145
+ : useClassComponent
146
+ ? `Component.__o || Component`
147
+ : `Component`;
148
+ // prettier-ignore
149
+ generator.pushline(`const ${componentNamespace} = ${componentVariable}`);
147
150
  generator.pushline(`${componentNamespace}.${variableName} = ${componentNamespace}.${variableName} || []`);
148
151
  generator.push(`${componentNamespace}.${variableName}.push({`);
149
152
  generator.indent();
package/lib/json.d.ts CHANGED
@@ -7,4 +7,4 @@ import type { CodeGenOptions, CodeGenResult } from './codegen';
7
7
  /**
8
8
  * @internal
9
9
  */
10
- export declare function generate(targetSource: string | Buffer, { type, bridge, exportESM, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, useClassComponent }: CodeGenOptions, injector?: () => string): CodeGenResult<JSONProgram>;
10
+ export declare function generate(targetSource: string | Buffer, { type, legacy, bridge, exportESM, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError, useClassComponent }: CodeGenOptions, injector?: () => string): CodeGenResult<JSONProgram>;
package/lib/json.js CHANGED
@@ -2,15 +2,20 @@
2
2
  /**
3
3
  * Code generator for i18n json/json5 resource
4
4
  */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
5
8
  Object.defineProperty(exports, "__esModule", { value: true });
6
9
  exports.generate = void 0;
7
10
  const jsonc_eslint_parser_1 = require("jsonc-eslint-parser");
8
11
  const shared_1 = require("@intlify/shared");
9
12
  const codegen_1 = require("./codegen");
13
+ const legacy_1 = require("./legacy");
14
+ const magic_string_1 = __importDefault(require("magic-string"));
10
15
  /**
11
16
  * @internal
12
17
  */
13
- function generate(targetSource, { type = 'plain', bridge = false, exportESM = false, filename = 'vue-i18n-loader.json', inSourceMap = undefined, locale = '', isGlobal = false, sourceMap = false, env = 'development', forceStringify = false, onError = undefined, useClassComponent = false }, injector) {
18
+ function generate(targetSource, { type = 'plain', legacy = false, bridge = false, exportESM = false, filename = 'vue-i18n-loader.json', inSourceMap = undefined, locale = '', isGlobal = false, sourceMap = false, env = 'development', forceStringify = false, onError = undefined, useClassComponent = false }, injector) {
14
19
  const target = Buffer.isBuffer(targetSource)
15
20
  ? targetSource.toString()
16
21
  : targetSource;
@@ -35,6 +40,21 @@ function generate(targetSource, { type = 'plain', bridge = false, exportESM = fa
35
40
  };
36
41
  const generator = (0, codegen_1.createCodeGenerator)(options);
37
42
  const ast = (0, jsonc_eslint_parser_1.parseJSON)(value, { filePath: filename });
43
+ // for vue 2.x
44
+ if (legacy && type === 'sfc') {
45
+ const gen = () => (0, shared_1.friendlyJSONstringify)((0, jsonc_eslint_parser_1.getStaticJSONValue)(ast));
46
+ const code = (0, legacy_1.generateLegacyCode)(options, gen);
47
+ const s = new magic_string_1.default(code);
48
+ return {
49
+ ast,
50
+ code: s.toString(),
51
+ map: s.generateMap({
52
+ file: filename,
53
+ source: value,
54
+ includeContent: true
55
+ })
56
+ };
57
+ }
38
58
  const codeMaps = generateNode(generator, ast, options, injector);
39
59
  const { code, map } = generator.context();
40
60
  // if (map) {
@@ -61,12 +81,7 @@ function generateNode(generator, node, options, injector) {
61
81
  const { forceStringify } = generator.context();
62
82
  const codeMaps = new Map();
63
83
  const { type, bridge, exportESM, sourceMap, isGlobal, locale, useClassComponent } = options;
64
- // prettier-ignore
65
- const componentNamespace = bridge
66
- ? `Component.options`
67
- : useClassComponent
68
- ? `Component.__o`
69
- : `Component`;
84
+ const componentNamespace = '_Component';
70
85
  (0, jsonc_eslint_parser_1.traverseNodes)(node, {
71
86
  enterNode(node, parent) {
72
87
  switch (node.type) {
@@ -85,6 +100,14 @@ function generateNode(generator, node, options, injector) {
85
100
  : `export default`;
86
101
  generator.push(`${exportSyntax} function (Component) {`);
87
102
  generator.indent();
103
+ // prettier-ignore
104
+ const componentVariable = bridge
105
+ ? `Component.options || Component`
106
+ : useClassComponent
107
+ ? `Component.__o || Component`
108
+ : `Component`;
109
+ // prettier-ignore
110
+ generator.pushline(`const ${componentNamespace} = ${componentVariable}`);
88
111
  generator.pushline(`${componentNamespace}.${variableName} = ${componentNamespace}.${variableName} || []`);
89
112
  generator.push(`${componentNamespace}.${variableName}.push({`);
90
113
  generator.indent();
@@ -0,0 +1,2 @@
1
+ import type { CodeGenOptions } from './codegen';
2
+ export declare function generateLegacyCode({ isGlobal }: CodeGenOptions, generator: () => string): string;
package/lib/legacy.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateLegacyCode = void 0;
4
+ const shared_1 = require("@intlify/shared");
5
+ function generateLegacyCode({ isGlobal }, generator) {
6
+ // prettier-ignore
7
+ const componentNamespace = `Component.options`;
8
+ const variableName = !isGlobal ? '__i18n' : '__i18nGlobal';
9
+ const exportSyntax = 'export default';
10
+ const code = `${exportSyntax} function (Component) {
11
+ ${componentNamespace}.${variableName} = ${componentNamespace}.${variableName} || []
12
+ ${componentNamespace}.${variableName}.push(${(0, shared_1.friendlyJSONstringify)(generator())})
13
+ delete ${componentNamespace}._Ctor
14
+ }`;
15
+ return code;
16
+ }
17
+ exports.generateLegacyCode = generateLegacyCode;
package/lib/yaml.d.ts CHANGED
@@ -7,4 +7,4 @@ import type { CodeGenOptions, CodeGenResult } from './codegen';
7
7
  /**
8
8
  * @internal
9
9
  */
10
- export declare function generate(targetSource: string | Buffer, { type, bridge, exportESM, useClassComponent, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError }: CodeGenOptions, injector?: () => string): CodeGenResult<YAMLProgram>;
10
+ export declare function generate(targetSource: string | Buffer, { type, legacy, bridge, exportESM, useClassComponent, filename, inSourceMap, locale, isGlobal, sourceMap, env, forceStringify, onError }: CodeGenOptions, injector?: () => string): CodeGenResult<YAMLProgram>;
package/lib/yaml.js CHANGED
@@ -2,15 +2,20 @@
2
2
  /**
3
3
  * Code generator for i18n yaml resource
4
4
  */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
5
8
  Object.defineProperty(exports, "__esModule", { value: true });
6
9
  exports.generate = void 0;
7
10
  const shared_1 = require("@intlify/shared");
8
11
  const codegen_1 = require("./codegen");
9
12
  const yaml_eslint_parser_1 = require("yaml-eslint-parser");
13
+ const legacy_1 = require("./legacy");
14
+ const magic_string_1 = __importDefault(require("magic-string"));
10
15
  /**
11
16
  * @internal
12
17
  */
13
- function generate(targetSource, { type = 'plain', bridge = false, exportESM = false, useClassComponent = false, filename = 'vue-i18n-loader.yaml', inSourceMap = undefined, locale = '', isGlobal = false, sourceMap = false, env = 'development', forceStringify = false, onError = undefined }, injector) {
18
+ function generate(targetSource, { type = 'plain', legacy = false, bridge = false, exportESM = false, useClassComponent = false, filename = 'vue-i18n-loader.yaml', inSourceMap = undefined, locale = '', isGlobal = false, sourceMap = false, env = 'development', forceStringify = false, onError = undefined }, injector) {
14
19
  const value = Buffer.isBuffer(targetSource)
15
20
  ? targetSource.toString()
16
21
  : targetSource;
@@ -31,6 +36,21 @@ function generate(targetSource, { type = 'plain', bridge = false, exportESM = fa
31
36
  };
32
37
  const generator = (0, codegen_1.createCodeGenerator)(options);
33
38
  const ast = (0, yaml_eslint_parser_1.parseYAML)(value, { filePath: filename });
39
+ // for vue 2.x
40
+ if (legacy && type === 'sfc') {
41
+ const gen = () => (0, shared_1.friendlyJSONstringify)((0, yaml_eslint_parser_1.getStaticYAMLValue)(ast));
42
+ const code = (0, legacy_1.generateLegacyCode)(options, gen);
43
+ const s = new magic_string_1.default(code);
44
+ return {
45
+ ast,
46
+ code: s.toString(),
47
+ map: s.generateMap({
48
+ file: filename,
49
+ source: value,
50
+ includeContent: true
51
+ })
52
+ };
53
+ }
34
54
  const codeMaps = generateNode(generator, ast, options, injector);
35
55
  const { code, map } = generator.context();
36
56
  // prettier-ignore
@@ -51,12 +71,7 @@ function generateNode(generator, node, options, injector) {
51
71
  const { forceStringify } = generator.context();
52
72
  const codeMaps = new Map();
53
73
  const { type, bridge, exportESM, sourceMap, isGlobal, locale, useClassComponent } = options;
54
- // prettier-ignore
55
- const componentNamespace = bridge
56
- ? `Component.options`
57
- : useClassComponent
58
- ? `Component.__o`
59
- : `Component`;
74
+ const componentNamespace = '_Component';
60
75
  (0, yaml_eslint_parser_1.traverseNodes)(node, {
61
76
  enterNode(node, parent) {
62
77
  switch (node.type) {
@@ -74,6 +89,14 @@ function generateNode(generator, node, options, injector) {
74
89
  : `export default`;
75
90
  generator.push(`${exportSyntax} function (Component) {`);
76
91
  generator.indent();
92
+ // prettier-ignore
93
+ const componentVariable = bridge
94
+ ? `Component.options || Component`
95
+ : useClassComponent
96
+ ? `Component.__o || Component`
97
+ : `Component`;
98
+ // prettier-ignore
99
+ generator.pushline(`const ${componentNamespace} = ${componentVariable}`);
77
100
  generator.pushline(`${componentNamespace}.${variableName} = ${componentNamespace}.${variableName} || []`);
78
101
  generator.push(`${componentNamespace}.${variableName}.push({`);
79
102
  generator.indent();
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": "5.2.0",
4
+ "version": "5.3.1",
5
5
  "author": {
6
6
  "name": "kazuya kawaguchi",
7
7
  "email": "kawakazu80@gmail.com"
@@ -23,6 +23,7 @@
23
23
  "acorn": "^8.8.2",
24
24
  "estree-walker": "^2.0.2",
25
25
  "jsonc-eslint-parser": "^1.0.1",
26
+ "magic-string": "^0.30.0",
26
27
  "source-map": "0.6.1",
27
28
  "yaml-eslint-parser": "^0.3.2"
28
29
  },