@intlify/core-base 11.1.2 → 12.0.0-alpha.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.
- package/LICENSE +1 -1
- package/dist/core-base.d.ts +10 -4
- package/dist/core-base.esm-browser.js +196 -411
- package/dist/core-base.esm-browser.prod.js +3 -3
- package/dist/core-base.esm-bundler.js +1 -1
- package/dist/core-base.global.js +197 -412
- package/dist/core-base.global.prod.js +3 -3
- package/dist/{core-base.mjs → core-base.js} +34 -13
- package/package.json +10 -17
- package/dist/core-base.cjs +0 -1888
- package/dist/core-base.cjs.js +0 -1
- package/dist/core-base.cjs.prod.js +0 -1
- package/dist/core-base.prod.cjs +0 -1626
- package/index.js +0 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* core-base
|
|
3
|
-
* (c)
|
|
2
|
+
* core-base v12.0.0-alpha.2
|
|
3
|
+
* (c) 2016-present kazuya kawaguchi and contributors
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
@@ -147,6 +147,40 @@ function warnOnce(msg) {
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
+
const isNotObjectOrIsArray = (val) => !isObject(val) || isArray(val);
|
|
151
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
152
|
+
function deepCopy(src, des) {
|
|
153
|
+
// src and des should both be objects, and none of them can be a array
|
|
154
|
+
if (isNotObjectOrIsArray(src) || isNotObjectOrIsArray(des)) {
|
|
155
|
+
throw new Error('Invalid value');
|
|
156
|
+
}
|
|
157
|
+
const stack = [{ src, des }];
|
|
158
|
+
while (stack.length) {
|
|
159
|
+
const { src, des } = stack.pop();
|
|
160
|
+
// using `Object.keys` which skips prototype properties
|
|
161
|
+
Object.keys(src).forEach(key => {
|
|
162
|
+
if (key === '__proto__') {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// if src[key] is an object/array, set des[key]
|
|
166
|
+
// to empty object/array to prevent setting by reference
|
|
167
|
+
if (isObject(src[key]) && !isObject(des[key])) {
|
|
168
|
+
des[key] = Array.isArray(src[key]) ? [] : create();
|
|
169
|
+
}
|
|
170
|
+
if (isNotObjectOrIsArray(des[key]) || isNotObjectOrIsArray(src[key])) {
|
|
171
|
+
// replace with src[key] when:
|
|
172
|
+
// src[key] or des[key] is not an object, or
|
|
173
|
+
// src[key] or des[key] is an array
|
|
174
|
+
des[key] = src[key];
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// src[key] and des[key] are both objects, merge them
|
|
178
|
+
stack.push({ src: src[key], des: des[key] });
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
150
184
|
function createPosition(line, column, offset) {
|
|
151
185
|
return { line, column, offset };
|
|
152
186
|
}
|
|
@@ -221,9 +255,130 @@ function defaultOnError(error) {
|
|
|
221
255
|
throw error;
|
|
222
256
|
}
|
|
223
257
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
258
|
+
const ERROR_DOMAIN$2 = 'minifier';
|
|
259
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
260
|
+
function mangle(node) {
|
|
261
|
+
node.t = node.type;
|
|
262
|
+
switch (node.type) {
|
|
263
|
+
case 0 /* NodeTypes.Resource */: {
|
|
264
|
+
const resource = node;
|
|
265
|
+
mangle(resource.body);
|
|
266
|
+
resource.b = resource.body;
|
|
267
|
+
delete resource.body;
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
case 1 /* NodeTypes.Plural */: {
|
|
271
|
+
const plural = node;
|
|
272
|
+
const cases = plural.cases;
|
|
273
|
+
for (let i = 0; i < cases.length; i++) {
|
|
274
|
+
mangle(cases[i]);
|
|
275
|
+
}
|
|
276
|
+
plural.c = cases;
|
|
277
|
+
delete plural.cases;
|
|
278
|
+
break;
|
|
279
|
+
}
|
|
280
|
+
case 2 /* NodeTypes.Message */: {
|
|
281
|
+
const message = node;
|
|
282
|
+
const items = message.items;
|
|
283
|
+
for (let i = 0; i < items.length; i++) {
|
|
284
|
+
mangle(items[i]);
|
|
285
|
+
}
|
|
286
|
+
message.i = items;
|
|
287
|
+
delete message.items;
|
|
288
|
+
if (message.static) {
|
|
289
|
+
message.s = message.static;
|
|
290
|
+
delete message.static;
|
|
291
|
+
}
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
case 3 /* NodeTypes.Text */:
|
|
295
|
+
case 9 /* NodeTypes.Literal */:
|
|
296
|
+
case 8 /* NodeTypes.LinkedModifier */:
|
|
297
|
+
case 7 /* NodeTypes.LinkedKey */: {
|
|
298
|
+
const valueNode = node;
|
|
299
|
+
if (valueNode.value) {
|
|
300
|
+
valueNode.v = valueNode.value;
|
|
301
|
+
delete valueNode.value;
|
|
302
|
+
}
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
case 6 /* NodeTypes.Linked */: {
|
|
306
|
+
const linked = node;
|
|
307
|
+
mangle(linked.key);
|
|
308
|
+
linked.k = linked.key;
|
|
309
|
+
delete linked.key;
|
|
310
|
+
if (linked.modifier) {
|
|
311
|
+
mangle(linked.modifier);
|
|
312
|
+
linked.m = linked.modifier;
|
|
313
|
+
delete linked.modifier;
|
|
314
|
+
}
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
case 5 /* NodeTypes.List */: {
|
|
318
|
+
const list = node;
|
|
319
|
+
list.i = list.index;
|
|
320
|
+
delete list.index;
|
|
321
|
+
break;
|
|
322
|
+
}
|
|
323
|
+
case 4 /* NodeTypes.Named */: {
|
|
324
|
+
const named = node;
|
|
325
|
+
named.k = named.key;
|
|
326
|
+
delete named.key;
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
default:
|
|
330
|
+
{
|
|
331
|
+
throw createCompileError(CompileErrorCodes.UNHANDLED_MINIFIER_NODE_TYPE, null, {
|
|
332
|
+
domain: ERROR_DOMAIN$2,
|
|
333
|
+
args: [node.type]
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
delete node.type;
|
|
338
|
+
}
|
|
339
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
340
|
+
|
|
341
|
+
function optimize(ast) {
|
|
342
|
+
const body = ast.body;
|
|
343
|
+
if (body.type === 2 /* NodeTypes.Message */) {
|
|
344
|
+
optimizeMessageNode(body);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
body.cases.forEach(c => optimizeMessageNode(c));
|
|
348
|
+
}
|
|
349
|
+
return ast;
|
|
350
|
+
}
|
|
351
|
+
function optimizeMessageNode(message) {
|
|
352
|
+
if (message.items.length === 1) {
|
|
353
|
+
const item = message.items[0];
|
|
354
|
+
if (item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */) {
|
|
355
|
+
message.static = item.value;
|
|
356
|
+
delete item.value; // optimization for size
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
const values = [];
|
|
361
|
+
for (let i = 0; i < message.items.length; i++) {
|
|
362
|
+
const item = message.items[i];
|
|
363
|
+
if (!(item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */)) {
|
|
364
|
+
break;
|
|
365
|
+
}
|
|
366
|
+
if (item.value == null) {
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
values.push(item.value);
|
|
370
|
+
}
|
|
371
|
+
if (values.length === message.items.length) {
|
|
372
|
+
message.static = join(values);
|
|
373
|
+
for (let i = 0; i < message.items.length; i++) {
|
|
374
|
+
const item = message.items[i];
|
|
375
|
+
if (item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */) {
|
|
376
|
+
delete item.value; // optimization for size
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
227
382
|
|
|
228
383
|
const CHAR_SP = ' ';
|
|
229
384
|
const CHAR_CR = '\r';
|
|
@@ -303,7 +458,7 @@ function createScanner(str) {
|
|
|
303
458
|
const EOF = undefined;
|
|
304
459
|
const DOT = '.';
|
|
305
460
|
const LITERAL_DELIMITER = "'";
|
|
306
|
-
const ERROR_DOMAIN$
|
|
461
|
+
const ERROR_DOMAIN$1 = 'tokenizer';
|
|
307
462
|
function createTokenizer(source, options = {}) {
|
|
308
463
|
const location = options.location !== false;
|
|
309
464
|
const _scnr = createScanner(source);
|
|
@@ -333,7 +488,7 @@ function createTokenizer(source, options = {}) {
|
|
|
333
488
|
if (onError) {
|
|
334
489
|
const loc = location ? createLocation(ctx.startLoc, pos) : null;
|
|
335
490
|
const err = createCompileError(code, loc, {
|
|
336
|
-
domain: ERROR_DOMAIN$
|
|
491
|
+
domain: ERROR_DOMAIN$1,
|
|
337
492
|
args
|
|
338
493
|
});
|
|
339
494
|
onError(err);
|
|
@@ -954,7 +1109,7 @@ function createTokenizer(source, options = {}) {
|
|
|
954
1109
|
};
|
|
955
1110
|
}
|
|
956
1111
|
|
|
957
|
-
const ERROR_DOMAIN
|
|
1112
|
+
const ERROR_DOMAIN = 'parser';
|
|
958
1113
|
// Backslash backslash, backslash quote, uHHHH, UHHHHHH.
|
|
959
1114
|
const KNOWN_ESCAPES = /(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;
|
|
960
1115
|
function fromEscapeSequence(match, codePoint4, codePoint6) {
|
|
@@ -986,7 +1141,7 @@ function createParser(options = {}) {
|
|
|
986
1141
|
if (onError) {
|
|
987
1142
|
const loc = location ? createLocation(start, end) : null;
|
|
988
1143
|
const err = createCompileError(code, loc, {
|
|
989
|
-
domain: ERROR_DOMAIN
|
|
1144
|
+
domain: ERROR_DOMAIN,
|
|
990
1145
|
args
|
|
991
1146
|
});
|
|
992
1147
|
onError(err);
|
|
@@ -1254,400 +1409,9 @@ function getTokenCaption(token) {
|
|
|
1254
1409
|
return name.length > 10 ? name.slice(0, 9) + '…' : name;
|
|
1255
1410
|
}
|
|
1256
1411
|
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
ast,
|
|
1261
|
-
helpers: new Set()
|
|
1262
|
-
};
|
|
1263
|
-
const context = () => _context;
|
|
1264
|
-
const helper = (name) => {
|
|
1265
|
-
_context.helpers.add(name);
|
|
1266
|
-
return name;
|
|
1267
|
-
};
|
|
1268
|
-
return { context, helper };
|
|
1269
|
-
}
|
|
1270
|
-
function traverseNodes(nodes, transformer) {
|
|
1271
|
-
for (let i = 0; i < nodes.length; i++) {
|
|
1272
|
-
traverseNode(nodes[i], transformer);
|
|
1273
|
-
}
|
|
1274
|
-
}
|
|
1275
|
-
function traverseNode(node, transformer) {
|
|
1276
|
-
// TODO: if we need pre-hook of transform, should be implemented to here
|
|
1277
|
-
switch (node.type) {
|
|
1278
|
-
case 1 /* NodeTypes.Plural */:
|
|
1279
|
-
traverseNodes(node.cases, transformer);
|
|
1280
|
-
transformer.helper("plural" /* HelperNameMap.PLURAL */);
|
|
1281
|
-
break;
|
|
1282
|
-
case 2 /* NodeTypes.Message */:
|
|
1283
|
-
traverseNodes(node.items, transformer);
|
|
1284
|
-
break;
|
|
1285
|
-
case 6 /* NodeTypes.Linked */: {
|
|
1286
|
-
const linked = node;
|
|
1287
|
-
traverseNode(linked.key, transformer);
|
|
1288
|
-
transformer.helper("linked" /* HelperNameMap.LINKED */);
|
|
1289
|
-
transformer.helper("type" /* HelperNameMap.TYPE */);
|
|
1290
|
-
break;
|
|
1291
|
-
}
|
|
1292
|
-
case 5 /* NodeTypes.List */:
|
|
1293
|
-
transformer.helper("interpolate" /* HelperNameMap.INTERPOLATE */);
|
|
1294
|
-
transformer.helper("list" /* HelperNameMap.LIST */);
|
|
1295
|
-
break;
|
|
1296
|
-
case 4 /* NodeTypes.Named */:
|
|
1297
|
-
transformer.helper("interpolate" /* HelperNameMap.INTERPOLATE */);
|
|
1298
|
-
transformer.helper("named" /* HelperNameMap.NAMED */);
|
|
1299
|
-
break;
|
|
1300
|
-
}
|
|
1301
|
-
// TODO: if we need post-hook of transform, should be implemented to here
|
|
1302
|
-
}
|
|
1303
|
-
// transform AST
|
|
1304
|
-
function transform(ast, options = {} // eslint-disable-line
|
|
1305
|
-
) {
|
|
1306
|
-
const transformer = createTransformer(ast);
|
|
1307
|
-
transformer.helper("normalize" /* HelperNameMap.NORMALIZE */);
|
|
1308
|
-
// traverse
|
|
1309
|
-
ast.body && traverseNode(ast.body, transformer);
|
|
1310
|
-
// set meta information
|
|
1311
|
-
const context = transformer.context();
|
|
1312
|
-
ast.helpers = Array.from(context.helpers);
|
|
1313
|
-
}
|
|
1314
|
-
|
|
1315
|
-
function optimize(ast) {
|
|
1316
|
-
const body = ast.body;
|
|
1317
|
-
if (body.type === 2 /* NodeTypes.Message */) {
|
|
1318
|
-
optimizeMessageNode(body);
|
|
1319
|
-
}
|
|
1320
|
-
else {
|
|
1321
|
-
body.cases.forEach(c => optimizeMessageNode(c));
|
|
1322
|
-
}
|
|
1323
|
-
return ast;
|
|
1324
|
-
}
|
|
1325
|
-
function optimizeMessageNode(message) {
|
|
1326
|
-
if (message.items.length === 1) {
|
|
1327
|
-
const item = message.items[0];
|
|
1328
|
-
if (item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */) {
|
|
1329
|
-
message.static = item.value;
|
|
1330
|
-
delete item.value; // optimization for size
|
|
1331
|
-
}
|
|
1332
|
-
}
|
|
1333
|
-
else {
|
|
1334
|
-
const values = [];
|
|
1335
|
-
for (let i = 0; i < message.items.length; i++) {
|
|
1336
|
-
const item = message.items[i];
|
|
1337
|
-
if (!(item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */)) {
|
|
1338
|
-
break;
|
|
1339
|
-
}
|
|
1340
|
-
if (item.value == null) {
|
|
1341
|
-
break;
|
|
1342
|
-
}
|
|
1343
|
-
values.push(item.value);
|
|
1344
|
-
}
|
|
1345
|
-
if (values.length === message.items.length) {
|
|
1346
|
-
message.static = join(values);
|
|
1347
|
-
for (let i = 0; i < message.items.length; i++) {
|
|
1348
|
-
const item = message.items[i];
|
|
1349
|
-
if (item.type === 3 /* NodeTypes.Text */ || item.type === 9 /* NodeTypes.Literal */) {
|
|
1350
|
-
delete item.value; // optimization for size
|
|
1351
|
-
}
|
|
1352
|
-
}
|
|
1353
|
-
}
|
|
1354
|
-
}
|
|
1355
|
-
}
|
|
1356
|
-
|
|
1357
|
-
const ERROR_DOMAIN$1 = 'minifier';
|
|
1358
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
1359
|
-
function minify(node) {
|
|
1360
|
-
node.t = node.type;
|
|
1361
|
-
switch (node.type) {
|
|
1362
|
-
case 0 /* NodeTypes.Resource */: {
|
|
1363
|
-
const resource = node;
|
|
1364
|
-
minify(resource.body);
|
|
1365
|
-
resource.b = resource.body;
|
|
1366
|
-
delete resource.body;
|
|
1367
|
-
break;
|
|
1368
|
-
}
|
|
1369
|
-
case 1 /* NodeTypes.Plural */: {
|
|
1370
|
-
const plural = node;
|
|
1371
|
-
const cases = plural.cases;
|
|
1372
|
-
for (let i = 0; i < cases.length; i++) {
|
|
1373
|
-
minify(cases[i]);
|
|
1374
|
-
}
|
|
1375
|
-
plural.c = cases;
|
|
1376
|
-
delete plural.cases;
|
|
1377
|
-
break;
|
|
1378
|
-
}
|
|
1379
|
-
case 2 /* NodeTypes.Message */: {
|
|
1380
|
-
const message = node;
|
|
1381
|
-
const items = message.items;
|
|
1382
|
-
for (let i = 0; i < items.length; i++) {
|
|
1383
|
-
minify(items[i]);
|
|
1384
|
-
}
|
|
1385
|
-
message.i = items;
|
|
1386
|
-
delete message.items;
|
|
1387
|
-
if (message.static) {
|
|
1388
|
-
message.s = message.static;
|
|
1389
|
-
delete message.static;
|
|
1390
|
-
}
|
|
1391
|
-
break;
|
|
1392
|
-
}
|
|
1393
|
-
case 3 /* NodeTypes.Text */:
|
|
1394
|
-
case 9 /* NodeTypes.Literal */:
|
|
1395
|
-
case 8 /* NodeTypes.LinkedModifier */:
|
|
1396
|
-
case 7 /* NodeTypes.LinkedKey */: {
|
|
1397
|
-
const valueNode = node;
|
|
1398
|
-
if (valueNode.value) {
|
|
1399
|
-
valueNode.v = valueNode.value;
|
|
1400
|
-
delete valueNode.value;
|
|
1401
|
-
}
|
|
1402
|
-
break;
|
|
1403
|
-
}
|
|
1404
|
-
case 6 /* NodeTypes.Linked */: {
|
|
1405
|
-
const linked = node;
|
|
1406
|
-
minify(linked.key);
|
|
1407
|
-
linked.k = linked.key;
|
|
1408
|
-
delete linked.key;
|
|
1409
|
-
if (linked.modifier) {
|
|
1410
|
-
minify(linked.modifier);
|
|
1411
|
-
linked.m = linked.modifier;
|
|
1412
|
-
delete linked.modifier;
|
|
1413
|
-
}
|
|
1414
|
-
break;
|
|
1415
|
-
}
|
|
1416
|
-
case 5 /* NodeTypes.List */: {
|
|
1417
|
-
const list = node;
|
|
1418
|
-
list.i = list.index;
|
|
1419
|
-
delete list.index;
|
|
1420
|
-
break;
|
|
1421
|
-
}
|
|
1422
|
-
case 4 /* NodeTypes.Named */: {
|
|
1423
|
-
const named = node;
|
|
1424
|
-
named.k = named.key;
|
|
1425
|
-
delete named.key;
|
|
1426
|
-
break;
|
|
1427
|
-
}
|
|
1428
|
-
default:
|
|
1429
|
-
{
|
|
1430
|
-
throw createCompileError(CompileErrorCodes.UNHANDLED_MINIFIER_NODE_TYPE, null, {
|
|
1431
|
-
domain: ERROR_DOMAIN$1,
|
|
1432
|
-
args: [node.type]
|
|
1433
|
-
});
|
|
1434
|
-
}
|
|
1435
|
-
}
|
|
1436
|
-
delete node.type;
|
|
1437
|
-
}
|
|
1438
|
-
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
1439
|
-
|
|
1440
|
-
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
|
|
1441
|
-
/// <reference types="source-map-js" />
|
|
1442
|
-
const ERROR_DOMAIN = 'parser';
|
|
1443
|
-
function createCodeGenerator(ast, options) {
|
|
1444
|
-
const { sourceMap, filename, breakLineCode, needIndent: _needIndent } = options;
|
|
1445
|
-
const location = options.location !== false;
|
|
1446
|
-
const _context = {
|
|
1447
|
-
filename,
|
|
1448
|
-
code: '',
|
|
1449
|
-
column: 1,
|
|
1450
|
-
line: 1,
|
|
1451
|
-
offset: 0,
|
|
1452
|
-
map: undefined,
|
|
1453
|
-
breakLineCode,
|
|
1454
|
-
needIndent: _needIndent,
|
|
1455
|
-
indentLevel: 0
|
|
1456
|
-
};
|
|
1457
|
-
if (location && ast.loc) {
|
|
1458
|
-
_context.source = ast.loc.source;
|
|
1459
|
-
}
|
|
1460
|
-
const context = () => _context;
|
|
1461
|
-
function push(code, node) {
|
|
1462
|
-
_context.code += code;
|
|
1463
|
-
}
|
|
1464
|
-
function _newline(n, withBreakLine = true) {
|
|
1465
|
-
const _breakLineCode = withBreakLine ? breakLineCode : '';
|
|
1466
|
-
push(_needIndent ? _breakLineCode + ` `.repeat(n) : _breakLineCode);
|
|
1467
|
-
}
|
|
1468
|
-
function indent(withNewLine = true) {
|
|
1469
|
-
const level = ++_context.indentLevel;
|
|
1470
|
-
withNewLine && _newline(level);
|
|
1471
|
-
}
|
|
1472
|
-
function deindent(withNewLine = true) {
|
|
1473
|
-
const level = --_context.indentLevel;
|
|
1474
|
-
withNewLine && _newline(level);
|
|
1475
|
-
}
|
|
1476
|
-
function newline() {
|
|
1477
|
-
_newline(_context.indentLevel);
|
|
1478
|
-
}
|
|
1479
|
-
const helper = (key) => `_${key}`;
|
|
1480
|
-
const needIndent = () => _context.needIndent;
|
|
1481
|
-
return {
|
|
1482
|
-
context,
|
|
1483
|
-
push,
|
|
1484
|
-
indent,
|
|
1485
|
-
deindent,
|
|
1486
|
-
newline,
|
|
1487
|
-
helper,
|
|
1488
|
-
needIndent
|
|
1489
|
-
};
|
|
1490
|
-
}
|
|
1491
|
-
function generateLinkedNode(generator, node) {
|
|
1492
|
-
const { helper } = generator;
|
|
1493
|
-
generator.push(`${helper("linked" /* HelperNameMap.LINKED */)}(`);
|
|
1494
|
-
generateNode(generator, node.key);
|
|
1495
|
-
if (node.modifier) {
|
|
1496
|
-
generator.push(`, `);
|
|
1497
|
-
generateNode(generator, node.modifier);
|
|
1498
|
-
generator.push(`, _type`);
|
|
1499
|
-
}
|
|
1500
|
-
else {
|
|
1501
|
-
generator.push(`, undefined, _type`);
|
|
1502
|
-
}
|
|
1503
|
-
generator.push(`)`);
|
|
1504
|
-
}
|
|
1505
|
-
function generateMessageNode(generator, node) {
|
|
1506
|
-
const { helper, needIndent } = generator;
|
|
1507
|
-
generator.push(`${helper("normalize" /* HelperNameMap.NORMALIZE */)}([`);
|
|
1508
|
-
generator.indent(needIndent());
|
|
1509
|
-
const length = node.items.length;
|
|
1510
|
-
for (let i = 0; i < length; i++) {
|
|
1511
|
-
generateNode(generator, node.items[i]);
|
|
1512
|
-
if (i === length - 1) {
|
|
1513
|
-
break;
|
|
1514
|
-
}
|
|
1515
|
-
generator.push(', ');
|
|
1516
|
-
}
|
|
1517
|
-
generator.deindent(needIndent());
|
|
1518
|
-
generator.push('])');
|
|
1519
|
-
}
|
|
1520
|
-
function generatePluralNode(generator, node) {
|
|
1521
|
-
const { helper, needIndent } = generator;
|
|
1522
|
-
if (node.cases.length > 1) {
|
|
1523
|
-
generator.push(`${helper("plural" /* HelperNameMap.PLURAL */)}([`);
|
|
1524
|
-
generator.indent(needIndent());
|
|
1525
|
-
const length = node.cases.length;
|
|
1526
|
-
for (let i = 0; i < length; i++) {
|
|
1527
|
-
generateNode(generator, node.cases[i]);
|
|
1528
|
-
if (i === length - 1) {
|
|
1529
|
-
break;
|
|
1530
|
-
}
|
|
1531
|
-
generator.push(', ');
|
|
1532
|
-
}
|
|
1533
|
-
generator.deindent(needIndent());
|
|
1534
|
-
generator.push(`])`);
|
|
1535
|
-
}
|
|
1536
|
-
}
|
|
1537
|
-
function generateResource(generator, node) {
|
|
1538
|
-
if (node.body) {
|
|
1539
|
-
generateNode(generator, node.body);
|
|
1540
|
-
}
|
|
1541
|
-
else {
|
|
1542
|
-
generator.push('null');
|
|
1543
|
-
}
|
|
1544
|
-
}
|
|
1545
|
-
function generateNode(generator, node) {
|
|
1546
|
-
const { helper } = generator;
|
|
1547
|
-
switch (node.type) {
|
|
1548
|
-
case 0 /* NodeTypes.Resource */:
|
|
1549
|
-
generateResource(generator, node);
|
|
1550
|
-
break;
|
|
1551
|
-
case 1 /* NodeTypes.Plural */:
|
|
1552
|
-
generatePluralNode(generator, node);
|
|
1553
|
-
break;
|
|
1554
|
-
case 2 /* NodeTypes.Message */:
|
|
1555
|
-
generateMessageNode(generator, node);
|
|
1556
|
-
break;
|
|
1557
|
-
case 6 /* NodeTypes.Linked */:
|
|
1558
|
-
generateLinkedNode(generator, node);
|
|
1559
|
-
break;
|
|
1560
|
-
case 8 /* NodeTypes.LinkedModifier */:
|
|
1561
|
-
generator.push(JSON.stringify(node.value), node);
|
|
1562
|
-
break;
|
|
1563
|
-
case 7 /* NodeTypes.LinkedKey */:
|
|
1564
|
-
generator.push(JSON.stringify(node.value), node);
|
|
1565
|
-
break;
|
|
1566
|
-
case 5 /* NodeTypes.List */:
|
|
1567
|
-
generator.push(`${helper("interpolate" /* HelperNameMap.INTERPOLATE */)}(${helper("list" /* HelperNameMap.LIST */)}(${node.index}))`, node);
|
|
1568
|
-
break;
|
|
1569
|
-
case 4 /* NodeTypes.Named */:
|
|
1570
|
-
generator.push(`${helper("interpolate" /* HelperNameMap.INTERPOLATE */)}(${helper("named" /* HelperNameMap.NAMED */)}(${JSON.stringify(node.key)}))`, node);
|
|
1571
|
-
break;
|
|
1572
|
-
case 9 /* NodeTypes.Literal */:
|
|
1573
|
-
generator.push(JSON.stringify(node.value), node);
|
|
1574
|
-
break;
|
|
1575
|
-
case 3 /* NodeTypes.Text */:
|
|
1576
|
-
generator.push(JSON.stringify(node.value), node);
|
|
1577
|
-
break;
|
|
1578
|
-
default:
|
|
1579
|
-
{
|
|
1580
|
-
throw createCompileError(CompileErrorCodes.UNHANDLED_CODEGEN_NODE_TYPE, null, {
|
|
1581
|
-
domain: ERROR_DOMAIN,
|
|
1582
|
-
args: [node.type]
|
|
1583
|
-
});
|
|
1584
|
-
}
|
|
1585
|
-
}
|
|
1586
|
-
}
|
|
1587
|
-
// generate code from AST
|
|
1588
|
-
const generate = (ast, options = {}) => {
|
|
1589
|
-
const mode = isString(options.mode) ? options.mode : 'normal';
|
|
1590
|
-
const filename = isString(options.filename)
|
|
1591
|
-
? options.filename
|
|
1592
|
-
: 'message.intl';
|
|
1593
|
-
const sourceMap = !!options.sourceMap;
|
|
1594
|
-
// prettier-ignore
|
|
1595
|
-
const breakLineCode = options.breakLineCode != null
|
|
1596
|
-
? options.breakLineCode
|
|
1597
|
-
: mode === 'arrow'
|
|
1598
|
-
? ';'
|
|
1599
|
-
: '\n';
|
|
1600
|
-
const needIndent = options.needIndent ? options.needIndent : mode !== 'arrow';
|
|
1601
|
-
const helpers = ast.helpers || [];
|
|
1602
|
-
const generator = createCodeGenerator(ast, {
|
|
1603
|
-
mode,
|
|
1604
|
-
filename,
|
|
1605
|
-
sourceMap,
|
|
1606
|
-
breakLineCode,
|
|
1607
|
-
needIndent
|
|
1608
|
-
});
|
|
1609
|
-
generator.push(mode === 'normal' ? `function __msg__ (ctx) {` : `(ctx) => {`);
|
|
1610
|
-
generator.indent(needIndent);
|
|
1611
|
-
if (helpers.length > 0) {
|
|
1612
|
-
generator.push(`const { ${join(helpers.map(s => `${s}: _${s}`), ', ')} } = ctx`);
|
|
1613
|
-
generator.newline();
|
|
1614
|
-
}
|
|
1615
|
-
generator.push(`return `);
|
|
1616
|
-
generateNode(generator, ast);
|
|
1617
|
-
generator.deindent(needIndent);
|
|
1618
|
-
generator.push(`}`);
|
|
1619
|
-
delete ast.helpers;
|
|
1620
|
-
const { code, map } = generator.context();
|
|
1621
|
-
return {
|
|
1622
|
-
ast,
|
|
1623
|
-
code,
|
|
1624
|
-
map: map ? map.toJSON() : undefined // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
1625
|
-
};
|
|
1626
|
-
};
|
|
1627
|
-
|
|
1628
|
-
function baseCompile$1(source, options = {}) {
|
|
1629
|
-
const assignedOptions = assign({}, options);
|
|
1630
|
-
const jit = !!assignedOptions.jit;
|
|
1631
|
-
const enalbeMinify = !!assignedOptions.minify;
|
|
1632
|
-
const enambeOptimize = assignedOptions.optimize == null ? true : assignedOptions.optimize;
|
|
1633
|
-
// parse source codes
|
|
1634
|
-
const parser = createParser(assignedOptions);
|
|
1635
|
-
const ast = parser.parse(source);
|
|
1636
|
-
if (!jit) {
|
|
1637
|
-
// transform ASTs
|
|
1638
|
-
transform(ast, assignedOptions);
|
|
1639
|
-
// generate javascript codes
|
|
1640
|
-
return generate(ast, assignedOptions);
|
|
1641
|
-
}
|
|
1642
|
-
else {
|
|
1643
|
-
// optimize ASTs
|
|
1644
|
-
enambeOptimize && optimize(ast);
|
|
1645
|
-
// minimize ASTs
|
|
1646
|
-
enalbeMinify && minify(ast);
|
|
1647
|
-
// In JIT mode, no ast transform, no code generation.
|
|
1648
|
-
return { ast, code: '' };
|
|
1649
|
-
}
|
|
1650
|
-
}
|
|
1412
|
+
// eslint-disable-next-line no-useless-escape
|
|
1413
|
+
const RE_HTML_TAG = /<\/?[\w\s="/.':;#-\/]+>/;
|
|
1414
|
+
const detectHtmlTag = (source) => RE_HTML_TAG.test(source);
|
|
1651
1415
|
|
|
1652
1416
|
function format(ast) {
|
|
1653
1417
|
const msg = (ctx) => formatParts(ctx, ast);
|
|
@@ -1751,7 +1515,7 @@ function resolveType(node) {
|
|
|
1751
1515
|
const PROPS_VALUE = ['v', 'value'];
|
|
1752
1516
|
function resolveValue$1(node, type) {
|
|
1753
1517
|
const resolved = resolveProps(node, PROPS_VALUE);
|
|
1754
|
-
if (resolved) {
|
|
1518
|
+
if (resolved != null) {
|
|
1755
1519
|
return resolved;
|
|
1756
1520
|
}
|
|
1757
1521
|
else {
|
|
@@ -1811,8 +1575,14 @@ function baseCompile(message, options = {}) {
|
|
|
1811
1575
|
detectError = true;
|
|
1812
1576
|
onError(err);
|
|
1813
1577
|
};
|
|
1814
|
-
//
|
|
1815
|
-
|
|
1578
|
+
// parse source codes
|
|
1579
|
+
const parser = createParser(options);
|
|
1580
|
+
const ast = parser.parse(message);
|
|
1581
|
+
// optimize ASTs
|
|
1582
|
+
options.optimize && optimize(ast);
|
|
1583
|
+
// minimize ASTs
|
|
1584
|
+
options.mangle && mangle(ast);
|
|
1585
|
+
return { ast, detectError, code: '' };
|
|
1816
1586
|
}
|
|
1817
1587
|
/* #__NO_SIDE_EFFECTS__ */
|
|
1818
1588
|
function compile(message, context) {
|
|
@@ -1829,11 +1599,12 @@ function compile(message, context) {
|
|
|
1829
1599
|
if (cached) {
|
|
1830
1600
|
return cached;
|
|
1831
1601
|
}
|
|
1832
|
-
// compile
|
|
1602
|
+
// compile message
|
|
1833
1603
|
const { ast, detectError } = baseCompile(message, {
|
|
1834
1604
|
...context,
|
|
1835
1605
|
location: true,
|
|
1836
|
-
|
|
1606
|
+
mangle: !true,
|
|
1607
|
+
optimize: !true
|
|
1837
1608
|
});
|
|
1838
1609
|
// compose message function from AST
|
|
1839
1610
|
const msg = format(ast);
|
|
@@ -1986,7 +1757,7 @@ function fallbackWithSimple(ctx, fallback, start) {
|
|
|
1986
1757
|
*
|
|
1987
1758
|
* @returns Fallback locales
|
|
1988
1759
|
*
|
|
1989
|
-
* @VueI18nSee [Fallbacking](
|
|
1760
|
+
* @VueI18nSee [Fallbacking](../../guide/essentials/fallback)
|
|
1990
1761
|
*
|
|
1991
1762
|
* @VueI18nGeneral
|
|
1992
1763
|
*/
|
|
@@ -2357,7 +2128,7 @@ function getWarnMessage(code, ...args) {
|
|
|
2357
2128
|
* Intlify core-base version
|
|
2358
2129
|
* @internal
|
|
2359
2130
|
*/
|
|
2360
|
-
const VERSION = '
|
|
2131
|
+
const VERSION = '12.0.0-alpha.2';
|
|
2361
2132
|
const NOT_REOSLVED = -1;
|
|
2362
2133
|
const DEFAULT_LOCALE = 'en-US';
|
|
2363
2134
|
const MISSING_RESOLVE_VALUE = '';
|
|
@@ -2546,6 +2317,20 @@ function createCoreContext(options = {}) {
|
|
|
2546
2317
|
return context;
|
|
2547
2318
|
}
|
|
2548
2319
|
const createResources = (locale) => ({ [locale]: create() });
|
|
2320
|
+
// TODO: API documentation, if `@intlify/core` will be documented as a separate package
|
|
2321
|
+
function getLocaleMessage(ctx, locale) {
|
|
2322
|
+
const src = ctx.messages[locale];
|
|
2323
|
+
if (src == null) {
|
|
2324
|
+
return undefined;
|
|
2325
|
+
}
|
|
2326
|
+
const dest = create();
|
|
2327
|
+
deepCopy(src, dest);
|
|
2328
|
+
return dest;
|
|
2329
|
+
}
|
|
2330
|
+
// TODO: API documentation, if `@intlify/core` will be documented as a separate package
|
|
2331
|
+
function setLocaleMessage(ctx, locale, messages) {
|
|
2332
|
+
ctx.messages[locale] = messages;
|
|
2333
|
+
}
|
|
2549
2334
|
/** @internal */
|
|
2550
2335
|
function isTranslateFallbackWarn(fallback, key) {
|
|
2551
2336
|
return fallback instanceof RegExp ? fallback.test(key) : fallback;
|
|
@@ -3474,4 +3259,4 @@ function getMessageContextOptions(context, locale, message, options) {
|
|
|
3474
3259
|
return ctxOptions;
|
|
3475
3260
|
}
|
|
3476
3261
|
|
|
3477
|
-
export { CORE_ERROR_CODES_EXTEND_POINT, CORE_WARN_CODES_EXTEND_POINT,
|
|
3262
|
+
export { CORE_ERROR_CODES_EXTEND_POINT, CORE_WARN_CODES_EXTEND_POINT, CoreWarnCodes, DATETIME_FORMAT_OPTIONS_KEYS, DEFAULT_LOCALE, DEFAULT_MESSAGE_DATA_TYPE, MISSING_RESOLVE_VALUE, NOT_REOSLVED, NUMBER_FORMAT_OPTIONS_KEYS, VERSION, clearCompileCache, clearDateTimeFormat, clearNumberFormat, compile, createCompileError, createCoreContext, createCoreError, createMessageContext, datetime, fallbackWithLocaleChain, fallbackWithSimple, getAdditionalMeta, getDevToolsHook, getFallbackContext, getLocale, getLocaleMessage, getWarnMessage, handleMissing, initI18nDevTools, isAlmostSameLocale, isImplicitFallback, isMessageAST, isMessageFunction, isTranslateFallbackWarn, isTranslateMissingWarn, number, parse, parseDateTimeArgs, parseNumberArgs, parseTranslateArgs, registerLocaleFallbacker, registerMessageCompiler, registerMessageResolver, resolveLocale, resolveValue, resolveWithKeyValue, setAdditionalMeta, setDevToolsHook, setFallbackContext, setLocaleMessage, translate, translateDevTools, updateFallbackLocale };
|