{"version":3,"file":"index.cjs","sources":["../src/utils.ts","../src/Trie.ts","../src/index.ts"],"sourcesContent":["// Originally written in Python. Converted from https://github.com/CanCLID/ToJyutping/blob/main/src/ToJyutping/utils.py\n\n// Romanization text can actually be formatted with ease by applying the Unicode line breaking algorithm (UAX #14, https://unicode.org/reports/tr14/) and adding spaces to all mandatory and optional line breaks.\n// However, `new Intl.Segmenter(\"zxx\", { granularity: \"line\" })` is still Stage 1, see https://github.com/tc39/proposal-intl-segmenter-v2,\n// (Also see https://github.com/tc39/proposal-stable-formatting for the language tag)\n// And a polyfill would be slow.\n// So this is a simple alternative for a quick formatting.\n\nconst punctDict = new Map(\n\tzip(\n\t\t`!\"'(),-./:;?[]{}~·‐‑‒–—―‘’“”…⋮⋯⸱⸳⸺⸻、。〈〉《》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟・︐︑︒︓︔︕︖︗︘︙︱︲︵︶︷︸︹︺︻︼︽︾︿﹀﹁﹂﹃﹄﹇﹈﹐﹑﹒﹔﹕﹖﹗﹘﹙﹚﹛﹜﹝﹞﹣！＂＇（），－．／：；？［］｛｝～｟｠｡｢｣､･`,\n\t\t`!\"'(),-./:;?[]{}~·------‘’“”………··--,.‘’“”“”‘’[][][][][]~“””·,,.:;!?[]…--(){}[][]“”‘’“”‘’[],,.;:?!-(){}[]-!\"'(),-./:;?[]{}~().“”,·`,\n\t),\n);\n\nconst leftBracket = new Set(\"([{‘“\");\nconst rightBracket = new Set(\")]}’”\");\nconst leftBracketToRight = new Map(zip(leftBracket, rightBracket));\nconst leftPunct = new Set(leftBracket);\nconst rightPunct = new Set([...\"!,.:;?…\", ...rightBracket]);\nconst otherPunct = new Set(`\"'·-~`);\nconst leftOrOtherPunct = new Set([\" \", ...leftPunct, ...otherPunct]);\nconst rightOrOtherPunct = new Set([...rightPunct, ...otherPunct]);\n\nconst minusSigns = new Set(\"-﹣－\");\nconst decimalSeps = new Set(\"',.·⸱⸳﹒＇．\");\nconst digits = new Set(\"0０𝟎𝟘𝟢𝟬𝟶🯰1１𝟏𝟙𝟣𝟭𝟷🯱2２𝟐𝟚𝟤𝟮𝟸🯲3３𝟑𝟛𝟥𝟯𝟹🯳4４𝟒𝟜𝟦𝟰𝟺🯴5５𝟓𝟝𝟧𝟱𝟻🯵6６𝟔𝟞𝟨𝟲𝟼🯶7７𝟕𝟟𝟩𝟳𝟽🯷8８𝟖𝟠𝟪𝟴𝟾🯸9９𝟗𝟡𝟫𝟵𝟿🯹\");\nconst unknownOrHyphen = new Set([\"\", \"-\"]);\n\nexport function formatRomanizationText(s: string, conv: (s: string) => [string, string | null][]): string {\n\treturn s.replace(/[^\\0-\\x1f\\x80-\\x9f]+/g, m => {\n\t\tconst t: string[] = [null!];\n\t\tconst d: string[] = [null!];\n\t\tfor (const [k, v] of conv(m)) {\n\t\t\tif (v) {\n\t\t\t\tt.push(v);\n\t\t\t\td.push(null!);\n\t\t\t}\n\t\t\telse if (k.trim()) {\n\t\t\t\tt.push(punctDict.get(k) || \"\");\n\t\t\t\td.push(k);\n\t\t\t}\n\t\t}\n\t\tt.push(null!);\n\t\td.push(null!);\n\t\tlet l = \"\";\n\t\tlet b = \"\";\n\t\tfor (let i = 1; i < d.length - 1; i++) {\n\t\t\tconst p = t[i - 1];\n\t\t\tconst c = t[i];\n\t\t\tconst n = t[i + 1];\n\n\t\t\t/* eslint-disable no-inner-declarations */\n\t\t\t/* eslint-disable @typescript-eslint/no-loop-func */\n\n\t\t\tfunction between() {\n\t\t\t\tlet j = i - 1;\n\t\t\t\twhile (j && rightBracket.has(t[j])) j--;\n\n\t\t\t\tconst f = j && t[j] && t[j].length > 1;\n\t\t\t\tj = i + 1;\n\t\t\t\twhile (j < t.length - 1 && leftBracket.has(t[j])) j++;\n\n\t\t\t\tconst g = j && t[j] && t[j].length > 1;\n\t\t\t\treturn f && g;\n\t\t\t}\n\n\t\t\tfunction lSpace() {\n\t\t\t\tif (l && !leftOrOtherPunct.has(l[l.length - 1])) l += \" \";\n\t\t\t}\n\n\t\t\tfunction rSpace() {\n\t\t\t\tif (minusSigns.has(d[i + 1]) ? i < d.length - 2 && digits.has(d[i + 2]) : !rightOrOtherPunct.has(n)) l += \" \";\n\t\t\t}\n\n\t\t\t/* eslint-enable no-inner-declarations */\n\t\t\t/* eslint-enable @typescript-eslint/no-loop-func */\n\n\t\t\tif (c.length > 1) {\n\t\t\t\tlSpace();\n\t\t\t\tl += c;\n\t\t\t\trSpace();\n\t\t\t}\n\t\t\telse if (!c || (minusSigns.has(d[i]) && digits.has(d[i + 1]) && !unknownOrHyphen.has(p))) {\n\t\t\t\tif (!l.endsWith(\"[…]\")) l += \"[…]\";\n\t\t\t}\n\t\t\telse if (decimalSeps.has(d[i]) && digits.has(d[i + 1]) && digits.has(d[i - 1])) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\telse if (leftPunct.has(c)) {\n\t\t\t\tlSpace();\n\t\t\t\tl += c;\n\t\t\t\tb += leftBracketToRight.get(c);\n\t\t\t}\n\t\t\telse if (rightPunct.has(c)) {\n\t\t\t\tl += c;\n\t\t\t\trSpace();\n\t\t\t\tconst j = b.lastIndexOf(c);\n\t\t\t\tif (j !== -1) b = b.substring(0, j);\n\t\t\t}\n\t\t\telse if (c === \"-\") {\n\t\t\t\tif (p === \"-\") continue;\n\t\t\t\tif (n === \"-\" || between()) l += \" – \";\n\t\t\t\telse l += c;\n\t\t\t}\n\t\t\telse if (c === \"~\") {\n\t\t\t\tif ((p === \"~\" && n !== \"~\") || between()) l += \"~ \";\n\t\t\t\telse l += c;\n\t\t\t}\n\t\t\telse if (c === \"·\") {\n\t\t\t\tl += c;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlet j = b.length - 1;\n\t\t\t\tlet y = false;\n\t\t\t\twhile (j >= 0 && !rightBracket.has(b[j])) {\n\t\t\t\t\tif (b[j] === c) {\n\t\t\t\t\t\ty = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tj--;\n\t\t\t\t}\n\t\t\t\tif (y) {\n\t\t\t\t\tb = b.slice(0, j);\n\t\t\t\t\tl += c;\n\t\t\t\t\trSpace();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlSpace();\n\t\t\t\t\tl += c;\n\t\t\t\t\tb += c;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn l.trim().replace(/\\s+/, \" \");\n\t});\n}\n\nconst majorBreak = new Set(\".!?…\");\nconst minorBreak = new Set(\",/:;-~()[]{}\");\n\nexport function formatIPAText(s: string, conv: (s: string) => [string, string | null][]): string {\n\treturn s.replace(/[^\\0-\\x1f\\x80-\\x9f]+/g, m => {\n\t\tconst t: string[] = [];\n\t\tconst d: string[] = [];\n\t\tfor (const [k, v] of conv(m)) {\n\t\t\tif (v) {\n\t\t\t\tt.push(v);\n\t\t\t\td.push(null!);\n\t\t\t}\n\t\t\telse if (k.trim()) {\n\t\t\t\tt.push(punctDict.get(k) || \"\");\n\t\t\t\td.push(k);\n\t\t\t}\n\t\t}\n\t\td.push(null!);\n\t\tconst l: string[] = [];\n\t\tfor (let i = 0; i < t.length; i++) {\n\t\t\tconst c = t[i];\n\t\t\tif (c.length > 1) {\n\t\t\t\tl.push(c);\n\t\t\t}\n\t\t\telse if (!c || (minusSigns.has(d[i]) && digits.has(d[i + 1]) && (!i || !unknownOrHyphen.has(t[i - 1])))) {\n\t\t\t\tif (!l.length || l[l.length - 1] !== \"⸨…⸩\") l.push(\"⸨…⸩\");\n\t\t\t}\n\t\t\telse if (l.length) {\n\t\t\t\tif (decimalSeps.has(d[i]) && digits.has(d[i + 1]) && i && digits.has(d[i - 1])) continue;\n\t\t\t\tif (majorBreak.has(c)) {\n\t\t\t\t\tif (l[l.length - 1].length > 1) l.push(\"‖\");\n\t\t\t\t\telse l[l.length - 1] = \"‖\";\n\t\t\t\t}\n\t\t\t\telse if (minorBreak.has(c) && l[l.length - 1].length > 1) l.push(\"|\");\n\t\t\t}\n\t\t}\n\t\tif (l[l.length - 1].length === 1) l.pop();\n\t\tlet s = \"\";\n\t\tfor (let i = 0; i < l.length; i++) {\n\t\t\tconst c = l[i];\n\t\t\ts += c;\n\t\t\tif (i < l.length - 1) {\n\t\t\t\tconst n = l[i + 1];\n\t\t\t\tif (c !== \"⸨…⸩\" && c.length > 1 && n !== \"⸨…⸩\" && n.length > 1) s += \".\";\n\t\t\t\telse s += \" \";\n\t\t\t}\n\t\t}\n\t\treturn s;\n\t});\n}\n\n// Simple alternative to `Iterator.zip`, see https://github.com/tc39/proposal-joint-iteration\nfunction zip<T, U>(a: Iterable<T>, b: Iterable<U>) {\n\tconst result: [T, U][] = [];\n\tconst itA = a[Symbol.iterator]();\n\tconst itB = b[Symbol.iterator]();\n\tlet aResult: IteratorResult<T>;\n\tlet bResult: IteratorResult<U>;\n\twhile (!(aResult = itA.next()).done && !(bResult = itB.next()).done) {\n\t\tresult.push([aResult.value, bResult.value]);\n\t}\n\treturn result;\n}\n\nconst onset = [\"\", \"b\", \"p\", \"m\", \"f\", \"d\", \"t\", \"n\", \"l\", \"g\", \"k\", \"ng\", \"gw\", \"kw\", \"w\", \"h\", \"z\", \"c\", \"s\", \"j\"];\nconst nucleus = [\"aa\", \"a\", \"e\", \"i\", \"o\", \"u\"];\nconst rhyme = [\"oe\", \"oen\", \"oeng\", \"oet\", \"oek\", \"eoi\", \"eon\", \"eot\", \"yu\", \"yun\", \"yut\", \"m\", \"ng\"];\nconst coda = [\"\", \"i\", \"u\", \"m\", \"n\", \"ng\", \"p\", \"t\", \"k\"];\n\nexport function decodeJyutping(id: number) {\n\tconst final = ~~((id % 402) / 6);\n\treturn (\n\t\tonset[~~(id / 402)]\n\t\t+ (final >= 54 ? rhyme[final - 54] : nucleus[~~(final / 9)] + coda[final % 9])\n\t\t+ ((id % 6) + 1)\n\t);\n}\n","import data from \"./trie.txt\";\nimport { decodeJyutping } from \"./utils\";\n\ntype Node = Map<string, Node> & { v?: string[]; m?: WeakMap<Trie, string[] | null | undefined> };\n\nconst root: Node = new Map();\n\nlet s = Array.from(data);\nlet n = [root];\nlet l = [0];\nfor (let i = 1; n.length;) {\n\tlet p = n[n.length - 1];\n\tlet d = l[l.length - 1];\n\twhile (s[i].codePointAt(0)! >= 256) {\n\t\tconst u = new Map();\n\t\tp.set(s[i++], u);\n\t\tp = u;\n\t\td++;\n\t}\n\tconst v: string[] = [];\n\twhile (s[i].codePointAt(0)! < 123) {\n\t\tconst w: string[] = [];\n\t\tfor (let c = 0; c < d;) {\n\t\t\tw.push(decodeJyutping((s[i++].charCodeAt(0) - 33) * 90 + (s[i++].charCodeAt(0) - 33)));\n\t\t\tif (s[i] === \"~\") i++;\n\t\t\telse c++;\n\t\t}\n\t\tv.push(w.join(\" \"));\n\t}\n\tif (v.length) p.v = v;\n\tif (s[i] === \"{\") {\n\t\ti++;\n\t\tn.push(p);\n\t\tl.push(d);\n\t}\n\telse if (s[i] === \"}\") {\n\t\ti++;\n\t\tn.pop();\n\t\tl.pop();\n\t}\n}\n// Release memory\nn = undefined!;\nl = undefined!;\ns = undefined!;\n\nexport class Trie {\n\tget(s: string) {\n\t\tconst r: [string, string | null][] = [];\n\t\tfor (let a = Array.from(s), i = 0; i < a.length;) {\n\t\t\tlet t = root,\n\t\t\t\tc = \"\",\n\t\t\t\tk = i;\n\t\t\tfor (let j = i; j < a.length; j++) {\n\t\t\t\tconst u = t.get(a[j]);\n\t\t\t\tif (!u) break;\n\t\t\t\tconst v = this.getValue(t = u);\n\t\t\t\tif (v) {\n\t\t\t\t\tc = v[0];\n\t\t\t\t\tk = j;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (k === i) r.push([a[i++], c || null]);\n\t\t\telse for (const d = c.split(\" \"), n = i; i <= k; i++) r.push([a[i], d[i - n]]);\n\t\t}\n\t\treturn r;\n\t}\n\n\tgetAll(s: string): [string, string[]][] {\n\t\tconst t = root;\n\t\tconst r: [string, string[][]][] = Array.from(s, c => {\n\t\t\tconst u = t.get(c);\n\t\t\tconst v = u && this.getValue(u);\n\t\t\treturn [c, v ? [v] : []];\n\t\t});\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tlet u = t.get(r[i][0]);\n\t\t\tif (!u) continue;\n\t\t\tfor (let j = i + 1; j < r.length; j++) {\n\t\t\t\tu = u.get(r[j][0]);\n\t\t\t\tif (!u) break;\n\t\t\t\tconst v = this.getValue(u);\n\t\t\t\tif (v) {\n\t\t\t\t\tconst l = j - i;\n\t\t\t\t\tfor (const p of v) {\n\t\t\t\t\t\tfor (let d = p.split(\" \"), k = i; k <= j; k++) {\n\t\t\t\t\t\t\tconst s = r[k][1];\n\t\t\t\t\t\t\tif (l in s) s[l].push(d[k - i]);\n\t\t\t\t\t\t\telse s[l] = [d[k - i]];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn r.map(([c, s]) => [c, Array.from(new Set(s.reverse().flat()))]);\n\t}\n\n\tgetValue(n: Node): string[] | null | undefined {\n\t\treturn n.v;\n\t}\n}\n\nexport class CustomizableTrie extends Trie {\n\t#parent: Trie;\n\n\tconstructor(parent: Trie) {\n\t\tsuper();\n\t\tthis.#parent = parent;\n\t}\n\n\tcustomize(k: string, v: string[] | null | undefined) {\n\t\t(Array.from(k).reduce((t, c) => {\n\t\t\tlet u = t.get(c);\n\t\t\tif (!u) t.set(c, u = new Map());\n\t\t\treturn u;\n\t\t}, root).m ??= new WeakMap()).set(this, v);\n\t}\n\n\toverride getValue(n: Node) {\n\t\t// return n.m?.get(this) ?? this.#parent.getValue(n);\n\t\t// Fast path if `n.m` isn't defined\n\t\t// The use of `has` and ternary operators are intentional to test if a user\n\t\t// explicitly disallow the entry by setting the value to `null` or `undefined`\n\t\treturn n.m ? (n.m.has(this) ? n.m.get(this) : this.#parent.getValue(n)) : n.v;\n\t}\n}\n","// ESLint Bug?\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\n\nimport { Trie, CustomizableTrie } from \"./Trie\";\nimport { formatIPAText, formatRomanizationText } from \"./utils\";\n\nclass JyutpingConverter {\n\t#t: Trie;\n\n\tconstructor(t: Trie) {\n\t\tthis.#t = t;\n\t}\n\n\t#getJyutpingList?: (s: string) => [string, string | null][];\n\tget getJyutpingList() {\n\t\treturn (this.#getJyutpingList ||= s => this.#t.get(s));\n\t}\n\n\t#getJyutping?: (s: string) => string;\n\tget getJyutping() {\n\t\treturn (this.#getJyutping ||= s =>\n\t\t\tthis.#t\n\t\t\t\t.get(s)\n\t\t\t\t.map(([k, v]) => k + (v ? `(${v})` : \"\"))\n\t\t\t\t.join(\"\"));\n\t}\n\n\t#getJyutpingText?: (s: string) => string;\n\tget getJyutpingText() {\n\t\treturn (this.#getJyutpingText ||= s => formatRomanizationText(s, this.getJyutpingList));\n\t}\n\n\t#getJyutpingCandidates?: (s: string) => [string, string[]][];\n\tget getJyutpingCandidates() {\n\t\treturn (this.#getJyutpingCandidates ||= s => this.#t.getAll(s));\n\t}\n\n\t#getIPAList?: (s: string) => [string, string | null][];\n\tget getIPAList() {\n\t\treturn (this.#getIPAList ||= s => this.#t.get(s).map(a => ((a[1] &&= jyutpingToIPA(a[1])), a)));\n\t}\n\n\t#getIPA?: (s: string) => string;\n\tget getIPA() {\n\t\treturn (this.#getIPA ||= s =>\n\t\t\tthis.#t\n\t\t\t\t.get(s)\n\t\t\t\t.map(([k, v]) => k + (v ? `[${jyutpingToIPA(v)}]` : \"\"))\n\t\t\t\t.join(\"\"));\n\t}\n\n\t#getIPAText?: (s: string) => string;\n\tget getIPAText() {\n\t\treturn (this.#getIPAText ||= s => formatIPAText(s, this.getIPAList));\n\t}\n\n\t#getIPACandidates?: (s: string) => [string, string[]][];\n\tget getIPACandidates() {\n\t\treturn (this.#getIPACandidates ||= s => this.#t.getAll(s).map(a => ((a[1] = a[1].map(jyutpingToIPA)), a)));\n\t}\n\n\t#customize?: (entries: Map<string, string[] | string | null | undefined> | Record<string, string[] | string | null | undefined>) => JyutpingConverter;\n\tget customize() {\n\t\treturn (this.#customize ||= entries => {\n\t\t\tconst t = new CustomizableTrie(this.#t);\n\t\t\tconst converter = new JyutpingConverter(t);\n\t\t\tfor (const [k, v] of entries instanceof Map ? entries : Object.entries(entries)) {\n\t\t\t\tt.customize(k, typeof v === \"string\" ? [v] : v);\n\t\t\t}\n\t\t\treturn converter;\n\t\t});\n\t}\n\n\t/** This method exists purely due to compatibility. It is the same across all `JyutpingConverter` instances. */\n\treadonly jyutpingToIPA = jyutpingToIPA;\n}\n\nconst ToJyutping = new JyutpingConverter(new Trie());\n\nexport default ToJyutping;\n\nexport const {\n\tgetJyutpingList,\n\tgetJyutping,\n\tgetJyutpingText,\n\tgetJyutpingCandidates,\n\tgetIPAList,\n\tgetIPA,\n\tgetIPAText,\n\tgetIPACandidates,\n\tcustomize,\n} = ToJyutping;\n\ntype StringRecord = Record<string, string>;\n\nconst onset: StringRecord = {\n\tb: \"p\",\n\tp: \"pʰ\",\n\tm: \"m\",\n\tf: \"f\",\n\td: \"t\",\n\tt: \"tʰ\",\n\tn: \"n\",\n\tl: \"l\",\n\tg: \"k\",\n\tk: \"kʰ\",\n\tng: \"ŋ\",\n\tgw: \"kʷ\",\n\tkw: \"kʷʰ\",\n\tw: \"w\",\n\th: \"h\",\n\tz: \"t͡s\",\n\tc: \"t͡sʰ\",\n\ts: \"s\",\n\tj: \"j\",\n};\n\nconst nucleus: StringRecord = {\n\taa: \"aː\",\n\ta: \"ɐ\",\n\te: \"ɛː\",\n\ti: \"iː\",\n\to: \"ɔː\",\n\tu: \"uː\",\n\toe: \"œː\",\n\teo: \"ɵ\",\n\tyu: \"yː\",\n};\n\nconst rhyme: StringRecord = {\n\tei: \"ei̯\",\n\ting: \"eŋ\",\n\tik: \"ek̚\",\n\tou: \"ou̯\",\n\tung: \"oŋ\",\n\tuk: \"ok̚\",\n\teoi: \"ɵy̑\",\n\tm: \"m̩\",\n\tng: \"ŋ̍\",\n};\n\nconst coda: StringRecord = {\n\ti: \"i̯\",\n\tu: \"u̯\",\n\tm: \"m\",\n\tn: \"n\",\n\tng: \"ŋ\",\n\tp: \"p̚\",\n\tt: \"t̚\",\n\tk: \"k̚\",\n};\n\nconst tone: StringRecord = {\n\t1: \"˥\",\n\t2: \"˧˥\",\n\t3: \"˧\",\n\t4: \"˨˩\",\n\t5: \"˩˧\",\n\t6: \"˨\",\n};\n\nconst regex = /^([gk]w?|ng|[bpmfdtnlhwzcsj]?)(?![1-6]?$)((aa?|oe?|eo?|y?u|i?)(ng|[iumnptk]?))([1-6]?)$/;\n\nexport function jyutpingToIPA(s: string) {\n\treturn s\n\t\t.toLowerCase()\n\t\t.split(/\\W+/)\n\t\t.map(t => {\n\t\t\tconst [, initial, final, vowel, terminal, number] = regex.exec(t) || [];\n\t\t\treturn (\n\t\t\t\t(initial && onset[initial])\n\t\t\t\t+ (final in rhyme ? rhyme[final] : (vowel && nucleus[vowel]) + (terminal && coda[terminal]))\n\t\t\t\t+ (number && tone[number])\n\t\t\t);\n\t\t})\n\t\t.join(\".\");\n}\n"],"names":["punctDict","Map","zip","leftBracket","Set","rightBracket","leftBracketToRight","leftPunct","rightPunct","otherPunct","leftOrOtherPunct","rightOrOtherPunct","minusSigns","decimalSeps","digits","unknownOrHyphen","majorBreak","minorBreak","a","b","result","itA","Symbol","iterator","itB","aResult","bResult","next","done","push","value","onset","nucleus","rhyme","coda","decodeJyutping","id","final","root","s","Array","from","n","l","i","length","p","d","codePointAt","u","set","v","w","c","charCodeAt","join","pop","undefined","Trie","get","r","t","k","j","this","getValue","split","getAll","map","reverse","flat","CustomizableTrie","parent","constructor","super","customize","reduce","m","WeakMap","has","JyutpingConverter","getJyutpingList","getJyutping","getJyutpingText","conv","replace","trim","between","f","g","lSpace","rSpace","endsWith","lastIndexOf","substring","y","slice","formatRomanizationText","getJyutpingCandidates","getIPAList","jyutpingToIPA","getIPA","getIPAText","formatIPAText","getIPACandidates","entries","converter","Object","ToJyutping","ng","gw","kw","h","z","aa","e","o","oe","eo","yu","ei","ing","ik","ou","ung","uk","eoi","tone","regex","toLowerCase","initial","vowel","terminal","number","exec"],"mappings":"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"}