| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- 'use strict';
- var safeIdentifier = require('safe-identifier');
- var Compiler = require('./compiler');
- function stringifyRuntime(runtime) {
- const imports = {};
- const vars = {};
- for (const [name, fn] of Object.entries(runtime)) {
- if (fn.module) {
- const alias = fn.id && fn.id !== name ? `${fn.id} as ${name}` : name;
- const prev = imports[fn.module];
- imports[fn.module] = prev ? [...prev, alias] : [alias];
- }
- else {
- vars[name] = String(fn);
- }
- }
- const is = Object.entries(imports).map(([module, names]) => `import { ${names.sort().join(', ')} } from ${JSON.stringify(module)};`);
- const vs = Object.entries(vars).map(([id, value]) => new RegExp(`^function ${id}\\b`).test(value)
- ? value
- : `const ${id} = ${value};`);
- if (is.length > 0 && vs.length > 0)
- is.push('');
- return is.concat(vs).join('\n');
- }
- function stringifyObject(obj, level = 0) {
- if (typeof obj !== 'object')
- return obj;
- const indent = ' '.repeat(level);
- const o = Object.keys(obj).map(key => {
- const v = stringifyObject(obj[key], level + 1);
- return `\n${indent} ${safeIdentifier.property(null, key)}: ${v}`;
- });
- return `{${o.join(',')}\n${indent}}`;
- }
- function compileModule(messageformat, messages) {
- const { plurals } = messageformat;
- const cp = {};
- if (plurals.length > 1)
- for (const pl of plurals)
- cp[pl.lc] = cp[pl.locale] = pl;
- const compiler = new Compiler(messageformat.options);
- const msgObj = compiler.compile(messages, plurals[0], cp);
- const msgStr = stringifyObject(msgObj);
- const rtStr = stringifyRuntime(compiler.runtime);
- return `${rtStr}\nexport default ${msgStr}`;
- }
- module.exports = compileModule;
|