@intlify/core-base 11.1.2 → 12.0.0-alpha.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.
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * core-base v11.1.2
3
- * (c) 2025 kazuya kawaguchi
2
+ * core-base v12.0.0-alpha.1
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
- // eslint-disable-next-line no-useless-escape
225
- const RE_HTML_TAG = /<\/?[\w\s="/.':;#-\/]+>/;
226
- const detectHtmlTag = (source) => RE_HTML_TAG.test(source);
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$3 = 'tokenizer';
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$3,
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$2 = 'parser';
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$2,
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
- function createTransformer(ast, options = {} // eslint-disable-line
1258
- ) {
1259
- const _context = {
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
- // compile with mesasge-compiler
1815
- return { ...baseCompile$1(message, options), detectError };
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 with JIT mode
1602
+ // compile message
1833
1603
  const { ast, detectError } = baseCompile(message, {
1834
1604
  ...context,
1835
1605
  location: true,
1836
- jit: true
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](../guide/essentials/fallback)
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 = '11.1.2';
2131
+ const VERSION = '12.0.0-alpha.1';
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, CompileErrorCodes, CoreErrorCodes, 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, getWarnMessage, handleMissing, initI18nDevTools, isAlmostSameLocale, isImplicitFallback, isMessageAST, isMessageFunction, isTranslateFallbackWarn, isTranslateMissingWarn, number, parse, parseDateTimeArgs, parseNumberArgs, parseTranslateArgs, registerLocaleFallbacker, registerMessageCompiler, registerMessageResolver, resolveLocale, resolveValue, resolveWithKeyValue, setAdditionalMeta, setDevToolsHook, setFallbackContext, translate, translateDevTools, updateFallbackLocale };
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 };