|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274 |
- "use strict";
- /**
- * Code generator for i18n yaml resource
- */
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.generate = void 0;
- const shared_1 = require("@intlify/shared");
- const codegen_1 = require("./codegen");
- const yaml_eslint_parser_1 = require("yaml-eslint-parser");
- const legacy_1 = require("./legacy");
- const magic_string_1 = __importDefault(require("magic-string"));
- /**
- * @internal
- */
- 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, strictMessage = true, escapeHtml = false }, injector) {
- const value = Buffer.isBuffer(targetSource)
- ? targetSource.toString()
- : targetSource;
- const options = {
- type,
- bridge,
- exportESM,
- source: value,
- sourceMap,
- locale,
- isGlobal,
- inSourceMap,
- env,
- filename,
- forceStringify,
- onError,
- strictMessage,
- escapeHtml,
- useClassComponent
- };
- const generator = (0, codegen_1.createCodeGenerator)(options);
- const ast = (0, yaml_eslint_parser_1.parseYAML)(value, { filePath: filename });
- // for vue 2.x
- if (legacy && type === 'sfc') {
- const gen = () => (0, shared_1.friendlyJSONstringify)((0, yaml_eslint_parser_1.getStaticYAMLValue)(ast));
- const code = (0, legacy_1.generateLegacyCode)(options, gen);
- const s = new magic_string_1.default(code);
- return {
- ast,
- code: s.toString(),
- map: s.generateMap({
- file: filename,
- source: value,
- includeContent: true
- })
- };
- }
- const codeMaps = generateNode(generator, ast, options, injector);
- const { code, map } = generator.context();
- // prettier-ignore
- const newMap = map
- ? (0, codegen_1.mapLinesColumns)(map.toJSON(), codeMaps, inSourceMap) || null // eslint-disable-line @typescript-eslint/no-explicit-any
- : null;
- return {
- ast,
- code,
- map: newMap != null ? newMap : undefined
- };
- }
- exports.generate = generate;
- function generateNode(generator, node, options, injector) {
- const propsCountStack = [];
- const pathStack = [];
- const itemsCountStack = [];
- const { forceStringify } = generator.context();
- const codeMaps = new Map();
- const { type, bridge, exportESM, sourceMap, isGlobal, locale, useClassComponent } = options;
- const componentNamespace = '_Component';
- (0, yaml_eslint_parser_1.traverseNodes)(node, {
- enterNode(node, parent) {
- switch (node.type) {
- case 'Program':
- if (type === 'plain') {
- generator.push(`const resource = `);
- }
- else if (type === 'sfc') {
- const variableName = type === 'sfc' ? (!isGlobal ? '__i18n' : '__i18nGlobal') : '';
- const localeName = type === 'sfc' ? (locale != null ? locale : `""`) : '';
- const exportSyntax = bridge
- ? exportESM
- ? `export default`
- : `module.exports =`
- : `export default`;
- generator.push(`${exportSyntax} function (Component) {`);
- generator.indent();
- // prettier-ignore
- const componentVariable = bridge
- ? `Component.options || Component`
- : useClassComponent
- ? `Component.__o || Component`
- : `Component`;
- // prettier-ignore
- generator.pushline(`const ${componentNamespace} = ${componentVariable}`);
- generator.pushline(`${componentNamespace}.${variableName} = ${componentNamespace}.${variableName} || []`);
- generator.push(`${componentNamespace}.${variableName}.push({`);
- generator.indent();
- generator.pushline(`"locale": ${JSON.stringify(localeName)},`);
- generator.push(`"resource": `);
- }
- break;
- case 'YAMLMapping':
- generator.push(`{`);
- generator.indent();
- propsCountStack.push(node.pairs.length);
- if (parent.type === 'YAMLSequence') {
- const lastIndex = itemsCountStack.length - 1;
- const currentCount = parent.entries.length - itemsCountStack[lastIndex];
- pathStack.push(currentCount.toString());
- itemsCountStack[lastIndex] = --itemsCountStack[lastIndex];
- }
- break;
- case 'YAMLPair':
- if (node.value &&
- node.value.type === 'YAMLScalar' &&
- node.key &&
- node.key.type === 'YAMLScalar') {
- const name = node.key.value;
- const value = node.value.value;
- if ((0, shared_1.isString)(value)) {
- generator.push(`${JSON.stringify(name)}: `);
- name && pathStack.push(name.toString());
- const { code, map } = (0, codegen_1.generateMessageFunction)(value, options, pathStack);
- sourceMap && map != null && codeMaps.set(value, map);
- generator.push(`${code}`, node.value, value);
- }
- else {
- if (forceStringify) {
- const strValue = JSON.stringify(value);
- generator.push(`${JSON.stringify(name)}: `);
- name && pathStack.push(name.toString());
- const { code, map } = (0, codegen_1.generateMessageFunction)(strValue, options, pathStack);
- sourceMap && map != null && codeMaps.set(strValue, map);
- generator.push(`${code}`, node.value, strValue);
- }
- else {
- generator.push(`${JSON.stringify(name)}: ${JSON.stringify(value)}`);
- name && pathStack.push(name.toString());
- }
- }
- }
- else if (node.value &&
- (node.value.type === 'YAMLMapping' ||
- node.value.type === 'YAMLSequence') &&
- node.key &&
- node.key.type === 'YAMLScalar') {
- const name = node.key.value;
- generator.push(`${JSON.stringify(name)}: `);
- name && pathStack.push(name.toString());
- }
- const lastIndex = propsCountStack.length - 1;
- propsCountStack[lastIndex] = --propsCountStack[lastIndex];
- break;
- case 'YAMLSequence':
- generator.push(`[`);
- generator.indent();
- if (parent.type === 'YAMLSequence') {
- const lastIndex = itemsCountStack.length - 1;
- const currentCount = parent.entries.length - itemsCountStack[lastIndex];
- pathStack.push(currentCount.toString());
- itemsCountStack[lastIndex] = --itemsCountStack[lastIndex];
- }
- itemsCountStack.push(node.entries.length);
- break;
- case 'YAMLScalar':
- if (parent.type === 'YAMLSequence') {
- const lastIndex = itemsCountStack.length - 1;
- const currentCount = parent.entries.length - itemsCountStack[lastIndex];
- pathStack.push(currentCount.toString());
- if (node.type === 'YAMLScalar') {
- const value = node.value;
- if ((0, shared_1.isString)(value)) {
- const { code, map } = (0, codegen_1.generateMessageFunction)(value, options, pathStack);
- sourceMap && map != null && codeMaps.set(value, map);
- generator.push(`${code}`, node, value);
- }
- else {
- if (forceStringify) {
- const strValue = JSON.stringify(value);
- const { code, map } = (0, codegen_1.generateMessageFunction)(strValue, options, pathStack);
- sourceMap && map != null && codeMaps.set(strValue, map);
- generator.push(`${code}`, node, strValue);
- }
- else {
- generator.push(`${JSON.stringify(value)}`);
- }
- }
- }
- itemsCountStack[lastIndex] = --itemsCountStack[lastIndex];
- }
- break;
- default:
- break;
- }
- },
- leaveNode(node, parent) {
- switch (node.type) {
- case 'Program':
- if (type === 'sfc') {
- generator.deindent();
- generator.push(`})`);
- if (bridge && injector) {
- generator.newline();
- generator.pushline(`${componentNamespace}.__i18nBridge = ${componentNamespace}.__i18nBridge || []`);
- generator.pushline(`${componentNamespace}.__i18nBridge.push('${injector()}')`);
- generator.pushline(`delete ${componentNamespace}._Ctor`);
- }
- generator.deindent();
- generator.push(`}`);
- }
- else if (type === 'plain') {
- generator.push(`\n`);
- generator.push('export default resource');
- }
- break;
- case 'YAMLMapping':
- if (propsCountStack[propsCountStack.length - 1] === 0) {
- pathStack.pop();
- propsCountStack.pop();
- }
- generator.deindent();
- generator.push(`}`);
- if (parent.type === 'YAMLSequence') {
- if (itemsCountStack[itemsCountStack.length - 1] !== 0) {
- pathStack.pop();
- generator.pushline(`,`);
- }
- }
- break;
- case 'YAMLPair':
- if (propsCountStack[propsCountStack.length - 1] !== 0) {
- pathStack.pop();
- generator.pushline(`,`);
- }
- break;
- case 'YAMLSequence':
- if (itemsCountStack[itemsCountStack.length - 1] === 0) {
- pathStack.pop();
- itemsCountStack.pop();
- }
- generator.deindent();
- generator.push(`]`);
- if (parent.type === 'YAMLSequence') {
- if (itemsCountStack[itemsCountStack.length - 1] !== 0) {
- pathStack.pop();
- generator.pushline(`,`);
- }
- }
- break;
- case 'YAMLScalar':
- if (parent.type === 'YAMLSequence') {
- if (itemsCountStack[itemsCountStack.length - 1] !== 0) {
- pathStack.pop();
- generator.pushline(`,`);
- }
- else {
- generator.pushline(`,`);
- }
- }
- break;
- default:
- break;
- }
- }
- });
- return codeMaps;
- }
|