{"version":3,"file":"msgfmt-parser.mjs","names":["ParseError","SIMPLE_MESSAGE","parseMessage","msg","test","parseMessageEOF","call","createParser","ARG_TYPES","ARG_STYLES","number","date","time","spellout","ordinal","duration","src","pos","reText","reQuotedText","parseMessage_","length","allowHash","buf","pushString","parseMessageText","outer","push","parseArgument","type","parseElement","Error","reduceMessage","inQuote","parseRawMessageText","re","lastIndex","text","exec","name","parseArgNameOrNumber","nextToken","argType_","parsePluralArgument","indexOf","argType","argStyleToken","argStyle","skeletonText","dateTimeFormat","parseDateSkeleton","token","offset","undefined","parseNumber","branches","selector","message","closingName","noSpace","kind","expected","noWhitespace","foundWhitespace","nextTokenImpl","join","skipWhitespace","ch","start","startsWith","substring","oldPos","parseInt","skeleton","options","match","skeletonTokens","Object","prototype","hasOwnProperty","dateTokenMap","array","value","hourCycleMap","requiredDateFields","every","f","tokens","i","G","y","M","d","E","a","h","H","k","K","j","m","s","S","z","O","v"],"sources":["../src/msgfmt-parser.ts"],"sourcesContent":["import { ParseError } from \"./errors.js\";\nimport {\n  ArgType,\n  CompiledMessage,\n  ElementArg,\n  PluralArg,\n  PluralBranch,\n  VarArg,\n} from \"./msgfmt.js\";\n\nconst SIMPLE_MESSAGE = /^[^'{}<]*$/;\n\nexport function parseMessage(msg: string): CompiledMessage {\n  if (SIMPLE_MESSAGE.test(msg)) return msg;\n  return parseMessageEOF.call(createParser(msg));\n}\n\nconst ARG_TYPES = [\"number\", \"date\", \"time\", \"spellout\", \"ordinal\", \"duration\"];\nconst ARG_STYLES: Record<ArgType, string[]> = {\n  number: [\"integer\", \"currency\", \"percent\"],\n  date: [\"short\", \"medium\", \"long\", \"full\"],\n  time: [\"short\", \"medium\", \"long\", \"full\"],\n  spellout: [],\n  ordinal: [],\n  duration: [],\n};\n\n// References for ICU MessageFormat syntax:\n// https://unicode-org.github.io/icu-docs/apidoc/released/icu4j/com/ibm/icu/text/MessageFormat.html\n// https://unicode-org.github.io/icu/userguide/format_parse/messages/\ninterface Parser {\n  src: string;\n  pos: number;\n  reText: RegExp;\n  reQuotedText: RegExp;\n}\nfunction createParser(src: string): Parser {\n  return {\n    src,\n    pos: 0,\n    reText: /[^'{}#<]*/y,\n    reQuotedText: /[^']*/y,\n  };\n}\n\nfunction parseMessageEOF(this: Parser): CompiledMessage {\n  const msg = parseMessage_.call(this, false);\n  if (this.pos < this.src.length) {\n    throw new ParseError(`Found an unmatching ${this.src[this.pos]!}`);\n  }\n  return msg;\n}\n\n// message = messageText (argument messageText)*\n// The grammar doesn't mention it but it should also have '#' as a special interpolation.\nfunction parseMessage_(this: Parser, allowHash: boolean): CompiledMessage {\n  const buf: CompiledMessage[] = [];\n  pushString(buf, parseMessageText.call(this, allowHash));\n  outer: while (this.pos < this.src.length && this.src[this.pos] !== \"}\") {\n    switch (this.src[this.pos]) {\n      case \"{\":\n        buf.push(parseArgument.call(this));\n        break;\n      case \"#\":\n        buf.push({ type: \"Number\" });\n        this.pos++;\n        break;\n      case \"<\":\n        if (this.pos + 1 < this.src.length && this.src[this.pos + 1] === \"/\") {\n          // </tag>\n          break outer;\n        } else {\n          // <tag> or <tag/>\n          buf.push(parseElement.call(this, allowHash));\n        }\n        break;\n      default:\n        throw new Error(\n          `Bug: invalid syntax character: ${this.src[this.pos]!}`\n        );\n    }\n    pushString(buf, parseMessageText.call(this, allowHash));\n  }\n  return reduceMessage(buf);\n}\n\n// messageText consists of three parts:\n//\n// - plain message text\n// - quoted message text\n// - escaped quotes\nfunction parseMessageText(this: Parser, allowHash: boolean): string {\n  let inQuote = false;\n  let buf = parseRawMessageText.call(this, inQuote);\n  while (this.pos < this.src.length) {\n    if (this.src[this.pos] === \"'\") {\n      if (this.pos + 1 < this.src.length && this.src[this.pos + 1] === \"'\") {\n        // Self-escaped quotation\n        buf += \"'\";\n        this.pos += 2;\n      } else if (inQuote) {\n        // End of quoted text\n        inQuote = false;\n        this.pos++;\n      } else if (\n        this.pos + 1 < this.src.length &&\n        /[{}#|<]/.test(this.src[this.pos + 1]!)\n      ) {\n        // Beginning of quoted text\n        inQuote = true;\n        this.pos++;\n      } else {\n        // Literal quote\n        buf += \"'\";\n        this.pos++;\n      }\n    } else if (this.src[this.pos] === \"#\" && allowHash) {\n      // A plain '#' character. It is special only within pluralStyle.\n      buf += \"#\";\n      this.pos++;\n    } else {\n      // Syntax character ({, }, #, <)\n      break;\n    }\n    buf += parseRawMessageText.call(this, inQuote);\n  }\n  if (inQuote) {\n    throw new ParseError(\"Unclosed quoted string\");\n  }\n  return buf;\n}\n// Eats up the text until it encounters a syntax character ('{', '}', '#', '<'), a quote (\"'\"), or EOF.\n// In quoted mode, the four syntax characters ('{', '}', '#', '<') are considered part of the text.\nfunction parseRawMessageText(this: Parser, inQuote: boolean): string {\n  const re = inQuote ? this.reQuotedText : this.reText;\n  re.lastIndex = this.pos;\n  const text = re.exec(this.src)![0]!;\n  this.pos += text.length;\n  return text;\n}\n\n// Something enclosed within {}.\n// argument = noneArg | simpleArg | complexArg\n// complexArg = choiceArg | pluralArg | selectArg | selectordinalArg\nfunction parseArgument(this: Parser): CompiledMessage {\n  this.pos++; // Eat the open brace\n  const name = parseArgNameOrNumber.call(this);\n  switch (\n    nextToken.call<Parser, [readonly [\"}\", \",\"]], [\"}\" | \",\", string]>(this, [\n      \"}\",\n      \",\",\n    ] as const)[0]\n  ) {\n    case \"}\":\n      return { type: \"Var\", name };\n    case \",\": {\n      const argType_ = nextToken.call(this, [\"identifier\"] as const)[1];\n      switch (argType_) {\n        case \"choice\":\n          throw new ParseError(\"choice is not supported\");\n          break;\n        case \"plural\":\n          return parsePluralArgument.call(this, name);\n        case \"select\":\n        case \"selectordinal\":\n          throw new Error(\"Unimplemented: selectArg\");\n          break;\n        default: {\n          if (ARG_TYPES.indexOf(argType_) === -1) {\n            throw new ParseError(`Invalid argType: ${argType_}`);\n          }\n          const argType = argType_ as ArgType;\n          switch (\n            nextToken.call<Parser, [readonly [\"}\", \",\"]], [\"}\" | \",\", string]>(\n              this,\n              [\"}\", \",\"] as const\n            )[0]\n          ) {\n            case \"}\":\n              return { type: \"Var\", name, argType };\n            case \",\": {\n              const argStyleToken = nextToken.call<\n                Parser,\n                [readonly [\"identifier\", \"::\"]],\n                [\"identifier\" | \"::\", string]\n              >(this, [\"identifier\", \"::\"] as const);\n              switch (argStyleToken[0]) {\n                case \"identifier\": {\n                  const argStyle = argStyleToken[1];\n                  if (ARG_STYLES[argType].indexOf(argStyle) === -1) {\n                    throw new ParseError(\n                      `Invalid argStyle for ${argType}: ${argStyle}`\n                    );\n                  }\n                  nextToken.call(this, [\"}\"] as const);\n                  return {\n                    type: \"Var\",\n                    name,\n                    argType,\n                    argStyle,\n                  } as VarArg;\n                }\n                case \"::\": {\n                  if (argType !== \"date\") {\n                    throw new ParseError(`Invalid argStyle for ${argType}: ::`);\n                  }\n                  const skeletonText = nextToken.call(this, [\n                    \"identifier\",\n                  ] as const)[1];\n                  const dateTimeFormat = parseDateSkeleton(skeletonText);\n                  nextToken.call(this, [\"}\"] as const);\n                  return {\n                    type: \"Var\",\n                    name,\n                    argType,\n                    argStyle: dateTimeFormat,\n                  } as VarArg;\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n// pluralStyle = [offsetValue] (selector '{' message '}')+\n// offsetValue = \"offset:\" number\n// selector = explicitValue | keyword\n// explicitValue = '=' number  // adjacent, no white space in between\n// keyword = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+\nfunction parsePluralArgument(this: Parser, name: string | number): PluralArg {\n  nextToken.call(this, [\",\"]);\n  let token = nextToken.call(this, [\n    \"offset:\",\n    \"identifier\",\n    \"=\",\n    \"}\",\n  ] as const);\n  let offset: number | undefined = undefined;\n  if (token[0] === \"offset:\") {\n    offset = parseNumber(nextToken.call(this, [\"number\"] as const)[1]);\n    token = nextToken.call(this, [\"identifier\", \"=\", \"}\"] as const);\n  }\n  const branches: PluralBranch[] = [];\n  while (token[0] !== \"}\") {\n    let selector: string | number;\n    if (token[0] === \"=\") {\n      selector = parseNumber(nextToken.call(this, [\"number\"], [\"number\"])[1]);\n    } else {\n      selector = token[1];\n    }\n    nextToken.call(this, [\"{\"]);\n    const message = parseMessage_.call(this, false);\n    nextToken.call(this, [\"}\"]);\n    branches.push({ selector, message });\n    token = nextToken.call(this, [\"identifier\", \"=\", \"}\"] as const);\n  }\n  if (branches.length === 0) throw new ParseError(\"No branch found\");\n  if (branches[branches.length - 1]!.selector !== \"other\")\n    throw new ParseError(\"Last selector should be other\");\n  return { type: \"Plural\", name, offset, branches };\n}\n\n// <tag>message</tag> or <tag/>\nfunction parseElement(this: Parser, allowHash: boolean): ElementArg {\n  this.pos++; // Eat <\n  const name = parseArgNameOrNumber.call(this, true);\n  if (nextToken.call(this, [\"/\", \">\"] as const)[0] === \"/\") {\n    // <tag/>\n    nextToken.call(this, [\">\"], [\">\"]);\n    return {\n      type: \"Element\",\n      name,\n      message: undefined,\n    };\n  }\n  // <tag>message</tag>\n  const message = parseMessage_.call(this, allowHash);\n  nextToken.call(this, [\"<\"]);\n  nextToken.call(this, [\"/\"], [\"/\"]);\n  const closingName = parseArgNameOrNumber.call(this, true);\n  nextToken.call(this, [\">\"]);\n  if (name !== closingName) {\n    throw new ParseError(\n      `Tag ${name} closed with a different name: ${closingName}`\n    );\n  }\n  return {\n    type: \"Element\",\n    name,\n    message,\n  };\n}\n\n// argNameOrNumber = argName | argNumber\n// argName = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+\n// argNumber = '0' | ('1'..'9' ('0'..'9')*)\nfunction parseArgNameOrNumber(this: Parser, noSpace = false): number | string {\n  const [kind, token] = nextToken.call(\n    this,\n    [\"number\", \"identifier\"] as const,\n    noSpace ? [\"number\", \"identifier\"] : undefined\n  );\n  if (kind === \"number\") return parseNumber(token);\n  return token;\n}\n\nfunction nextToken<E extends readonly string[]>(\n  this: Parser,\n  expected: E,\n  noWhitespace?: string[]\n): [E[number], string] {\n  const [kind, token, foundWhitespace] = nextTokenImpl.call(this);\n  if (expected.indexOf(kind) === -1)\n    throw new ParseError(\n      `Unexpected token ${kind} (expected ${expected.join(\", \")})`\n    );\n  if (noWhitespace && foundWhitespace && noWhitespace.indexOf(kind) !== -1)\n    throw new ParseError(\"No space allowed here\");\n  return [kind, token];\n}\n\nfunction nextTokenImpl(this: Parser): [string, string, boolean] {\n  const foundWhitespace = skipWhitespace.call(this);\n  if (this.pos >= this.src.length) return [\"EOF\", \"\", foundWhitespace];\n  const ch = this.src[this.pos]!;\n  const start = this.pos;\n  let kind: string;\n  if (this.src.startsWith(\"offset:\", this.pos)) {\n    kind = \"offset:\";\n    this.pos += \"offset:\".length;\n    // It should be /[\\p{Pattern_Syntax}\\p{Pattern_White_Space}]/u\n    // but for compatibility reasons I'm not yet sure we can use it now.\n  } else if (/[0-9A-Z_a-z]/.test(ch)) {\n    kind = /[0-9]/.test(ch) ? \"number\" : \"identifier\";\n    while (\n      this.pos < this.src.length &&\n      /[0-9A-Z_a-z]/.test(this.src[this.pos]!)\n    ) {\n      this.pos++;\n    }\n  } else if (this.src.startsWith(\"::\", this.pos)) {\n    kind = \"::\";\n    this.pos += \"::\".length;\n  } else {\n    kind = ch;\n    this.pos++;\n  }\n  return [kind, this.src.substring(start, this.pos), foundWhitespace];\n}\n\nfunction skipWhitespace(this: Parser): boolean {\n  const oldPos = this.pos;\n  while (this.pos < this.src.length && /\\s/.test(this.src[this.pos]!))\n    this.pos++;\n  return this.pos > oldPos;\n}\n\nfunction parseNumber(token: string): number {\n  if (!/^(?:0|[1-9][0-9]*)$/.test(token))\n    throw new ParseError(`Invalid number: ${token}`);\n  return parseInt(token);\n}\n\nfunction reduceMessage(msg: CompiledMessage[]): CompiledMessage {\n  if (msg.length === 1) {\n    return msg[0]!;\n  } else if (msg.length === 0) {\n    return \"\";\n  } else {\n    return msg;\n  }\n}\n\nfunction pushString(buf: CompiledMessage[], msg: string) {\n  if (msg !== \"\") buf.push(msg);\n}\n\nfunction parseDateSkeleton(skeleton: string) {\n  const options: Record<string, string | number | undefined> = {};\n  // for (const match of skeleton.matchAll(/(.)\\1*/g)) {\n  for (const match of skeletonTokens(skeleton)) {\n    if (Object.prototype.hasOwnProperty.call(dateTokenMap, match[1]!)) {\n      const array = dateTokenMap[match[1]!]!;\n      const value = array[match[0]!.length];\n      if (value !== \"undefined\") {\n        options[array[0]] = value;\n        if (/[hHkK]/.test(match[1]!)) {\n          options[\"hourCycle\"] =\n            hourCycleMap[match[1] as \"h\" | \"H\" | \"k\" | \"K\"];\n        }\n        continue;\n      }\n    }\n    throw new ParseError(`Invalid date skeleton: ${match[0]!}`);\n  }\n  if (requiredDateFields.every((f) => options[f] === undefined)) {\n    throw new ParseError(\n      `Insufficient fields in the date skeleton: ${skeleton}`\n    );\n  }\n  return options as Intl.DateTimeFormatOptions;\n}\n\nfunction skeletonTokens(skeleton: string): [string?, string?][] {\n  const tokens: [string?, string?][] = [];\n  for (let i = 0; i < skeleton.length; ) {\n    const start = i;\n    const ch = skeleton[i]!;\n    for (; i < skeleton.length && skeleton[i] === ch; i++);\n    tokens.push([skeleton.substring(start, i), ch]);\n  }\n  return tokens;\n}\n\nconst requiredDateFields = [\n  \"weekday\",\n  \"year\",\n  \"month\",\n  \"day\",\n  \"dayPeriod\",\n  \"hour\",\n  \"minute\",\n  \"second\",\n  \"fractionalSecondDigits\",\n];\n\nconst dateTokenMap: Record<\n  string,\n  [string, ...(string | number | undefined)[]]\n> = {\n  G: [\"era\", \"short\", undefined, undefined, \"long\", \"narrow\"],\n  y: [\"year\", \"numeric\", \"2-digit\"],\n  M: [\"month\", \"numeric\", \"2-digit\", \"short\", \"long\", \"narrow\"],\n  d: [\"day\", \"numeric\", \"2-digit\"],\n  E: [\"weekday\", \"short\", undefined, undefined, \"long\", \"narrow\"],\n  a: [\"dayPeriod\", \"short\", undefined, undefined, \"long\", \"narrow\"],\n  h: [\"hour\", \"numeric\", \"2-digit\"],\n  H: [\"hour\", \"numeric\", \"2-digit\"],\n  k: [\"hour\", \"numeric\", \"2-digit\"],\n  K: [\"hour\", \"numeric\", \"2-digit\"],\n  j: [\"hour\", \"numeric\", \"2-digit\"],\n  m: [\"minute\", \"numeric\", \"2-digit\"],\n  s: [\"second\", \"numeric\", \"2-digit\"],\n  S: [\"fractionalSecondDigits\", 1, 2, 3],\n  z: [\"timeZoneName\", \"short\", undefined, undefined, \"long\"],\n  O: [\"timeZoneName\", \"shortOffset\", undefined, undefined, \"longOffset\"],\n  v: [\"timeZoneName\", \"shortGeneric\", undefined, undefined, \"longGeneric\"],\n};\n\nconst hourCycleMap = {\n  h: \"h12\",\n  H: \"h23\",\n  k: \"h24\",\n  K: \"h11\",\n};\n"],"mappings":"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"}