{"version":3,"file":"js/vendors-bb5f7572.min.js?t=1743075070513","mappings":"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","sources":["webpack://frontend/./node_modules/@intlify/message-compiler/dist/message-compiler.esm-bundler.js"],"sourcesContent":["/*!\n * message-compiler v9.2.2\n * (c) 2022 kazuya kawaguchi\n * Released under the MIT License.\n */\nimport { format, assign, isString } from '@intlify/shared';\n\nconst CompileErrorCodes = {\r\n // tokenizer error codes\r\n EXPECTED_TOKEN: 1,\r\n INVALID_TOKEN_IN_PLACEHOLDER: 2,\r\n UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER: 3,\r\n UNKNOWN_ESCAPE_SEQUENCE: 4,\r\n INVALID_UNICODE_ESCAPE_SEQUENCE: 5,\r\n UNBALANCED_CLOSING_BRACE: 6,\r\n UNTERMINATED_CLOSING_BRACE: 7,\r\n EMPTY_PLACEHOLDER: 8,\r\n NOT_ALLOW_NEST_PLACEHOLDER: 9,\r\n INVALID_LINKED_FORMAT: 10,\r\n // parser error codes\r\n MUST_HAVE_MESSAGES_IN_PLURAL: 11,\r\n UNEXPECTED_EMPTY_LINKED_MODIFIER: 12,\r\n UNEXPECTED_EMPTY_LINKED_KEY: 13,\r\n UNEXPECTED_LEXICAL_ANALYSIS: 14,\r\n // Special value for higher-order compilers to pick up the last code\r\n // to avoid collision of error codes. This should always be kept as the last\r\n // item.\r\n __EXTEND_POINT__: 15\r\n};\r\n/** @internal */\r\nconst errorMessages = {\r\n // tokenizer error messages\r\n [CompileErrorCodes.EXPECTED_TOKEN]: `Expected token: '{0}'`,\r\n [CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER]: `Invalid token in placeholder: '{0}'`,\r\n [CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER]: `Unterminated single quote in placeholder`,\r\n [CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE]: `Unknown escape sequence: \\\\{0}`,\r\n [CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE]: `Invalid unicode escape sequence: {0}`,\r\n [CompileErrorCodes.UNBALANCED_CLOSING_BRACE]: `Unbalanced closing brace`,\r\n [CompileErrorCodes.UNTERMINATED_CLOSING_BRACE]: `Unterminated closing brace`,\r\n [CompileErrorCodes.EMPTY_PLACEHOLDER]: `Empty placeholder`,\r\n [CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER]: `Not allowed nest placeholder`,\r\n [CompileErrorCodes.INVALID_LINKED_FORMAT]: `Invalid linked format`,\r\n // parser error messages\r\n [CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL]: `Plural must have messages`,\r\n [CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER]: `Unexpected empty linked modifier`,\r\n [CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY]: `Unexpected empty linked key`,\r\n [CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS]: `Unexpected lexical analysis in token: '{0}'`\r\n};\r\nfunction createCompileError(code, loc, options = {}) {\r\n const { domain, messages, args } = options;\r\n const msg = (process.env.NODE_ENV !== 'production')\r\n ? format((messages || errorMessages)[code] || '', ...(args || []))\r\n : code;\r\n const error = new SyntaxError(String(msg));\r\n error.code = code;\r\n if (loc) {\r\n error.location = loc;\r\n }\r\n error.domain = domain;\r\n return error;\r\n}\r\n/** @internal */\r\nfunction defaultOnError(error) {\r\n throw error;\r\n}\n\nconst LocationStub = {\r\n start: { line: 1, column: 1, offset: 0 },\r\n end: { line: 1, column: 1, offset: 0 }\r\n};\r\nfunction createPosition(line, column, offset) {\r\n return { line, column, offset };\r\n}\r\nfunction createLocation(start, end, source) {\r\n const loc = { start, end };\r\n if (source != null) {\r\n loc.source = source;\r\n }\r\n return loc;\r\n}\n\nconst CHAR_SP = ' ';\r\nconst CHAR_CR = '\\r';\r\nconst CHAR_LF = '\\n';\r\nconst CHAR_LS = String.fromCharCode(0x2028);\r\nconst CHAR_PS = String.fromCharCode(0x2029);\r\nfunction createScanner(str) {\r\n const _buf = str;\r\n let _index = 0;\r\n let _line = 1;\r\n let _column = 1;\r\n let _peekOffset = 0;\r\n const isCRLF = (index) => _buf[index] === CHAR_CR && _buf[index + 1] === CHAR_LF;\r\n const isLF = (index) => _buf[index] === CHAR_LF;\r\n const isPS = (index) => _buf[index] === CHAR_PS;\r\n const isLS = (index) => _buf[index] === CHAR_LS;\r\n const isLineEnd = (index) => isCRLF(index) || isLF(index) || isPS(index) || isLS(index);\r\n const index = () => _index;\r\n const line = () => _line;\r\n const column = () => _column;\r\n const peekOffset = () => _peekOffset;\r\n const charAt = (offset) => isCRLF(offset) || isPS(offset) || isLS(offset) ? CHAR_LF : _buf[offset];\r\n const currentChar = () => charAt(_index);\r\n const currentPeek = () => charAt(_index + _peekOffset);\r\n function next() {\r\n _peekOffset = 0;\r\n if (isLineEnd(_index)) {\r\n _line++;\r\n _column = 0;\r\n }\r\n if (isCRLF(_index)) {\r\n _index++;\r\n }\r\n _index++;\r\n _column++;\r\n return _buf[_index];\r\n }\r\n function peek() {\r\n if (isCRLF(_index + _peekOffset)) {\r\n _peekOffset++;\r\n }\r\n _peekOffset++;\r\n return _buf[_index + _peekOffset];\r\n }\r\n function reset() {\r\n _index = 0;\r\n _line = 1;\r\n _column = 1;\r\n _peekOffset = 0;\r\n }\r\n function resetPeek(offset = 0) {\r\n _peekOffset = offset;\r\n }\r\n function skipToPeek() {\r\n const target = _index + _peekOffset;\r\n // eslint-disable-next-line no-unmodified-loop-condition\r\n while (target !== _index) {\r\n next();\r\n }\r\n _peekOffset = 0;\r\n }\r\n return {\r\n index,\r\n line,\r\n column,\r\n peekOffset,\r\n charAt,\r\n currentChar,\r\n currentPeek,\r\n next,\r\n peek,\r\n reset,\r\n resetPeek,\r\n skipToPeek\r\n };\r\n}\n\nconst EOF = undefined;\r\nconst LITERAL_DELIMITER = \"'\";\r\nconst ERROR_DOMAIN$1 = 'tokenizer';\r\nfunction createTokenizer(source, options = {}) {\r\n const location = options.location !== false;\r\n const _scnr = createScanner(source);\r\n const currentOffset = () => _scnr.index();\r\n const currentPosition = () => createPosition(_scnr.line(), _scnr.column(), _scnr.index());\r\n const _initLoc = currentPosition();\r\n const _initOffset = currentOffset();\r\n const _context = {\r\n currentType: 14 /* EOF */,\r\n offset: _initOffset,\r\n startLoc: _initLoc,\r\n endLoc: _initLoc,\r\n lastType: 14 /* EOF */,\r\n lastOffset: _initOffset,\r\n lastStartLoc: _initLoc,\r\n lastEndLoc: _initLoc,\r\n braceNest: 0,\r\n inLinked: false,\r\n text: ''\r\n };\r\n const context = () => _context;\r\n const { onError } = options;\r\n function emitError(code, pos, offset, ...args) {\r\n const ctx = context();\r\n pos.column += offset;\r\n pos.offset += offset;\r\n if (onError) {\r\n const loc = createLocation(ctx.startLoc, pos);\r\n const err = createCompileError(code, loc, {\r\n domain: ERROR_DOMAIN$1,\r\n args\r\n });\r\n onError(err);\r\n }\r\n }\r\n function getToken(context, type, value) {\r\n context.endLoc = currentPosition();\r\n context.currentType = type;\r\n const token = { type };\r\n if (location) {\r\n token.loc = createLocation(context.startLoc, context.endLoc);\r\n }\r\n if (value != null) {\r\n token.value = value;\r\n }\r\n return token;\r\n }\r\n const getEndToken = (context) => getToken(context, 14 /* EOF */);\r\n function eat(scnr, ch) {\r\n if (scnr.currentChar() === ch) {\r\n scnr.next();\r\n return ch;\r\n }\r\n else {\r\n emitError(CompileErrorCodes.EXPECTED_TOKEN, currentPosition(), 0, ch);\r\n return '';\r\n }\r\n }\r\n function peekSpaces(scnr) {\r\n let buf = '';\r\n while (scnr.currentPeek() === CHAR_SP || scnr.currentPeek() === CHAR_LF) {\r\n buf += scnr.currentPeek();\r\n scnr.peek();\r\n }\r\n return buf;\r\n }\r\n function skipSpaces(scnr) {\r\n const buf = peekSpaces(scnr);\r\n scnr.skipToPeek();\r\n return buf;\r\n }\r\n function isIdentifierStart(ch) {\r\n if (ch === EOF) {\r\n return false;\r\n }\r\n const cc = ch.charCodeAt(0);\r\n return ((cc >= 97 && cc <= 122) || // a-z\r\n (cc >= 65 && cc <= 90) || // A-Z\r\n cc === 95 // _\r\n );\r\n }\r\n function isNumberStart(ch) {\r\n if (ch === EOF) {\r\n return false;\r\n }\r\n const cc = ch.charCodeAt(0);\r\n return cc >= 48 && cc <= 57; // 0-9\r\n }\r\n function isNamedIdentifierStart(scnr, context) {\r\n const { currentType } = context;\r\n if (currentType !== 2 /* BraceLeft */) {\r\n return false;\r\n }\r\n peekSpaces(scnr);\r\n const ret = isIdentifierStart(scnr.currentPeek());\r\n scnr.resetPeek();\r\n return ret;\r\n }\r\n function isListIdentifierStart(scnr, context) {\r\n const { currentType } = context;\r\n if (currentType !== 2 /* BraceLeft */) {\r\n return false;\r\n }\r\n peekSpaces(scnr);\r\n const ch = scnr.currentPeek() === '-' ? scnr.peek() : scnr.currentPeek();\r\n const ret = isNumberStart(ch);\r\n scnr.resetPeek();\r\n return ret;\r\n }\r\n function isLiteralStart(scnr, context) {\r\n const { currentType } = context;\r\n if (currentType !== 2 /* BraceLeft */) {\r\n return false;\r\n }\r\n peekSpaces(scnr);\r\n const ret = scnr.currentPeek() === LITERAL_DELIMITER;\r\n scnr.resetPeek();\r\n return ret;\r\n }\r\n function isLinkedDotStart(scnr, context) {\r\n const { currentType } = context;\r\n if (currentType !== 8 /* LinkedAlias */) {\r\n return false;\r\n }\r\n peekSpaces(scnr);\r\n const ret = scnr.currentPeek() === \".\" /* LinkedDot */;\r\n scnr.resetPeek();\r\n return ret;\r\n }\r\n function isLinkedModifierStart(scnr, context) {\r\n const { currentType } = context;\r\n if (currentType !== 9 /* LinkedDot */) {\r\n return false;\r\n }\r\n peekSpaces(scnr);\r\n const ret = isIdentifierStart(scnr.currentPeek());\r\n scnr.resetPeek();\r\n return ret;\r\n }\r\n function isLinkedDelimiterStart(scnr, context) {\r\n const { currentType } = context;\r\n if (!(currentType === 8 /* LinkedAlias */ ||\r\n currentType === 12 /* LinkedModifier */)) {\r\n return false;\r\n }\r\n peekSpaces(scnr);\r\n const ret = scnr.currentPeek() === \":\" /* LinkedDelimiter */;\r\n scnr.resetPeek();\r\n return ret;\r\n }\r\n function isLinkedReferStart(scnr, context) {\r\n const { currentType } = context;\r\n if (currentType !== 10 /* LinkedDelimiter */) {\r\n return false;\r\n }\r\n const fn = () => {\r\n const ch = scnr.currentPeek();\r\n if (ch === \"{\" /* BraceLeft */) {\r\n return isIdentifierStart(scnr.peek());\r\n }\r\n else if (ch === \"@\" /* LinkedAlias */ ||\r\n ch === \"%\" /* Modulo */ ||\r\n ch === \"|\" /* Pipe */ ||\r\n ch === \":\" /* LinkedDelimiter */ ||\r\n ch === \".\" /* LinkedDot */ ||\r\n ch === CHAR_SP ||\r\n !ch) {\r\n return false;\r\n }\r\n else if (ch === CHAR_LF) {\r\n scnr.peek();\r\n return fn();\r\n }\r\n else {\r\n // other characters\r\n return isIdentifierStart(ch);\r\n }\r\n };\r\n const ret = fn();\r\n scnr.resetPeek();\r\n return ret;\r\n }\r\n function isPluralStart(scnr) {\r\n peekSpaces(scnr);\r\n const ret = scnr.currentPeek() === \"|\" /* Pipe */;\r\n scnr.resetPeek();\r\n return ret;\r\n }\r\n function detectModuloStart(scnr) {\r\n const spaces = peekSpaces(scnr);\r\n const ret = scnr.currentPeek() === \"%\" /* Modulo */ &&\r\n scnr.peek() === \"{\" /* BraceLeft */;\r\n scnr.resetPeek();\r\n return {\r\n isModulo: ret,\r\n hasSpace: spaces.length > 0\r\n };\r\n }\r\n function isTextStart(scnr, reset = true) {\r\n const fn = (hasSpace = false, prev = '', detectModulo = false) => {\r\n const ch = scnr.currentPeek();\r\n if (ch === \"{\" /* BraceLeft */) {\r\n return prev === \"%\" /* Modulo */ ? false : hasSpace;\r\n }\r\n else if (ch === \"@\" /* LinkedAlias */ || !ch) {\r\n return prev === \"%\" /* Modulo */ ? true : hasSpace;\r\n }\r\n else if (ch === \"%\" /* Modulo */) {\r\n scnr.peek();\r\n return fn(hasSpace, \"%\" /* Modulo */, true);\r\n }\r\n else if (ch === \"|\" /* Pipe */) {\r\n return prev === \"%\" /* Modulo */ || detectModulo\r\n ? true\r\n : !(prev === CHAR_SP || prev === CHAR_LF);\r\n }\r\n else if (ch === CHAR_SP) {\r\n scnr.peek();\r\n return fn(true, CHAR_SP, detectModulo);\r\n }\r\n else if (ch === CHAR_LF) {\r\n scnr.peek();\r\n return fn(true, CHAR_LF, detectModulo);\r\n }\r\n else {\r\n return true;\r\n }\r\n };\r\n const ret = fn();\r\n reset && scnr.resetPeek();\r\n return ret;\r\n }\r\n function takeChar(scnr, fn) {\r\n const ch = scnr.currentChar();\r\n if (ch === EOF) {\r\n return EOF;\r\n }\r\n if (fn(ch)) {\r\n scnr.next();\r\n return ch;\r\n }\r\n return null;\r\n }\r\n function takeIdentifierChar(scnr) {\r\n const closure = (ch) => {\r\n const cc = ch.charCodeAt(0);\r\n return ((cc >= 97 && cc <= 122) || // a-z\r\n (cc >= 65 && cc <= 90) || // A-Z\r\n (cc >= 48 && cc <= 57) || // 0-9\r\n cc === 95 || // _\r\n cc === 36 // $\r\n );\r\n };\r\n return takeChar(scnr, closure);\r\n }\r\n function takeDigit(scnr) {\r\n const closure = (ch) => {\r\n const cc = ch.charCodeAt(0);\r\n return cc >= 48 && cc <= 57; // 0-9\r\n };\r\n return takeChar(scnr, closure);\r\n }\r\n function takeHexDigit(scnr) {\r\n const closure = (ch) => {\r\n const cc = ch.charCodeAt(0);\r\n return ((cc >= 48 && cc <= 57) || // 0-9\r\n (cc >= 65 && cc <= 70) || // A-F\r\n (cc >= 97 && cc <= 102)); // a-f\r\n };\r\n return takeChar(scnr, closure);\r\n }\r\n function getDigits(scnr) {\r\n let ch = '';\r\n let num = '';\r\n while ((ch = takeDigit(scnr))) {\r\n num += ch;\r\n }\r\n return num;\r\n }\r\n function readModulo(scnr) {\r\n skipSpaces(scnr);\r\n const ch = scnr.currentChar();\r\n if (ch !== \"%\" /* Modulo */) {\r\n emitError(CompileErrorCodes.EXPECTED_TOKEN, currentPosition(), 0, ch);\r\n }\r\n scnr.next();\r\n return \"%\" /* Modulo */;\r\n }\r\n function readText(scnr) {\r\n let buf = '';\r\n while (true) {\r\n const ch = scnr.currentChar();\r\n if (ch === \"{\" /* BraceLeft */ ||\r\n ch === \"}\" /* BraceRight */ ||\r\n ch === \"@\" /* LinkedAlias */ ||\r\n ch === \"|\" /* Pipe */ ||\r\n !ch) {\r\n break;\r\n }\r\n else if (ch === \"%\" /* Modulo */) {\r\n if (isTextStart(scnr)) {\r\n buf += ch;\r\n scnr.next();\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n else if (ch === CHAR_SP || ch === CHAR_LF) {\r\n if (isTextStart(scnr)) {\r\n buf += ch;\r\n scnr.next();\r\n }\r\n else if (isPluralStart(scnr)) {\r\n break;\r\n }\r\n else {\r\n buf += ch;\r\n scnr.next();\r\n }\r\n }\r\n else {\r\n buf += ch;\r\n scnr.next();\r\n }\r\n }\r\n return buf;\r\n }\r\n function readNamedIdentifier(scnr) {\r\n skipSpaces(scnr);\r\n let ch = '';\r\n let name = '';\r\n while ((ch = takeIdentifierChar(scnr))) {\r\n name += ch;\r\n }\r\n if (scnr.currentChar() === EOF) {\r\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n }\r\n return name;\r\n }\r\n function readListIdentifier(scnr) {\r\n skipSpaces(scnr);\r\n let value = '';\r\n if (scnr.currentChar() === '-') {\r\n scnr.next();\r\n value += `-${getDigits(scnr)}`;\r\n }\r\n else {\r\n value += getDigits(scnr);\r\n }\r\n if (scnr.currentChar() === EOF) {\r\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n }\r\n return value;\r\n }\r\n function readLiteral(scnr) {\r\n skipSpaces(scnr);\r\n eat(scnr, `\\'`);\r\n let ch = '';\r\n let literal = '';\r\n const fn = (x) => x !== LITERAL_DELIMITER && x !== CHAR_LF;\r\n while ((ch = takeChar(scnr, fn))) {\r\n if (ch === '\\\\') {\r\n literal += readEscapeSequence(scnr);\r\n }\r\n else {\r\n literal += ch;\r\n }\r\n }\r\n const current = scnr.currentChar();\r\n if (current === CHAR_LF || current === EOF) {\r\n emitError(CompileErrorCodes.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER, currentPosition(), 0);\r\n // TODO: Is it correct really?\r\n if (current === CHAR_LF) {\r\n scnr.next();\r\n eat(scnr, `\\'`);\r\n }\r\n return literal;\r\n }\r\n eat(scnr, `\\'`);\r\n return literal;\r\n }\r\n function readEscapeSequence(scnr) {\r\n const ch = scnr.currentChar();\r\n switch (ch) {\r\n case '\\\\':\r\n case `\\'`:\r\n scnr.next();\r\n return `\\\\${ch}`;\r\n case 'u':\r\n return readUnicodeEscapeSequence(scnr, ch, 4);\r\n case 'U':\r\n return readUnicodeEscapeSequence(scnr, ch, 6);\r\n default:\r\n emitError(CompileErrorCodes.UNKNOWN_ESCAPE_SEQUENCE, currentPosition(), 0, ch);\r\n return '';\r\n }\r\n }\r\n function readUnicodeEscapeSequence(scnr, unicode, digits) {\r\n eat(scnr, unicode);\r\n let sequence = '';\r\n for (let i = 0; i < digits; i++) {\r\n const ch = takeHexDigit(scnr);\r\n if (!ch) {\r\n emitError(CompileErrorCodes.INVALID_UNICODE_ESCAPE_SEQUENCE, currentPosition(), 0, `\\\\${unicode}${sequence}${scnr.currentChar()}`);\r\n break;\r\n }\r\n sequence += ch;\r\n }\r\n return `\\\\${unicode}${sequence}`;\r\n }\r\n function readInvalidIdentifier(scnr) {\r\n skipSpaces(scnr);\r\n let ch = '';\r\n let identifiers = '';\r\n const closure = (ch) => ch !== \"{\" /* BraceLeft */ &&\r\n ch !== \"}\" /* BraceRight */ &&\r\n ch !== CHAR_SP &&\r\n ch !== CHAR_LF;\r\n while ((ch = takeChar(scnr, closure))) {\r\n identifiers += ch;\r\n }\r\n return identifiers;\r\n }\r\n function readLinkedModifier(scnr) {\r\n let ch = '';\r\n let name = '';\r\n while ((ch = takeIdentifierChar(scnr))) {\r\n name += ch;\r\n }\r\n return name;\r\n }\r\n function readLinkedRefer(scnr) {\r\n const fn = (detect = false, buf) => {\r\n const ch = scnr.currentChar();\r\n if (ch === \"{\" /* BraceLeft */ ||\r\n ch === \"%\" /* Modulo */ ||\r\n ch === \"@\" /* LinkedAlias */ ||\r\n ch === \"|\" /* Pipe */ ||\r\n !ch) {\r\n return buf;\r\n }\r\n else if (ch === CHAR_SP) {\r\n return buf;\r\n }\r\n else if (ch === CHAR_LF) {\r\n buf += ch;\r\n scnr.next();\r\n return fn(detect, buf);\r\n }\r\n else {\r\n buf += ch;\r\n scnr.next();\r\n return fn(true, buf);\r\n }\r\n };\r\n return fn(false, '');\r\n }\r\n function readPlural(scnr) {\r\n skipSpaces(scnr);\r\n const plural = eat(scnr, \"|\" /* Pipe */);\r\n skipSpaces(scnr);\r\n return plural;\r\n }\r\n // TODO: We need refactoring of token parsing ...\r\n function readTokenInPlaceholder(scnr, context) {\r\n let token = null;\r\n const ch = scnr.currentChar();\r\n switch (ch) {\r\n case \"{\" /* BraceLeft */:\r\n if (context.braceNest >= 1) {\r\n emitError(CompileErrorCodes.NOT_ALLOW_NEST_PLACEHOLDER, currentPosition(), 0);\r\n }\r\n scnr.next();\r\n token = getToken(context, 2 /* BraceLeft */, \"{\" /* BraceLeft */);\r\n skipSpaces(scnr);\r\n context.braceNest++;\r\n return token;\r\n case \"}\" /* BraceRight */:\r\n if (context.braceNest > 0 &&\r\n context.currentType === 2 /* BraceLeft */) {\r\n emitError(CompileErrorCodes.EMPTY_PLACEHOLDER, currentPosition(), 0);\r\n }\r\n scnr.next();\r\n token = getToken(context, 3 /* BraceRight */, \"}\" /* BraceRight */);\r\n context.braceNest--;\r\n context.braceNest > 0 && skipSpaces(scnr);\r\n if (context.inLinked && context.braceNest === 0) {\r\n context.inLinked = false;\r\n }\r\n return token;\r\n case \"@\" /* LinkedAlias */:\r\n if (context.braceNest > 0) {\r\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n }\r\n token = readTokenInLinked(scnr, context) || getEndToken(context);\r\n context.braceNest = 0;\r\n return token;\r\n default:\r\n let validNamedIdentifier = true;\r\n let validListIdentifier = true;\r\n let validLiteral = true;\r\n if (isPluralStart(scnr)) {\r\n if (context.braceNest > 0) {\r\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n }\r\n token = getToken(context, 1 /* Pipe */, readPlural(scnr));\r\n // reset\r\n context.braceNest = 0;\r\n context.inLinked = false;\r\n return token;\r\n }\r\n if (context.braceNest > 0 &&\r\n (context.currentType === 5 /* Named */ ||\r\n context.currentType === 6 /* List */ ||\r\n context.currentType === 7 /* Literal */)) {\r\n emitError(CompileErrorCodes.UNTERMINATED_CLOSING_BRACE, currentPosition(), 0);\r\n context.braceNest = 0;\r\n return readToken(scnr, context);\r\n }\r\n if ((validNamedIdentifier = isNamedIdentifierStart(scnr, context))) {\r\n token = getToken(context, 5 /* Named */, readNamedIdentifier(scnr));\r\n skipSpaces(scnr);\r\n return token;\r\n }\r\n if ((validListIdentifier = isListIdentifierStart(scnr, context))) {\r\n token = getToken(context, 6 /* List */, readListIdentifier(scnr));\r\n skipSpaces(scnr);\r\n return token;\r\n }\r\n if ((validLiteral = isLiteralStart(scnr, context))) {\r\n token = getToken(context, 7 /* Literal */, readLiteral(scnr));\r\n skipSpaces(scnr);\r\n return token;\r\n }\r\n if (!validNamedIdentifier && !validListIdentifier && !validLiteral) {\r\n // TODO: we should be re-designed invalid cases, when we will extend message syntax near the future ...\r\n token = getToken(context, 13 /* InvalidPlace */, readInvalidIdentifier(scnr));\r\n emitError(CompileErrorCodes.INVALID_TOKEN_IN_PLACEHOLDER, currentPosition(), 0, token.value);\r\n skipSpaces(scnr);\r\n return token;\r\n }\r\n break;\r\n }\r\n return token;\r\n }\r\n // TODO: We need refactoring of token parsing ...\r\n function readTokenInLinked(scnr, context) {\r\n const { currentType } = context;\r\n let token = null;\r\n const ch = scnr.currentChar();\r\n if ((currentType === 8 /* LinkedAlias */ ||\r\n currentType === 9 /* LinkedDot */ ||\r\n currentType === 12 /* LinkedModifier */ ||\r\n currentType === 10 /* LinkedDelimiter */) &&\r\n (ch === CHAR_LF || ch === CHAR_SP)) {\r\n emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);\r\n }\r\n switch (ch) {\r\n case \"@\" /* LinkedAlias */:\r\n scnr.next();\r\n token = getToken(context, 8 /* LinkedAlias */, \"@\" /* LinkedAlias */);\r\n context.inLinked = true;\r\n return token;\r\n case \".\" /* LinkedDot */:\r\n skipSpaces(scnr);\r\n scnr.next();\r\n return getToken(context, 9 /* LinkedDot */, \".\" /* LinkedDot */);\r\n case \":\" /* LinkedDelimiter */:\r\n skipSpaces(scnr);\r\n scnr.next();\r\n return getToken(context, 10 /* LinkedDelimiter */, \":\" /* LinkedDelimiter */);\r\n default:\r\n if (isPluralStart(scnr)) {\r\n token = getToken(context, 1 /* Pipe */, readPlural(scnr));\r\n // reset\r\n context.braceNest = 0;\r\n context.inLinked = false;\r\n return token;\r\n }\r\n if (isLinkedDotStart(scnr, context) ||\r\n isLinkedDelimiterStart(scnr, context)) {\r\n skipSpaces(scnr);\r\n return readTokenInLinked(scnr, context);\r\n }\r\n if (isLinkedModifierStart(scnr, context)) {\r\n skipSpaces(scnr);\r\n return getToken(context, 12 /* LinkedModifier */, readLinkedModifier(scnr));\r\n }\r\n if (isLinkedReferStart(scnr, context)) {\r\n skipSpaces(scnr);\r\n if (ch === \"{\" /* BraceLeft */) {\r\n // scan the placeholder\r\n return readTokenInPlaceholder(scnr, context) || token;\r\n }\r\n else {\r\n return getToken(context, 11 /* LinkedKey */, readLinkedRefer(scnr));\r\n }\r\n }\r\n if (currentType === 8 /* LinkedAlias */) {\r\n emitError(CompileErrorCodes.INVALID_LINKED_FORMAT, currentPosition(), 0);\r\n }\r\n context.braceNest = 0;\r\n context.inLinked = false;\r\n return readToken(scnr, context);\r\n }\r\n }\r\n // TODO: We need refactoring of token parsing ...\r\n function readToken(scnr, context) {\r\n let token = { type: 14 /* EOF */ };\r\n if (context.braceNest > 0) {\r\n return readTokenInPlaceholder(scnr, context) || getEndToken(context);\r\n }\r\n if (context.inLinked) {\r\n return readTokenInLinked(scnr, context) || getEndToken(context);\r\n }\r\n const ch = scnr.currentChar();\r\n switch (ch) {\r\n case \"{\" /* BraceLeft */:\r\n return readTokenInPlaceholder(scnr, context) || getEndToken(context);\r\n case \"}\" /* BraceRight */:\r\n emitError(CompileErrorCodes.UNBALANCED_CLOSING_BRACE, currentPosition(), 0);\r\n scnr.next();\r\n return getToken(context, 3 /* BraceRight */, \"}\" /* BraceRight */);\r\n case \"@\" /* LinkedAlias */:\r\n return readTokenInLinked(scnr, context) || getEndToken(context);\r\n default:\r\n if (isPluralStart(scnr)) {\r\n token = getToken(context, 1 /* Pipe */, readPlural(scnr));\r\n // reset\r\n context.braceNest = 0;\r\n context.inLinked = false;\r\n return token;\r\n }\r\n const { isModulo, hasSpace } = detectModuloStart(scnr);\r\n if (isModulo) {\r\n return hasSpace\r\n ? getToken(context, 0 /* Text */, readText(scnr))\r\n : getToken(context, 4 /* Modulo */, readModulo(scnr));\r\n }\r\n if (isTextStart(scnr)) {\r\n return getToken(context, 0 /* Text */, readText(scnr));\r\n }\r\n break;\r\n }\r\n return token;\r\n }\r\n function nextToken() {\r\n const { currentType, offset, startLoc, endLoc } = _context;\r\n _context.lastType = currentType;\r\n _context.lastOffset = offset;\r\n _context.lastStartLoc = startLoc;\r\n _context.lastEndLoc = endLoc;\r\n _context.offset = currentOffset();\r\n _context.startLoc = currentPosition();\r\n if (_scnr.currentChar() === EOF) {\r\n return getToken(_context, 14 /* EOF */);\r\n }\r\n return readToken(_scnr, _context);\r\n }\r\n return {\r\n nextToken,\r\n currentOffset,\r\n currentPosition,\r\n context\r\n };\r\n}\n\nconst ERROR_DOMAIN = 'parser';\r\n// Backslash backslash, backslash quote, uHHHH, UHHHHHH.\r\nconst KNOWN_ESCAPES = /(?:\\\\\\\\|\\\\'|\\\\u([0-9a-fA-F]{4})|\\\\U([0-9a-fA-F]{6}))/g;\r\nfunction fromEscapeSequence(match, codePoint4, codePoint6) {\r\n switch (match) {\r\n case `\\\\\\\\`:\r\n return `\\\\`;\r\n case `\\\\\\'`:\r\n return `\\'`;\r\n default: {\r\n const codePoint = parseInt(codePoint4 || codePoint6, 16);\r\n if (codePoint <= 0xd7ff || codePoint >= 0xe000) {\r\n return String.fromCodePoint(codePoint);\r\n }\r\n // invalid ...\r\n // Replace them with U+FFFD REPLACEMENT CHARACTER.\r\n return '�';\r\n }\r\n }\r\n}\r\nfunction createParser(options = {}) {\r\n const location = options.location !== false;\r\n const { onError } = options;\r\n function emitError(tokenzer, code, start, offset, ...args) {\r\n const end = tokenzer.currentPosition();\r\n end.offset += offset;\r\n end.column += offset;\r\n if (onError) {\r\n const loc = createLocation(start, end);\r\n const err = createCompileError(code, loc, {\r\n domain: ERROR_DOMAIN,\r\n args\r\n });\r\n onError(err);\r\n }\r\n }\r\n function startNode(type, offset, loc) {\r\n const node = {\r\n type,\r\n start: offset,\r\n end: offset\r\n };\r\n if (location) {\r\n node.loc = { start: loc, end: loc };\r\n }\r\n return node;\r\n }\r\n function endNode(node, offset, pos, type) {\r\n node.end = offset;\r\n if (type) {\r\n node.type = type;\r\n }\r\n if (location && node.loc) {\r\n node.loc.end = pos;\r\n }\r\n }\r\n function parseText(tokenizer, value) {\r\n const context = tokenizer.context();\r\n const node = startNode(3 /* Text */, context.offset, context.startLoc);\r\n node.value = value;\r\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n return node;\r\n }\r\n function parseList(tokenizer, index) {\r\n const context = tokenizer.context();\r\n const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\r\n const node = startNode(5 /* List */, offset, loc);\r\n node.index = parseInt(index, 10);\r\n tokenizer.nextToken(); // skip brach right\r\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n return node;\r\n }\r\n function parseNamed(tokenizer, key) {\r\n const context = tokenizer.context();\r\n const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\r\n const node = startNode(4 /* Named */, offset, loc);\r\n node.key = key;\r\n tokenizer.nextToken(); // skip brach right\r\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n return node;\r\n }\r\n function parseLiteral(tokenizer, value) {\r\n const context = tokenizer.context();\r\n const { lastOffset: offset, lastStartLoc: loc } = context; // get brace left loc\r\n const node = startNode(9 /* Literal */, offset, loc);\r\n node.value = value.replace(KNOWN_ESCAPES, fromEscapeSequence);\r\n tokenizer.nextToken(); // skip brach right\r\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n return node;\r\n }\r\n function parseLinkedModifier(tokenizer) {\r\n const token = tokenizer.nextToken();\r\n const context = tokenizer.context();\r\n const { lastOffset: offset, lastStartLoc: loc } = context; // get linked dot loc\r\n const node = startNode(8 /* LinkedModifier */, offset, loc);\r\n if (token.type !== 12 /* LinkedModifier */) {\r\n // empty modifier\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_MODIFIER, context.lastStartLoc, 0);\r\n node.value = '';\r\n endNode(node, offset, loc);\r\n return {\r\n nextConsumeToken: token,\r\n node\r\n };\r\n }\r\n // check token\r\n if (token.value == null) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n node.value = token.value || '';\r\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n return {\r\n node\r\n };\r\n }\r\n function parseLinkedKey(tokenizer, value) {\r\n const context = tokenizer.context();\r\n const node = startNode(7 /* LinkedKey */, context.offset, context.startLoc);\r\n node.value = value;\r\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n return node;\r\n }\r\n function parseLinked(tokenizer) {\r\n const context = tokenizer.context();\r\n const linkedNode = startNode(6 /* Linked */, context.offset, context.startLoc);\r\n let token = tokenizer.nextToken();\r\n if (token.type === 9 /* LinkedDot */) {\r\n const parsed = parseLinkedModifier(tokenizer);\r\n linkedNode.modifier = parsed.node;\r\n token = parsed.nextConsumeToken || tokenizer.nextToken();\r\n }\r\n // asset check token\r\n if (token.type !== 10 /* LinkedDelimiter */) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n token = tokenizer.nextToken();\r\n // skip brace left\r\n if (token.type === 2 /* BraceLeft */) {\r\n token = tokenizer.nextToken();\r\n }\r\n switch (token.type) {\r\n case 11 /* LinkedKey */:\r\n if (token.value == null) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n linkedNode.key = parseLinkedKey(tokenizer, token.value || '');\r\n break;\r\n case 5 /* Named */:\r\n if (token.value == null) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n linkedNode.key = parseNamed(tokenizer, token.value || '');\r\n break;\r\n case 6 /* List */:\r\n if (token.value == null) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n linkedNode.key = parseList(tokenizer, token.value || '');\r\n break;\r\n case 7 /* Literal */:\r\n if (token.value == null) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n linkedNode.key = parseLiteral(tokenizer, token.value || '');\r\n break;\r\n default:\r\n // empty key\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_EMPTY_LINKED_KEY, context.lastStartLoc, 0);\r\n const nextContext = tokenizer.context();\r\n const emptyLinkedKeyNode = startNode(7 /* LinkedKey */, nextContext.offset, nextContext.startLoc);\r\n emptyLinkedKeyNode.value = '';\r\n endNode(emptyLinkedKeyNode, nextContext.offset, nextContext.startLoc);\r\n linkedNode.key = emptyLinkedKeyNode;\r\n endNode(linkedNode, nextContext.offset, nextContext.startLoc);\r\n return {\r\n nextConsumeToken: token,\r\n node: linkedNode\r\n };\r\n }\r\n endNode(linkedNode, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n return {\r\n node: linkedNode\r\n };\r\n }\r\n function parseMessage(tokenizer) {\r\n const context = tokenizer.context();\r\n const startOffset = context.currentType === 1 /* Pipe */\r\n ? tokenizer.currentOffset()\r\n : context.offset;\r\n const startLoc = context.currentType === 1 /* Pipe */\r\n ? context.endLoc\r\n : context.startLoc;\r\n const node = startNode(2 /* Message */, startOffset, startLoc);\r\n node.items = [];\r\n let nextToken = null;\r\n do {\r\n const token = nextToken || tokenizer.nextToken();\r\n nextToken = null;\r\n switch (token.type) {\r\n case 0 /* Text */:\r\n if (token.value == null) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n node.items.push(parseText(tokenizer, token.value || ''));\r\n break;\r\n case 6 /* List */:\r\n if (token.value == null) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n node.items.push(parseList(tokenizer, token.value || ''));\r\n break;\r\n case 5 /* Named */:\r\n if (token.value == null) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n node.items.push(parseNamed(tokenizer, token.value || ''));\r\n break;\r\n case 7 /* Literal */:\r\n if (token.value == null) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, getTokenCaption(token));\r\n }\r\n node.items.push(parseLiteral(tokenizer, token.value || ''));\r\n break;\r\n case 8 /* LinkedAlias */:\r\n const parsed = parseLinked(tokenizer);\r\n node.items.push(parsed.node);\r\n nextToken = parsed.nextConsumeToken || null;\r\n break;\r\n }\r\n } while (context.currentType !== 14 /* EOF */ &&\r\n context.currentType !== 1 /* Pipe */);\r\n // adjust message node loc\r\n const endOffset = context.currentType === 1 /* Pipe */\r\n ? context.lastOffset\r\n : tokenizer.currentOffset();\r\n const endLoc = context.currentType === 1 /* Pipe */\r\n ? context.lastEndLoc\r\n : tokenizer.currentPosition();\r\n endNode(node, endOffset, endLoc);\r\n return node;\r\n }\r\n function parsePlural(tokenizer, offset, loc, msgNode) {\r\n const context = tokenizer.context();\r\n let hasEmptyMessage = msgNode.items.length === 0;\r\n const node = startNode(1 /* Plural */, offset, loc);\r\n node.cases = [];\r\n node.cases.push(msgNode);\r\n do {\r\n const msg = parseMessage(tokenizer);\r\n if (!hasEmptyMessage) {\r\n hasEmptyMessage = msg.items.length === 0;\r\n }\r\n node.cases.push(msg);\r\n } while (context.currentType !== 14 /* EOF */);\r\n if (hasEmptyMessage) {\r\n emitError(tokenizer, CompileErrorCodes.MUST_HAVE_MESSAGES_IN_PLURAL, loc, 0);\r\n }\r\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n return node;\r\n }\r\n function parseResource(tokenizer) {\r\n const context = tokenizer.context();\r\n const { offset, startLoc } = context;\r\n const msgNode = parseMessage(tokenizer);\r\n if (context.currentType === 14 /* EOF */) {\r\n return msgNode;\r\n }\r\n else {\r\n return parsePlural(tokenizer, offset, startLoc, msgNode);\r\n }\r\n }\r\n function parse(source) {\r\n const tokenizer = createTokenizer(source, assign({}, options));\r\n const context = tokenizer.context();\r\n const node = startNode(0 /* Resource */, context.offset, context.startLoc);\r\n if (location && node.loc) {\r\n node.loc.source = source;\r\n }\r\n node.body = parseResource(tokenizer);\r\n // assert whether achieved to EOF\r\n if (context.currentType !== 14 /* EOF */) {\r\n emitError(tokenizer, CompileErrorCodes.UNEXPECTED_LEXICAL_ANALYSIS, context.lastStartLoc, 0, source[context.offset] || '');\r\n }\r\n endNode(node, tokenizer.currentOffset(), tokenizer.currentPosition());\r\n return node;\r\n }\r\n return { parse };\r\n}\r\nfunction getTokenCaption(token) {\r\n if (token.type === 14 /* EOF */) {\r\n return 'EOF';\r\n }\r\n const name = (token.value || '').replace(/\\r?\\n/gu, '\\\\n');\r\n return name.length > 10 ? name.slice(0, 9) + '…' : name;\r\n}\n\nfunction createTransformer(ast, options = {} // eslint-disable-line\r\n) {\r\n const _context = {\r\n ast,\r\n helpers: new Set()\r\n };\r\n const context = () => _context;\r\n const helper = (name) => {\r\n _context.helpers.add(name);\r\n return name;\r\n };\r\n return { context, helper };\r\n}\r\nfunction traverseNodes(nodes, transformer) {\r\n for (let i = 0; i < nodes.length; i++) {\r\n traverseNode(nodes[i], transformer);\r\n }\r\n}\r\nfunction traverseNode(node, transformer) {\r\n // TODO: if we need pre-hook of transform, should be implemented to here\r\n switch (node.type) {\r\n case 1 /* Plural */:\r\n traverseNodes(node.cases, transformer);\r\n transformer.helper(\"plural\" /* PLURAL */);\r\n break;\r\n case 2 /* Message */:\r\n traverseNodes(node.items, transformer);\r\n break;\r\n case 6 /* Linked */:\r\n const linked = node;\r\n traverseNode(linked.key, transformer);\r\n transformer.helper(\"linked\" /* LINKED */);\r\n transformer.helper(\"type\" /* TYPE */);\r\n break;\r\n case 5 /* List */:\r\n transformer.helper(\"interpolate\" /* INTERPOLATE */);\r\n transformer.helper(\"list\" /* LIST */);\r\n break;\r\n case 4 /* Named */:\r\n transformer.helper(\"interpolate\" /* INTERPOLATE */);\r\n transformer.helper(\"named\" /* NAMED */);\r\n break;\r\n }\r\n // TODO: if we need post-hook of transform, should be implemented to here\r\n}\r\n// transform AST\r\nfunction transform(ast, options = {} // eslint-disable-line\r\n) {\r\n const transformer = createTransformer(ast);\r\n transformer.helper(\"normalize\" /* NORMALIZE */);\r\n // traverse\r\n ast.body && traverseNode(ast.body, transformer);\r\n // set meta information\r\n const context = transformer.context();\r\n ast.helpers = Array.from(context.helpers);\r\n}\n\nfunction createCodeGenerator(ast, options) {\r\n const { sourceMap, filename, breakLineCode, needIndent: _needIndent } = options;\r\n const _context = {\r\n source: ast.loc.source,\r\n filename,\r\n code: '',\r\n column: 1,\r\n line: 1,\r\n offset: 0,\r\n map: undefined,\r\n breakLineCode,\r\n needIndent: _needIndent,\r\n indentLevel: 0\r\n };\r\n const context = () => _context;\r\n function push(code, node) {\r\n _context.code += code;\r\n }\r\n function _newline(n, withBreakLine = true) {\r\n const _breakLineCode = withBreakLine ? breakLineCode : '';\r\n push(_needIndent ? _breakLineCode + ` `.repeat(n) : _breakLineCode);\r\n }\r\n function indent(withNewLine = true) {\r\n const level = ++_context.indentLevel;\r\n withNewLine && _newline(level);\r\n }\r\n function deindent(withNewLine = true) {\r\n const level = --_context.indentLevel;\r\n withNewLine && _newline(level);\r\n }\r\n function newline() {\r\n _newline(_context.indentLevel);\r\n }\r\n const helper = (key) => `_${key}`;\r\n const needIndent = () => _context.needIndent;\r\n return {\r\n context,\r\n push,\r\n indent,\r\n deindent,\r\n newline,\r\n helper,\r\n needIndent\r\n };\r\n}\r\nfunction generateLinkedNode(generator, node) {\r\n const { helper } = generator;\r\n generator.push(`${helper(\"linked\" /* LINKED */)}(`);\r\n generateNode(generator, node.key);\r\n if (node.modifier) {\r\n generator.push(`, `);\r\n generateNode(generator, node.modifier);\r\n generator.push(`, _type`);\r\n }\r\n else {\r\n generator.push(`, undefined, _type`);\r\n }\r\n generator.push(`)`);\r\n}\r\nfunction generateMessageNode(generator, node) {\r\n const { helper, needIndent } = generator;\r\n generator.push(`${helper(\"normalize\" /* NORMALIZE */)}([`);\r\n generator.indent(needIndent());\r\n const length = node.items.length;\r\n for (let i = 0; i < length; i++) {\r\n generateNode(generator, node.items[i]);\r\n if (i === length - 1) {\r\n break;\r\n }\r\n generator.push(', ');\r\n }\r\n generator.deindent(needIndent());\r\n generator.push('])');\r\n}\r\nfunction generatePluralNode(generator, node) {\r\n const { helper, needIndent } = generator;\r\n if (node.cases.length > 1) {\r\n generator.push(`${helper(\"plural\" /* PLURAL */)}([`);\r\n generator.indent(needIndent());\r\n const length = node.cases.length;\r\n for (let i = 0; i < length; i++) {\r\n generateNode(generator, node.cases[i]);\r\n if (i === length - 1) {\r\n break;\r\n }\r\n generator.push(', ');\r\n }\r\n generator.deindent(needIndent());\r\n generator.push(`])`);\r\n }\r\n}\r\nfunction generateResource(generator, node) {\r\n if (node.body) {\r\n generateNode(generator, node.body);\r\n }\r\n else {\r\n generator.push('null');\r\n }\r\n}\r\nfunction generateNode(generator, node) {\r\n const { helper } = generator;\r\n switch (node.type) {\r\n case 0 /* Resource */:\r\n generateResource(generator, node);\r\n break;\r\n case 1 /* Plural */:\r\n generatePluralNode(generator, node);\r\n break;\r\n case 2 /* Message */:\r\n generateMessageNode(generator, node);\r\n break;\r\n case 6 /* Linked */:\r\n generateLinkedNode(generator, node);\r\n break;\r\n case 8 /* LinkedModifier */:\r\n generator.push(JSON.stringify(node.value), node);\r\n break;\r\n case 7 /* LinkedKey */:\r\n generator.push(JSON.stringify(node.value), node);\r\n break;\r\n case 5 /* List */:\r\n generator.push(`${helper(\"interpolate\" /* INTERPOLATE */)}(${helper(\"list\" /* LIST */)}(${node.index}))`, node);\r\n break;\r\n case 4 /* Named */:\r\n generator.push(`${helper(\"interpolate\" /* INTERPOLATE */)}(${helper(\"named\" /* NAMED */)}(${JSON.stringify(node.key)}))`, node);\r\n break;\r\n case 9 /* Literal */:\r\n generator.push(JSON.stringify(node.value), node);\r\n break;\r\n case 3 /* Text */:\r\n generator.push(JSON.stringify(node.value), node);\r\n break;\r\n default:\r\n if ((process.env.NODE_ENV !== 'production')) {\r\n throw new Error(`unhandled codegen node type: ${node.type}`);\r\n }\r\n }\r\n}\r\n// generate code from AST\r\nconst generate = (ast, options = {} // eslint-disable-line\r\n) => {\r\n const mode = isString(options.mode) ? options.mode : 'normal';\r\n const filename = isString(options.filename)\r\n ? options.filename\r\n : 'message.intl';\r\n const sourceMap = !!options.sourceMap;\r\n // prettier-ignore\r\n const breakLineCode = options.breakLineCode != null\r\n ? options.breakLineCode\r\n : mode === 'arrow'\r\n ? ';'\r\n : '\\n';\r\n const needIndent = options.needIndent ? options.needIndent : mode !== 'arrow';\r\n const helpers = ast.helpers || [];\r\n const generator = createCodeGenerator(ast, {\r\n mode,\r\n filename,\r\n sourceMap,\r\n breakLineCode,\r\n needIndent\r\n });\r\n generator.push(mode === 'normal' ? `function __msg__ (ctx) {` : `(ctx) => {`);\r\n generator.indent(needIndent);\r\n if (helpers.length > 0) {\r\n generator.push(`const { ${helpers.map(s => `${s}: _${s}`).join(', ')} } = ctx`);\r\n generator.newline();\r\n }\r\n generator.push(`return `);\r\n generateNode(generator, ast);\r\n generator.deindent(needIndent);\r\n generator.push(`}`);\r\n const { code, map } = generator.context();\r\n return {\r\n ast,\r\n code,\r\n map: map ? map.toJSON() : undefined // eslint-disable-line @typescript-eslint/no-explicit-any\r\n };\r\n};\n\nfunction baseCompile(source, options = {}) {\r\n const assignedOptions = assign({}, options);\r\n // parse source codes\r\n const parser = createParser(assignedOptions);\r\n const ast = parser.parse(source);\r\n // transform ASTs\r\n transform(ast, assignedOptions);\r\n // generate javascript codes\r\n return generate(ast, assignedOptions);\r\n}\n\nexport { CompileErrorCodes, ERROR_DOMAIN, LocationStub, baseCompile, createCompileError, createLocation, createParser, createPosition, defaultOnError, errorMessages };\n"],"names":["CompileErrorCodes","EXPECTED_TOKEN","INVALID_TOKEN_IN_PLACEHOLDER","UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER","UNKNOWN_ESCAPE_SEQUENCE","INVALID_UNICODE_ESCAPE_SEQUENCE","UNBALANCED_CLOSING_BRACE","UNTERMINATED_CLOSING_BRACE","EMPTY_PLACEHOLDER","NOT_ALLOW_NEST_PLACEHOLDER","INVALID_LINKED_FORMAT","MUST_HAVE_MESSAGES_IN_PLURAL","UNEXPECTED_EMPTY_LINKED_MODIFIER","UNEXPECTED_EMPTY_LINKED_KEY","UNEXPECTED_LEXICAL_ANALYSIS","__EXTEND_POINT__","createCompileError","code","loc","options","domain","messages","args","error","SyntaxError","String","location","defaultOnError","createLocation","start","end","source","CHAR_SP","CHAR_CR","CHAR_LF","CHAR_LS","fromCharCode","CHAR_PS","createScanner","str","_buf","_index","_line","_column","_peekOffset","isCRLF","index","isPS","isLS","charAt","offset","next","isLF","line","column","peekOffset","currentChar","currentPeek","peek","reset","resetPeek","skipToPeek","target","EOF","undefined","LITERAL_DELIMITER","ERROR_DOMAIN$1","createTokenizer","_scnr","currentOffset","currentPosition","_initLoc","_initOffset","_context","currentType","startLoc","endLoc","lastType","lastOffset","lastStartLoc","lastEndLoc","braceNest","inLinked","text","context","onError","emitError","pos","ctx","err","getToken","type","value","token","getEndToken","eat","scnr","ch","peekSpaces","buf","skipSpaces","isIdentifierStart","cc","charCodeAt","isPluralStart","ret","isTextStart","fn","hasSpace","prev","detectModulo","takeChar","takeIdentifierChar","takeDigit","takeHexDigit","getDigits","num","readText","readEscapeSequence","readUnicodeEscapeSequence","unicode","digits","sequence","i","readPlural","plural","readTokenInPlaceholder","readTokenInLinked","validNamedIdentifier","validListIdentifier","validLiteral","readToken","isNamedIdentifierStart","name","readNamedIdentifier","isNumberStart","isListIdentifierStart","readListIdentifier","isLiteralStart","literal","x","current","readLiteral","identifiers","closure","readInvalidIdentifier","isLinkedDotStart","isLinkedDelimiterStart","isLinkedModifierStart","readLinkedModifier","isLinkedReferStart","detect","readLinkedRefer","isModulo","spaces","length","detectModuloStart","readModulo","nextToken","ERROR_DOMAIN","KNOWN_ESCAPES","fromEscapeSequence","match","codePoint4","codePoint6","codePoint","parseInt","fromCodePoint","createParser","tokenzer","startNode","node","endNode","parseText","tokenizer","parseList","parseNamed","key","parseLiteral","replace","parseLinked","linkedNode","parsed","nextConsumeToken","getTokenCaption","parseLinkedModifier","modifier","parseLinkedKey","nextContext","emptyLinkedKeyNode","parseMessage","items","push","parse","body","msgNode","hasEmptyMessage","cases","msg","parsePlural","parseResource","slice","traverseNodes","nodes","transformer","traverseNode","helper","generateNode","generator","generateResource","needIndent","indent","deindent","generatePluralNode","generateMessageNode","generateLinkedNode","JSON","stringify","generate","ast","mode","filename","sourceMap","breakLineCode","helpers","_needIndent","map","indentLevel","_newline","n","withBreakLine","_breakLineCode","repeat","withNewLine","level","newline","createCodeGenerator","s","join","toJSON","baseCompile","assignedOptions","Set","add","createTransformer","Array","from","transform"],"sourceRoot":""}