@extable/sequence 0.2.0 → 0.3.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.
- package/dist/builtins.d.ts +3 -0
- package/dist/index.js +513 -376
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/registry.ts","../src/builtins.ts","../src/sequence.ts","../src/infer.ts"],"sourcesContent":["export type SequenceListMode = 'cycle' | 'finite';\n\nexport type SequenceList = {\n id: string;\n mode: SequenceListMode;\n langs: readonly string[];\n items: readonly string[];\n aliases?: Record<string, string>;\n};\n\nexport type SequenceMatch = {\n id: string;\n langs?: readonly string[];\n match(seed: readonly string[]):\n | { score: number; startIndex?: number; step?: number; state?: unknown }\n | null;\n createIterator(\n seed: readonly string[],\n ctx: { step: number; state?: unknown }\n ): Iterator<string>;\n};\n\nexport type RegistryQuery = {\n enabledIds?: readonly string[];\n queryText?: string;\n};\n\nexport type SequenceMatchResult =\n | {\n kind: 'list';\n list: SequenceList;\n startIndex: number;\n step: number;\n }\n | {\n kind: 'matcher';\n matcher: SequenceMatch;\n step: number;\n state?: unknown;\n };\n\nconst fallbackLang = 'en';\n\nconst normalizeQueryToken = (value: string): string => {\n return value.trim().normalize('NFKC').toLowerCase().replace(/\\s+/g, ' ');\n};\n\nconst normalizeLangs = (langs?: readonly string[]): readonly string[] => {\n const result: string[] = [];\n if (langs) {\n for (const lang of langs) {\n const normalized = lang.trim();\n if (!normalized || result.includes(normalized)) {\n continue;\n }\n result.push(normalized);\n }\n }\n if (result.length === 0) {\n result.push(fallbackLang);\n } else if (!result.includes(fallbackLang)) {\n result.push(fallbackLang);\n }\n return result;\n};\n\nconst resolveIndex = (list: SequenceList, token: string): number | null => {\n const directIndex = list.items.indexOf(token);\n if (directIndex !== -1) {\n return directIndex;\n }\n if (!list.aliases) {\n return null;\n }\n const canonical = list.aliases[token];\n if (!canonical) {\n return null;\n }\n const canonicalIndex = list.items.indexOf(canonical);\n return canonicalIndex === -1 ? null : canonicalIndex;\n};\n\nconst hasQueryHit = (list: SequenceList, queryText: string): boolean => {\n const normalizedQuery = normalizeQueryToken(queryText);\n if (normalizeQueryToken(list.id).includes(normalizedQuery)) {\n return true;\n }\n for (const item of list.items) {\n if (normalizeQueryToken(item).includes(normalizedQuery)) {\n return true;\n }\n }\n if (!list.aliases) {\n return false;\n }\n return Object.keys(list.aliases).some((alias) =>\n normalizeQueryToken(alias).includes(normalizedQuery)\n );\n};\n\nconst langsRank = (list: SequenceList, langs: readonly string[]): number => {\n if (list.langs.length === 0) {\n return 0;\n }\n let best = Number.POSITIVE_INFINITY;\n for (const lang of list.langs) {\n const index = langs.indexOf(lang);\n if (index !== -1 && index < best) {\n best = index;\n }\n }\n return best;\n};\n\nconst matcherLangsAllowed = (matcher: SequenceMatch, langs: readonly string[]): boolean => {\n if (!matcher.langs || matcher.langs.length === 0) {\n return true;\n }\n return matcher.langs.some((lang) => langs.includes(lang));\n};\n\nexport class SequenceRegistry {\n readonly langs: readonly string[];\n\n private lists: SequenceList[] = [];\n private matchers: SequenceMatch[] = [];\n\n constructor(opts?: { langs?: readonly string[] }) {\n this.langs = normalizeLangs(opts?.langs);\n }\n\n register(list: SequenceList): void {\n const index = this.lists.findIndex((item) => item.id === list.id);\n if (index === -1) {\n this.lists.push(list);\n } else {\n this.lists[index] = list;\n }\n }\n\n registerMatch(matcher: SequenceMatch): void {\n const index = this.matchers.findIndex((item) => item.id === matcher.id);\n if (index === -1) {\n this.matchers.push(matcher);\n } else {\n this.matchers[index] = matcher;\n }\n }\n\n unregister(id: string): void {\n this.lists = this.lists.filter((item) => item.id !== id);\n this.matchers = this.matchers.filter((item) => item.id !== id);\n }\n\n list(query?: RegistryQuery): SequenceList[] {\n let lists = [...this.lists];\n if (query?.enabledIds && query.enabledIds.length > 0) {\n const enabled = new Set(query.enabledIds);\n lists = lists.filter((list) => enabled.has(list.id));\n }\n const queryText = query?.queryText;\n if (queryText) {\n lists = lists.filter((list) => hasQueryHit(list, queryText));\n }\n return lists;\n }\n\n match(seed: readonly string[], query?: RegistryQuery): SequenceMatchResult | null {\n if (seed.length === 0) {\n return null;\n }\n let bestMatch: SequenceMatchResult | null = null;\n let bestScore = Number.NEGATIVE_INFINITY;\n\n const enabledIds = query?.enabledIds ? new Set(query.enabledIds) : null;\n for (const matcher of this.matchers) {\n if (enabledIds && !enabledIds.has(matcher.id)) {\n continue;\n }\n if (!matcherLangsAllowed(matcher, this.langs)) {\n continue;\n }\n const matched = matcher.match(seed);\n if (!matched) {\n continue;\n }\n const score = matched.score;\n if (!Number.isFinite(score)) {\n continue;\n }\n if (score > bestScore) {\n bestScore = score;\n bestMatch = {\n kind: 'matcher',\n matcher,\n step: matched.step ?? 1,\n state: matched.state\n };\n }\n }\n\n const candidates = this.list(query)\n .map((list) => ({ list, rank: langsRank(list, this.langs) }))\n .filter((candidate) => Number.isFinite(candidate.rank))\n .sort((a, b) => a.rank - b.rank);\n\n for (const { list, rank } of candidates) {\n const indices: number[] = [];\n let matchFailed = false;\n for (const token of seed) {\n const index = resolveIndex(list, token);\n if (index === null) {\n matchFailed = true;\n break;\n }\n indices.push(index);\n }\n if (matchFailed) {\n continue;\n }\n const step = this.inferStep(list, indices);\n if (step === null) {\n continue;\n }\n const listScore = 10 - rank;\n if (listScore > bestScore) {\n bestScore = listScore;\n bestMatch = {\n kind: 'list',\n list,\n startIndex: indices[indices.length - 1] ?? 0,\n step\n };\n }\n }\n\n return bestMatch;\n }\n\n private inferStep(list: SequenceList, indices: number[]): number | null {\n if (indices.length < 2) {\n return 1;\n }\n const length = list.items.length;\n const baseStep = this.stepBetween(list.mode, length, indices[0]!, indices[1]!);\n if (baseStep === null) {\n return null;\n }\n for (let i = 2; i < indices.length; i += 1) {\n const expected = this.nextIndex(list.mode, length, indices[i - 1]!, baseStep);\n if (expected === null || expected !== indices[i]) {\n return null;\n }\n }\n return baseStep;\n }\n\n private stepBetween(\n mode: SequenceListMode,\n length: number,\n from: number,\n to: number\n ): number | null {\n if (mode === 'cycle') {\n const step = (to - from + length) % length;\n return step;\n }\n const step = to - from;\n if (step < 0) {\n return null;\n }\n return step;\n }\n\n private nextIndex(\n mode: SequenceListMode,\n length: number,\n from: number,\n step: number\n ): number | null {\n if (mode === 'cycle') {\n return (from + step) % length;\n }\n const next = from + step;\n if (next >= length) {\n return null;\n }\n return next;\n }\n}\n","import type { SequenceList, SequenceMatch } from './registry';\nimport { SequenceRegistry } from './registry';\n\nconst weekdaysEnLong: SequenceList = {\n id: 'weekdays-en-long',\n mode: 'cycle',\n langs: ['en'],\n items: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']\n};\n\nconst weekdaysEnShort: SequenceList = {\n id: 'weekdays-en-short',\n mode: 'cycle',\n langs: ['en'],\n items: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\n aliases: {\n Tues: 'Tue',\n Thur: 'Thu',\n Thurs: 'Thu'\n }\n};\n\nconst weekdaysJaLong: SequenceList = {\n id: 'weekdays-ja-long',\n mode: 'cycle',\n langs: ['ja'],\n items: ['月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日', '日曜日']\n};\n\nconst weekdaysJaShort: SequenceList = {\n id: 'weekdays-ja-short',\n mode: 'cycle',\n langs: ['ja'],\n items: ['月曜', '火曜', '水曜', '木曜', '金曜', '土曜', '日曜']\n};\n\nconst weekdaysJaSingle: SequenceList = {\n id: 'weekdays-ja-single',\n mode: 'cycle',\n langs: ['ja'],\n items: ['月', '火', '水', '木', '金', '土', '日']\n};\n\nconst monthsEnLong: SequenceList = {\n id: 'months-en-long',\n mode: 'cycle',\n langs: ['en'],\n items: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n};\n\nconst monthsEnShort: SequenceList = {\n id: 'months-en-short',\n mode: 'cycle',\n langs: ['en'],\n items: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n aliases: {\n Sept: 'Sep'\n }\n};\n\nconst monthsJa: SequenceList = {\n id: 'months-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']\n};\n\nconst monthsJaTraditional: SequenceList = {\n id: 'months-ja-traditional',\n mode: 'cycle',\n langs: ['ja'],\n items: ['睦月', '如月', '弥生', '卯月', '皐月', '水無月', '文月', '葉月', '長月', '神無月', '霜月', '師走']\n};\n\nconst quartersEn: SequenceList = {\n id: 'quarters-en',\n mode: 'cycle',\n langs: ['en'],\n items: ['Q1', 'Q2', 'Q3', 'Q4']\n};\n\nconst quartersJa: SequenceList = {\n id: 'quarters-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['第1四半期', '第2四半期', '第3四半期', '第4四半期']\n};\n\nconst zodiacAnimals: SequenceList = {\n id: 'zodiac-animals-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']\n};\n\nconst zodiacSignsEn: SequenceList = {\n id: 'zodiac-signs-en',\n mode: 'cycle',\n langs: ['en'],\n items: [\n 'Aries',\n 'Taurus',\n 'Gemini',\n 'Cancer',\n 'Leo',\n 'Virgo',\n 'Libra',\n 'Scorpio',\n 'Sagittarius',\n 'Capricorn',\n 'Aquarius',\n 'Pisces'\n ]\n};\n\nconst zodiacSignsJa: SequenceList = {\n id: 'zodiac-signs-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['牡羊座', '牡牛座', '双子座', '蟹座', '獅子座', '乙女座', '天秤座', '蠍座', '射手座', '山羊座', '水瓶座', '魚座'],\n aliases: {\n さそり座: '蠍座'\n }\n};\n\nconst directions16En: SequenceList = {\n id: 'directions-16-en',\n mode: 'cycle',\n langs: ['en'],\n items: [\n 'North',\n 'North-Northeast',\n 'Northeast',\n 'East-Northeast',\n 'East',\n 'East-Southeast',\n 'Southeast',\n 'South-Southeast',\n 'South',\n 'South-Southwest',\n 'Southwest',\n 'West-Southwest',\n 'West',\n 'West-Northwest',\n 'Northwest',\n 'North-Northwest'\n ]\n};\n\nconst directions16Ja: SequenceList = {\n id: 'directions-16-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: [\n '北',\n '北北東',\n '北東',\n '東北東',\n '東',\n '東南東',\n '南東',\n '南南東',\n '南',\n '南南西',\n '南西',\n '西南西',\n '西',\n '西北西',\n '北西',\n '北北西'\n ]\n};\n\nconst ampmEn: SequenceList = {\n id: 'ampm-en',\n mode: 'cycle',\n langs: ['en'],\n items: ['AM', 'PM'],\n aliases: {\n 'A.M.': 'AM',\n 'P.M.': 'PM'\n }\n};\n\nconst ampmJa: SequenceList = {\n id: 'ampm-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['午前', '午後']\n};\n\nconst seasonsEn: SequenceList = {\n id: 'seasons-en',\n mode: 'cycle',\n langs: ['en'],\n items: ['Spring', 'Summer', 'Autumn', 'Winter'],\n aliases: {\n Fall: 'Autumn'\n }\n};\n\nconst seasonsJa: SequenceList = {\n id: 'seasons-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['春', '夏', '秋', '冬']\n};\n\nconst solfegeJa: SequenceList = {\n id: 'solfege-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['ド', 'レ', 'ミ', 'ファ', 'ソ', 'ラ', 'シ']\n};\n\nconst solfegeEn: SequenceList = {\n id: 'solfege-en',\n mode: 'cycle',\n langs: ['en'],\n items: ['Do', 'Re', 'Mi', 'Fa', 'Sol', 'La', 'Ti'],\n aliases: {\n So: 'Sol',\n Si: 'Ti'\n }\n};\n\nconst greekLettersEn: SequenceList = {\n id: 'greek-letters-en',\n mode: 'cycle',\n langs: ['en'],\n items: [\n 'Alpha',\n 'Beta',\n 'Gamma',\n 'Delta',\n 'Epsilon',\n 'Zeta',\n 'Eta',\n 'Theta',\n 'Iota',\n 'Kappa',\n 'Lambda',\n 'Mu',\n 'Nu',\n 'Xi',\n 'Omicron',\n 'Pi',\n 'Rho',\n 'Sigma',\n 'Tau',\n 'Upsilon',\n 'Phi',\n 'Chi',\n 'Psi',\n 'Omega'\n ]\n};\n\nconst greekLettersJa: SequenceList = {\n id: 'greek-letters-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: [\n 'アルファ',\n 'ベータ',\n 'ガンマ',\n 'デルタ',\n 'イプシロン',\n 'ゼータ',\n 'イータ',\n 'シータ',\n 'イオタ',\n 'カッパ',\n 'ラムダ',\n 'ミュー',\n 'ニュー',\n 'クサイ',\n 'オミクロン',\n 'パイ',\n 'ロー',\n 'シグマ',\n 'タウ',\n 'ウプシロン',\n 'ファイ',\n 'カイ',\n 'プサイ',\n 'オメガ'\n ]\n};\n\nconst greekLettersSymbols: SequenceList = {\n id: 'greek-letters-symbols',\n mode: 'cycle',\n langs: ['en', 'ja'],\n items: [\n 'α',\n 'β',\n 'γ',\n 'δ',\n 'ε',\n 'ζ',\n 'η',\n 'θ',\n 'ι',\n 'κ',\n 'λ',\n 'μ',\n 'ν',\n 'ξ',\n 'ο',\n 'π',\n 'ρ',\n 'σ',\n 'τ',\n 'υ',\n 'φ',\n 'χ',\n 'ψ',\n 'ω'\n ],\n aliases: {\n 'ς': 'σ'\n }\n};\n\nconst rokuyo: SequenceList = {\n id: 'rokuyo-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['先勝', '友引', '先負', '仏滅', '大安', '赤口']\n};\n\nconst heavenlyStems: SequenceList = {\n id: 'heavenly-stems-ja',\n mode: 'finite',\n langs: ['ja'],\n items: ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']\n};\n\nconst planetsEn: SequenceList = {\n id: 'planets-en',\n mode: 'finite',\n langs: ['en'],\n items: ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']\n};\n\nconst planetsJa: SequenceList = {\n id: 'planets-ja',\n mode: 'finite',\n langs: ['ja'],\n items: ['水星', '金星', '地球', '火星', '木星', '土星', '天王星', '海王星']\n};\n\nconst kujiIn: SequenceList = {\n id: 'kuji-in-ja',\n mode: 'finite',\n langs: ['ja'],\n items: ['臨', '兵', '闘', '者', '皆', '陣', '烈', '在', '前']\n};\n\nconst eightVirtues: SequenceList = {\n id: 'eight-virtues-ja',\n mode: 'finite',\n langs: ['ja'],\n items: ['仁', '義', '礼', '智', '忠', '信', '孝', '悌']\n};\n\nconst elementSymbols: SequenceList = {\n id: 'element-symbols',\n mode: 'finite',\n langs: ['ja', 'en'],\n items: [\n 'H',\n 'He',\n 'Li',\n 'Be',\n 'B',\n 'C',\n 'N',\n 'O',\n 'F',\n 'Ne',\n 'Na',\n 'Mg',\n 'Al',\n 'Si',\n 'P',\n 'S',\n 'Cl',\n 'Ar',\n 'K',\n 'Ca',\n 'Sc',\n 'Ti',\n 'V',\n 'Cr',\n 'Mn',\n 'Fe',\n 'Co',\n 'Ni',\n 'Cu',\n 'Zn',\n 'Ga',\n 'Ge',\n 'As',\n 'Se',\n 'Br',\n 'Kr',\n 'Rb',\n 'Sr',\n 'Y',\n 'Zr',\n 'Nb',\n 'Mo',\n 'Tc',\n 'Ru',\n 'Rh',\n 'Pd',\n 'Ag',\n 'Cd',\n 'In',\n 'Sn',\n 'Sb',\n 'Te',\n 'I',\n 'Xe',\n 'Cs',\n 'Ba',\n 'La',\n 'Ce',\n 'Pr',\n 'Nd',\n 'Pm',\n 'Sm',\n 'Eu',\n 'Gd',\n 'Tb',\n 'Dy',\n 'Ho',\n 'Er',\n 'Tm',\n 'Yb',\n 'Lu',\n 'Hf',\n 'Ta',\n 'W',\n 'Re',\n 'Os',\n 'Ir',\n 'Pt',\n 'Au',\n 'Hg',\n 'Tl',\n 'Pb',\n 'Bi',\n 'Po',\n 'At',\n 'Rn',\n 'Fr',\n 'Ra',\n 'Ac',\n 'Th',\n 'Pa',\n 'U',\n 'Np',\n 'Pu',\n 'Am',\n 'Cm',\n 'Bk',\n 'Cf',\n 'Es',\n 'Fm',\n 'Md',\n 'No',\n 'Lr',\n 'Rf',\n 'Db',\n 'Sg',\n 'Bh',\n 'Hs',\n 'Mt',\n 'Ds',\n 'Rg',\n 'Cn',\n 'Nh',\n 'Fl',\n 'Mc',\n 'Lv',\n 'Ts',\n 'Og'\n ]\n};\n\nconst elementNamesJa: SequenceList = {\n id: 'element-names-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '水素',\n 'ヘリウム',\n 'リチウム',\n 'ベリリウム',\n 'ホウ素',\n '炭素',\n '窒素',\n '酸素',\n 'フッ素',\n 'ネオン',\n 'ナトリウム',\n 'マグネシウム',\n 'アルミニウム',\n 'ケイ素',\n 'リン',\n '硫黄',\n '塩素',\n 'アルゴン',\n 'カリウム',\n 'カルシウム',\n 'スカンジウム',\n 'チタン',\n 'バナジウム',\n 'クロム',\n 'マンガン',\n '鉄',\n 'コバルト',\n 'ニッケル',\n '銅',\n '亜鉛',\n 'ガリウム',\n 'ゲルマニウム',\n 'ヒ素',\n 'セレン',\n '臭素',\n 'クリプトン',\n 'ルビジウム',\n 'ストロンチウム',\n 'イットリウム',\n 'ジルコニウム',\n 'ニオブ',\n 'モリブデン',\n 'テクネチウム',\n 'ルテニウム',\n 'ロジウム',\n 'パラジウム',\n '銀',\n 'カドミウム',\n 'インジウム',\n 'スズ',\n 'アンチモン',\n 'テルル',\n 'ヨウ素',\n 'キセノン',\n 'セシウム',\n 'バリウム',\n 'ランタン',\n 'セリウム',\n 'プラセオジム',\n 'ネオジム',\n 'プロメチウム',\n 'サマリウム',\n 'ユウロピウム',\n 'ガドリニウム',\n 'テルビウム',\n 'ジスプロシウム',\n 'ホルミウム',\n 'エルビウム',\n 'ツリウム',\n 'イッテルビウム',\n 'ルテチウム',\n 'ハフニウム',\n 'タンタル',\n 'タングステン',\n 'レニウム',\n 'オスミウム',\n 'イリジウム',\n '白金',\n '金',\n '水銀',\n 'タリウム',\n '鉛',\n 'ビスマス',\n 'ポロニウム',\n 'アスタチン',\n 'ラドン',\n 'フランシウム',\n 'ラジウム',\n 'アクチニウム',\n 'トリウム',\n 'プロトアクチニウム',\n 'ウラン',\n 'ネプツニウム',\n 'プルトニウム',\n 'アメリシウム',\n 'キュリウム',\n 'バークリウム',\n 'カリホルニウム',\n 'アインスタイニウム',\n 'フェルミウム',\n 'メンデレビウム',\n 'ノーベリウム',\n 'ローレンシウム',\n 'ラザホージウム',\n 'ドブニウム',\n 'シーボーギウム',\n 'ボーリウム',\n 'ハッシウム',\n 'マイトネリウム',\n 'ダームスタチウム',\n 'レントゲニウム',\n 'コペルニシウム',\n 'ニホニウム',\n 'フレロビウム',\n 'モスコビウム',\n 'リバモリウム',\n 'テネシン',\n 'オガネソン'\n ]\n};\n\nconst shogunsKamakura: SequenceList = {\n id: 'shoguns-kamakura-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '源頼朝',\n '源頼家',\n '源実朝',\n '九条頼経',\n '九条頼嗣',\n '宗尊親王',\n '惟康親王',\n '久明親王',\n '守邦親王'\n ]\n};\n\nconst shogunsAshikaga: SequenceList = {\n id: 'shoguns-ashikaga-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '足利尊氏',\n '足利義詮',\n '足利義満',\n '足利義持',\n '足利義量',\n '足利義教',\n '足利義勝',\n '足利義政',\n '足利義尚',\n '足利義稙',\n '足利義澄',\n '足利義晴',\n '足利義輝',\n '足利義栄',\n '足利義昭'\n ]\n};\n\nconst shogunsAshikagaGiven: SequenceList = {\n id: 'shoguns-ashikaga-given-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '尊氏',\n '義詮',\n '義満',\n '義持',\n '義量',\n '義教',\n '義勝',\n '義政',\n '義尚',\n '義稙',\n '義澄',\n '義晴',\n '義輝',\n '義栄',\n '義昭'\n ]\n};\n\nconst shogunsTokugawa: SequenceList = {\n id: 'shoguns-tokugawa-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '徳川家康',\n '徳川秀忠',\n '徳川家光',\n '徳川家綱',\n '徳川綱吉',\n '徳川家宣',\n '徳川家継',\n '徳川吉宗',\n '徳川家重',\n '徳川家治',\n '徳川家斉',\n '徳川家慶',\n '徳川家定',\n '徳川家茂',\n '徳川慶喜'\n ]\n};\n\nconst shogunsTokugawaGiven: SequenceList = {\n id: 'shoguns-tokugawa-given-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '家康',\n '秀忠',\n '家光',\n '家綱',\n '綱吉',\n '家宣',\n '家継',\n '吉宗',\n '家重',\n '家治',\n '家斉',\n '家慶',\n '家定',\n '家茂',\n '慶喜'\n ]\n};\n\nconst prefectureItems: string[] = [\n '北海道',\n '青森県',\n '岩手県',\n '宮城県',\n '秋田県',\n '山形県',\n '福島県',\n '茨城県',\n '栃木県',\n '群馬県',\n '埼玉県',\n '千葉県',\n '東京都',\n '神奈川県',\n '新潟県',\n '富山県',\n '石川県',\n '福井県',\n '山梨県',\n '長野県',\n '岐阜県',\n '静岡県',\n '愛知県',\n '三重県',\n '滋賀県',\n '京都府',\n '大阪府',\n '兵庫県',\n '奈良県',\n '和歌山県',\n '鳥取県',\n '島根県',\n '岡山県',\n '広島県',\n '山口県',\n '徳島県',\n '香川県',\n '愛媛県',\n '高知県',\n '福岡県',\n '佐賀県',\n '長崎県',\n '熊本県',\n '大分県',\n '宮崎県',\n '鹿児島県',\n '沖縄県'\n];\n\nconst prefectureAliases: Record<string, string> = prefectureItems.reduce(\n (aliases, item) => {\n if (item === '北海道') {\n return aliases;\n }\n if (/[都府県]$/.test(item)) {\n const alias = item.slice(0, -1);\n aliases[alias] = item;\n }\n return aliases;\n },\n {} as Record<string, string>\n);\n\nconst prefecturesJa: SequenceList = {\n id: 'prefectures-ja',\n mode: 'finite',\n langs: ['ja'],\n items: prefectureItems,\n aliases: prefectureAliases\n};\n\nconst usStates: SequenceList = {\n id: 'us-states-en',\n mode: 'finite',\n langs: ['en'],\n items: [\n 'Alabama',\n 'Alaska',\n 'Arizona',\n 'Arkansas',\n 'California',\n 'Colorado',\n 'Connecticut',\n 'Delaware',\n 'Florida',\n 'Georgia',\n 'Hawaii',\n 'Idaho',\n 'Illinois',\n 'Indiana',\n 'Iowa',\n 'Kansas',\n 'Kentucky',\n 'Louisiana',\n 'Maine',\n 'Maryland',\n 'Massachusetts',\n 'Michigan',\n 'Minnesota',\n 'Mississippi',\n 'Missouri',\n 'Montana',\n 'Nebraska',\n 'Nevada',\n 'New Hampshire',\n 'New Jersey',\n 'New Mexico',\n 'New York',\n 'North Carolina',\n 'North Dakota',\n 'Ohio',\n 'Oklahoma',\n 'Oregon',\n 'Pennsylvania',\n 'Rhode Island',\n 'South Carolina',\n 'South Dakota',\n 'Tennessee',\n 'Texas',\n 'Utah',\n 'Vermont',\n 'Virginia',\n 'Washington',\n 'West Virginia',\n 'Wisconsin',\n 'Wyoming'\n ]\n};\n\nconst usStateAbbreviations: SequenceList = {\n id: 'us-states-abbrev-en',\n mode: 'finite',\n langs: ['en'],\n items: [\n 'AL',\n 'AK',\n 'AZ',\n 'AR',\n 'CA',\n 'CO',\n 'CT',\n 'DE',\n 'FL',\n 'GA',\n 'HI',\n 'ID',\n 'IL',\n 'IN',\n 'IA',\n 'KS',\n 'KY',\n 'LA',\n 'ME',\n 'MD',\n 'MA',\n 'MI',\n 'MN',\n 'MS',\n 'MO',\n 'MT',\n 'NE',\n 'NV',\n 'NH',\n 'NJ',\n 'NM',\n 'NY',\n 'NC',\n 'ND',\n 'OH',\n 'OK',\n 'OR',\n 'PA',\n 'RI',\n 'SC',\n 'SD',\n 'TN',\n 'TX',\n 'UT',\n 'VT',\n 'VA',\n 'WA',\n 'WV',\n 'WI',\n 'WY'\n ]\n};\n\nconst windowsVersions: SequenceList = {\n id: 'windows-versions',\n mode: 'finite',\n langs: ['ja', 'en'],\n items: [\n 'Windows 1.0',\n 'Windows 2.0',\n 'Windows 2.1',\n 'Windows 3.0',\n 'Windows 3.1',\n 'Windows 3.11',\n 'Windows 95',\n 'Windows 98',\n 'Windows 98 SE',\n 'Windows Me',\n 'Windows XP',\n 'Windows Vista',\n 'Windows 7',\n 'Windows 8',\n 'Windows 8.1',\n 'Windows 10',\n 'Windows 11'\n ]\n};\n\nconst macosVersions: SequenceList = {\n id: 'macos-versions',\n mode: 'finite',\n langs: ['ja', 'en'],\n items: [\n 'Cheetah',\n 'Puma',\n 'Jaguar',\n 'Panther',\n 'Tiger',\n 'Leopard',\n 'Snow Leopard',\n 'Lion',\n 'Mountain Lion',\n 'Mavericks',\n 'Yosemite',\n 'El Capitan',\n 'Sierra',\n 'High Sierra',\n 'Mojave',\n 'Catalina',\n 'Big Sur',\n 'Monterey',\n 'Ventura',\n 'Sonoma',\n 'Sequoia',\n 'Tahoe'\n ]\n};\n\nconst debianVersions: SequenceList = {\n id: 'debian-codenames',\n mode: 'finite',\n langs: ['ja', 'en'],\n items: [\n 'buzz',\n 'rex',\n 'bo',\n 'hamm',\n 'slink',\n 'potato',\n 'woody',\n 'sarge',\n 'etch',\n 'lenny',\n 'squeeze',\n 'wheezy',\n 'jessie',\n 'stretch',\n 'buster',\n 'bullseye',\n 'bookworm',\n 'trixie'\n ]\n};\n\nconst builtInLists: SequenceList[] = [\n weekdaysEnLong,\n weekdaysEnShort,\n weekdaysJaLong,\n weekdaysJaShort,\n weekdaysJaSingle,\n monthsEnLong,\n monthsEnShort,\n monthsJa,\n monthsJaTraditional,\n quartersEn,\n quartersJa,\n zodiacAnimals,\n zodiacSignsEn,\n zodiacSignsJa,\n directions16En,\n directions16Ja,\n ampmEn,\n ampmJa,\n seasonsEn,\n seasonsJa,\n solfegeJa,\n solfegeEn,\n greekLettersEn,\n greekLettersJa,\n greekLettersSymbols,\n rokuyo,\n heavenlyStems,\n planetsEn,\n planetsJa,\n kujiIn,\n eightVirtues,\n elementSymbols,\n elementNamesJa,\n shogunsKamakura,\n shogunsAshikaga,\n shogunsAshikagaGiven,\n shogunsTokugawa,\n shogunsTokugawaGiven,\n prefecturesJa,\n usStates,\n usStateAbbreviations,\n windowsVersions,\n macosVersions,\n debianVersions\n];\n\nconst ordinalSuffix = (value: number): string => {\n const mod100 = value % 100;\n if (mod100 >= 11 && mod100 <= 13) return 'th';\n const mod10 = value % 10;\n if (mod10 === 1) return 'st';\n if (mod10 === 2) return 'nd';\n if (mod10 === 3) return 'rd';\n return 'th';\n};\n\nconst parseOrdinal = (value: string): number | null => {\n const match = /^(\\d+)(st|nd|rd|th)$/.exec(value);\n if (!match) return null;\n const num = Number(match[1]);\n if (!Number.isFinite(num) || num <= 0) return null;\n const suffix = match[2];\n if (ordinalSuffix(num) !== suffix) return null;\n return num;\n};\n\nconst ordinalMatcher: SequenceMatch = {\n id: 'ordinal-en',\n langs: ['en'],\n match(seed) {\n if (seed.length < 2) return null;\n const values = seed.map((value) => parseOrdinal(value));\n if (values.some((value) => value === null)) return null;\n const nums = values as number[];\n const step = nums[1]! - nums[0]!;\n for (let i = 2; i < nums.length; i += 1) {\n if (nums[i]! - nums[i - 1]! !== step) return null;\n }\n return { score: 80, step };\n },\n createIterator(seed, ctx) {\n const last = parseOrdinal(seed[seed.length - 1] ?? '');\n let current = last ?? 0;\n return {\n next() {\n current += ctx.step;\n if (current <= 0 || !Number.isFinite(current)) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value: `${current}${ordinalSuffix(current)}`, done: false };\n }\n };\n }\n};\n\nexport const registerBuiltInLists = (registry: SequenceRegistry): void => {\n for (const list of builtInLists) {\n registry.register(list);\n }\n};\n\nexport const registerBuiltInMatchers = (registry: SequenceRegistry): void => {\n registry.registerMatch(ordinalMatcher);\n};\n\nexport const createBuiltInRegistry = (langs?: readonly string[]): SequenceRegistry => {\n const effectiveLangs = langs ?? ['en', 'ja'];\n const registry = new SequenceRegistry({ langs: effectiveLangs });\n registerBuiltInLists(registry);\n registerBuiltInMatchers(registry);\n return registry;\n};\n","import type { SequenceKind, SequenceValue } from './types';\n\nconst createSeedRepeatIterator = <T>(seed: readonly T[]): Iterator<T> => {\n let index = 0;\n return {\n next() {\n if (seed.length === 0) {\n return { value: undefined, done: true } as IteratorResult<T>;\n }\n const value = seed[index % seed.length] as T;\n index += 1;\n return { value, done: false };\n }\n };\n};\n\nexport class Sequence<T extends SequenceValue> implements Iterable<T>, Iterator<T> {\n readonly seed: readonly T[];\n kind: SequenceKind;\n private iterator: Iterator<T>;\n\n constructor(...seed: T[]);\n constructor(...args: unknown[]) {\n const seed = args as T[];\n this.seed = seed;\n this.kind = seed.length === 1 ? 'copy' : 'seed-repeat';\n this.iterator = createSeedRepeatIterator(seed);\n }\n\n static fromSeed<T extends SequenceValue>(\n seed: readonly T[],\n kind: SequenceKind,\n iterator: Iterator<T>\n ): Sequence<T> {\n const instance = new Sequence<T>(...seed);\n instance.kind = kind;\n instance.iterator = iterator;\n return instance;\n }\n\n next(): IteratorResult<T> {\n return this.iterator.next();\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this;\n }\n}\n","import { createBuiltInRegistry } from './builtins';\nimport { Sequence } from './sequence';\nimport type { SequenceKind, SequenceValue } from './types';\nimport type { SequenceMatchResult, SequenceRegistry } from './registry';\n\nconst numberEpsilon = 1e-9;\nconst romanMax = 100;\n\nconst createCopyIterator = <T>(value: T): Iterator<T> => {\n return {\n next() {\n return { value, done: false };\n }\n };\n};\n\nconst createSeedRepeatIterator = <T>(seed: readonly T[]): Iterator<T> => {\n let index = 0;\n return {\n next() {\n if (seed.length === 0) {\n return { value: undefined, done: true } as IteratorResult<T>;\n }\n const value = seed[index % seed.length] as T;\n index += 1;\n return { value, done: false };\n }\n };\n};\n\nconst createArithmeticNumberIterator = (last: number, step: number): Iterator<number> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const value = last + step * offset;\n return { value, done: false };\n }\n };\n};\n\nconst createArithmeticDateIterator = (last: Date, stepMs: number): Iterator<Date> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const value = new Date(last.getTime() + stepMs * offset);\n return { value, done: false };\n }\n };\n};\n\nconst createGeometricIterator = (last: number, ratio: number): Iterator<number> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const value = last * ratio ** offset;\n return { value, done: false };\n }\n };\n};\n\nconst createListIterator = (\n match: SequenceMatchResult,\n seed: readonly string[]\n): Iterator<string> => {\n if (match.kind === 'matcher') {\n return match.matcher.createIterator(seed, { step: match.step, state: match.state });\n }\n const { list, startIndex, step } = match;\n const length = list.items.length;\n let currentIndex = startIndex;\n return {\n next() {\n if (list.mode === 'finite') {\n const nextIndex = currentIndex + step;\n if (nextIndex >= length) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n currentIndex = nextIndex;\n return { value: list.items[currentIndex] as string, done: false };\n }\n currentIndex = (currentIndex + step) % length;\n return { value: list.items[currentIndex] as string, done: false };\n }\n };\n};\n\nconst isNumberSeed = (seed: readonly SequenceValue[]): seed is readonly number[] => {\n return seed.every((value) => typeof value === 'number' && Number.isFinite(value));\n};\n\nconst isDateSeed = (seed: readonly SequenceValue[]): seed is readonly Date[] => {\n return seed.every((value) => value instanceof Date && !Number.isNaN(value.getTime()));\n};\n\nconst isStringSeed = (seed: readonly SequenceValue[]): seed is readonly string[] => {\n return seed.every((value) => typeof value === 'string');\n};\n\nconst parseEmbeddedNumber = (value: string): { prefix: string; num: number; width: number; suffix: string } | null => {\n const match = /^(.*?)(-?\\d+)([^0-9]*)$/.exec(value);\n if (!match) {\n return null;\n }\n const prefix = match[1] ?? '';\n const digits = match[2] ?? '';\n const suffix = match[3] ?? '';\n const num = Number(digits);\n if (!Number.isFinite(num)) {\n return null;\n }\n const width = digits.replace('-', '').length;\n return { prefix, num, width, suffix };\n};\n\nconst createEmbeddedNumberIterator = (\n template: { prefix: string; suffix: string; width: number },\n last: number,\n step: number\n): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const next = last + step * offset;\n const sign = next < 0 ? '-' : '';\n const digits = Math.abs(next).toString().padStart(template.width, '0');\n return { value: `${template.prefix}${sign}${digits}${template.suffix}`, done: false };\n }\n };\n};\n\nconst romanMap: Array<[string, number]> = [\n ['C', 100],\n ['XC', 90],\n ['L', 50],\n ['XL', 40],\n ['X', 10],\n ['IX', 9],\n ['V', 5],\n ['IV', 4],\n ['I', 1]\n];\n\nconst toRoman = (value: number): string | null => {\n if (value < 1 || value > romanMax) {\n return null;\n }\n let remaining = value;\n let output = '';\n for (const [symbol, amount] of romanMap) {\n while (remaining >= amount) {\n output += symbol;\n remaining -= amount;\n }\n }\n return output;\n};\n\nconst parseRoman = (value: string): number | null => {\n if (value.length === 0) {\n return null;\n }\n if (value !== value.toUpperCase()) {\n return null;\n }\n let remaining = value;\n let total = 0;\n for (const [symbol, amount] of romanMap) {\n while (remaining.startsWith(symbol)) {\n total += amount;\n remaining = remaining.slice(symbol.length);\n }\n }\n if (remaining.length > 0) {\n return null;\n }\n const canonical = toRoman(total);\n if (!canonical || canonical !== value) {\n return null;\n }\n return total;\n};\n\nconst createRomanIterator = (last: number, step: number): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const next = last + step * offset;\n const roman = toRoman(next);\n if (!roman) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value: roman, done: false };\n }\n };\n};\n\ntype UnicodeGroup =\n | 'latin'\n | 'han'\n | 'hiragana'\n | 'katakana'\n | 'number'\n | 'punct'\n | 'symbol'\n | 'space'\n | 'other';\n\nconst getUnicodeGroup = (char: string): UnicodeGroup => {\n if (/\\p{White_Space}/u.test(char)) return 'space';\n if (/\\p{P}/u.test(char)) return 'punct';\n if (/\\p{S}/u.test(char)) return 'symbol';\n if (/\\p{Script=Latin}/u.test(char)) return 'latin';\n if (/\\p{Script=Han}/u.test(char)) return 'han';\n if (/\\p{Script=Hiragana}/u.test(char)) return 'hiragana';\n if (/\\p{Script=Katakana}/u.test(char)) return 'katakana';\n if (/\\p{N}/u.test(char)) return 'number';\n return 'other';\n};\n\nconst splitByUnicodeGroups = (value: string): Array<{ value: string; group: UnicodeGroup }> => {\n const segments: Array<{ value: string; group: UnicodeGroup }> = [];\n let current = '';\n let currentGroup: UnicodeGroup | null = null;\n for (const char of value) {\n const group = getUnicodeGroup(char);\n if (currentGroup === group) {\n current += char;\n continue;\n }\n if (currentGroup !== null) {\n segments.push({ value: current, group: currentGroup });\n }\n current = char;\n currentGroup = group;\n }\n if (currentGroup !== null) {\n segments.push({ value: current, group: currentGroup });\n }\n return segments;\n};\n\nconst parseEmbeddedRoman = (value: string): { prefix: string; num: number; suffix: string } | null => {\n const segments = splitByUnicodeGroups(value);\n const romanSegments = segments\n .map((segment, index) => ({ index, num: parseRoman(segment.value) }))\n .filter((entry) => entry.num !== null);\n if (romanSegments.length !== 1) {\n return null;\n }\n const romanIndex = romanSegments[0]!.index;\n const num = romanSegments[0]!.num as number;\n const prefix = segments.slice(0, romanIndex).map((segment) => segment.value).join('');\n const suffix = segments.slice(romanIndex + 1).map((segment) => segment.value).join('');\n return { prefix, num, suffix };\n};\n\nconst createEmbeddedRomanIterator = (\n template: { prefix: string; suffix: string },\n last: number,\n step: number\n): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const nextValue = last + step * offset;\n const roman = toRoman(nextValue);\n if (!roman) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value: `${template.prefix}${roman}${template.suffix}`, done: false };\n }\n };\n};\n\ntype KanjiStyle = 'modern' | 'traditional';\n\nconst kanjiDigitsModern: Record<string, number> = {\n 一: 1,\n 二: 2,\n 三: 3,\n 四: 4,\n 五: 5,\n 六: 6,\n 七: 7,\n 八: 8,\n 九: 9\n};\n\nconst kanjiDigitsTraditional: Record<string, number> = {\n 壱: 1,\n 弐: 2,\n 参: 3,\n 肆: 4,\n 伍: 5,\n 陸: 6,\n 柒: 7,\n 捌: 8,\n 玖: 9\n};\n\nconst kanjiUnits: Record<string, number> = {\n 十: 10,\n 拾: 10,\n 百: 100,\n 佰: 100,\n 千: 1000,\n 仟: 1000\n};\n\nconst kanjiTenThousand: Record<string, number> = {\n 万: 10000,\n 萬: 10000\n};\n\nconst kanjiNumeralChars = new Set([\n ...Object.keys(kanjiDigitsModern),\n ...Object.keys(kanjiDigitsTraditional),\n ...Object.keys(kanjiUnits),\n ...Object.keys(kanjiTenThousand)\n]);\n\nconst isKanjiNumeralChar = (char: string): boolean => kanjiNumeralChars.has(char);\n\nconst detectKanjiStyle = (value: string): KanjiStyle => {\n if (/[壱弐参肆伍陸柒捌玖拾萬佰仟]/.test(value)) {\n return 'traditional';\n }\n return 'modern';\n};\n\nconst parseKanjiNumber = (value: string): { num: number; style: KanjiStyle } | null => {\n if (!value) {\n return null;\n }\n const style = detectKanjiStyle(value);\n const hasTenThousand = value.includes('万') || value.includes('萬');\n if (hasTenThousand) {\n const match = /^([一二三四五六七八九壱弐参肆伍陸柒捌玖])?(万|萬)$/.exec(value);\n if (!match) {\n return null;\n }\n const digit = match[1];\n if (!digit) {\n return { num: 10000, style };\n }\n const num = kanjiDigitsModern[digit] ?? kanjiDigitsTraditional[digit];\n if (num !== 1) {\n return null;\n }\n return { num: 10000, style };\n }\n\n let total = 0;\n let current = 0;\n let lastUnit = Number.POSITIVE_INFINITY;\n let lastWasDigit = false;\n for (const char of value) {\n const digit = kanjiDigitsModern[char] ?? kanjiDigitsTraditional[char];\n if (digit) {\n if (lastWasDigit) {\n return null;\n }\n current = digit;\n lastWasDigit = true;\n continue;\n }\n const unit = kanjiUnits[char];\n if (unit) {\n if (unit >= lastUnit) {\n return null;\n }\n if (current === 0) {\n current = 1;\n }\n total += current * unit;\n current = 0;\n lastUnit = unit;\n lastWasDigit = false;\n continue;\n }\n if (kanjiTenThousand[char]) {\n return null;\n }\n return null;\n }\n total += current;\n if (total <= 0 || total > 10000) {\n return null;\n }\n return { num: total, style };\n};\n\nconst parseEmbeddedKanji = (\n value: string\n): { prefix: string; num: number; suffix: string; style: KanjiStyle } | null => {\n const runs: Array<{ start: number; end: number; text: string }> = [];\n let current = '';\n let startIndex = 0;\n let index = 0;\n for (const char of value) {\n if (isKanjiNumeralChar(char)) {\n if (!current) {\n startIndex = index;\n }\n current += char;\n } else {\n if (current) {\n runs.push({ start: startIndex, end: index, text: current });\n current = '';\n }\n }\n index += char.length;\n }\n if (current) {\n runs.push({ start: startIndex, end: index, text: current });\n }\n const matches = runs\n .map((run) => ({ run, parsed: parseKanjiNumber(run.text) }))\n .filter((entry) => entry.parsed !== null);\n if (matches.length !== 1) {\n return null;\n }\n const match = matches[0]!;\n const prefix = value.slice(0, match.run.start);\n const suffix = value.slice(match.run.end);\n return {\n prefix,\n num: match.parsed!.num,\n suffix,\n style: match.parsed!.style\n };\n};\n\nconst toKanjiNumber = (value: number, style: KanjiStyle): string | null => {\n if (!Number.isFinite(value) || value <= 0 || value > 10000) {\n return null;\n }\n const digits = style === 'traditional'\n ? ['', '壱', '弐', '参', '肆', '伍', '陸', '柒', '捌', '玖']\n : ['', '一', '二', '三', '四', '五', '六', '七', '八', '九'];\n const tenUnit = style === 'traditional' ? '拾' : '十';\n const tenThousandUnit = style === 'traditional' ? '萬' : '万';\n if (value === 10000) {\n return `${digits[1]}${tenThousandUnit}`;\n }\n let remaining = value;\n let output = '';\n const thousands = Math.floor(remaining / 1000);\n if (thousands > 0) {\n if (thousands > 1) {\n output += digits[thousands];\n }\n output += '千';\n remaining %= 1000;\n }\n const hundreds = Math.floor(remaining / 100);\n if (hundreds > 0) {\n if (hundreds > 1) {\n output += digits[hundreds];\n }\n output += '百';\n remaining %= 100;\n }\n const tens = Math.floor(remaining / 10);\n if (tens > 0) {\n if (tens > 1) {\n output += digits[tens];\n }\n output += tenUnit;\n remaining %= 10;\n }\n if (remaining > 0) {\n output += digits[remaining];\n }\n return output || null;\n};\n\nconst createKanjiIterator = (last: number, step: number, style: KanjiStyle): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const nextValue = last + step * offset;\n const value = toKanjiNumber(nextValue, style);\n if (!value) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value, done: false };\n }\n };\n};\n\nconst createEmbeddedKanjiIterator = (\n template: { prefix: string; suffix: string; style: KanjiStyle },\n last: number,\n step: number\n): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const nextValue = last + step * offset;\n const value = toKanjiNumber(nextValue, template.style);\n if (!value) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value: `${template.prefix}${value}${template.suffix}`, done: false };\n }\n };\n};\n\nconst matchArithmetic = (values: readonly number[]): number | null => {\n if (values.length < 2) {\n return null;\n }\n const step = values[1]! - values[0]!;\n for (let i = 2; i < values.length; i += 1) {\n if (Math.abs(values[i]! - values[i - 1]! - step) > numberEpsilon) {\n return null;\n }\n }\n return step;\n};\n\nconst matchGeometric = (values: readonly number[]): number | null => {\n if (values.length < 2) {\n return null;\n }\n if (values[0] === 0) {\n return null;\n }\n const ratio = values[1]! / values[0]!;\n for (let i = 2; i < values.length; i += 1) {\n if (values[i - 1] === 0) {\n return null;\n }\n if (Math.abs(values[i]! / values[i - 1]! - ratio) > numberEpsilon) {\n return null;\n }\n }\n return ratio;\n};\n\nconst inferStringSequence = (\n seed: readonly string[]\n): { kind: SequenceKind; iterator: Iterator<string> } | null => {\n const embedded = seed.map((value) => parseEmbeddedNumber(value));\n if (embedded.every(Boolean)) {\n const first = embedded[0]!;\n const last = embedded[embedded.length - 1]!;\n const samePattern = embedded.every(\n (entry) => entry?.prefix === first.prefix && entry?.suffix === first.suffix\n );\n if (samePattern) {\n const values = embedded.map((entry) => entry?.num ?? 0);\n const step = matchArithmetic(values);\n if (step !== null) {\n return {\n kind: 'arithmetic',\n iterator: createEmbeddedNumberIterator(\n { prefix: last.prefix, suffix: last.suffix, width: last.width },\n last.num,\n step\n )\n };\n }\n }\n }\n\n const romanValues = seed.map((value) => parseRoman(value));\n if (romanValues.every((value) => value !== null)) {\n const numeric = romanValues as number[];\n const step = matchArithmetic(numeric);\n if (step !== null) {\n const last = numeric[numeric.length - 1]!;\n return {\n kind: 'arithmetic',\n iterator: createRomanIterator(last, step)\n };\n }\n }\n\n const kanjiValues = seed.map((value) => parseKanjiNumber(value));\n if (kanjiValues.every((value) => value !== null)) {\n const parsed = kanjiValues as Array<{ num: number; style: KanjiStyle }>;\n const firstStyle = parsed[0]!.style;\n if (parsed.every((item) => item.style === firstStyle)) {\n const numeric = parsed.map((item) => item.num);\n const step = matchArithmetic(numeric);\n if (step !== null) {\n const last = parsed[parsed.length - 1]!;\n return {\n kind: 'arithmetic',\n iterator: createKanjiIterator(last.num, step, last.style)\n };\n }\n }\n }\n\n const embeddedRoman = seed.map((value) => parseEmbeddedRoman(value));\n if (embeddedRoman.every((value) => value !== null)) {\n const parsed = embeddedRoman as Array<{ prefix: string; num: number; suffix: string }>;\n const template = parsed[0]!;\n const matchesTemplate = parsed.every(\n (item) => item.prefix === template.prefix && item.suffix === template.suffix\n );\n if (matchesTemplate) {\n const numeric = parsed.map((item) => item.num);\n const step = matchArithmetic(numeric);\n if (step !== null) {\n const last = numeric[numeric.length - 1]!;\n return {\n kind: 'arithmetic',\n iterator: createEmbeddedRomanIterator(\n { prefix: template.prefix, suffix: template.suffix },\n last,\n step\n )\n };\n }\n }\n }\n\n const embeddedKanji = seed.map((value) => parseEmbeddedKanji(value));\n if (embeddedKanji.every((value) => value !== null)) {\n const parsed = embeddedKanji as Array<{\n prefix: string;\n num: number;\n suffix: string;\n style: KanjiStyle;\n }>;\n const template = parsed[0]!;\n const matchesTemplate = parsed.every(\n (item) =>\n item.prefix === template.prefix &&\n item.suffix === template.suffix &&\n item.style === template.style\n );\n if (matchesTemplate) {\n const numeric = parsed.map((item) => item.num);\n const step = matchArithmetic(numeric);\n if (step !== null) {\n const last = parsed[parsed.length - 1]!;\n return {\n kind: 'arithmetic',\n iterator: createEmbeddedKanjiIterator(\n { prefix: template.prefix, suffix: template.suffix, style: template.style },\n last.num,\n step\n )\n };\n }\n }\n }\n\n return null;\n};\n\nconst inferFromList = (\n seed: readonly string[],\n registry: SequenceRegistry\n): { kind: SequenceKind; iterator: Iterator<string> } | null => {\n const match = registry.match(seed);\n if (!match) {\n return null;\n }\n return {\n kind: 'list',\n iterator: createListIterator(match, seed)\n };\n};\n\nexport function inferSequence(seed: readonly number[], options?: { registry?: SequenceRegistry }): Sequence<number>;\nexport function inferSequence(seed: readonly Date[], options?: { registry?: SequenceRegistry }): Sequence<Date>;\nexport function inferSequence(seed: readonly string[], options?: { registry?: SequenceRegistry }): Sequence<string>;\nexport function inferSequence(\n seed: readonly SequenceValue[],\n options?: { registry?: SequenceRegistry }\n): Sequence<SequenceValue> {\n const registry = options?.registry ?? createBuiltInRegistry();\n if (seed.length === 0) {\n return Sequence.fromSeed(seed, 'seed-repeat', createSeedRepeatIterator(seed));\n }\n if (seed.length === 1) {\n return Sequence.fromSeed(seed, 'copy', createCopyIterator(seed[0]!));\n }\n\n if (isStringSeed(seed)) {\n const listSequence = inferFromList(seed, registry);\n if (listSequence) {\n return Sequence.fromSeed(seed, listSequence.kind, listSequence.iterator);\n }\n const structured = inferStringSequence(seed);\n if (structured) {\n return Sequence.fromSeed(seed, structured.kind, structured.iterator);\n }\n }\n\n if (isNumberSeed(seed)) {\n const step = matchArithmetic(seed);\n if (step !== null) {\n return Sequence.fromSeed(\n seed,\n 'arithmetic',\n createArithmeticNumberIterator(seed[seed.length - 1]!, step)\n );\n }\n const ratio = matchGeometric(seed);\n if (ratio !== null) {\n return Sequence.fromSeed(\n seed,\n 'geometric',\n createGeometricIterator(seed[seed.length - 1]!, ratio)\n );\n }\n }\n\n if (isDateSeed(seed)) {\n const times = seed.map((value) => value.getTime());\n const step = matchArithmetic(times);\n if (step !== null) {\n return Sequence.fromSeed(\n seed,\n 'arithmetic',\n createArithmeticDateIterator(seed[seed.length - 1]!, step)\n );\n }\n }\n\n return Sequence.fromSeed(seed, 'seed-repeat', createSeedRepeatIterator(seed));\n}\n"],"names":["normalizeQueryToken","value","normalizeLangs","langs","result","lang","normalized","resolveIndex","list","token","directIndex","canonical","canonicalIndex","hasQueryHit","queryText","normalizedQuery","item","alias","langsRank","best","index","matcherLangsAllowed","matcher","SequenceRegistry","opts","id","query","lists","enabled","seed","bestMatch","bestScore","enabledIds","matched","score","candidates","candidate","b","rank","indices","matchFailed","step","listScore","length","baseStep","i","expected","mode","from","to","next","weekdaysEnLong","weekdaysEnShort","weekdaysJaLong","weekdaysJaShort","weekdaysJaSingle","monthsEnLong","monthsEnShort","monthsJa","monthsJaTraditional","quartersEn","quartersJa","zodiacAnimals","zodiacSignsEn","zodiacSignsJa","directions16En","directions16Ja","ampmEn","ampmJa","seasonsEn","seasonsJa","solfegeJa","solfegeEn","greekLettersEn","greekLettersJa","greekLettersSymbols","rokuyo","heavenlyStems","planetsEn","planetsJa","kujiIn","eightVirtues","elementSymbols","elementNamesJa","shogunsKamakura","shogunsAshikaga","shogunsAshikagaGiven","shogunsTokugawa","shogunsTokugawaGiven","prefectureItems","prefectureAliases","aliases","prefecturesJa","usStates","usStateAbbreviations","windowsVersions","macosVersions","debianVersions","builtInLists","ordinalSuffix","mod100","mod10","parseOrdinal","match","num","suffix","ordinalMatcher","values","nums","ctx","current","registerBuiltInLists","registry","registerBuiltInMatchers","createBuiltInRegistry","effectiveLangs","createSeedRepeatIterator","Sequence","args","kind","iterator","instance","numberEpsilon","romanMax","createCopyIterator","createArithmeticNumberIterator","last","offset","createArithmeticDateIterator","stepMs","createGeometricIterator","ratio","createListIterator","startIndex","currentIndex","nextIndex","isNumberSeed","isDateSeed","isStringSeed","parseEmbeddedNumber","prefix","digits","width","createEmbeddedNumberIterator","template","sign","romanMap","toRoman","remaining","output","symbol","amount","parseRoman","total","createRomanIterator","roman","getUnicodeGroup","char","splitByUnicodeGroups","segments","currentGroup","group","parseEmbeddedRoman","romanSegments","segment","entry","romanIndex","createEmbeddedRomanIterator","nextValue","kanjiDigitsModern","kanjiDigitsTraditional","kanjiUnits","kanjiTenThousand","kanjiNumeralChars","isKanjiNumeralChar","detectKanjiStyle","parseKanjiNumber","style","digit","lastUnit","lastWasDigit","unit","parseEmbeddedKanji","runs","matches","run","toKanjiNumber","tenUnit","tenThousandUnit","thousands","hundreds","tens","createKanjiIterator","createEmbeddedKanjiIterator","matchArithmetic","matchGeometric","inferStringSequence","embedded","first","romanValues","numeric","kanjiValues","parsed","firstStyle","embeddedRoman","embeddedKanji","inferFromList","inferSequence","options","listSequence","structured","times"],"mappings":"AA2CA,MAAMA,IAAsB,CAACC,MACpBA,EAAM,KAAA,EAAO,UAAU,MAAM,EAAE,cAAc,QAAQ,QAAQ,GAAG,GAGnEC,IAAiB,CAACC,MAAiD;AACvE,QAAMC,IAAmB,CAAA;AACzB,MAAID;AACF,eAAWE,KAAQF,GAAO;AACxB,YAAMG,IAAaD,EAAK,KAAA;AACxB,MAAI,CAACC,KAAcF,EAAO,SAASE,CAAU,KAG7CF,EAAO,KAAKE,CAAU;AAAA,IACxB;AAEF,SAAIF,EAAO,WAAW,IACpBA,EAAO,KAAK,IAAY,IACdA,EAAO,SAAS,IAAY,KACtCA,EAAO,KAAK,IAAY,GAEnBA;AACT,GAEMG,IAAe,CAACC,GAAoBC,MAAiC;AACzE,QAAMC,IAAcF,EAAK,MAAM,QAAQC,CAAK;AAC5C,MAAIC,MAAgB;AAClB,WAAOA;AAET,MAAI,CAACF,EAAK;AACR,WAAO;AAET,QAAMG,IAAYH,EAAK,QAAQC,CAAK;AACpC,MAAI,CAACE;AACH,WAAO;AAET,QAAMC,IAAiBJ,EAAK,MAAM,QAAQG,CAAS;AACnD,SAAOC,MAAmB,KAAK,OAAOA;AACxC,GAEMC,IAAc,CAACL,GAAoBM,MAA+B;AACtE,QAAMC,IAAkBf,EAAoBc,CAAS;AACrD,MAAId,EAAoBQ,EAAK,EAAE,EAAE,SAASO,CAAe;AACvD,WAAO;AAET,aAAWC,KAAQR,EAAK;AACtB,QAAIR,EAAoBgB,CAAI,EAAE,SAASD,CAAe;AACpD,aAAO;AAGX,SAAKP,EAAK,UAGH,OAAO,KAAKA,EAAK,OAAO,EAAE;AAAA,IAAK,CAACS,MACrCjB,EAAoBiB,CAAK,EAAE,SAASF,CAAe;AAAA,EAAA,IAH5C;AAKX,GAEMG,IAAY,CAACV,GAAoBL,MAAqC;AAC1E,MAAIK,EAAK,MAAM,WAAW;AACxB,WAAO;AAET,MAAIW,IAAO,OAAO;AAClB,aAAWd,KAAQG,EAAK,OAAO;AAC7B,UAAMY,IAAQjB,EAAM,QAAQE,CAAI;AAChC,IAAIe,MAAU,MAAMA,IAAQD,MAC1BA,IAAOC;AAAA,EAEX;AACA,SAAOD;AACT,GAEME,IAAsB,CAACC,GAAwBnB,MAC/C,CAACmB,EAAQ,SAASA,EAAQ,MAAM,WAAW,IACtC,KAEFA,EAAQ,MAAM,KAAK,CAACjB,MAASF,EAAM,SAASE,CAAI,CAAC;AAGnD,MAAMkB,EAAiB;AAAA,EAM5B,YAAYC,GAAsC;AAHlD,SAAQ,QAAwB,CAAA,GAChC,KAAQ,WAA4B,CAAA,GAGlC,KAAK,QAAQtB,EAAesB,GAAM,KAAK;AAAA,EACzC;AAAA,EAEA,SAAShB,GAA0B;AACjC,UAAMY,IAAQ,KAAK,MAAM,UAAU,CAACJ,MAASA,EAAK,OAAOR,EAAK,EAAE;AAChE,IAAIY,MAAU,KACZ,KAAK,MAAM,KAAKZ,CAAI,IAEpB,KAAK,MAAMY,CAAK,IAAIZ;AAAA,EAExB;AAAA,EAEA,cAAcc,GAA8B;AAC1C,UAAMF,IAAQ,KAAK,SAAS,UAAU,CAACJ,MAASA,EAAK,OAAOM,EAAQ,EAAE;AACtE,IAAIF,MAAU,KACZ,KAAK,SAAS,KAAKE,CAAO,IAE1B,KAAK,SAASF,CAAK,IAAIE;AAAA,EAE3B;AAAA,EAEA,WAAWG,GAAkB;AAC3B,SAAK,QAAQ,KAAK,MAAM,OAAO,CAACT,MAASA,EAAK,OAAOS,CAAE,GACvD,KAAK,WAAW,KAAK,SAAS,OAAO,CAACT,MAASA,EAAK,OAAOS,CAAE;AAAA,EAC/D;AAAA,EAEA,KAAKC,GAAuC;AAC1C,QAAIC,IAAQ,CAAC,GAAG,KAAK,KAAK;AAC1B,QAAID,GAAO,cAAcA,EAAM,WAAW,SAAS,GAAG;AACpD,YAAME,IAAU,IAAI,IAAIF,EAAM,UAAU;AACxC,MAAAC,IAAQA,EAAM,OAAO,CAACnB,MAASoB,EAAQ,IAAIpB,EAAK,EAAE,CAAC;AAAA,IACrD;AACA,UAAMM,IAAYY,GAAO;AACzB,WAAIZ,MACFa,IAAQA,EAAM,OAAO,CAACnB,MAASK,EAAYL,GAAMM,CAAS,CAAC,IAEtDa;AAAA,EACT;AAAA,EAEA,MAAME,GAAyBH,GAAmD;AAChF,QAAIG,EAAK,WAAW;AAClB,aAAO;AAET,QAAIC,IAAwC,MACxCC,IAAY,OAAO;AAEvB,UAAMC,IAAaN,GAAO,aAAa,IAAI,IAAIA,EAAM,UAAU,IAAI;AACnE,eAAWJ,KAAW,KAAK,UAAU;AAInC,UAHIU,KAAc,CAACA,EAAW,IAAIV,EAAQ,EAAE,KAGxC,CAACD,EAAoBC,GAAS,KAAK,KAAK;AAC1C;AAEF,YAAMW,IAAUX,EAAQ,MAAMO,CAAI;AAClC,UAAI,CAACI;AACH;AAEF,YAAMC,IAAQD,EAAQ;AACtB,MAAK,OAAO,SAASC,CAAK,KAGtBA,IAAQH,MACVA,IAAYG,GACZJ,IAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAAR;AAAA,QACA,MAAMW,EAAQ,QAAQ;AAAA,QACtB,OAAOA,EAAQ;AAAA,MAAA;AAAA,IAGrB;AAEA,UAAME,IAAa,KAAK,KAAKT,CAAK,EAC/B,IAAI,CAAClB,OAAU,EAAE,MAAAA,GAAM,MAAMU,EAAUV,GAAM,KAAK,KAAK,EAAA,EAAI,EAC3D,OAAO,CAAC4B,MAAc,OAAO,SAASA,EAAU,IAAI,CAAC,EACrD,KAAK,CAAC,GAAGC,MAAM,EAAE,OAAOA,EAAE,IAAI;AAEjC,eAAW,EAAE,MAAA7B,GAAM,MAAA8B,EAAA,KAAUH,GAAY;AACvC,YAAMI,IAAoB,CAAA;AAC1B,UAAIC,IAAc;AAClB,iBAAW/B,KAASoB,GAAM;AACxB,cAAMT,IAAQb,EAAaC,GAAMC,CAAK;AACtC,YAAIW,MAAU,MAAM;AAClB,UAAAoB,IAAc;AACd;AAAA,QACF;AACA,QAAAD,EAAQ,KAAKnB,CAAK;AAAA,MACpB;AACA,UAAIoB;AACF;AAEF,YAAMC,IAAO,KAAK,UAAUjC,GAAM+B,CAAO;AACzC,UAAIE,MAAS;AACX;AAEF,YAAMC,IAAY,KAAKJ;AACvB,MAAII,IAAYX,MACdA,IAAYW,GACZZ,IAAY;AAAA,QACV,MAAM;AAAA,QACN,MAAAtB;AAAA,QACA,YAAY+B,EAAQA,EAAQ,SAAS,CAAC,KAAK;AAAA,QAC3C,MAAAE;AAAA,MAAA;AAAA,IAGN;AAEA,WAAOX;AAAA,EACT;AAAA,EAEQ,UAAUtB,GAAoB+B,GAAkC;AACtE,QAAIA,EAAQ,SAAS;AACnB,aAAO;AAET,UAAMI,IAASnC,EAAK,MAAM,QACpBoC,IAAW,KAAK,YAAYpC,EAAK,MAAMmC,GAAQJ,EAAQ,CAAC,GAAIA,EAAQ,CAAC,CAAE;AAC7E,QAAIK,MAAa;AACf,aAAO;AAET,aAASC,IAAI,GAAGA,IAAIN,EAAQ,QAAQM,KAAK,GAAG;AAC1C,YAAMC,IAAW,KAAK,UAAUtC,EAAK,MAAMmC,GAAQJ,EAAQM,IAAI,CAAC,GAAID,CAAQ;AAC5E,UAAIE,MAAa,QAAQA,MAAaP,EAAQM,CAAC;AAC7C,eAAO;AAAA,IAEX;AACA,WAAOD;AAAA,EACT;AAAA,EAEQ,YACNG,GACAJ,GACAK,GACAC,GACe;AACf,QAAIF,MAAS;AAEX,cADcE,IAAKD,IAAOL,KAAUA;AAGtC,UAAMF,IAAOQ,IAAKD;AAClB,WAAIP,IAAO,IACF,OAEFA;AAAA,EACT;AAAA,EAEQ,UACNM,GACAJ,GACAK,GACAP,GACe;AACf,QAAIM,MAAS;AACX,cAAQC,IAAOP,KAAQE;AAEzB,UAAMO,IAAOF,IAAOP;AACpB,WAAIS,KAAQP,IACH,OAEFO;AAAA,EACT;AACF;AC9RA,MAAMC,IAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,UAAU,WAAW,aAAa,YAAY,UAAU,YAAY,QAAQ;AACtF,GAEMC,IAAgC;AAAA,EACpC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,EACvD,SAAS;AAAA,IACP,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX,GAEMC,IAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AACzD,GAEMC,IAAgC;AAAA,EACpC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAClD,GAEMC,IAAiC;AAAA,EACrC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC3C,GAEMC,IAA6B;AAAA,EACjC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GAEMC,IAA8B;AAAA,EAClC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAAA,EAC1F,SAAS;AAAA,IACP,MAAM;AAAA,EAAA;AAEV,GAEMC,IAAyB;AAAA,EAC7B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,OAAO,KAAK;AACnF,GAEMC,IAAoC;AAAA,EACxC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,OAAO,MAAM,IAAI;AAClF,GAEMC,IAA2B;AAAA,EAC/B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,MAAM,MAAM,MAAM,IAAI;AAChC,GAEMC,IAA2B;AAAA,EAC/B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,SAAS,SAAS,SAAS,OAAO;AAC5C,GAEMC,IAA8B;AAAA,EAClC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACpE,GAEMC,IAA8B;AAAA,EAClC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GAEMC,IAA8B;AAAA,EAClC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,OAAO,OAAO,OAAO,MAAM,OAAO,OAAO,OAAO,MAAM,OAAO,OAAO,OAAO,IAAI;AAAA,EACvF,SAAS;AAAA,IACP,MAAM;AAAA,EAAA;AAEV,GAEMC,IAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GAEMC,IAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GAEMC,KAAuB;AAAA,EAC3B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,MAAM,IAAI;AAAA,EAClB,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAEZ,GAEMC,KAAuB;AAAA,EAC3B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,MAAM,IAAI;AACpB,GAEMC,KAA0B;AAAA,EAC9B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,UAAU,UAAU,UAAU,QAAQ;AAAA,EAC9C,SAAS;AAAA,IACP,MAAM;AAAA,EAAA;AAEV,GAEMC,KAA0B;AAAA,EAC9B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,KAAK,KAAK,KAAK,GAAG;AAC5B,GAEMC,KAA0B;AAAA,EAC9B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG;AAC5C,GAEMC,KAA0B;AAAA,EAC9B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,IAAI;AAAA,EACjD,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA;AAER,GAEMC,KAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GAEMC,KAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GAEMC,KAAoC;AAAA,EACxC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,MAAM,IAAI;AAAA,EAClB,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF,SAAS;AAAA,IACP,GAAK;AAAA,EAAA;AAET,GAEMC,KAAuB;AAAA,EAC3B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAC5C,GAEMC,KAA8B;AAAA,EAClC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC1D,GAEMC,KAA0B;AAAA,EAC9B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,WAAW,SAAS,SAAS,QAAQ,WAAW,UAAU,UAAU,SAAS;AACvF,GAEMC,KAA0B;AAAA,EAC9B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAO,KAAK;AAC1D,GAEMC,KAAuB;AAAA,EAC3B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AACrD,GAEMC,KAA6B;AAAA,EACjC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAChD,GAEMC,KAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,MAAM,IAAI;AAAA,EAClB,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GAEMC,KAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IAC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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/registry.ts","../src/builtins.ts","../src/sequence.ts","../src/infer.ts"],"sourcesContent":["export type SequenceListMode = 'cycle' | 'finite';\n\nexport type SequenceList = {\n id: string;\n mode: SequenceListMode;\n langs: readonly string[];\n items: readonly string[];\n aliases?: Record<string, string>;\n};\n\nexport type SequenceMatch = {\n id: string;\n langs?: readonly string[];\n match(seed: readonly string[]):\n | { score: number; startIndex?: number; step?: number; state?: unknown }\n | null;\n createIterator(\n seed: readonly string[],\n ctx: { step: number; state?: unknown }\n ): Iterator<string>;\n};\n\nexport type RegistryQuery = {\n enabledIds?: readonly string[];\n queryText?: string;\n};\n\nexport type SequenceMatchResult =\n | {\n kind: 'list';\n list: SequenceList;\n startIndex: number;\n step: number;\n }\n | {\n kind: 'matcher';\n matcher: SequenceMatch;\n step: number;\n state?: unknown;\n };\n\nconst fallbackLang = 'en';\n\nconst normalizeQueryToken = (value: string): string => {\n return value.trim().normalize('NFKC').toLowerCase().replace(/\\s+/g, ' ');\n};\n\nconst normalizeLangs = (langs?: readonly string[]): readonly string[] => {\n const result: string[] = [];\n if (langs) {\n for (const lang of langs) {\n const normalized = lang.trim();\n if (!normalized || result.includes(normalized)) {\n continue;\n }\n result.push(normalized);\n }\n }\n if (result.length === 0) {\n result.push(fallbackLang);\n } else if (!result.includes(fallbackLang)) {\n result.push(fallbackLang);\n }\n return result;\n};\n\nconst resolveIndex = (list: SequenceList, token: string): number | null => {\n const directIndex = list.items.indexOf(token);\n if (directIndex !== -1) {\n return directIndex;\n }\n if (!list.aliases) {\n return null;\n }\n const canonical = list.aliases[token];\n if (!canonical) {\n return null;\n }\n const canonicalIndex = list.items.indexOf(canonical);\n return canonicalIndex === -1 ? null : canonicalIndex;\n};\n\nconst hasQueryHit = (list: SequenceList, queryText: string): boolean => {\n const normalizedQuery = normalizeQueryToken(queryText);\n if (normalizeQueryToken(list.id).includes(normalizedQuery)) {\n return true;\n }\n for (const item of list.items) {\n if (normalizeQueryToken(item).includes(normalizedQuery)) {\n return true;\n }\n }\n if (!list.aliases) {\n return false;\n }\n return Object.keys(list.aliases).some((alias) =>\n normalizeQueryToken(alias).includes(normalizedQuery)\n );\n};\n\nconst langsRank = (list: SequenceList, langs: readonly string[]): number => {\n if (list.langs.length === 0) {\n return 0;\n }\n let best = Number.POSITIVE_INFINITY;\n for (const lang of list.langs) {\n const index = langs.indexOf(lang);\n if (index !== -1 && index < best) {\n best = index;\n }\n }\n return best;\n};\n\nconst matcherLangsAllowed = (matcher: SequenceMatch, langs: readonly string[]): boolean => {\n if (!matcher.langs || matcher.langs.length === 0) {\n return true;\n }\n return matcher.langs.some((lang) => langs.includes(lang));\n};\n\nexport class SequenceRegistry {\n readonly langs: readonly string[];\n\n private lists: SequenceList[] = [];\n private matchers: SequenceMatch[] = [];\n\n constructor(opts?: { langs?: readonly string[] }) {\n this.langs = normalizeLangs(opts?.langs);\n }\n\n register(list: SequenceList): void {\n const index = this.lists.findIndex((item) => item.id === list.id);\n if (index === -1) {\n this.lists.push(list);\n } else {\n this.lists[index] = list;\n }\n }\n\n registerMatch(matcher: SequenceMatch): void {\n const index = this.matchers.findIndex((item) => item.id === matcher.id);\n if (index === -1) {\n this.matchers.push(matcher);\n } else {\n this.matchers[index] = matcher;\n }\n }\n\n unregister(id: string): void {\n this.lists = this.lists.filter((item) => item.id !== id);\n this.matchers = this.matchers.filter((item) => item.id !== id);\n }\n\n list(query?: RegistryQuery): SequenceList[] {\n let lists = [...this.lists];\n if (query?.enabledIds && query.enabledIds.length > 0) {\n const enabled = new Set(query.enabledIds);\n lists = lists.filter((list) => enabled.has(list.id));\n }\n const queryText = query?.queryText;\n if (queryText) {\n lists = lists.filter((list) => hasQueryHit(list, queryText));\n }\n return lists;\n }\n\n match(seed: readonly string[], query?: RegistryQuery): SequenceMatchResult | null {\n if (seed.length === 0) {\n return null;\n }\n let bestMatch: SequenceMatchResult | null = null;\n let bestScore = Number.NEGATIVE_INFINITY;\n\n const enabledIds = query?.enabledIds ? new Set(query.enabledIds) : null;\n for (const matcher of this.matchers) {\n if (enabledIds && !enabledIds.has(matcher.id)) {\n continue;\n }\n if (!matcherLangsAllowed(matcher, this.langs)) {\n continue;\n }\n const matched = matcher.match(seed);\n if (!matched) {\n continue;\n }\n const score = matched.score;\n if (!Number.isFinite(score)) {\n continue;\n }\n if (score > bestScore) {\n bestScore = score;\n bestMatch = {\n kind: 'matcher',\n matcher,\n step: matched.step ?? 1,\n state: matched.state\n };\n }\n }\n\n const candidates = this.list(query)\n .map((list) => ({ list, rank: langsRank(list, this.langs) }))\n .filter((candidate) => Number.isFinite(candidate.rank))\n .sort((a, b) => a.rank - b.rank);\n\n for (const { list, rank } of candidates) {\n const indices: number[] = [];\n let matchFailed = false;\n for (const token of seed) {\n const index = resolveIndex(list, token);\n if (index === null) {\n matchFailed = true;\n break;\n }\n indices.push(index);\n }\n if (matchFailed) {\n continue;\n }\n const step = this.inferStep(list, indices);\n if (step === null) {\n continue;\n }\n const listScore = 10 - rank;\n if (listScore > bestScore) {\n bestScore = listScore;\n bestMatch = {\n kind: 'list',\n list,\n startIndex: indices[indices.length - 1] ?? 0,\n step\n };\n }\n }\n\n return bestMatch;\n }\n\n private inferStep(list: SequenceList, indices: number[]): number | null {\n if (indices.length < 2) {\n return 1;\n }\n const length = list.items.length;\n const baseStep = this.stepBetween(list.mode, length, indices[0]!, indices[1]!);\n if (baseStep === null) {\n return null;\n }\n for (let i = 2; i < indices.length; i += 1) {\n const expected = this.nextIndex(list.mode, length, indices[i - 1]!, baseStep);\n if (expected === null || expected !== indices[i]) {\n return null;\n }\n }\n return baseStep;\n }\n\n private stepBetween(\n mode: SequenceListMode,\n length: number,\n from: number,\n to: number\n ): number | null {\n if (mode === 'cycle') {\n const step = (to - from + length) % length;\n return step;\n }\n const step = to - from;\n if (step < 0) {\n return null;\n }\n return step;\n }\n\n private nextIndex(\n mode: SequenceListMode,\n length: number,\n from: number,\n step: number\n ): number | null {\n if (mode === 'cycle') {\n return (from + step) % length;\n }\n const next = from + step;\n if (next >= length) {\n return null;\n }\n return next;\n }\n}\n","import type { SequenceList, SequenceMatch } from './registry';\nimport { SequenceRegistry } from './registry';\n\nconst weekdaysEnLong: SequenceList = {\n id: 'weekdays-en-long',\n mode: 'cycle',\n langs: ['en'],\n items: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']\n};\n\nconst weekdaysEnShort: SequenceList = {\n id: 'weekdays-en-short',\n mode: 'cycle',\n langs: ['en'],\n items: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],\n aliases: {\n Tues: 'Tue',\n Thur: 'Thu',\n Thurs: 'Thu'\n }\n};\n\nconst weekdaysJaLong: SequenceList = {\n id: 'weekdays-ja-long',\n mode: 'cycle',\n langs: ['ja'],\n items: ['月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日', '日曜日']\n};\n\nconst weekdaysJaShort: SequenceList = {\n id: 'weekdays-ja-short',\n mode: 'cycle',\n langs: ['ja'],\n items: ['月曜', '火曜', '水曜', '木曜', '金曜', '土曜', '日曜']\n};\n\nconst weekdaysJaSingle: SequenceList = {\n id: 'weekdays-ja-single',\n mode: 'cycle',\n langs: ['ja'],\n items: ['月', '火', '水', '木', '金', '土', '日']\n};\n\nconst monthsEnLong: SequenceList = {\n id: 'months-en-long',\n mode: 'cycle',\n langs: ['en'],\n items: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n};\n\nconst monthsEnShort: SequenceList = {\n id: 'months-en-short',\n mode: 'cycle',\n langs: ['en'],\n items: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n aliases: {\n Sept: 'Sep'\n }\n};\n\nconst monthsJa: SequenceList = {\n id: 'months-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']\n};\n\nconst monthsJaTraditional: SequenceList = {\n id: 'months-ja-traditional',\n mode: 'cycle',\n langs: ['ja'],\n items: ['睦月', '如月', '弥生', '卯月', '皐月', '水無月', '文月', '葉月', '長月', '神無月', '霜月', '師走']\n};\n\nconst quartersEn: SequenceList = {\n id: 'quarters-en',\n mode: 'cycle',\n langs: ['en'],\n items: ['Q1', 'Q2', 'Q3', 'Q4']\n};\n\nconst quartersJa: SequenceList = {\n id: 'quarters-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['第1四半期', '第2四半期', '第3四半期', '第4四半期']\n};\n\nconst zodiacAnimals: SequenceList = {\n id: 'zodiac-animals-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']\n};\n\nconst zodiacSignsEn: SequenceList = {\n id: 'zodiac-signs-en',\n mode: 'cycle',\n langs: ['en'],\n items: [\n 'Aries',\n 'Taurus',\n 'Gemini',\n 'Cancer',\n 'Leo',\n 'Virgo',\n 'Libra',\n 'Scorpio',\n 'Sagittarius',\n 'Capricorn',\n 'Aquarius',\n 'Pisces'\n ]\n};\n\nconst zodiacSignsJa: SequenceList = {\n id: 'zodiac-signs-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['牡羊座', '牡牛座', '双子座', '蟹座', '獅子座', '乙女座', '天秤座', '蠍座', '射手座', '山羊座', '水瓶座', '魚座'],\n aliases: {\n さそり座: '蠍座'\n }\n};\n\nconst directions16En: SequenceList = {\n id: 'directions-16-en',\n mode: 'cycle',\n langs: ['en'],\n items: [\n 'North',\n 'North-Northeast',\n 'Northeast',\n 'East-Northeast',\n 'East',\n 'East-Southeast',\n 'Southeast',\n 'South-Southeast',\n 'South',\n 'South-Southwest',\n 'Southwest',\n 'West-Southwest',\n 'West',\n 'West-Northwest',\n 'Northwest',\n 'North-Northwest'\n ]\n};\n\nconst directions16Ja: SequenceList = {\n id: 'directions-16-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: [\n '北',\n '北北東',\n '北東',\n '東北東',\n '東',\n '東南東',\n '南東',\n '南南東',\n '南',\n '南南西',\n '南西',\n '西南西',\n '西',\n '西北西',\n '北西',\n '北北西'\n ]\n};\n\nconst ampmEn: SequenceList = {\n id: 'ampm-en',\n mode: 'cycle',\n langs: ['en'],\n items: ['AM', 'PM'],\n aliases: {\n 'A.M.': 'AM',\n 'P.M.': 'PM'\n }\n};\n\nconst ampmJa: SequenceList = {\n id: 'ampm-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['午前', '午後']\n};\n\nconst seasonsEn: SequenceList = {\n id: 'seasons-en',\n mode: 'cycle',\n langs: ['en'],\n items: ['Spring', 'Summer', 'Autumn', 'Winter'],\n aliases: {\n Fall: 'Autumn'\n }\n};\n\nconst seasonsJa: SequenceList = {\n id: 'seasons-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['春', '夏', '秋', '冬']\n};\n\nconst solfegeJa: SequenceList = {\n id: 'solfege-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['ド', 'レ', 'ミ', 'ファ', 'ソ', 'ラ', 'シ']\n};\n\nconst solfegeEn: SequenceList = {\n id: 'solfege-en',\n mode: 'cycle',\n langs: ['en'],\n items: ['Do', 'Re', 'Mi', 'Fa', 'Sol', 'La', 'Ti'],\n aliases: {\n So: 'Sol',\n Si: 'Ti'\n }\n};\n\nconst greekLettersEn: SequenceList = {\n id: 'greek-letters-en',\n mode: 'cycle',\n langs: ['en'],\n items: [\n 'Alpha',\n 'Beta',\n 'Gamma',\n 'Delta',\n 'Epsilon',\n 'Zeta',\n 'Eta',\n 'Theta',\n 'Iota',\n 'Kappa',\n 'Lambda',\n 'Mu',\n 'Nu',\n 'Xi',\n 'Omicron',\n 'Pi',\n 'Rho',\n 'Sigma',\n 'Tau',\n 'Upsilon',\n 'Phi',\n 'Chi',\n 'Psi',\n 'Omega'\n ]\n};\n\nconst greekLettersJa: SequenceList = {\n id: 'greek-letters-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: [\n 'アルファ',\n 'ベータ',\n 'ガンマ',\n 'デルタ',\n 'イプシロン',\n 'ゼータ',\n 'イータ',\n 'シータ',\n 'イオタ',\n 'カッパ',\n 'ラムダ',\n 'ミュー',\n 'ニュー',\n 'クサイ',\n 'オミクロン',\n 'パイ',\n 'ロー',\n 'シグマ',\n 'タウ',\n 'ウプシロン',\n 'ファイ',\n 'カイ',\n 'プサイ',\n 'オメガ'\n ]\n};\n\nconst greekLettersSymbols: SequenceList = {\n id: 'greek-letters-symbols',\n mode: 'cycle',\n langs: ['en', 'ja'],\n items: [\n 'α',\n 'β',\n 'γ',\n 'δ',\n 'ε',\n 'ζ',\n 'η',\n 'θ',\n 'ι',\n 'κ',\n 'λ',\n 'μ',\n 'ν',\n 'ξ',\n 'ο',\n 'π',\n 'ρ',\n 'σ',\n 'τ',\n 'υ',\n 'φ',\n 'χ',\n 'ψ',\n 'ω'\n ],\n aliases: {\n 'ς': 'σ'\n }\n};\n\nconst rokuyo: SequenceList = {\n id: 'rokuyo-ja',\n mode: 'cycle',\n langs: ['ja'],\n items: ['先勝', '友引', '先負', '仏滅', '大安', '赤口']\n};\n\nconst heavenlyStems: SequenceList = {\n id: 'heavenly-stems-ja',\n mode: 'finite',\n langs: ['ja'],\n items: ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']\n};\n\nconst planetsEn: SequenceList = {\n id: 'planets-en',\n mode: 'finite',\n langs: ['en'],\n items: ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']\n};\n\nconst planetsJa: SequenceList = {\n id: 'planets-ja',\n mode: 'finite',\n langs: ['ja'],\n items: ['水星', '金星', '地球', '火星', '木星', '土星', '天王星', '海王星']\n};\n\nconst kujiIn: SequenceList = {\n id: 'kuji-in-ja',\n mode: 'finite',\n langs: ['ja'],\n items: ['臨', '兵', '闘', '者', '皆', '陣', '烈', '在', '前']\n};\n\nconst eightVirtues: SequenceList = {\n id: 'eight-virtues-ja',\n mode: 'finite',\n langs: ['ja'],\n items: ['仁', '義', '礼', '智', '忠', '信', '孝', '悌']\n};\n\nconst elementSymbols: SequenceList = {\n id: 'element-symbols',\n mode: 'finite',\n langs: ['ja', 'en'],\n items: [\n 'H',\n 'He',\n 'Li',\n 'Be',\n 'B',\n 'C',\n 'N',\n 'O',\n 'F',\n 'Ne',\n 'Na',\n 'Mg',\n 'Al',\n 'Si',\n 'P',\n 'S',\n 'Cl',\n 'Ar',\n 'K',\n 'Ca',\n 'Sc',\n 'Ti',\n 'V',\n 'Cr',\n 'Mn',\n 'Fe',\n 'Co',\n 'Ni',\n 'Cu',\n 'Zn',\n 'Ga',\n 'Ge',\n 'As',\n 'Se',\n 'Br',\n 'Kr',\n 'Rb',\n 'Sr',\n 'Y',\n 'Zr',\n 'Nb',\n 'Mo',\n 'Tc',\n 'Ru',\n 'Rh',\n 'Pd',\n 'Ag',\n 'Cd',\n 'In',\n 'Sn',\n 'Sb',\n 'Te',\n 'I',\n 'Xe',\n 'Cs',\n 'Ba',\n 'La',\n 'Ce',\n 'Pr',\n 'Nd',\n 'Pm',\n 'Sm',\n 'Eu',\n 'Gd',\n 'Tb',\n 'Dy',\n 'Ho',\n 'Er',\n 'Tm',\n 'Yb',\n 'Lu',\n 'Hf',\n 'Ta',\n 'W',\n 'Re',\n 'Os',\n 'Ir',\n 'Pt',\n 'Au',\n 'Hg',\n 'Tl',\n 'Pb',\n 'Bi',\n 'Po',\n 'At',\n 'Rn',\n 'Fr',\n 'Ra',\n 'Ac',\n 'Th',\n 'Pa',\n 'U',\n 'Np',\n 'Pu',\n 'Am',\n 'Cm',\n 'Bk',\n 'Cf',\n 'Es',\n 'Fm',\n 'Md',\n 'No',\n 'Lr',\n 'Rf',\n 'Db',\n 'Sg',\n 'Bh',\n 'Hs',\n 'Mt',\n 'Ds',\n 'Rg',\n 'Cn',\n 'Nh',\n 'Fl',\n 'Mc',\n 'Lv',\n 'Ts',\n 'Og'\n ]\n};\n\nconst elementNamesJa: SequenceList = {\n id: 'element-names-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '水素',\n 'ヘリウム',\n 'リチウム',\n 'ベリリウム',\n 'ホウ素',\n '炭素',\n '窒素',\n '酸素',\n 'フッ素',\n 'ネオン',\n 'ナトリウム',\n 'マグネシウム',\n 'アルミニウム',\n 'ケイ素',\n 'リン',\n '硫黄',\n '塩素',\n 'アルゴン',\n 'カリウム',\n 'カルシウム',\n 'スカンジウム',\n 'チタン',\n 'バナジウム',\n 'クロム',\n 'マンガン',\n '鉄',\n 'コバルト',\n 'ニッケル',\n '銅',\n '亜鉛',\n 'ガリウム',\n 'ゲルマニウム',\n 'ヒ素',\n 'セレン',\n '臭素',\n 'クリプトン',\n 'ルビジウム',\n 'ストロンチウム',\n 'イットリウム',\n 'ジルコニウム',\n 'ニオブ',\n 'モリブデン',\n 'テクネチウム',\n 'ルテニウム',\n 'ロジウム',\n 'パラジウム',\n '銀',\n 'カドミウム',\n 'インジウム',\n 'スズ',\n 'アンチモン',\n 'テルル',\n 'ヨウ素',\n 'キセノン',\n 'セシウム',\n 'バリウム',\n 'ランタン',\n 'セリウム',\n 'プラセオジム',\n 'ネオジム',\n 'プロメチウム',\n 'サマリウム',\n 'ユウロピウム',\n 'ガドリニウム',\n 'テルビウム',\n 'ジスプロシウム',\n 'ホルミウム',\n 'エルビウム',\n 'ツリウム',\n 'イッテルビウム',\n 'ルテチウム',\n 'ハフニウム',\n 'タンタル',\n 'タングステン',\n 'レニウム',\n 'オスミウム',\n 'イリジウム',\n '白金',\n '金',\n '水銀',\n 'タリウム',\n '鉛',\n 'ビスマス',\n 'ポロニウム',\n 'アスタチン',\n 'ラドン',\n 'フランシウム',\n 'ラジウム',\n 'アクチニウム',\n 'トリウム',\n 'プロトアクチニウム',\n 'ウラン',\n 'ネプツニウム',\n 'プルトニウム',\n 'アメリシウム',\n 'キュリウム',\n 'バークリウム',\n 'カリホルニウム',\n 'アインスタイニウム',\n 'フェルミウム',\n 'メンデレビウム',\n 'ノーベリウム',\n 'ローレンシウム',\n 'ラザホージウム',\n 'ドブニウム',\n 'シーボーギウム',\n 'ボーリウム',\n 'ハッシウム',\n 'マイトネリウム',\n 'ダームスタチウム',\n 'レントゲニウム',\n 'コペルニシウム',\n 'ニホニウム',\n 'フレロビウム',\n 'モスコビウム',\n 'リバモリウム',\n 'テネシン',\n 'オガネソン'\n ]\n};\n\nconst shogunsKamakura: SequenceList = {\n id: 'shoguns-kamakura-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '源頼朝',\n '源頼家',\n '源実朝',\n '九条頼経',\n '九条頼嗣',\n '宗尊親王',\n '惟康親王',\n '久明親王',\n '守邦親王'\n ]\n};\n\nconst shogunsAshikaga: SequenceList = {\n id: 'shoguns-ashikaga-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '足利尊氏',\n '足利義詮',\n '足利義満',\n '足利義持',\n '足利義量',\n '足利義教',\n '足利義勝',\n '足利義政',\n '足利義尚',\n '足利義稙',\n '足利義澄',\n '足利義晴',\n '足利義輝',\n '足利義栄',\n '足利義昭'\n ]\n};\n\nconst shogunsAshikagaGiven: SequenceList = {\n id: 'shoguns-ashikaga-given-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '尊氏',\n '義詮',\n '義満',\n '義持',\n '義量',\n '義教',\n '義勝',\n '義政',\n '義尚',\n '義稙',\n '義澄',\n '義晴',\n '義輝',\n '義栄',\n '義昭'\n ]\n};\n\nconst shogunsTokugawa: SequenceList = {\n id: 'shoguns-tokugawa-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '徳川家康',\n '徳川秀忠',\n '徳川家光',\n '徳川家綱',\n '徳川綱吉',\n '徳川家宣',\n '徳川家継',\n '徳川吉宗',\n '徳川家重',\n '徳川家治',\n '徳川家斉',\n '徳川家慶',\n '徳川家定',\n '徳川家茂',\n '徳川慶喜'\n ]\n};\n\nconst shogunsTokugawaGiven: SequenceList = {\n id: 'shoguns-tokugawa-given-ja',\n mode: 'finite',\n langs: ['ja'],\n items: [\n '家康',\n '秀忠',\n '家光',\n '家綱',\n '綱吉',\n '家宣',\n '家継',\n '吉宗',\n '家重',\n '家治',\n '家斉',\n '家慶',\n '家定',\n '家茂',\n '慶喜'\n ]\n};\n\nconst prefectureItems: string[] = [\n '北海道',\n '青森県',\n '岩手県',\n '宮城県',\n '秋田県',\n '山形県',\n '福島県',\n '茨城県',\n '栃木県',\n '群馬県',\n '埼玉県',\n '千葉県',\n '東京都',\n '神奈川県',\n '新潟県',\n '富山県',\n '石川県',\n '福井県',\n '山梨県',\n '長野県',\n '岐阜県',\n '静岡県',\n '愛知県',\n '三重県',\n '滋賀県',\n '京都府',\n '大阪府',\n '兵庫県',\n '奈良県',\n '和歌山県',\n '鳥取県',\n '島根県',\n '岡山県',\n '広島県',\n '山口県',\n '徳島県',\n '香川県',\n '愛媛県',\n '高知県',\n '福岡県',\n '佐賀県',\n '長崎県',\n '熊本県',\n '大分県',\n '宮崎県',\n '鹿児島県',\n '沖縄県'\n];\n\nconst prefectureAliases: Record<string, string> = prefectureItems.reduce(\n (aliases, item) => {\n if (item === '北海道') {\n return aliases;\n }\n if (/[都府県]$/.test(item)) {\n const alias = item.slice(0, -1);\n aliases[alias] = item;\n }\n return aliases;\n },\n {} as Record<string, string>\n);\n\nconst prefecturesJa: SequenceList = {\n id: 'prefectures-ja',\n mode: 'finite',\n langs: ['ja'],\n items: prefectureItems,\n aliases: prefectureAliases\n};\n\nconst usStates: SequenceList = {\n id: 'us-states-en',\n mode: 'finite',\n langs: ['en'],\n items: [\n 'Alabama',\n 'Alaska',\n 'Arizona',\n 'Arkansas',\n 'California',\n 'Colorado',\n 'Connecticut',\n 'Delaware',\n 'Florida',\n 'Georgia',\n 'Hawaii',\n 'Idaho',\n 'Illinois',\n 'Indiana',\n 'Iowa',\n 'Kansas',\n 'Kentucky',\n 'Louisiana',\n 'Maine',\n 'Maryland',\n 'Massachusetts',\n 'Michigan',\n 'Minnesota',\n 'Mississippi',\n 'Missouri',\n 'Montana',\n 'Nebraska',\n 'Nevada',\n 'New Hampshire',\n 'New Jersey',\n 'New Mexico',\n 'New York',\n 'North Carolina',\n 'North Dakota',\n 'Ohio',\n 'Oklahoma',\n 'Oregon',\n 'Pennsylvania',\n 'Rhode Island',\n 'South Carolina',\n 'South Dakota',\n 'Tennessee',\n 'Texas',\n 'Utah',\n 'Vermont',\n 'Virginia',\n 'Washington',\n 'West Virginia',\n 'Wisconsin',\n 'Wyoming'\n ]\n};\n\nconst usStateAbbreviations: SequenceList = {\n id: 'us-states-abbrev-en',\n mode: 'finite',\n langs: ['en'],\n items: [\n 'AL',\n 'AK',\n 'AZ',\n 'AR',\n 'CA',\n 'CO',\n 'CT',\n 'DE',\n 'FL',\n 'GA',\n 'HI',\n 'ID',\n 'IL',\n 'IN',\n 'IA',\n 'KS',\n 'KY',\n 'LA',\n 'ME',\n 'MD',\n 'MA',\n 'MI',\n 'MN',\n 'MS',\n 'MO',\n 'MT',\n 'NE',\n 'NV',\n 'NH',\n 'NJ',\n 'NM',\n 'NY',\n 'NC',\n 'ND',\n 'OH',\n 'OK',\n 'OR',\n 'PA',\n 'RI',\n 'SC',\n 'SD',\n 'TN',\n 'TX',\n 'UT',\n 'VT',\n 'VA',\n 'WA',\n 'WV',\n 'WI',\n 'WY'\n ]\n};\n\nconst windowsVersions: SequenceList = {\n id: 'windows-versions',\n mode: 'finite',\n langs: ['ja', 'en'],\n items: [\n 'Windows 1.0',\n 'Windows 2.0',\n 'Windows 2.1',\n 'Windows 3.0',\n 'Windows 3.1',\n 'Windows 3.11',\n 'Windows 95',\n 'Windows 98',\n 'Windows 98 SE',\n 'Windows Me',\n 'Windows XP',\n 'Windows Vista',\n 'Windows 7',\n 'Windows 8',\n 'Windows 8.1',\n 'Windows 10',\n 'Windows 11'\n ]\n};\n\nconst macosVersions: SequenceList = {\n id: 'macos-versions',\n mode: 'finite',\n langs: ['ja', 'en'],\n items: [\n 'Cheetah',\n 'Puma',\n 'Jaguar',\n 'Panther',\n 'Tiger',\n 'Leopard',\n 'Snow Leopard',\n 'Lion',\n 'Mountain Lion',\n 'Mavericks',\n 'Yosemite',\n 'El Capitan',\n 'Sierra',\n 'High Sierra',\n 'Mojave',\n 'Catalina',\n 'Big Sur',\n 'Monterey',\n 'Ventura',\n 'Sonoma',\n 'Sequoia',\n 'Tahoe'\n ]\n};\n\nconst debianVersions: SequenceList = {\n id: 'debian-codenames',\n mode: 'finite',\n langs: ['ja', 'en'],\n items: [\n 'buzz',\n 'rex',\n 'bo',\n 'hamm',\n 'slink',\n 'potato',\n 'woody',\n 'sarge',\n 'etch',\n 'lenny',\n 'squeeze',\n 'wheezy',\n 'jessie',\n 'stretch',\n 'buster',\n 'bullseye',\n 'bookworm',\n 'trixie'\n ]\n};\n\nconst builtInLists: SequenceList[] = [\n weekdaysEnLong,\n weekdaysEnShort,\n weekdaysJaLong,\n weekdaysJaShort,\n weekdaysJaSingle,\n monthsEnLong,\n monthsEnShort,\n monthsJa,\n monthsJaTraditional,\n quartersEn,\n quartersJa,\n zodiacAnimals,\n zodiacSignsEn,\n zodiacSignsJa,\n directions16En,\n directions16Ja,\n ampmEn,\n ampmJa,\n seasonsEn,\n seasonsJa,\n solfegeJa,\n solfegeEn,\n greekLettersEn,\n greekLettersJa,\n greekLettersSymbols,\n rokuyo,\n heavenlyStems,\n planetsEn,\n planetsJa,\n kujiIn,\n eightVirtues,\n elementSymbols,\n elementNamesJa,\n shogunsKamakura,\n shogunsAshikaga,\n shogunsAshikagaGiven,\n shogunsTokugawa,\n shogunsTokugawaGiven,\n prefecturesJa,\n usStates,\n usStateAbbreviations,\n windowsVersions,\n macosVersions,\n debianVersions\n];\n\nexport const ordinalSuffix = (value: number): string => {\n const mod100 = value % 100;\n if (mod100 >= 11 && mod100 <= 13) return 'th';\n const mod10 = value % 10;\n if (mod10 === 1) return 'st';\n if (mod10 === 2) return 'nd';\n if (mod10 === 3) return 'rd';\n return 'th';\n};\n\nconst ordinalUnitWords: Record<number, string> = {\n 1: 'first',\n 2: 'second',\n 3: 'third',\n 4: 'fourth',\n 5: 'fifth',\n 6: 'sixth',\n 7: 'seventh',\n 8: 'eighth',\n 9: 'ninth',\n 10: 'tenth',\n 11: 'eleventh',\n 12: 'twelfth',\n 13: 'thirteenth',\n 14: 'fourteenth',\n 15: 'fifteenth',\n 16: 'sixteenth',\n 17: 'seventeenth',\n 18: 'eighteenth',\n 19: 'nineteenth'\n};\n\nconst ordinalTensWords: Record<number, string> = {\n 20: 'twentieth',\n 30: 'thirtieth',\n 40: 'fortieth',\n 50: 'fiftieth',\n 60: 'sixtieth',\n 70: 'seventieth',\n 80: 'eightieth',\n 90: 'ninetieth'\n};\n\nconst cardinalTensWords: Record<number, string> = {\n 20: 'twenty',\n 30: 'thirty',\n 40: 'forty',\n 50: 'fifty',\n 60: 'sixty',\n 70: 'seventy',\n 80: 'eighty',\n 90: 'ninety'\n};\n\nconst ordinalUnitLookup = Object.fromEntries(\n Object.entries(ordinalUnitWords).map(([key, value]) => [value, Number(key)])\n);\nconst ordinalTensLookup = Object.fromEntries(\n Object.entries(ordinalTensWords).map(([key, value]) => [value, Number(key)])\n);\nconst cardinalTensLookup = Object.fromEntries(\n Object.entries(cardinalTensWords).map(([key, value]) => [value, Number(key)])\n);\n\nexport const parseEnglishOrdinalWord = (value: string): number | null => {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return null;\n const direct = ordinalUnitLookup[normalized] ?? ordinalTensLookup[normalized];\n if (direct) return direct;\n const parts = normalized.split(/[-\\s]+/);\n if (parts.length !== 2) return null;\n const tens = cardinalTensLookup[parts[0] ?? ''];\n const unit = ordinalUnitLookup[parts[1] ?? ''];\n if (!tens || !unit) return null;\n return tens + unit;\n};\n\nexport const formatEnglishOrdinalWord = (value: number): string | null => {\n if (!Number.isFinite(value) || value <= 0 || Math.floor(value) !== value) return null;\n if (value <= 19) return ordinalUnitWords[value] ?? null;\n if (value < 100) {\n if (ordinalTensWords[value]) return ordinalTensWords[value] ?? null;\n const tens = Math.floor(value / 10) * 10;\n const unit = value % 10;\n const tensWord = cardinalTensWords[tens];\n const unitWord = ordinalUnitWords[unit];\n if (!tensWord || !unitWord) return null;\n return `${tensWord}-${unitWord}`;\n }\n return null;\n};\n\ntype OrdinalParse = { value: number; format: 'numeric' | 'word' };\n\nconst parseOrdinal = (value: string): OrdinalParse | null => {\n const match = /^(\\d+)(st|nd|rd|th)$/i.exec(value);\n if (match) {\n const num = Number(match[1]);\n if (!Number.isFinite(num) || num <= 0) return null;\n const suffix = match[2]?.toLowerCase();\n if (ordinalSuffix(num) !== suffix) return null;\n return { value: num, format: 'numeric' };\n }\n const word = parseEnglishOrdinalWord(value);\n if (word !== null) {\n return { value: word, format: 'word' };\n }\n return null;\n};\n\nconst ordinalMatcher: SequenceMatch = {\n id: 'ordinal-en',\n langs: ['en'],\n match(seed) {\n if (seed.length < 2) return null;\n const parsed = seed.map((value) => parseOrdinal(value));\n if (parsed.some((value) => value === null)) return null;\n const format = parsed[0]!.format;\n if (parsed.some((entry) => entry?.format !== format)) return null;\n const nums = parsed.map((entry) => entry!.value);\n const step = nums[1]! - nums[0]!;\n for (let i = 2; i < nums.length; i += 1) {\n if (nums[i]! - nums[i - 1]! !== step) return null;\n }\n return { score: 80, step, state: { format } };\n },\n createIterator(seed, ctx) {\n const parsed = parseOrdinal(seed[seed.length - 1] ?? '');\n const format = (ctx.state as { format?: 'numeric' | 'word' } | undefined)?.format ?? 'numeric';\n let current = parsed?.value ?? 0;\n return {\n next() {\n current += ctx.step;\n if (current <= 0 || !Number.isFinite(current)) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n if (format === 'word') {\n const word = formatEnglishOrdinalWord(current);\n if (!word) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value: word, done: false };\n }\n return { value: `${current}${ordinalSuffix(current)}`, done: false };\n }\n };\n }\n};\n\nexport const registerBuiltInLists = (registry: SequenceRegistry): void => {\n for (const list of builtInLists) {\n registry.register(list);\n }\n};\n\nexport const registerBuiltInMatchers = (registry: SequenceRegistry): void => {\n registry.registerMatch(ordinalMatcher);\n};\n\nexport const createBuiltInRegistry = (langs?: readonly string[]): SequenceRegistry => {\n const effectiveLangs = langs ?? ['en', 'ja'];\n const registry = new SequenceRegistry({ langs: effectiveLangs });\n registerBuiltInLists(registry);\n registerBuiltInMatchers(registry);\n return registry;\n};\n","import type { SequenceKind, SequenceValue } from './types';\n\nconst createSeedRepeatIterator = <T>(seed: readonly T[]): Iterator<T> => {\n let index = 0;\n return {\n next() {\n if (seed.length === 0) {\n return { value: undefined, done: true } as IteratorResult<T>;\n }\n const value = seed[index % seed.length] as T;\n index += 1;\n return { value, done: false };\n }\n };\n};\n\nexport class Sequence<T extends SequenceValue> implements Iterable<T>, Iterator<T> {\n readonly seed: readonly T[];\n kind: SequenceKind;\n private iterator: Iterator<T>;\n\n constructor(...seed: T[]);\n constructor(...args: unknown[]) {\n const seed = args as T[];\n this.seed = seed;\n this.kind = seed.length === 1 ? 'copy' : 'seed-repeat';\n this.iterator = createSeedRepeatIterator(seed);\n }\n\n static fromSeed<T extends SequenceValue>(\n seed: readonly T[],\n kind: SequenceKind,\n iterator: Iterator<T>\n ): Sequence<T> {\n const instance = new Sequence<T>(...seed);\n instance.kind = kind;\n instance.iterator = iterator;\n return instance;\n }\n\n next(): IteratorResult<T> {\n return this.iterator.next();\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this;\n }\n}\n","import {\n createBuiltInRegistry,\n formatEnglishOrdinalWord,\n ordinalSuffix,\n parseEnglishOrdinalWord\n} from './builtins';\nimport { Sequence } from './sequence';\nimport type { SequenceKind, SequenceValue } from './types';\nimport type { SequenceMatchResult, SequenceRegistry } from './registry';\n\nconst numberEpsilon = 1e-9;\nconst romanMax = 100;\n\nconst createCopyIterator = <T>(value: T): Iterator<T> => {\n return {\n next() {\n return { value, done: false };\n }\n };\n};\n\nconst createSeedRepeatIterator = <T>(seed: readonly T[]): Iterator<T> => {\n let index = 0;\n return {\n next() {\n if (seed.length === 0) {\n return { value: undefined, done: true } as IteratorResult<T>;\n }\n const value = seed[index % seed.length] as T;\n index += 1;\n return { value, done: false };\n }\n };\n};\n\nconst createArithmeticNumberIterator = (last: number, step: number): Iterator<number> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const value = last + step * offset;\n return { value, done: false };\n }\n };\n};\n\nconst createArithmeticDateIterator = (last: Date, stepMs: number): Iterator<Date> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const value = new Date(last.getTime() + stepMs * offset);\n return { value, done: false };\n }\n };\n};\n\nconst createGeometricIterator = (last: number, ratio: number): Iterator<number> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const value = last * ratio ** offset;\n return { value, done: false };\n }\n };\n};\n\nconst createListIterator = (\n match: SequenceMatchResult,\n seed: readonly string[]\n): Iterator<string> => {\n if (match.kind === 'matcher') {\n return match.matcher.createIterator(seed, { step: match.step, state: match.state });\n }\n const { list, startIndex, step } = match;\n const length = list.items.length;\n let currentIndex = startIndex;\n return {\n next() {\n if (list.mode === 'finite') {\n const nextIndex = currentIndex + step;\n if (nextIndex >= length) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n currentIndex = nextIndex;\n return { value: list.items[currentIndex] as string, done: false };\n }\n currentIndex = (currentIndex + step) % length;\n return { value: list.items[currentIndex] as string, done: false };\n }\n };\n};\n\nconst isNumberSeed = (seed: readonly SequenceValue[]): seed is readonly number[] => {\n return seed.every((value) => typeof value === 'number' && Number.isFinite(value));\n};\n\nconst isDateSeed = (seed: readonly SequenceValue[]): seed is readonly Date[] => {\n return seed.every((value) => value instanceof Date && !Number.isNaN(value.getTime()));\n};\n\nconst isStringSeed = (seed: readonly SequenceValue[]): seed is readonly string[] => {\n return seed.every((value) => typeof value === 'string');\n};\n\nconst parseEmbeddedNumber = (value: string): { prefix: string; num: number; width: number; suffix: string } | null => {\n const match = /^(.*?)(-?\\d+)([^0-9]*)$/.exec(value);\n if (!match) {\n return null;\n }\n const prefix = match[1] ?? '';\n const digits = match[2] ?? '';\n const suffix = match[3] ?? '';\n const num = Number(digits);\n if (!Number.isFinite(num)) {\n return null;\n }\n const width = digits.replace('-', '').length;\n return { prefix, num, width, suffix };\n};\n\nconst parseEmbeddedOrdinal = (\n value: string\n): { prefix: string; num: number; suffix: string; format: 'numeric' | 'word' } | null => {\n const numMatch = /^(.*?)(\\d+)(st|nd|rd|th)([^0-9]*)$/i.exec(value);\n if (numMatch) {\n const num = Number(numMatch[2]);\n if (!Number.isFinite(num) || num <= 0) return null;\n const suffixToken = numMatch[3]?.toLowerCase();\n if (ordinalSuffix(num) !== suffixToken) return null;\n return {\n prefix: numMatch[1] ?? '',\n num,\n suffix: numMatch[4] ?? '',\n format: 'numeric'\n };\n }\n const wordMatch = /^(.*?)([A-Za-z-]+)([^A-Za-z]*)$/.exec(value);\n if (!wordMatch) return null;\n const num = parseEnglishOrdinalWord(wordMatch[2] ?? '');\n if (num === null) return null;\n return {\n prefix: wordMatch[1] ?? '',\n num,\n suffix: wordMatch[3] ?? '',\n format: 'word'\n };\n};\n\nconst createEmbeddedOrdinalIterator = (\n template: { prefix: string; suffix: string; format: 'numeric' | 'word' },\n last: number,\n step: number\n): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const next = last + step * offset;\n if (next <= 0 || !Number.isFinite(next)) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n if (template.format === 'word') {\n const word = formatEnglishOrdinalWord(next);\n if (!word) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value: `${template.prefix}${word}${template.suffix}`, done: false };\n }\n return {\n value: `${template.prefix}${next}${ordinalSuffix(next)}${template.suffix}`,\n done: false\n };\n }\n };\n};\n\nconst createEmbeddedNumberIterator = (\n template: { prefix: string; suffix: string; width: number },\n last: number,\n step: number\n): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const next = last + step * offset;\n const sign = next < 0 ? '-' : '';\n const digits = Math.abs(next).toString().padStart(template.width, '0');\n return { value: `${template.prefix}${sign}${digits}${template.suffix}`, done: false };\n }\n };\n};\n\nconst romanMap: Array<[string, number]> = [\n ['C', 100],\n ['XC', 90],\n ['L', 50],\n ['XL', 40],\n ['X', 10],\n ['IX', 9],\n ['V', 5],\n ['IV', 4],\n ['I', 1]\n];\n\nconst toRoman = (value: number): string | null => {\n if (value < 1 || value > romanMax) {\n return null;\n }\n let remaining = value;\n let output = '';\n for (const [symbol, amount] of romanMap) {\n while (remaining >= amount) {\n output += symbol;\n remaining -= amount;\n }\n }\n return output;\n};\n\nconst parseRoman = (value: string): number | null => {\n if (value.length === 0) {\n return null;\n }\n if (value !== value.toUpperCase()) {\n return null;\n }\n let remaining = value;\n let total = 0;\n for (const [symbol, amount] of romanMap) {\n while (remaining.startsWith(symbol)) {\n total += amount;\n remaining = remaining.slice(symbol.length);\n }\n }\n if (remaining.length > 0) {\n return null;\n }\n const canonical = toRoman(total);\n if (!canonical || canonical !== value) {\n return null;\n }\n return total;\n};\n\nconst createRomanIterator = (last: number, step: number): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const next = last + step * offset;\n const roman = toRoman(next);\n if (!roman) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value: roman, done: false };\n }\n };\n};\n\ntype UnicodeGroup =\n | 'latin'\n | 'han'\n | 'hiragana'\n | 'katakana'\n | 'number'\n | 'punct'\n | 'symbol'\n | 'space'\n | 'other';\n\nconst getUnicodeGroup = (char: string): UnicodeGroup => {\n if (/\\p{White_Space}/u.test(char)) return 'space';\n if (/\\p{P}/u.test(char)) return 'punct';\n if (/\\p{S}/u.test(char)) return 'symbol';\n if (/\\p{Script=Latin}/u.test(char)) return 'latin';\n if (/\\p{Script=Han}/u.test(char)) return 'han';\n if (/\\p{Script=Hiragana}/u.test(char)) return 'hiragana';\n if (/\\p{Script=Katakana}/u.test(char)) return 'katakana';\n if (/\\p{N}/u.test(char)) return 'number';\n return 'other';\n};\n\nconst splitByUnicodeGroups = (value: string): Array<{ value: string; group: UnicodeGroup }> => {\n const segments: Array<{ value: string; group: UnicodeGroup }> = [];\n let current = '';\n let currentGroup: UnicodeGroup | null = null;\n for (const char of value) {\n const group = getUnicodeGroup(char);\n if (currentGroup === group) {\n current += char;\n continue;\n }\n if (currentGroup !== null) {\n segments.push({ value: current, group: currentGroup });\n }\n current = char;\n currentGroup = group;\n }\n if (currentGroup !== null) {\n segments.push({ value: current, group: currentGroup });\n }\n return segments;\n};\n\nconst parseEmbeddedRoman = (value: string): { prefix: string; num: number; suffix: string } | null => {\n const segments = splitByUnicodeGroups(value);\n const romanSegments = segments\n .map((segment, index) => ({ index, num: parseRoman(segment.value) }))\n .filter((entry) => entry.num !== null);\n if (romanSegments.length !== 1) {\n return null;\n }\n const romanIndex = romanSegments[0]!.index;\n const num = romanSegments[0]!.num as number;\n const prefix = segments.slice(0, romanIndex).map((segment) => segment.value).join('');\n const suffix = segments.slice(romanIndex + 1).map((segment) => segment.value).join('');\n return { prefix, num, suffix };\n};\n\nconst createEmbeddedRomanIterator = (\n template: { prefix: string; suffix: string },\n last: number,\n step: number\n): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const nextValue = last + step * offset;\n const roman = toRoman(nextValue);\n if (!roman) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value: `${template.prefix}${roman}${template.suffix}`, done: false };\n }\n };\n};\n\ntype KanjiStyle = 'modern' | 'traditional';\n\nconst kanjiDigitsModern: Record<string, number> = {\n 一: 1,\n 二: 2,\n 三: 3,\n 四: 4,\n 五: 5,\n 六: 6,\n 七: 7,\n 八: 8,\n 九: 9\n};\n\nconst kanjiDigitsTraditional: Record<string, number> = {\n 壱: 1,\n 弐: 2,\n 参: 3,\n 肆: 4,\n 伍: 5,\n 陸: 6,\n 柒: 7,\n 捌: 8,\n 玖: 9\n};\n\nconst kanjiUnits: Record<string, number> = {\n 十: 10,\n 拾: 10,\n 百: 100,\n 佰: 100,\n 千: 1000,\n 仟: 1000\n};\n\nconst kanjiTenThousand: Record<string, number> = {\n 万: 10000,\n 萬: 10000\n};\n\nconst kanjiNumeralChars = new Set([\n ...Object.keys(kanjiDigitsModern),\n ...Object.keys(kanjiDigitsTraditional),\n ...Object.keys(kanjiUnits),\n ...Object.keys(kanjiTenThousand)\n]);\n\nconst isKanjiNumeralChar = (char: string): boolean => kanjiNumeralChars.has(char);\n\nconst detectKanjiStyle = (value: string): KanjiStyle => {\n if (/[壱弐参肆伍陸柒捌玖拾萬佰仟]/.test(value)) {\n return 'traditional';\n }\n return 'modern';\n};\n\nconst parseKanjiNumber = (value: string): { num: number; style: KanjiStyle } | null => {\n if (!value) {\n return null;\n }\n const style = detectKanjiStyle(value);\n const hasTenThousand = value.includes('万') || value.includes('萬');\n if (hasTenThousand) {\n const match = /^([一二三四五六七八九壱弐参肆伍陸柒捌玖])?(万|萬)$/.exec(value);\n if (!match) {\n return null;\n }\n const digit = match[1];\n if (!digit) {\n return { num: 10000, style };\n }\n const num = kanjiDigitsModern[digit] ?? kanjiDigitsTraditional[digit];\n if (num !== 1) {\n return null;\n }\n return { num: 10000, style };\n }\n\n let total = 0;\n let current = 0;\n let lastUnit = Number.POSITIVE_INFINITY;\n let lastWasDigit = false;\n for (const char of value) {\n const digit = kanjiDigitsModern[char] ?? kanjiDigitsTraditional[char];\n if (digit) {\n if (lastWasDigit) {\n return null;\n }\n current = digit;\n lastWasDigit = true;\n continue;\n }\n const unit = kanjiUnits[char];\n if (unit) {\n if (unit >= lastUnit) {\n return null;\n }\n if (current === 0) {\n current = 1;\n }\n total += current * unit;\n current = 0;\n lastUnit = unit;\n lastWasDigit = false;\n continue;\n }\n if (kanjiTenThousand[char]) {\n return null;\n }\n return null;\n }\n total += current;\n if (total <= 0 || total > 10000) {\n return null;\n }\n return { num: total, style };\n};\n\nconst parseEmbeddedKanji = (\n value: string\n): { prefix: string; num: number; suffix: string; style: KanjiStyle } | null => {\n const runs: Array<{ start: number; end: number; text: string }> = [];\n let current = '';\n let startIndex = 0;\n let index = 0;\n for (const char of value) {\n if (isKanjiNumeralChar(char)) {\n if (!current) {\n startIndex = index;\n }\n current += char;\n } else {\n if (current) {\n runs.push({ start: startIndex, end: index, text: current });\n current = '';\n }\n }\n index += char.length;\n }\n if (current) {\n runs.push({ start: startIndex, end: index, text: current });\n }\n const matches = runs\n .map((run) => ({ run, parsed: parseKanjiNumber(run.text) }))\n .filter((entry) => entry.parsed !== null);\n if (matches.length !== 1) {\n return null;\n }\n const match = matches[0]!;\n const prefix = value.slice(0, match.run.start);\n const suffix = value.slice(match.run.end);\n return {\n prefix,\n num: match.parsed!.num,\n suffix,\n style: match.parsed!.style\n };\n};\n\nconst toKanjiNumber = (value: number, style: KanjiStyle): string | null => {\n if (!Number.isFinite(value) || value <= 0 || value > 10000) {\n return null;\n }\n const digits = style === 'traditional'\n ? ['', '壱', '弐', '参', '肆', '伍', '陸', '柒', '捌', '玖']\n : ['', '一', '二', '三', '四', '五', '六', '七', '八', '九'];\n const tenUnit = style === 'traditional' ? '拾' : '十';\n const tenThousandUnit = style === 'traditional' ? '萬' : '万';\n if (value === 10000) {\n return `${digits[1]}${tenThousandUnit}`;\n }\n let remaining = value;\n let output = '';\n const thousands = Math.floor(remaining / 1000);\n if (thousands > 0) {\n if (thousands > 1) {\n output += digits[thousands];\n }\n output += '千';\n remaining %= 1000;\n }\n const hundreds = Math.floor(remaining / 100);\n if (hundreds > 0) {\n if (hundreds > 1) {\n output += digits[hundreds];\n }\n output += '百';\n remaining %= 100;\n }\n const tens = Math.floor(remaining / 10);\n if (tens > 0) {\n if (tens > 1) {\n output += digits[tens];\n }\n output += tenUnit;\n remaining %= 10;\n }\n if (remaining > 0) {\n output += digits[remaining];\n }\n return output || null;\n};\n\nconst createKanjiIterator = (last: number, step: number, style: KanjiStyle): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const nextValue = last + step * offset;\n const value = toKanjiNumber(nextValue, style);\n if (!value) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value, done: false };\n }\n };\n};\n\nconst createEmbeddedKanjiIterator = (\n template: { prefix: string; suffix: string; style: KanjiStyle },\n last: number,\n step: number\n): Iterator<string> => {\n let offset = 0;\n return {\n next() {\n offset += 1;\n const nextValue = last + step * offset;\n const value = toKanjiNumber(nextValue, template.style);\n if (!value) {\n return { value: undefined, done: true } as IteratorResult<string>;\n }\n return { value: `${template.prefix}${value}${template.suffix}`, done: false };\n }\n };\n};\n\nconst matchArithmetic = (values: readonly number[]): number | null => {\n if (values.length < 2) {\n return null;\n }\n const step = values[1]! - values[0]!;\n for (let i = 2; i < values.length; i += 1) {\n if (Math.abs(values[i]! - values[i - 1]! - step) > numberEpsilon) {\n return null;\n }\n }\n return step;\n};\n\nconst matchGeometric = (values: readonly number[]): number | null => {\n if (values.length < 2) {\n return null;\n }\n if (values[0] === 0) {\n return null;\n }\n const ratio = values[1]! / values[0]!;\n for (let i = 2; i < values.length; i += 1) {\n if (values[i - 1] === 0) {\n return null;\n }\n if (Math.abs(values[i]! / values[i - 1]! - ratio) > numberEpsilon) {\n return null;\n }\n }\n return ratio;\n};\n\nconst inferStringSequence = (\n seed: readonly string[]\n): { kind: SequenceKind; iterator: Iterator<string> } | null => {\n const embeddedOrdinal = seed.map((value) => parseEmbeddedOrdinal(value));\n if (embeddedOrdinal.every((value) => value !== null)) {\n const parsed = embeddedOrdinal as Array<{\n prefix: string;\n num: number;\n suffix: string;\n format: 'numeric' | 'word';\n }>;\n const template = parsed[0]!;\n const matchesTemplate = parsed.every(\n (item) =>\n item.prefix === template.prefix &&\n item.suffix === template.suffix &&\n item.format === template.format\n );\n if (matchesTemplate) {\n const numeric = parsed.map((item) => item.num);\n const step = matchArithmetic(numeric);\n if (step !== null) {\n const last = parsed[parsed.length - 1]!;\n return {\n kind: 'arithmetic',\n iterator: createEmbeddedOrdinalIterator(\n { prefix: template.prefix, suffix: template.suffix, format: template.format },\n last.num,\n step\n )\n };\n }\n }\n }\n\n const embedded = seed.map((value) => parseEmbeddedNumber(value));\n if (embedded.every(Boolean)) {\n const first = embedded[0]!;\n const last = embedded[embedded.length - 1]!;\n const samePattern = embedded.every(\n (entry) => entry?.prefix === first.prefix && entry?.suffix === first.suffix\n );\n if (samePattern) {\n const values = embedded.map((entry) => entry?.num ?? 0);\n const step = matchArithmetic(values);\n if (step !== null) {\n return {\n kind: 'arithmetic',\n iterator: createEmbeddedNumberIterator(\n { prefix: last.prefix, suffix: last.suffix, width: last.width },\n last.num,\n step\n )\n };\n }\n }\n }\n\n const romanValues = seed.map((value) => parseRoman(value));\n if (romanValues.every((value) => value !== null)) {\n const numeric = romanValues as number[];\n const step = matchArithmetic(numeric);\n if (step !== null) {\n const last = numeric[numeric.length - 1]!;\n return {\n kind: 'arithmetic',\n iterator: createRomanIterator(last, step)\n };\n }\n }\n\n const kanjiValues = seed.map((value) => parseKanjiNumber(value));\n if (kanjiValues.every((value) => value !== null)) {\n const parsed = kanjiValues as Array<{ num: number; style: KanjiStyle }>;\n const firstStyle = parsed[0]!.style;\n if (parsed.every((item) => item.style === firstStyle)) {\n const numeric = parsed.map((item) => item.num);\n const step = matchArithmetic(numeric);\n if (step !== null) {\n const last = parsed[parsed.length - 1]!;\n return {\n kind: 'arithmetic',\n iterator: createKanjiIterator(last.num, step, last.style)\n };\n }\n }\n }\n\n const embeddedRoman = seed.map((value) => parseEmbeddedRoman(value));\n if (embeddedRoman.every((value) => value !== null)) {\n const parsed = embeddedRoman as Array<{ prefix: string; num: number; suffix: string }>;\n const template = parsed[0]!;\n const matchesTemplate = parsed.every(\n (item) => item.prefix === template.prefix && item.suffix === template.suffix\n );\n if (matchesTemplate) {\n const numeric = parsed.map((item) => item.num);\n const step = matchArithmetic(numeric);\n if (step !== null) {\n const last = numeric[numeric.length - 1]!;\n return {\n kind: 'arithmetic',\n iterator: createEmbeddedRomanIterator(\n { prefix: template.prefix, suffix: template.suffix },\n last,\n step\n )\n };\n }\n }\n }\n\n const embeddedKanji = seed.map((value) => parseEmbeddedKanji(value));\n if (embeddedKanji.every((value) => value !== null)) {\n const parsed = embeddedKanji as Array<{\n prefix: string;\n num: number;\n suffix: string;\n style: KanjiStyle;\n }>;\n const template = parsed[0]!;\n const matchesTemplate = parsed.every(\n (item) =>\n item.prefix === template.prefix &&\n item.suffix === template.suffix &&\n item.style === template.style\n );\n if (matchesTemplate) {\n const numeric = parsed.map((item) => item.num);\n const step = matchArithmetic(numeric);\n if (step !== null) {\n const last = parsed[parsed.length - 1]!;\n return {\n kind: 'arithmetic',\n iterator: createEmbeddedKanjiIterator(\n { prefix: template.prefix, suffix: template.suffix, style: template.style },\n last.num,\n step\n )\n };\n }\n }\n }\n\n return null;\n};\n\nconst inferFromList = (\n seed: readonly string[],\n registry: SequenceRegistry\n): { kind: SequenceKind; iterator: Iterator<string> } | null => {\n const match = registry.match(seed);\n if (!match) {\n return null;\n }\n return {\n kind: 'list',\n iterator: createListIterator(match, seed)\n };\n};\n\nexport function inferSequence(seed: readonly number[], options?: { registry?: SequenceRegistry }): Sequence<number>;\nexport function inferSequence(seed: readonly Date[], options?: { registry?: SequenceRegistry }): Sequence<Date>;\nexport function inferSequence(seed: readonly string[], options?: { registry?: SequenceRegistry }): Sequence<string>;\nexport function inferSequence(\n seed: readonly SequenceValue[],\n options?: { registry?: SequenceRegistry }\n): Sequence<SequenceValue> {\n const registry = options?.registry ?? createBuiltInRegistry();\n if (seed.length === 0) {\n return Sequence.fromSeed(seed, 'seed-repeat', createSeedRepeatIterator(seed));\n }\n if (seed.length === 1) {\n return Sequence.fromSeed(seed, 'copy', createCopyIterator(seed[0]!));\n }\n\n if (isStringSeed(seed)) {\n const listSequence = inferFromList(seed, registry);\n if (listSequence) {\n return Sequence.fromSeed(seed, listSequence.kind, listSequence.iterator);\n }\n const structured = inferStringSequence(seed);\n if (structured) {\n return Sequence.fromSeed(seed, structured.kind, structured.iterator);\n }\n }\n\n if (isNumberSeed(seed)) {\n const step = matchArithmetic(seed);\n if (step !== null) {\n return Sequence.fromSeed(\n seed,\n 'arithmetic',\n createArithmeticNumberIterator(seed[seed.length - 1]!, step)\n );\n }\n const ratio = matchGeometric(seed);\n if (ratio !== null) {\n return Sequence.fromSeed(\n seed,\n 'geometric',\n createGeometricIterator(seed[seed.length - 1]!, ratio)\n );\n }\n }\n\n if (isDateSeed(seed)) {\n const times = seed.map((value) => value.getTime());\n const step = matchArithmetic(times);\n if (step !== null) {\n return Sequence.fromSeed(\n seed,\n 'arithmetic',\n createArithmeticDateIterator(seed[seed.length - 1]!, step)\n );\n }\n }\n\n return Sequence.fromSeed(seed, 'seed-repeat', createSeedRepeatIterator(seed));\n}\n"],"names":["normalizeQueryToken","value","normalizeLangs","langs","result","lang","normalized","resolveIndex","list","token","directIndex","canonical","canonicalIndex","hasQueryHit","queryText","normalizedQuery","item","alias","langsRank","best","index","matcherLangsAllowed","matcher","SequenceRegistry","opts","id","query","lists","enabled","seed","bestMatch","bestScore","enabledIds","matched","score","candidates","candidate","a","b","rank","indices","matchFailed","step","listScore","length","baseStep","i","expected","mode","from","to","next","weekdaysEnLong","weekdaysEnShort","weekdaysJaLong","weekdaysJaShort","weekdaysJaSingle","monthsEnLong","monthsEnShort","monthsJa","monthsJaTraditional","quartersEn","quartersJa","zodiacAnimals","zodiacSignsEn","zodiacSignsJa","directions16En","directions16Ja","ampmEn","ampmJa","seasonsEn","seasonsJa","solfegeJa","solfegeEn","greekLettersEn","greekLettersJa","greekLettersSymbols","rokuyo","heavenlyStems","planetsEn","planetsJa","kujiIn","eightVirtues","elementSymbols","elementNamesJa","shogunsKamakura","shogunsAshikaga","shogunsAshikagaGiven","shogunsTokugawa","shogunsTokugawaGiven","prefectureItems","prefectureAliases","aliases","prefecturesJa","usStates","usStateAbbreviations","windowsVersions","macosVersions","debianVersions","builtInLists","ordinalSuffix","mod100","mod10","ordinalUnitWords","ordinalTensWords","cardinalTensWords","ordinalUnitLookup","key","ordinalTensLookup","cardinalTensLookup","parseEnglishOrdinalWord","direct","parts","tens","unit","formatEnglishOrdinalWord","tensWord","unitWord","parseOrdinal","match","num","suffix","word","ordinalMatcher","parsed","format","entry","nums","ctx","current","registerBuiltInLists","registry","registerBuiltInMatchers","createBuiltInRegistry","effectiveLangs","createSeedRepeatIterator","Sequence","args","kind","iterator","instance","numberEpsilon","romanMax","createCopyIterator","createArithmeticNumberIterator","last","offset","createArithmeticDateIterator","stepMs","createGeometricIterator","ratio","createListIterator","startIndex","currentIndex","nextIndex","isNumberSeed","isDateSeed","isStringSeed","parseEmbeddedNumber","prefix","digits","width","parseEmbeddedOrdinal","numMatch","suffixToken","wordMatch","createEmbeddedOrdinalIterator","template","createEmbeddedNumberIterator","sign","romanMap","toRoman","remaining","output","symbol","amount","parseRoman","total","createRomanIterator","roman","getUnicodeGroup","char","splitByUnicodeGroups","segments","currentGroup","group","parseEmbeddedRoman","romanSegments","segment","romanIndex","createEmbeddedRomanIterator","nextValue","kanjiDigitsModern","kanjiDigitsTraditional","kanjiUnits","kanjiTenThousand","kanjiNumeralChars","isKanjiNumeralChar","detectKanjiStyle","parseKanjiNumber","style","digit","lastUnit","lastWasDigit","parseEmbeddedKanji","runs","matches","run","toKanjiNumber","tenUnit","tenThousandUnit","thousands","hundreds","createKanjiIterator","createEmbeddedKanjiIterator","matchArithmetic","values","matchGeometric","inferStringSequence","embeddedOrdinal","numeric","embedded","first","romanValues","kanjiValues","firstStyle","embeddedRoman","embeddedKanji","inferFromList","inferSequence","options","listSequence","structured","times"],"mappings":"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,KAAK,GAAG;AAChD,GAEMC,KAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,MAAM,IAAI;AAAA,EAClB,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ,GAEMC,KAA+B;AAAA,EACnC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,CAAC,IAAI;AAAA,EACZ,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,I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"}
|