@intlify/message-compiler 9.13.1 → 10.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,5 +1,5 @@
1
1
  /*!
2
- * message-compiler v9.13.1
2
+ * message-compiler v10.0.0-alpha.1
3
3
  * (c) 2024 kazuya kawaguchi
4
4
  * Released under the MIT License.
5
5
  */
@@ -43,23 +43,6 @@ function join(items, separator = '') {
43
43
  return items.reduce((str, item, index) => (index === 0 ? str + item : str + separator + item), '');
44
44
  }
45
45
 
46
- const CompileWarnCodes = {
47
- USE_MODULO_SYNTAX: 1,
48
- __EXTEND_POINT__: 2
49
- };
50
- /** @internal */
51
- const warnMessages = {
52
- [CompileWarnCodes.USE_MODULO_SYNTAX]: `Use modulo before '{{0}}'.`
53
- };
54
- function createCompileWarn(code, loc, ...args) {
55
- const msg = format(warnMessages[code] || '', ...(args || [])) ;
56
- const message = { message: String(msg), code };
57
- if (loc) {
58
- message.location = loc;
59
- }
60
- return message;
61
- }
62
-
63
46
  const CompileErrorCodes = {
64
47
  // tokenizer error codes
65
48
  EXPECTED_TOKEN: 1,
@@ -184,7 +167,6 @@ function createScanner(str) {
184
167
  }
185
168
  function skipToPeek() {
186
169
  const target = _index + _peekOffset;
187
- // eslint-disable-next-line no-unmodified-loop-condition
188
170
  while (target !== _index) {
189
171
  next();
190
172
  }
@@ -218,11 +200,11 @@ function createTokenizer(source, options = {}) {
218
200
  const _initLoc = currentPosition();
219
201
  const _initOffset = currentOffset();
220
202
  const _context = {
221
- currentType: 14 /* TokenTypes.EOF */,
203
+ currentType: 13 /* TokenTypes.EOF */,
222
204
  offset: _initOffset,
223
205
  startLoc: _initLoc,
224
206
  endLoc: _initLoc,
225
- lastType: 14 /* TokenTypes.EOF */,
207
+ lastType: 13 /* TokenTypes.EOF */,
226
208
  lastOffset: _initOffset,
227
209
  lastStartLoc: _initLoc,
228
210
  lastEndLoc: _initLoc,
@@ -257,7 +239,7 @@ function createTokenizer(source, options = {}) {
257
239
  }
258
240
  return token;
259
241
  }
260
- const getEndToken = (context) => getToken(context, 14 /* TokenTypes.EOF */);
242
+ const getEndToken = (context) => getToken(context, 13 /* TokenTypes.EOF */);
261
243
  function eat(scnr, ch) {
262
244
  if (scnr.currentChar() === ch) {
263
245
  scnr.next();
@@ -331,7 +313,7 @@ function createTokenizer(source, options = {}) {
331
313
  }
332
314
  function isLinkedDotStart(scnr, context) {
333
315
  const { currentType } = context;
334
- if (currentType !== 8 /* TokenTypes.LinkedAlias */) {
316
+ if (currentType !== 7 /* TokenTypes.LinkedAlias */) {
335
317
  return false;
336
318
  }
337
319
  peekSpaces(scnr);
@@ -341,7 +323,7 @@ function createTokenizer(source, options = {}) {
341
323
  }
342
324
  function isLinkedModifierStart(scnr, context) {
343
325
  const { currentType } = context;
344
- if (currentType !== 9 /* TokenTypes.LinkedDot */) {
326
+ if (currentType !== 8 /* TokenTypes.LinkedDot */) {
345
327
  return false;
346
328
  }
347
329
  peekSpaces(scnr);
@@ -351,8 +333,8 @@ function createTokenizer(source, options = {}) {
351
333
  }
352
334
  function isLinkedDelimiterStart(scnr, context) {
353
335
  const { currentType } = context;
354
- if (!(currentType === 8 /* TokenTypes.LinkedAlias */ ||
355
- currentType === 12 /* TokenTypes.LinkedModifier */)) {
336
+ if (!(currentType === 7 /* TokenTypes.LinkedAlias */ ||
337
+ currentType === 11 /* TokenTypes.LinkedModifier */)) {
356
338
  return false;
357
339
  }
358
340
  peekSpaces(scnr);
@@ -362,7 +344,7 @@ function createTokenizer(source, options = {}) {
362
344
  }
363
345
  function isLinkedReferStart(scnr, context) {
364
346
  const { currentType } = context;
365
- if (currentType !== 10 /* TokenTypes.LinkedDelimiter */) {
347
+ if (currentType !== 9 /* TokenTypes.LinkedDelimiter */) {
366
348
  return false;
367
349
  }
368
350
  const fn = () => {
@@ -371,7 +353,6 @@ function createTokenizer(source, options = {}) {
371
353
  return isIdentifierStart(scnr.peek());
372
354
  }
373
355
  else if (ch === "@" /* TokenChars.LinkedAlias */ ||
374
- ch === "%" /* TokenChars.Modulo */ ||
375
356
  ch === "|" /* TokenChars.Pipe */ ||
376
357
  ch === ":" /* TokenChars.LinkedDelimiter */ ||
377
358
  ch === "." /* TokenChars.LinkedDot */ ||
@@ -398,41 +379,25 @@ function createTokenizer(source, options = {}) {
398
379
  scnr.resetPeek();
399
380
  return ret;
400
381
  }
401
- function detectModuloStart(scnr) {
402
- const spaces = peekSpaces(scnr);
403
- const ret = scnr.currentPeek() === "%" /* TokenChars.Modulo */ &&
404
- scnr.peek() === "{" /* TokenChars.BraceLeft */;
405
- scnr.resetPeek();
406
- return {
407
- isModulo: ret,
408
- hasSpace: spaces.length > 0
409
- };
410
- }
411
382
  function isTextStart(scnr, reset = true) {
412
- const fn = (hasSpace = false, prev = '', detectModulo = false) => {
383
+ const fn = (hasSpace = false, prev = '') => {
413
384
  const ch = scnr.currentPeek();
414
385
  if (ch === "{" /* TokenChars.BraceLeft */) {
415
- return prev === "%" /* TokenChars.Modulo */ ? false : hasSpace;
386
+ return hasSpace;
416
387
  }
417
388
  else if (ch === "@" /* TokenChars.LinkedAlias */ || !ch) {
418
- return prev === "%" /* TokenChars.Modulo */ ? true : hasSpace;
419
- }
420
- else if (ch === "%" /* TokenChars.Modulo */) {
421
- scnr.peek();
422
- return fn(hasSpace, "%" /* TokenChars.Modulo */, true);
389
+ return hasSpace;
423
390
  }
424
391
  else if (ch === "|" /* TokenChars.Pipe */) {
425
- return prev === "%" /* TokenChars.Modulo */ || detectModulo
426
- ? true
427
- : !(prev === CHAR_SP || prev === CHAR_LF);
392
+ return !(prev === CHAR_SP || prev === CHAR_LF);
428
393
  }
429
394
  else if (ch === CHAR_SP) {
430
395
  scnr.peek();
431
- return fn(true, CHAR_SP, detectModulo);
396
+ return fn(true, CHAR_SP);
432
397
  }
433
398
  else if (ch === CHAR_LF) {
434
399
  scnr.peek();
435
- return fn(true, CHAR_LF, detectModulo);
400
+ return fn(true, CHAR_LF);
436
401
  }
437
402
  else {
438
403
  return true;
@@ -502,18 +467,8 @@ function createTokenizer(source, options = {}) {
502
467
  }
503
468
  return num;
504
469
  }
505
- function readModulo(scnr) {
506
- skipSpaces(scnr);
507
- const ch = scnr.currentChar();
508
- if (ch !== "%" /* TokenChars.Modulo */) {
509
- emitError(CompileErrorCodes.EXPECTED_TOKEN, currentPosition(), 0, ch);
510
- }
511
- scnr.next();
512
- return "%" /* TokenChars.Modulo */;
513
- }
514
470
  function readText(scnr) {
515
471
  let buf = '';
516
- // eslint-disable-next-line no-constant-condition
517
472
  while (true) {
518
473
  const ch = scnr.currentChar();
519
474
  if (ch === "{" /* TokenChars.BraceLeft */ ||
@@ -523,15 +478,6 @@ function createTokenizer(source, options = {}) {
523
478
  !ch) {
524
479
  break;
525
480
  }
526
- else if (ch === "%" /* TokenChars.Modulo */) {
527
- if (isTextStart(scnr)) {
528
- buf += ch;
529
- scnr.next();
530
- }
531
- else {
532
- break;
533
- }
534
- }
535
481
  else if (ch === CHAR_SP || ch === CHAR_LF) {
536
482
  if (isTextStart(scnr)) {
537
483
  buf += ch;
@@ -667,7 +613,6 @@ function createTokenizer(source, options = {}) {
667
613
  const fn = (buf) => {
668
614
  const ch = scnr.currentChar();
669
615
  if (ch === "{" /* TokenChars.BraceLeft */ ||
670
- ch === "%" /* TokenChars.Modulo */ ||
671
616
  ch === "@" /* TokenChars.LinkedAlias */ ||
672
617
  ch === "|" /* TokenChars.Pipe */ ||
673
618
  ch === "(" /* TokenChars.ParenLeft */ ||
@@ -746,31 +691,31 @@ function createTokenizer(source, options = {}) {
746
691
  return token;
747
692
  }
748
693
  if (context.braceNest > 0 &&
749
- (context.currentType === 5 /* TokenTypes.Named */ ||
750
- context.currentType === 6 /* TokenTypes.List */ ||
751
- context.currentType === 7 /* TokenTypes.Literal */)) {
694
+ (context.currentType === 4 /* TokenTypes.Named */ ||
695
+ context.currentType === 5 /* TokenTypes.List */ ||
696
+ context.currentType === 6 /* TokenTypes.Literal */)) {
752
697
  emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);
753
698
  context.braceNest = 0;
754
699
  return readToken(scnr, context);
755
700
  }
756
701
  if ((validNamedIdentifier = isNamedIdentifierStart(scnr, context))) {
757
- token = getToken(context, 5 /* TokenTypes.Named */, readNamedIdentifier(scnr));
702
+ token = getToken(context, 4 /* TokenTypes.Named */, readNamedIdentifier(scnr));
758
703
  skipSpaces(scnr);
759
704
  return token;
760
705
  }
761
706
  if ((validListIdentifier = isListIdentifierStart(scnr, context))) {
762
- token = getToken(context, 6 /* TokenTypes.List */, readListIdentifier(scnr));
707
+ token = getToken(context, 5 /* TokenTypes.List */, readListIdentifier(scnr));
763
708
  skipSpaces(scnr);
764
709
  return token;
765
710
  }
766
711
  if ((validLiteral = isLiteralStart(scnr, context))) {
767
- token = getToken(context, 7 /* TokenTypes.Literal */, readLiteral(scnr));
712
+ token = getToken(context, 6 /* TokenTypes.Literal */, readLiteral(scnr));
768
713
  skipSpaces(scnr);
769
714
  return token;
770
715
  }
771
716
  if (!validNamedIdentifier && !validListIdentifier && !validLiteral) {
772
717
  // TODO: we should be re-designed invalid cases, when we will extend message syntax near the future ...
773
- token = getToken(context, 13 /* TokenTypes.InvalidPlace */, readInvalidIdentifier(scnr));
718
+ token = getToken(context, 12 /* TokenTypes.InvalidPlace */, readInvalidIdentifier(scnr));
774
719
  emitError(CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER, currentPosition(), 0, token.value);
775
720
  skipSpaces(scnr);
776
721
  return token;
@@ -785,27 +730,27 @@ function createTokenizer(source, options = {}) {
785
730
  const { currentType } = context;
786
731
  let token = null;
787
732
  const ch = scnr.currentChar();
788
- if ((currentType === 8 /* TokenTypes.LinkedAlias */ ||
789
- currentType === 9 /* TokenTypes.LinkedDot */ ||
790
- currentType === 12 /* TokenTypes.LinkedModifier */ ||
791
- currentType === 10 /* TokenTypes.LinkedDelimiter */) &&
733
+ if ((currentType === 7 /* TokenTypes.LinkedAlias */ ||
734
+ currentType === 8 /* TokenTypes.LinkedDot */ ||
735
+ currentType === 11 /* TokenTypes.LinkedModifier */ ||
736
+ currentType === 9 /* TokenTypes.LinkedDelimiter */) &&
792
737
  (ch === CHAR_LF || ch === CHAR_SP)) {
793
738
  emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);
794
739
  }
795
740
  switch (ch) {
796
741
  case "@" /* TokenChars.LinkedAlias */:
797
742
  scnr.next();
798
- token = getToken(context, 8 /* TokenTypes.LinkedAlias */, "@" /* TokenChars.LinkedAlias */);
743
+ token = getToken(context, 7 /* TokenTypes.LinkedAlias */, "@" /* TokenChars.LinkedAlias */);
799
744
  context.inLinked = true;
800
745
  return token;
801
746
  case "." /* TokenChars.LinkedDot */:
802
747
  skipSpaces(scnr);
803
748
  scnr.next();
804
- return getToken(context, 9 /* TokenTypes.LinkedDot */, "." /* TokenChars.LinkedDot */);
749
+ return getToken(context, 8 /* TokenTypes.LinkedDot */, "." /* TokenChars.LinkedDot */);
805
750
  case ":" /* TokenChars.LinkedDelimiter */:
806
751
  skipSpaces(scnr);
807
752
  scnr.next();
808
- return getToken(context, 10 /* TokenTypes.LinkedDelimiter */, ":" /* TokenChars.LinkedDelimiter */);
753
+ return getToken(context, 9 /* TokenTypes.LinkedDelimiter */, ":" /* TokenChars.LinkedDelimiter */);
809
754
  default:
810
755
  if (isPluralStart(scnr)) {
811
756
  token = getToken(context, 1 /* TokenTypes.Pipe */, readPlural(scnr));
@@ -821,7 +766,7 @@ function createTokenizer(source, options = {}) {
821
766
  }
822
767
  if (isLinkedModifierStart(scnr, context)) {
823
768
  skipSpaces(scnr);
824
- return getToken(context, 12 /* TokenTypes.LinkedModifier */, readLinkedModifier(scnr));
769
+ return getToken(context, 11 /* TokenTypes.LinkedModifier */, readLinkedModifier(scnr));
825
770
  }
826
771
  if (isLinkedReferStart(scnr, context)) {
827
772
  skipSpaces(scnr);
@@ -830,10 +775,10 @@ function createTokenizer(source, options = {}) {
830
775
  return readTokenInPlaceholder(scnr, context) || token;
831
776
  }
832
777
  else {
833
- return getToken(context, 11 /* TokenTypes.LinkedKey */, readLinkedRefer(scnr));
778
+ return getToken(context, 10 /* TokenTypes.LinkedKey */, readLinkedRefer(scnr));
834
779
  }
835
780
  }
836
- if (currentType === 8 /* TokenTypes.LinkedAlias */) {
781
+ if (currentType === 7 /* TokenTypes.LinkedAlias */) {
837
782
  emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);
838
783
  }
839
784
  context.braceNest = 0;
@@ -843,7 +788,7 @@ function createTokenizer(source, options = {}) {
843
788
  }
844
789
  // TODO: We need refactoring of token parsing ...
845
790
  function readToken(scnr, context) {
846
- let token = { type: 14 /* TokenTypes.EOF */ };
791
+ let token = { type: 13 /* TokenTypes.EOF */ };
847
792
  if (context.braceNest > 0) {
848
793
  return readTokenInPlaceholder(scnr, context) || getEndToken(context);
849
794
  }
@@ -868,12 +813,6 @@ function createTokenizer(source, options = {}) {
868
813
  context.inLinked = false;
869
814
  return token;
870
815
  }
871
- const { isModulo, hasSpace } = detectModuloStart(scnr);
872
- if (isModulo) {
873
- return hasSpace
874
- ? getToken(context, 0 /* TokenTypes.Text */, readText(scnr))
875
- : getToken(context, 4 /* TokenTypes.Modulo */, readModulo(scnr));
876
- }
877
816
  if (isTextStart(scnr)) {
878
817
  return getToken(context, 0 /* TokenTypes.Text */, readText(scnr));
879
818
  }
@@ -891,7 +830,7 @@ function createTokenizer(source, options = {}) {
891
830
  _context.offset = currentOffset();
892
831
  _context.startLoc = currentPosition();
893
832
  if (_scnr.currentChar() === EOF) {
894
- return getToken(_context, 14 /* TokenTypes.EOF */);
833
+ return getToken(_context, 13 /* TokenTypes.EOF */);
895
834
  }
896
835
  return readToken(_scnr, _context);
897
836
  }
@@ -927,7 +866,7 @@ function fromEscapeSequence(match, codePoint4, codePoint6) {
927
866
  }
928
867
  function createParser(options = {}) {
929
868
  const location = options.location !== false;
930
- const { onError, onWarn } = options;
869
+ const { onError } = options;
931
870
  function emitError(tokenzer, code, start, offset, ...args) {
932
871
  const end = tokenzer.currentPosition();
933
872
  end.offset += offset;
@@ -941,15 +880,6 @@ function createParser(options = {}) {
941
880
  onError(err);
942
881
  }
943
882
  }
944
- function emitWarn(tokenzer, code, start, offset, ...args) {
945
- const end = tokenzer.currentPosition();
946
- end.offset += offset;
947
- end.column += offset;
948
- if (onWarn) {
949
- const loc = location ? createLocation(start, end) : null;
950
- onWarn(createCompileWarn(code, loc, args));
951
- }
952
- }
953
883
  function startNode(type, offset, loc) {
954
884
  const node = { type };
955
885
  if (location) {
@@ -986,14 +916,11 @@ function createParser(options = {}) {
986
916
  endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());
987
917
  return node;
988
918
  }
989
- function parseNamed(tokenizer, key, modulo) {
919
+ function parseNamed(tokenizer, key) {
990
920
  const context = tokenizer.context();
991
921
  const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc
992
922
  const node = startNode(4 /* NodeTypes.Named */, offset, loc);
993
923
  node.key = key;
994
- if (modulo === true) {
995
- node.modulo = true;
996
- }
997
924
  tokenizer.nextToken(); // skip brach right
998
925
  endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());
999
926
  return node;
@@ -1012,7 +939,7 @@ function createParser(options = {}) {
1012
939
  const context = tokenizer.context();
1013
940
  const { lastOffset: offset, lastStartLoc: loc } = context; // get linked dot loc
1014
941
  const node = startNode(8 /* NodeTypes.LinkedModifier */, offset, loc);
1015
- if (token.type !== 12 /* TokenTypes.LinkedModifier */) {
942
+ if (token.type !== 11 /* TokenTypes.LinkedModifier */) {
1016
943
  // empty modifier
1017
944
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER, context.lastStartLoc, 0);
1018
945
  node.value = '';
@@ -1043,13 +970,13 @@ function createParser(options = {}) {
1043
970
  const context = tokenizer.context();
1044
971
  const linkedNode = startNode(6 /* NodeTypes.Linked */, context.offset, context.startLoc);
1045
972
  let token = tokenizer.nextToken();
1046
- if (token.type === 9 /* TokenTypes.LinkedDot */) {
973
+ if (token.type === 8 /* TokenTypes.LinkedDot */) {
1047
974
  const parsed = parseLinkedModifier(tokenizer);
1048
975
  linkedNode.modifier = parsed.node;
1049
976
  token = parsed.nextConsumeToken || tokenizer.nextToken();
1050
977
  }
1051
978
  // asset check token
1052
- if (token.type !== 10 /* TokenTypes.LinkedDelimiter */) {
979
+ if (token.type !== 9 /* TokenTypes.LinkedDelimiter */) {
1053
980
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));
1054
981
  }
1055
982
  token = tokenizer.nextToken();
@@ -1058,25 +985,25 @@ function createParser(options = {}) {
1058
985
  token = tokenizer.nextToken();
1059
986
  }
1060
987
  switch (token.type) {
1061
- case 11 /* TokenTypes.LinkedKey */:
988
+ case 10 /* TokenTypes.LinkedKey */:
1062
989
  if (token.value == null) {
1063
990
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));
1064
991
  }
1065
992
  linkedNode.key = parseLinkedKey(tokenizer, token.value || '');
1066
993
  break;
1067
- case 5 /* TokenTypes.Named */:
994
+ case 4 /* TokenTypes.Named */:
1068
995
  if (token.value == null) {
1069
996
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));
1070
997
  }
1071
998
  linkedNode.key = parseNamed(tokenizer, token.value || '');
1072
999
  break;
1073
- case 6 /* TokenTypes.List */:
1000
+ case 5 /* TokenTypes.List */:
1074
1001
  if (token.value == null) {
1075
1002
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));
1076
1003
  }
1077
1004
  linkedNode.key = parseList(tokenizer, token.value || '');
1078
1005
  break;
1079
- case 7 /* TokenTypes.Literal */:
1006
+ case 6 /* TokenTypes.Literal */:
1080
1007
  if (token.value == null) {
1081
1008
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));
1082
1009
  }
@@ -1113,7 +1040,6 @@ function createParser(options = {}) {
1113
1040
  const node = startNode(2 /* NodeTypes.Message */, startOffset, startLoc);
1114
1041
  node.items = [];
1115
1042
  let nextToken = null;
1116
- let modulo = null;
1117
1043
  do {
1118
1044
  const token = nextToken || tokenizer.nextToken();
1119
1045
  nextToken = null;
@@ -1124,39 +1050,32 @@ function createParser(options = {}) {
1124
1050
  }
1125
1051
  node.items.push(parseText(tokenizer, token.value || ''));
1126
1052
  break;
1127
- case 6 /* TokenTypes.List */:
1053
+ case 5 /* TokenTypes.List */:
1128
1054
  if (token.value == null) {
1129
1055
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));
1130
1056
  }
1131
1057
  node.items.push(parseList(tokenizer, token.value || ''));
1132
1058
  break;
1133
- case 4 /* TokenTypes.Modulo */:
1134
- modulo = true;
1135
- break;
1136
- case 5 /* TokenTypes.Named */:
1059
+ case 4 /* TokenTypes.Named */:
1137
1060
  if (token.value == null) {
1138
1061
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));
1139
1062
  }
1140
- node.items.push(parseNamed(tokenizer, token.value || '', !!modulo));
1141
- if (modulo) {
1142
- emitWarn(tokenizer, CompileWarnCodes.USE_MODULO_SYNTAX, context.lastStartLoc, 0, getTokenCaption(token));
1143
- modulo = null;
1144
- }
1063
+ node.items.push(parseNamed(tokenizer, token.value || ''));
1145
1064
  break;
1146
- case 7 /* TokenTypes.Literal */:
1065
+ case 6 /* TokenTypes.Literal */:
1147
1066
  if (token.value == null) {
1148
1067
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));
1149
1068
  }
1150
1069
  node.items.push(parseLiteral(tokenizer, token.value || ''));
1151
1070
  break;
1152
- case 8 /* TokenTypes.LinkedAlias */: {
1071
+ case 7 /* TokenTypes.LinkedAlias */: {
1153
1072
  const parsed = parseLinked(tokenizer);
1154
1073
  node.items.push(parsed.node);
1155
1074
  nextToken = parsed.nextConsumeToken || null;
1156
1075
  break;
1157
1076
  }
1158
1077
  }
1159
- } while (context.currentType !== 14 /* TokenTypes.EOF */ &&
1078
+ } while (context.currentType !== 13 /* TokenTypes.EOF */ &&
1160
1079
  context.currentType !== 1 /* TokenTypes.Pipe */);
1161
1080
  // adjust message node loc
1162
1081
  const endOffset = context.currentType === 1 /* TokenTypes.Pipe */
@@ -1180,7 +1099,7 @@ function createParser(options = {}) {
1180
1099
  hasEmptyMessage = msg.items.length === 0;
1181
1100
  }
1182
1101
  node.cases.push(msg);
1183
- } while (context.currentType !== 14 /* TokenTypes.EOF */);
1102
+ } while (context.currentType !== 13 /* TokenTypes.EOF */);
1184
1103
  if (hasEmptyMessage) {
1185
1104
  emitError(tokenizer, CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL, loc, 0);
1186
1105
  }
@@ -1191,7 +1110,7 @@ function createParser(options = {}) {
1191
1110
  const context = tokenizer.context();
1192
1111
  const { offset, startLoc } = context;
1193
1112
  const msgNode = parseMessage(tokenizer);
1194
- if (context.currentType === 14 /* TokenTypes.EOF */) {
1113
+ if (context.currentType === 13 /* TokenTypes.EOF */) {
1195
1114
  return msgNode;
1196
1115
  }
1197
1116
  else {
@@ -1210,7 +1129,7 @@ function createParser(options = {}) {
1210
1129
  node.cacheKey = options.onCacheKey(source);
1211
1130
  }
1212
1131
  // assert whether achieved to EOF
1213
- if (context.currentType !== 14 /* TokenTypes.EOF */) {
1132
+ if (context.currentType !== 13 /* TokenTypes.EOF */) {
1214
1133
  emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, source[context.offset] || '');
1215
1134
  }
1216
1135
  endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());
@@ -1219,7 +1138,7 @@ function createParser(options = {}) {
1219
1138
  return { parse };
1220
1139
  }
1221
1140
  function getTokenCaption(token) {
1222
- if (token.type === 14 /* TokenTypes.EOF */) {
1141
+ if (token.type === 13 /* TokenTypes.EOF */) {
1223
1142
  return 'EOF';
1224
1143
  }
1225
1144
  const name = (token.value || '').replace(/\r?\n/gu, '\\n');
@@ -1557,8 +1476,7 @@ function generateNode(generator, node) {
1557
1476
  }
1558
1477
  }
1559
1478
  // generate code from AST
1560
- const generate = (ast, options = {} // eslint-disable-line
1561
- ) => {
1479
+ const generate = (ast, options = {}) => {
1562
1480
  const mode = isString(options.mode) ? options.mode : 'normal';
1563
1481
  const filename = isString(options.filename)
1564
1482
  ? options.filename
@@ -1622,4 +1540,4 @@ function baseCompile(source, options = {}) {
1622
1540
  }
1623
1541
  }
1624
1542
 
1625
- export { CompileErrorCodes, CompileWarnCodes, ERROR_DOMAIN$2 as ERROR_DOMAIN, LOCATION_STUB, baseCompile, createCompileError, createCompileWarn, createLocation, createParser, createPosition, defaultOnError, detectHtmlTag, errorMessages, warnMessages };
1543
+ export { CompileErrorCodes, ERROR_DOMAIN$2 as ERROR_DOMAIN, LOCATION_STUB, baseCompile, createCompileError, createLocation, createParser, createPosition, defaultOnError, detectHtmlTag, errorMessages };
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * message-compiler v9.13.1
2
+ * message-compiler v10.0.0-alpha.1
3
3
  * (c) 2024 kazuya kawaguchi
4
4
  * Released under the MIT License.
5
5
  */
6
- const LOCATION_STUB={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function createPosition(e,t,n){return{line:e,column:t,offset:n}}function createLocation(e,t,n){const r={start:e,end:t};return null!=n&&(r.source=n),r}const assign=Object.assign,isString=e=>"string"==typeof e;function join(e,t=""){return e.reduce(((e,n,r)=>0===r?e+n:e+t+n),"")}const CompileWarnCodes={USE_MODULO_SYNTAX:1,__EXTEND_POINT__:2},warnMessages={[CompileWarnCodes.USE_MODULO_SYNTAX]:"Use modulo before '{{0}}'."};function createCompileWarn(e,t,...n){const r={message:String(e),code:e};return t&&(r.location=t),r}const CompileErrorCodes={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17},errorMessages={[CompileErrorCodes.EXPECTED_TOKEN]:"Expected token: '{0}'",[CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER]:"Invalid token in placeholder: '{0}'",[CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]:"Unterminated single quote in placeholder",[CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE]:"Unknown escape sequence: \\{0}",[CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE]:"Invalid unicode escape sequence: {0}",[CompileErrorCodes.UNBALANCED_CLOSING_BRACE]:"Unbalanced closing brace",[CompileErrorCodes.UNTERMINATED_CLOSING_BRACE]:"Unterminated closing brace",[CompileErrorCodes.EMPTY_PLACEHOLDER]:"Empty placeholder",[CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER]:"Not allowed nest placeholder",[CompileErrorCodes.INVALID_LINKED_FORMAT]:"Invalid linked format",[CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL]:"Plural must have messages",[CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER]:"Unexpected empty linked modifier",[CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY]:"Unexpected empty linked key",[CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS]:"Unexpected lexical analysis in token: '{0}'",[CompileErrorCodes.UNHANDLED_CODEGEN_NODE_TYPE]:"unhandled codegen node type: '{0}'",[CompileErrorCodes.UNHANDLED_MINIFIER_NODE_TYPE]:"unhandled mimifier node type: '{0}'"};function createCompileError(e,t,n={}){const{domain:r,messages:o,args:s}=n,c=new SyntaxError(String(e));return c.code=e,t&&(c.location=t),c.domain=r,c}function defaultOnError(e){throw e}const RE_HTML_TAG=/<\/?[\w\s="/.':;#-\/]+>/,detectHtmlTag=e=>RE_HTML_TAG.test(e),CHAR_SP=" ",CHAR_CR="\r",CHAR_LF="\n",CHAR_LS=String.fromCharCode(8232),CHAR_PS=String.fromCharCode(8233);function createScanner(e){const t=e;let n=0,r=1,o=1,s=0;const c=e=>t[e]===CHAR_CR&&t[e+1]===CHAR_LF,a=e=>t[e]===CHAR_PS,i=e=>t[e]===CHAR_LS,u=e=>c(e)||(e=>t[e]===CHAR_LF)(e)||a(e)||i(e),l=e=>c(e)||a(e)||i(e)?CHAR_LF:t[e];function E(){return s=0,u(n)&&(r++,o=0),c(n)&&n++,n++,o++,t[n]}return{index:()=>n,line:()=>r,column:()=>o,peekOffset:()=>s,charAt:l,currentChar:()=>l(n),currentPeek:()=>l(n+s),next:E,peek:function(){return c(n+s)&&s++,s++,t[n+s]},reset:function(){n=0,r=1,o=1,s=0},resetPeek:function(e=0){s=e},skipToPeek:function(){const e=n+s;for(;e!==n;)E();s=0}}}const EOF=void 0,DOT=".",LITERAL_DELIMITER="'",ERROR_DOMAIN$1="tokenizer";function createTokenizer(e,t={}){const n=!1!==t.location,r=createScanner(e),o=()=>r.index(),s=()=>createPosition(r.line(),r.column(),r.index()),c=s(),a=o(),i={currentType:14,offset:a,startLoc:c,endLoc:c,lastType:14,lastOffset:a,lastStartLoc:c,lastEndLoc:c,braceNest:0,inLinked:!1,text:""},u=()=>i,{onError:l}=t;function E(e,t,r){e.endLoc=s(),e.currentType=t;const o={type:t};return n&&(o.loc=createLocation(e.startLoc,e.endLoc)),null!=r&&(o.value=r),o}const C=e=>E(e,14);function f(e,t){return e.currentChar()===t?(e.next(),t):(CompileErrorCodes.EXPECTED_TOKEN,s(),"")}function d(e){let t="";for(;e.currentPeek()===CHAR_SP||e.currentPeek()===CHAR_LF;)t+=e.currentPeek(),e.peek();return t}function p(e){const t=d(e);return e.skipToPeek(),t}function _(e){if(e===EOF)return!1;const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||95===t}function L(e,t){const{currentType:n}=t;if(2!==n)return!1;d(e);const r=function(e){if(e===EOF)return!1;const t=e.charCodeAt(0);return t>=48&&t<=57}("-"===e.currentPeek()?e.peek():e.currentPeek());return e.resetPeek(),r}function N(e){d(e);const t="|"===e.currentPeek();return e.resetPeek(),t}function A(e,t=!0){const n=(t=!1,r="",o=!1)=>{const s=e.currentPeek();return"{"===s?"%"!==r&&t:"@"!==s&&s?"%"===s?(e.peek(),n(t,"%",!0)):"|"===s?!("%"!==r&&!o)||!(r===CHAR_SP||r===CHAR_LF):s===CHAR_SP?(e.peek(),n(!0,CHAR_SP,o)):s!==CHAR_LF||(e.peek(),n(!0,CHAR_LF,o)):"%"===r||t},r=n();return t&&e.resetPeek(),r}function T(e,t){const n=e.currentChar();return n===EOF?EOF:t(n)?(e.next(),n):null}function m(e){const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||95===t||36===t}function k(e){return T(e,m)}function I(e){const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||95===t||36===t||45===t}function S(e){return T(e,I)}function P(e){const t=e.charCodeAt(0);return t>=48&&t<=57}function h(e){return T(e,P)}function O(e){const t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function D(e){return T(e,O)}function y(e){let t="",n="";for(;t=h(e);)n+=t;return n}function R(e){let t="";for(;;){const n=e.currentChar();if("{"===n||"}"===n||"@"===n||"|"===n||!n)break;if("%"===n){if(!A(e))break;t+=n,e.next()}else if(n===CHAR_SP||n===CHAR_LF)if(A(e))t+=n,e.next();else{if(N(e))break;t+=n,e.next()}else t+=n,e.next()}return t}function g(e){return e!==LITERAL_DELIMITER&&e!==CHAR_LF}function U(e){const t=e.currentChar();switch(t){case"\\":case"'":return e.next(),`\\${t}`;case"u":return b(e,t,4);case"U":return b(e,t,6);default:return CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE,s(),""}}function b(e,t,n){f(e,t);let r="";for(let o=0;o<n;o++){const t=D(e);if(!t){CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE,s(),e.currentChar();break}r+=t}return`\\${t}${r}`}function x(e){return"{"!==e&&"}"!==e&&e!==CHAR_SP&&e!==CHAR_LF}function M(e){p(e);const t=f(e,"|");return p(e),t}function v(e,t){let n=null;switch(e.currentChar()){case"{":return t.braceNest>=1&&(CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER,s()),e.next(),n=E(t,2,"{"),p(e),t.braceNest++,n;case"}":return t.braceNest>0&&2===t.currentType&&(CompileErrorCodes.EMPTY_PLACEHOLDER,s()),e.next(),n=E(t,3,"}"),t.braceNest--,t.braceNest>0&&p(e),t.inLinked&&0===t.braceNest&&(t.inLinked=!1),n;case"@":return t.braceNest>0&&(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,s()),n=H(e,t)||C(t),t.braceNest=0,n;default:{let r=!0,o=!0,c=!0;if(N(e))return t.braceNest>0&&(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,s()),n=E(t,1,M(e)),t.braceNest=0,t.inLinked=!1,n;if(t.braceNest>0&&(5===t.currentType||6===t.currentType||7===t.currentType))return CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,s(),t.braceNest=0,X(e,t);if(r=function(e,t){const{currentType:n}=t;if(2!==n)return!1;d(e);const r=_(e.currentPeek());return e.resetPeek(),r}(e,t))return n=E(t,5,function(e){p(e);let t="",n="";for(;t=S(e);)n+=t;return e.currentChar()===EOF&&(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,s()),n}(e)),p(e),n;if(o=L(e,t))return n=E(t,6,function(e){p(e);let t="";return"-"===e.currentChar()?(e.next(),t+=`-${y(e)}`):t+=y(e),e.currentChar()===EOF&&(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,s()),t}(e)),p(e),n;if(c=function(e,t){const{currentType:n}=t;if(2!==n)return!1;d(e);const r=e.currentPeek()===LITERAL_DELIMITER;return e.resetPeek(),r}(e,t))return n=E(t,7,function(e){p(e),f(e,"'");let t="",n="";for(;t=T(e,g);)n+="\\"===t?U(e):t;const r=e.currentChar();return r===CHAR_LF||r===EOF?(CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,s(),r===CHAR_LF&&(e.next(),f(e,"'")),n):(f(e,"'"),n)}(e)),p(e),n;if(!r&&!o&&!c)return n=E(t,13,function(e){p(e);let t="",n="";for(;t=T(e,x);)n+=t;return n}(e)),CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER,s(),n.value,p(e),n;break}}return n}function H(e,t){const{currentType:n}=t;let r=null;const o=e.currentChar();switch(8!==n&&9!==n&&12!==n&&10!==n||o!==CHAR_LF&&o!==CHAR_SP||(CompileErrorCodes.INVALID_LINKED_FORMAT,s()),o){case"@":return e.next(),r=E(t,8,"@"),t.inLinked=!0,r;case".":return p(e),e.next(),E(t,9,".");case":":return p(e),e.next(),E(t,10,":");default:return N(e)?(r=E(t,1,M(e)),t.braceNest=0,t.inLinked=!1,r):function(e,t){const{currentType:n}=t;if(8!==n)return!1;d(e);const r="."===e.currentPeek();return e.resetPeek(),r}(e,t)||function(e,t){const{currentType:n}=t;if(8!==n&&12!==n)return!1;d(e);const r=":"===e.currentPeek();return e.resetPeek(),r}(e,t)?(p(e),H(e,t)):function(e,t){const{currentType:n}=t;if(9!==n)return!1;d(e);const r=_(e.currentPeek());return e.resetPeek(),r}(e,t)?(p(e),E(t,12,function(e){let t="",n="";for(;t=k(e);)n+=t;return n}(e))):function(e,t){const{currentType:n}=t;if(10!==n)return!1;const r=()=>{const t=e.currentPeek();return"{"===t?_(e.peek()):!("@"===t||"%"===t||"|"===t||":"===t||"."===t||t===CHAR_SP||!t)&&(t===CHAR_LF?(e.peek(),r()):A(e,!1))},o=r();return e.resetPeek(),o}(e,t)?(p(e),"{"===o?v(e,t)||r:E(t,11,function(e){const t=n=>{const r=e.currentChar();return"{"!==r&&"%"!==r&&"@"!==r&&"|"!==r&&"("!==r&&")"!==r&&r?r===CHAR_SP?n:(n+=r,e.next(),t(n)):n};return t("")}(e))):(8===n&&(CompileErrorCodes.INVALID_LINKED_FORMAT,s()),t.braceNest=0,t.inLinked=!1,X(e,t))}}function X(e,t){let n={type:14};if(t.braceNest>0)return v(e,t)||C(t);if(t.inLinked)return H(e,t)||C(t);switch(e.currentChar()){case"{":return v(e,t)||C(t);case"}":return CompileErrorCodes.UNBALANCED_CLOSING_BRACE,s(),e.next(),E(t,3,"}");case"@":return H(e,t)||C(t);default:{if(N(e))return n=E(t,1,M(e)),t.braceNest=0,t.inLinked=!1,n;const{isModulo:r,hasSpace:o}=function(e){const t=d(e),n="%"===e.currentPeek()&&"{"===e.peek();return e.resetPeek(),{isModulo:n,hasSpace:t.length>0}}(e);if(r)return o?E(t,0,R(e)):E(t,4,function(e){p(e);const t=e.currentChar();return"%"!==t&&(CompileErrorCodes.EXPECTED_TOKEN,s()),e.next(),"%"}(e));if(A(e))return E(t,0,R(e));break}}return n}return{nextToken:function(){const{currentType:e,offset:t,startLoc:n,endLoc:c}=i;return i.lastType=e,i.lastOffset=t,i.lastStartLoc=n,i.lastEndLoc=c,i.offset=o(),i.startLoc=s(),r.currentChar()===EOF?E(i,14):X(r,i)},currentOffset:o,currentPosition:s,context:u}}const ERROR_DOMAIN="parser",KNOWN_ESCAPES=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function fromEscapeSequence(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const e=parseInt(t||n,16);return e<=55295||e>=57344?String.fromCodePoint(e):"�"}}}function createParser(e={}){const t=!1!==e.location,{onError:n,onWarn:r}=e;function o(e,n,r){const o={type:e};return t&&(o.start=n,o.end=n,o.loc={start:r,end:r}),o}function s(e,n,r,o){o&&(e.type=o),t&&(e.end=n,e.loc&&(e.loc.end=r))}function c(e,t){const n=e.context(),r=o(3,n.offset,n.startLoc);return r.value=t,s(r,e.currentOffset(),e.currentPosition()),r}function a(e,t){const n=e.context(),{lastOffset:r,lastStartLoc:c}=n,a=o(5,r,c);return a.index=parseInt(t,10),e.nextToken(),s(a,e.currentOffset(),e.currentPosition()),a}function i(e,t,n){const r=e.context(),{lastOffset:c,lastStartLoc:a}=r,i=o(4,c,a);return i.key=t,!0===n&&(i.modulo=!0),e.nextToken(),s(i,e.currentOffset(),e.currentPosition()),i}function u(e,t){const n=e.context(),{lastOffset:r,lastStartLoc:c}=n,a=o(9,r,c);return a.value=t.replace(KNOWN_ESCAPES,fromEscapeSequence),e.nextToken(),s(a,e.currentOffset(),e.currentPosition()),a}function l(e){const t=e.context(),n=o(6,t.offset,t.startLoc);let r=e.nextToken();if(9===r.type){const t=function(e){const t=e.nextToken(),n=e.context(),{lastOffset:r,lastStartLoc:c}=n,a=o(8,r,c);return 12!==t.type?(CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER,n.lastStartLoc,a.value="",s(a,r,c),{nextConsumeToken:t,node:a}):(null==t.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,n.lastStartLoc,getTokenCaption(t)),a.value=t.value||"",s(a,e.currentOffset(),e.currentPosition()),{node:a})}(e);n.modifier=t.node,r=t.nextConsumeToken||e.nextToken()}switch(10!==r.type&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(r)),r=e.nextToken(),2===r.type&&(r=e.nextToken()),r.type){case 11:null==r.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(r)),n.key=function(e,t){const n=e.context(),r=o(7,n.offset,n.startLoc);return r.value=t,s(r,e.currentOffset(),e.currentPosition()),r}(e,r.value||"");break;case 5:null==r.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(r)),n.key=i(e,r.value||"");break;case 6:null==r.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(r)),n.key=a(e,r.value||"");break;case 7:null==r.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(r)),n.key=u(e,r.value||"");break;default:{CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY,t.lastStartLoc;const c=e.context(),a=o(7,c.offset,c.startLoc);return a.value="",s(a,c.offset,c.startLoc),n.key=a,s(n,c.offset,c.startLoc),{nextConsumeToken:r,node:n}}}return s(n,e.currentOffset(),e.currentPosition()),{node:n}}function E(e){const t=e.context(),n=o(2,1===t.currentType?e.currentOffset():t.offset,1===t.currentType?t.endLoc:t.startLoc);n.items=[];let r=null,E=null;do{const o=r||e.nextToken();switch(r=null,o.type){case 0:null==o.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(o)),n.items.push(c(e,o.value||""));break;case 6:null==o.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(o)),n.items.push(a(e,o.value||""));break;case 4:E=!0;break;case 5:null==o.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(o)),n.items.push(i(e,o.value||"",!!E)),E&&(CompileWarnCodes.USE_MODULO_SYNTAX,t.lastStartLoc,getTokenCaption(o),E=null);break;case 7:null==o.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(o)),n.items.push(u(e,o.value||""));break;case 8:{const t=l(e);n.items.push(t.node),r=t.nextConsumeToken||null;break}}}while(14!==t.currentType&&1!==t.currentType);return s(n,1===t.currentType?t.lastOffset:e.currentOffset(),1===t.currentType?t.lastEndLoc:e.currentPosition()),n}function C(e){const t=e.context(),{offset:n,startLoc:r}=t,c=E(e);return 14===t.currentType?c:function(e,t,n,r){const c=e.context();let a=0===r.items.length;const i=o(1,t,n);i.cases=[],i.cases.push(r);do{const t=E(e);a||(a=0===t.items.length),i.cases.push(t)}while(14!==c.currentType);return a&&CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL,s(i,e.currentOffset(),e.currentPosition()),i}(e,n,r,c)}return{parse:function(n){const r=createTokenizer(n,assign({},e)),c=r.context(),a=o(0,c.offset,c.startLoc);return t&&a.loc&&(a.loc.source=n),a.body=C(r),e.onCacheKey&&(a.cacheKey=e.onCacheKey(n)),14!==c.currentType&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,c.lastStartLoc,n[c.offset]),s(a,r.currentOffset(),r.currentPosition()),a}}}function getTokenCaption(e){if(14===e.type)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"…":t}function createTransformer(e,t={}){const n={ast:e,helpers:new Set};return{context:()=>n,helper:e=>(n.helpers.add(e),e)}}function traverseNodes(e,t){for(let n=0;n<e.length;n++)traverseNode(e[n],t)}function traverseNode(e,t){switch(e.type){case 1:traverseNodes(e.cases,t),t.helper("plural");break;case 2:traverseNodes(e.items,t);break;case 6:traverseNode(e.key,t),t.helper("linked"),t.helper("type");break;case 5:t.helper("interpolate"),t.helper("list");break;case 4:t.helper("interpolate"),t.helper("named")}}function transform(e,t={}){const n=createTransformer(e);n.helper("normalize"),e.body&&traverseNode(e.body,n);const r=n.context();e.helpers=Array.from(r.helpers)}function optimize(e){const t=e.body;return 2===t.type?optimizeMessageNode(t):t.cases.forEach((e=>optimizeMessageNode(e))),e}function optimizeMessageNode(e){if(1===e.items.length){const t=e.items[0];3!==t.type&&9!==t.type||(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;n<e.items.length;n++){const r=e.items[n];if(3!==r.type&&9!==r.type)break;if(null==r.value)break;t.push(r.value)}if(t.length===e.items.length){e.static=join(t);for(let t=0;t<e.items.length;t++){const n=e.items[t];3!==n.type&&9!==n.type||delete n.value}}}}function minify(e){switch(e.t=e.type,e.type){case 0:{const t=e;minify(t.body),t.b=t.body,delete t.body;break}case 1:{const t=e,n=t.cases;for(let e=0;e<n.length;e++)minify(n[e]);t.c=n,delete t.cases;break}case 2:{const t=e,n=t.items;for(let e=0;e<n.length;e++)minify(n[e]);t.i=n,delete t.items,t.static&&(t.s=t.static,delete t.static);break}case 3:case 9:case 8:case 7:{const t=e;t.value&&(t.v=t.value,delete t.value);break}case 6:{const t=e;minify(t.key),t.k=t.key,delete t.key,t.modifier&&(minify(t.modifier),t.m=t.modifier,delete t.modifier);break}case 5:{const t=e;t.i=t.index,delete t.index;break}case 4:{const t=e;t.k=t.key,delete t.key;break}}delete e.type}function createCodeGenerator(e,t){const{sourceMap:n,filename:r,breakLineCode:o,needIndent:s}=t,c=!1!==t.location,a={filename:r,code:"",column:1,line:1,offset:0,map:void 0,breakLineCode:o,needIndent:s,indentLevel:0};c&&e.loc&&(a.source=e.loc.source);function i(e,t){a.code+=e}function u(e,t=!0){const n=t?o:"";i(s?n+" ".repeat(e):n)}return{context:()=>a,push:i,indent:function(e=!0){const t=++a.indentLevel;e&&u(t)},deindent:function(e=!0){const t=--a.indentLevel;e&&u(t)},newline:function(){u(a.indentLevel)},helper:e=>`_${e}`,needIndent:()=>a.needIndent}}function generateLinkedNode(e,t){const{helper:n}=e;e.push(`${n("linked")}(`),generateNode(e,t.key),t.modifier?(e.push(", "),generateNode(e,t.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}function generateMessageNode(e,t){const{helper:n,needIndent:r}=e;e.push(`${n("normalize")}([`),e.indent(r());const o=t.items.length;for(let s=0;s<o&&(generateNode(e,t.items[s]),s!==o-1);s++)e.push(", ");e.deindent(r()),e.push("])")}function generatePluralNode(e,t){const{helper:n,needIndent:r}=e;if(t.cases.length>1){e.push(`${n("plural")}([`),e.indent(r());const o=t.cases.length;for(let n=0;n<o&&(generateNode(e,t.cases[n]),n!==o-1);n++)e.push(", ");e.deindent(r()),e.push("])")}}function generateResource(e,t){t.body?generateNode(e,t.body):e.push("null")}function generateNode(e,t){const{helper:n}=e;switch(t.type){case 0:generateResource(e,t);break;case 1:generatePluralNode(e,t);break;case 2:generateMessageNode(e,t);break;case 6:generateLinkedNode(e,t);break;case 8:case 7:case 9:case 3:e.push(JSON.stringify(t.value),t);break;case 5:e.push(`${n("interpolate")}(${n("list")}(${t.index}))`,t);break;case 4:e.push(`${n("interpolate")}(${n("named")}(${JSON.stringify(t.key)}))`,t)}}const generate=(e,t={})=>{const n=isString(t.mode)?t.mode:"normal",r=isString(t.filename)?t.filename:"message.intl",o=!!t.sourceMap,s=null!=t.breakLineCode?t.breakLineCode:"arrow"===n?";":"\n",c=t.needIndent?t.needIndent:"arrow"!==n,a=e.helpers||[],i=createCodeGenerator(e,{mode:n,filename:r,sourceMap:o,breakLineCode:s,needIndent:c});i.push("normal"===n?"function __msg__ (ctx) {":"(ctx) => {"),i.indent(c),a.length>0&&(i.push(`const { ${join(a.map((e=>`${e}: _${e}`)),", ")} } = ctx`),i.newline()),i.push("return "),generateNode(i,e),i.deindent(c),i.push("}"),delete e.helpers;const{code:u,map:l}=i.context();return{ast:e,code:u,map:l?l.toJSON():void 0}};function baseCompile(e,t={}){const n=assign({},t),r=!!n.jit,o=!!n.minify,s=null==n.optimize||n.optimize,c=createParser(n).parse(e);return r?(s&&optimize(c),o&&minify(c),{ast:c,code:""}):(transform(c,n),generate(c,n))}export{CompileErrorCodes,CompileWarnCodes,ERROR_DOMAIN,LOCATION_STUB,baseCompile,createCompileError,createCompileWarn,createLocation,createParser,createPosition,defaultOnError,detectHtmlTag,errorMessages,warnMessages};
6
+ const LOCATION_STUB={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0}};function createPosition(e,t,n){return{line:e,column:t,offset:n}}function createLocation(e,t,n){const r={start:e,end:t};return null!=n&&(r.source=n),r}const assign=Object.assign,isString=e=>"string"==typeof e;function join(e,t=""){return e.reduce(((e,n,r)=>0===r?e+n:e+t+n),"")}const CompileErrorCodes={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14,UNHANDLED_CODEGEN_NODE_TYPE:15,UNHANDLED_MINIFIER_NODE_TYPE:16,__EXTEND_POINT__:17},errorMessages={[CompileErrorCodes.EXPECTED_TOKEN]:"Expected token: '{0}'",[CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER]:"Invalid token in placeholder: '{0}'",[CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]:"Unterminated single quote in placeholder",[CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE]:"Unknown escape sequence: \\{0}",[CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE]:"Invalid unicode escape sequence: {0}",[CompileErrorCodes.UNBALANCED_CLOSING_BRACE]:"Unbalanced closing brace",[CompileErrorCodes.UNTERMINATED_CLOSING_BRACE]:"Unterminated closing brace",[CompileErrorCodes.EMPTY_PLACEHOLDER]:"Empty placeholder",[CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER]:"Not allowed nest placeholder",[CompileErrorCodes.INVALID_LINKED_FORMAT]:"Invalid linked format",[CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL]:"Plural must have messages",[CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER]:"Unexpected empty linked modifier",[CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY]:"Unexpected empty linked key",[CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS]:"Unexpected lexical analysis in token: '{0}'",[CompileErrorCodes.UNHANDLED_CODEGEN_NODE_TYPE]:"unhandled codegen node type: '{0}'",[CompileErrorCodes.UNHANDLED_MINIFIER_NODE_TYPE]:"unhandled mimifier node type: '{0}'"};function createCompileError(e,t,n={}){const{domain:r,messages:o,args:c}=n,s=new SyntaxError(String(e));return s.code=e,t&&(s.location=t),s.domain=r,s}function defaultOnError(e){throw e}const RE_HTML_TAG=/<\/?[\w\s="/.':;#-\/]+>/,detectHtmlTag=e=>RE_HTML_TAG.test(e),CHAR_SP=" ",CHAR_CR="\r",CHAR_LF="\n",CHAR_LS=String.fromCharCode(8232),CHAR_PS=String.fromCharCode(8233);function createScanner(e){const t=e;let n=0,r=1,o=1,c=0;const s=e=>t[e]===CHAR_CR&&t[e+1]===CHAR_LF,i=e=>t[e]===CHAR_PS,a=e=>t[e]===CHAR_LS,u=e=>s(e)||(e=>t[e]===CHAR_LF)(e)||i(e)||a(e),l=e=>s(e)||i(e)||a(e)?CHAR_LF:t[e];function E(){return c=0,u(n)&&(r++,o=0),s(n)&&n++,n++,o++,t[n]}return{index:()=>n,line:()=>r,column:()=>o,peekOffset:()=>c,charAt:l,currentChar:()=>l(n),currentPeek:()=>l(n+c),next:E,peek:function(){return s(n+c)&&c++,c++,t[n+c]},reset:function(){n=0,r=1,o=1,c=0},resetPeek:function(e=0){c=e},skipToPeek:function(){const e=n+c;for(;e!==n;)E();c=0}}}const EOF=void 0,DOT=".",LITERAL_DELIMITER="'",ERROR_DOMAIN$1="tokenizer";function createTokenizer(e,t={}){const n=!1!==t.location,r=createScanner(e),o=()=>r.index(),c=()=>createPosition(r.line(),r.column(),r.index()),s=c(),i=o(),a={currentType:13,offset:i,startLoc:s,endLoc:s,lastType:13,lastOffset:i,lastStartLoc:s,lastEndLoc:s,braceNest:0,inLinked:!1,text:""},u=()=>a,{onError:l}=t;function E(e,t,r){e.endLoc=c(),e.currentType=t;const o={type:t};return n&&(o.loc=createLocation(e.startLoc,e.endLoc)),null!=r&&(o.value=r),o}const C=e=>E(e,13);function f(e,t){return e.currentChar()===t?(e.next(),t):(CompileErrorCodes.EXPECTED_TOKEN,c(),"")}function d(e){let t="";for(;e.currentPeek()===CHAR_SP||e.currentPeek()===CHAR_LF;)t+=e.currentPeek(),e.peek();return t}function p(e){const t=d(e);return e.skipToPeek(),t}function L(e){if(e===EOF)return!1;const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||95===t}function _(e,t){const{currentType:n}=t;if(2!==n)return!1;d(e);const r=function(e){if(e===EOF)return!1;const t=e.charCodeAt(0);return t>=48&&t<=57}("-"===e.currentPeek()?e.peek():e.currentPeek());return e.resetPeek(),r}function N(e){d(e);const t="|"===e.currentPeek();return e.resetPeek(),t}function A(e,t=!0){const n=(t=!1,r="")=>{const o=e.currentPeek();return"{"===o?t:"@"!==o&&o?"|"===o?!(r===CHAR_SP||r===CHAR_LF):o===CHAR_SP?(e.peek(),n(!0,CHAR_SP)):o!==CHAR_LF||(e.peek(),n(!0,CHAR_LF)):t},r=n();return t&&e.resetPeek(),r}function T(e,t){const n=e.currentChar();return n===EOF?EOF:t(n)?(e.next(),n):null}function m(e){const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||95===t||36===t}function k(e){return T(e,m)}function I(e){const t=e.charCodeAt(0);return t>=97&&t<=122||t>=65&&t<=90||t>=48&&t<=57||95===t||36===t||45===t}function S(e){return T(e,I)}function P(e){const t=e.charCodeAt(0);return t>=48&&t<=57}function h(e){return T(e,P)}function O(e){const t=e.charCodeAt(0);return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function y(e){return T(e,O)}function R(e){let t="",n="";for(;t=h(e);)n+=t;return n}function D(e){return e!==LITERAL_DELIMITER&&e!==CHAR_LF}function g(e){const t=e.currentChar();switch(t){case"\\":case"'":return e.next(),`\\${t}`;case"u":return b(e,t,4);case"U":return b(e,t,6);default:return CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE,c(),""}}function b(e,t,n){f(e,t);let r="";for(let o=0;o<n;o++){const t=y(e);if(!t){CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE,c(),e.currentChar();break}r+=t}return`\\${t}${r}`}function U(e){return"{"!==e&&"}"!==e&&e!==CHAR_SP&&e!==CHAR_LF}function x(e){p(e);const t=f(e,"|");return p(e),t}function v(e,t){let n=null;switch(e.currentChar()){case"{":return t.braceNest>=1&&(CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER,c()),e.next(),n=E(t,2,"{"),p(e),t.braceNest++,n;case"}":return t.braceNest>0&&2===t.currentType&&(CompileErrorCodes.EMPTY_PLACEHOLDER,c()),e.next(),n=E(t,3,"}"),t.braceNest--,t.braceNest>0&&p(e),t.inLinked&&0===t.braceNest&&(t.inLinked=!1),n;case"@":return t.braceNest>0&&(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,c()),n=H(e,t)||C(t),t.braceNest=0,n;default:{let r=!0,o=!0,s=!0;if(N(e))return t.braceNest>0&&(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,c()),n=E(t,1,x(e)),t.braceNest=0,t.inLinked=!1,n;if(t.braceNest>0&&(4===t.currentType||5===t.currentType||6===t.currentType))return CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,c(),t.braceNest=0,M(e,t);if(r=function(e,t){const{currentType:n}=t;if(2!==n)return!1;d(e);const r=L(e.currentPeek());return e.resetPeek(),r}(e,t))return n=E(t,4,function(e){p(e);let t="",n="";for(;t=S(e);)n+=t;return e.currentChar()===EOF&&(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,c()),n}(e)),p(e),n;if(o=_(e,t))return n=E(t,5,function(e){p(e);let t="";return"-"===e.currentChar()?(e.next(),t+=`-${R(e)}`):t+=R(e),e.currentChar()===EOF&&(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE,c()),t}(e)),p(e),n;if(s=function(e,t){const{currentType:n}=t;if(2!==n)return!1;d(e);const r=e.currentPeek()===LITERAL_DELIMITER;return e.resetPeek(),r}(e,t))return n=E(t,6,function(e){p(e),f(e,"'");let t="",n="";for(;t=T(e,D);)n+="\\"===t?g(e):t;const r=e.currentChar();return r===CHAR_LF||r===EOF?(CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,c(),r===CHAR_LF&&(e.next(),f(e,"'")),n):(f(e,"'"),n)}(e)),p(e),n;if(!r&&!o&&!s)return n=E(t,12,function(e){p(e);let t="",n="";for(;t=T(e,U);)n+=t;return n}(e)),CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER,c(),n.value,p(e),n;break}}return n}function H(e,t){const{currentType:n}=t;let r=null;const o=e.currentChar();switch(7!==n&&8!==n&&11!==n&&9!==n||o!==CHAR_LF&&o!==CHAR_SP||(CompileErrorCodes.INVALID_LINKED_FORMAT,c()),o){case"@":return e.next(),r=E(t,7,"@"),t.inLinked=!0,r;case".":return p(e),e.next(),E(t,8,".");case":":return p(e),e.next(),E(t,9,":");default:return N(e)?(r=E(t,1,x(e)),t.braceNest=0,t.inLinked=!1,r):function(e,t){const{currentType:n}=t;if(7!==n)return!1;d(e);const r="."===e.currentPeek();return e.resetPeek(),r}(e,t)||function(e,t){const{currentType:n}=t;if(7!==n&&11!==n)return!1;d(e);const r=":"===e.currentPeek();return e.resetPeek(),r}(e,t)?(p(e),H(e,t)):function(e,t){const{currentType:n}=t;if(8!==n)return!1;d(e);const r=L(e.currentPeek());return e.resetPeek(),r}(e,t)?(p(e),E(t,11,function(e){let t="",n="";for(;t=k(e);)n+=t;return n}(e))):function(e,t){const{currentType:n}=t;if(9!==n)return!1;const r=()=>{const t=e.currentPeek();return"{"===t?L(e.peek()):!("@"===t||"|"===t||":"===t||"."===t||t===CHAR_SP||!t)&&(t===CHAR_LF?(e.peek(),r()):A(e,!1))},o=r();return e.resetPeek(),o}(e,t)?(p(e),"{"===o?v(e,t)||r:E(t,10,function(e){const t=n=>{const r=e.currentChar();return"{"!==r&&"@"!==r&&"|"!==r&&"("!==r&&")"!==r&&r?r===CHAR_SP?n:(n+=r,e.next(),t(n)):n};return t("")}(e))):(7===n&&(CompileErrorCodes.INVALID_LINKED_FORMAT,c()),t.braceNest=0,t.inLinked=!1,M(e,t))}}function M(e,t){let n={type:13};if(t.braceNest>0)return v(e,t)||C(t);if(t.inLinked)return H(e,t)||C(t);switch(e.currentChar()){case"{":return v(e,t)||C(t);case"}":return CompileErrorCodes.UNBALANCED_CLOSING_BRACE,c(),e.next(),E(t,3,"}");case"@":return H(e,t)||C(t);default:if(N(e))return n=E(t,1,x(e)),t.braceNest=0,t.inLinked=!1,n;if(A(e))return E(t,0,function(e){let t="";for(;;){const n=e.currentChar();if("{"===n||"}"===n||"@"===n||"|"===n||!n)break;if(n===CHAR_SP||n===CHAR_LF)if(A(e))t+=n,e.next();else{if(N(e))break;t+=n,e.next()}else t+=n,e.next()}return t}(e))}return n}return{nextToken:function(){const{currentType:e,offset:t,startLoc:n,endLoc:s}=a;return a.lastType=e,a.lastOffset=t,a.lastStartLoc=n,a.lastEndLoc=s,a.offset=o(),a.startLoc=c(),r.currentChar()===EOF?E(a,13):M(r,a)},currentOffset:o,currentPosition:c,context:u}}const ERROR_DOMAIN="parser",KNOWN_ESCAPES=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g;function fromEscapeSequence(e,t,n){switch(e){case"\\\\":return"\\";case"\\'":return"'";default:{const e=parseInt(t||n,16);return e<=55295||e>=57344?String.fromCodePoint(e):"�"}}}function createParser(e={}){const t=!1!==e.location,{onError:n}=e;function r(e,n,r){const o={type:e};return t&&(o.start=n,o.end=n,o.loc={start:r,end:r}),o}function o(e,n,r,o){o&&(e.type=o),t&&(e.end=n,e.loc&&(e.loc.end=r))}function c(e,t){const n=e.context(),c=r(3,n.offset,n.startLoc);return c.value=t,o(c,e.currentOffset(),e.currentPosition()),c}function s(e,t){const n=e.context(),{lastOffset:c,lastStartLoc:s}=n,i=r(5,c,s);return i.index=parseInt(t,10),e.nextToken(),o(i,e.currentOffset(),e.currentPosition()),i}function i(e,t){const n=e.context(),{lastOffset:c,lastStartLoc:s}=n,i=r(4,c,s);return i.key=t,e.nextToken(),o(i,e.currentOffset(),e.currentPosition()),i}function a(e,t){const n=e.context(),{lastOffset:c,lastStartLoc:s}=n,i=r(9,c,s);return i.value=t.replace(KNOWN_ESCAPES,fromEscapeSequence),e.nextToken(),o(i,e.currentOffset(),e.currentPosition()),i}function u(e){const t=e.context(),n=r(6,t.offset,t.startLoc);let c=e.nextToken();if(8===c.type){const t=function(e){const t=e.nextToken(),n=e.context(),{lastOffset:c,lastStartLoc:s}=n,i=r(8,c,s);return 11!==t.type?(CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER,n.lastStartLoc,i.value="",o(i,c,s),{nextConsumeToken:t,node:i}):(null==t.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,n.lastStartLoc,getTokenCaption(t)),i.value=t.value||"",o(i,e.currentOffset(),e.currentPosition()),{node:i})}(e);n.modifier=t.node,c=t.nextConsumeToken||e.nextToken()}switch(9!==c.type&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(c)),c=e.nextToken(),2===c.type&&(c=e.nextToken()),c.type){case 10:null==c.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(c)),n.key=function(e,t){const n=e.context(),c=r(7,n.offset,n.startLoc);return c.value=t,o(c,e.currentOffset(),e.currentPosition()),c}(e,c.value||"");break;case 4:null==c.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(c)),n.key=i(e,c.value||"");break;case 5:null==c.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(c)),n.key=s(e,c.value||"");break;case 6:null==c.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(c)),n.key=a(e,c.value||"");break;default:{CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY,t.lastStartLoc;const s=e.context(),i=r(7,s.offset,s.startLoc);return i.value="",o(i,s.offset,s.startLoc),n.key=i,o(n,s.offset,s.startLoc),{nextConsumeToken:c,node:n}}}return o(n,e.currentOffset(),e.currentPosition()),{node:n}}function l(e){const t=e.context(),n=r(2,1===t.currentType?e.currentOffset():t.offset,1===t.currentType?t.endLoc:t.startLoc);n.items=[];let l=null;do{const r=l||e.nextToken();switch(l=null,r.type){case 0:null==r.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(r)),n.items.push(c(e,r.value||""));break;case 5:null==r.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(r)),n.items.push(s(e,r.value||""));break;case 4:null==r.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(r)),n.items.push(i(e,r.value||""));break;case 6:null==r.value&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,t.lastStartLoc,getTokenCaption(r)),n.items.push(a(e,r.value||""));break;case 7:{const t=u(e);n.items.push(t.node),l=t.nextConsumeToken||null;break}}}while(13!==t.currentType&&1!==t.currentType);return o(n,1===t.currentType?t.lastOffset:e.currentOffset(),1===t.currentType?t.lastEndLoc:e.currentPosition()),n}function E(e){const t=e.context(),{offset:n,startLoc:c}=t,s=l(e);return 13===t.currentType?s:function(e,t,n,c){const s=e.context();let i=0===c.items.length;const a=r(1,t,n);a.cases=[],a.cases.push(c);do{const t=l(e);i||(i=0===t.items.length),a.cases.push(t)}while(13!==s.currentType);return i&&CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL,o(a,e.currentOffset(),e.currentPosition()),a}(e,n,c,s)}return{parse:function(n){const c=createTokenizer(n,assign({},e)),s=c.context(),i=r(0,s.offset,s.startLoc);return t&&i.loc&&(i.loc.source=n),i.body=E(c),e.onCacheKey&&(i.cacheKey=e.onCacheKey(n)),13!==s.currentType&&(CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS,s.lastStartLoc,n[s.offset]),o(i,c.currentOffset(),c.currentPosition()),i}}}function getTokenCaption(e){if(13===e.type)return"EOF";const t=(e.value||"").replace(/\r?\n/gu,"\\n");return t.length>10?t.slice(0,9)+"…":t}function createTransformer(e,t={}){const n={ast:e,helpers:new Set};return{context:()=>n,helper:e=>(n.helpers.add(e),e)}}function traverseNodes(e,t){for(let n=0;n<e.length;n++)traverseNode(e[n],t)}function traverseNode(e,t){switch(e.type){case 1:traverseNodes(e.cases,t),t.helper("plural");break;case 2:traverseNodes(e.items,t);break;case 6:traverseNode(e.key,t),t.helper("linked"),t.helper("type");break;case 5:t.helper("interpolate"),t.helper("list");break;case 4:t.helper("interpolate"),t.helper("named")}}function transform(e,t={}){const n=createTransformer(e);n.helper("normalize"),e.body&&traverseNode(e.body,n);const r=n.context();e.helpers=Array.from(r.helpers)}function optimize(e){const t=e.body;return 2===t.type?optimizeMessageNode(t):t.cases.forEach((e=>optimizeMessageNode(e))),e}function optimizeMessageNode(e){if(1===e.items.length){const t=e.items[0];3!==t.type&&9!==t.type||(e.static=t.value,delete t.value)}else{const t=[];for(let n=0;n<e.items.length;n++){const r=e.items[n];if(3!==r.type&&9!==r.type)break;if(null==r.value)break;t.push(r.value)}if(t.length===e.items.length){e.static=join(t);for(let t=0;t<e.items.length;t++){const n=e.items[t];3!==n.type&&9!==n.type||delete n.value}}}}function minify(e){switch(e.t=e.type,e.type){case 0:{const t=e;minify(t.body),t.b=t.body,delete t.body;break}case 1:{const t=e,n=t.cases;for(let e=0;e<n.length;e++)minify(n[e]);t.c=n,delete t.cases;break}case 2:{const t=e,n=t.items;for(let e=0;e<n.length;e++)minify(n[e]);t.i=n,delete t.items,t.static&&(t.s=t.static,delete t.static);break}case 3:case 9:case 8:case 7:{const t=e;t.value&&(t.v=t.value,delete t.value);break}case 6:{const t=e;minify(t.key),t.k=t.key,delete t.key,t.modifier&&(minify(t.modifier),t.m=t.modifier,delete t.modifier);break}case 5:{const t=e;t.i=t.index,delete t.index;break}case 4:{const t=e;t.k=t.key,delete t.key;break}}delete e.type}function createCodeGenerator(e,t){const{sourceMap:n,filename:r,breakLineCode:o,needIndent:c}=t,s=!1!==t.location,i={filename:r,code:"",column:1,line:1,offset:0,map:void 0,breakLineCode:o,needIndent:c,indentLevel:0};s&&e.loc&&(i.source=e.loc.source);function a(e,t){i.code+=e}function u(e,t=!0){const n=t?o:"";a(c?n+" ".repeat(e):n)}return{context:()=>i,push:a,indent:function(e=!0){const t=++i.indentLevel;e&&u(t)},deindent:function(e=!0){const t=--i.indentLevel;e&&u(t)},newline:function(){u(i.indentLevel)},helper:e=>`_${e}`,needIndent:()=>i.needIndent}}function generateLinkedNode(e,t){const{helper:n}=e;e.push(`${n("linked")}(`),generateNode(e,t.key),t.modifier?(e.push(", "),generateNode(e,t.modifier),e.push(", _type")):e.push(", undefined, _type"),e.push(")")}function generateMessageNode(e,t){const{helper:n,needIndent:r}=e;e.push(`${n("normalize")}([`),e.indent(r());const o=t.items.length;for(let c=0;c<o&&(generateNode(e,t.items[c]),c!==o-1);c++)e.push(", ");e.deindent(r()),e.push("])")}function generatePluralNode(e,t){const{helper:n,needIndent:r}=e;if(t.cases.length>1){e.push(`${n("plural")}([`),e.indent(r());const o=t.cases.length;for(let n=0;n<o&&(generateNode(e,t.cases[n]),n!==o-1);n++)e.push(", ");e.deindent(r()),e.push("])")}}function generateResource(e,t){t.body?generateNode(e,t.body):e.push("null")}function generateNode(e,t){const{helper:n}=e;switch(t.type){case 0:generateResource(e,t);break;case 1:generatePluralNode(e,t);break;case 2:generateMessageNode(e,t);break;case 6:generateLinkedNode(e,t);break;case 8:case 7:case 9:case 3:e.push(JSON.stringify(t.value),t);break;case 5:e.push(`${n("interpolate")}(${n("list")}(${t.index}))`,t);break;case 4:e.push(`${n("interpolate")}(${n("named")}(${JSON.stringify(t.key)}))`,t)}}const generate=(e,t={})=>{const n=isString(t.mode)?t.mode:"normal",r=isString(t.filename)?t.filename:"message.intl",o=!!t.sourceMap,c=null!=t.breakLineCode?t.breakLineCode:"arrow"===n?";":"\n",s=t.needIndent?t.needIndent:"arrow"!==n,i=e.helpers||[],a=createCodeGenerator(e,{mode:n,filename:r,sourceMap:o,breakLineCode:c,needIndent:s});a.push("normal"===n?"function __msg__ (ctx) {":"(ctx) => {"),a.indent(s),i.length>0&&(a.push(`const { ${join(i.map((e=>`${e}: _${e}`)),", ")} } = ctx`),a.newline()),a.push("return "),generateNode(a,e),a.deindent(s),a.push("}"),delete e.helpers;const{code:u,map:l}=a.context();return{ast:e,code:u,map:l?l.toJSON():void 0}};function baseCompile(e,t={}){const n=assign({},t),r=!!n.jit,o=!!n.minify,c=null==n.optimize||n.optimize,s=createParser(n).parse(e);return r?(c&&optimize(s),o&&minify(s),{ast:s,code:""}):(transform(s,n),generate(s,n))}export{CompileErrorCodes,ERROR_DOMAIN,LOCATION_STUB,baseCompile,createCompileError,createLocation,createParser,createPosition,defaultOnError,detectHtmlTag,errorMessages};