bazi-terms 0.1.0
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/LICENSE +21 -0
- package/README.md +96 -0
- package/dist/index.cjs +626 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +252 -0
- package/dist/index.d.ts +252 -0
- package/dist/index.js +549 -0
- package/dist/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/data/stems.ts","../src/data/branches.ts","../src/data/elements.ts","../src/data/tenGods.ts","../src/data/growthStages.ts","../src/data/shenSha.ts","../src/data/nayin.ts","../src/data/interactions.ts","../src/data/general.ts"],"sourcesContent":["import type { Lang, Term } from './types.js';\nimport { STEMS } from './data/stems.js';\nimport { BRANCHES } from './data/branches.js';\nimport { ELEMENTS } from './data/elements.js';\nimport { TEN_GODS, tenGodByZh } from './data/tenGods.js';\nimport { GROWTH_STAGES } from './data/growthStages.js';\nimport { SHEN_SHA } from './data/shenSha.js';\nimport { NA_YIN, naYinOf } from './data/nayin.js';\nimport { INTERACTION_TYPES, interactionFromZh } from './data/interactions.js';\nimport { GENERAL_TERMS } from './data/general.js';\n\n/* ------------------------------------------------------------------ *\n * Types\n * ------------------------------------------------------------------ */\nexport * from './types.js';\n\n/* ------------------------------------------------------------------ *\n * Data modules (arrays, lookup maps and resolve functions)\n * ------------------------------------------------------------------ */\nexport * from './data/stems.js';\nexport * from './data/branches.js';\nexport * from './data/elements.js';\nexport * from './data/tenGods.js';\nexport * from './data/growthStages.js';\nexport * from './data/shenSha.js';\nexport * from './data/nayin.js';\nexport * from './data/interactions.js';\nexport * from './data/general.js';\n\n/* ------------------------------------------------------------------ *\n * Unified registry\n * ------------------------------------------------------------------ */\n\n/** Every term from every category, in a stable order. */\nexport const ALL_TERMS: readonly Term[] = Object.freeze([\n ...STEMS,\n ...BRANCHES,\n ...ELEMENTS,\n ...TEN_GODS,\n ...GROWTH_STAGES,\n ...SHEN_SHA,\n ...NA_YIN,\n ...INTERACTION_TYPES,\n ...GENERAL_TERMS,\n]);\n\n/** Lookup: unique term key → term. Keys are unique across all categories. */\nexport const TERM_BY_KEY: Readonly<Record<string, Term>> = Object.freeze(\n Object.fromEntries(ALL_TERMS.map((term) => [term.key, term])),\n);\n\n/** Lookup: Chinese label → term (exact match). */\nexport const TERM_BY_ZH: Readonly<Record<string, Term>> = Object.freeze(\n Object.fromEntries(ALL_TERMS.map((term) => [term.zh, term])),\n);\n\n/**\n * Translate a term key into the requested language.\n * Returns the key itself when unknown, so rendering never breaks.\n *\n * @example t('dayMaster') // 'Day Master'\n * @example t('dayMaster', 'zh') // '日主'\n */\nexport function t(key: string, lang: Lang = 'en'): string {\n const term = TERM_BY_KEY[key];\n if (!term) return key;\n return lang === 'zh' ? term.zh : term.en;\n}\n\n/**\n * Best-effort translation of any raw engine value or term key.\n * Resolution order (exact → fuzzy):\n * 1. term key (e.g. 'qiSha')\n * 2. exact Chinese label (e.g. '天乙贵人', '海中金', '比肩')\n * 3. ten-god alias (e.g. '元男' → Day Master, '偏官' → Seven Killings)\n * 4. Na Yin by GanZhi (e.g. '甲子' → Sea Gold)\n * 5. interaction by verb (e.g. '午子相冲' → Clash)\n * Falls back to the original input when nothing matches.\n *\n * @example translate('元男') // 'Day Master'\n * @example translate('午子相冲') // 'Clash'\n * @example translate('甲子', 'zh') // '海中金'\n */\nexport function translate(input: string, lang: Lang = 'en'): string {\n const term =\n TERM_BY_KEY[input] ??\n TERM_BY_ZH[input] ??\n tenGodByZh(input) ??\n naYinOf(input) ??\n interactionFromZh(input);\n if (!term) return input;\n return lang === 'zh' ? term.zh : term.en;\n}\n","import type { StemTerm } from '../types.js';\n\n/**\n * The Ten Heavenly Stems (十天干).\n * Order matters: index is used for combination/clash arithmetic.\n */\nexport const STEMS: readonly StemTerm[] = [\n { key: 'jia', zh: '甲', en: 'Jia', pinyin: 'jiǎ', element: 'wood', polarity: 'yang', definition: 'Yang Wood — a towering tree; growth, initiative and uprightness.' },\n { key: 'yi', zh: '乙', en: 'Yi', pinyin: 'yǐ', element: 'wood', polarity: 'yin', definition: 'Yin Wood — flowering plants and vines; flexibility and adaptability.' },\n { key: 'bing', zh: '丙', en: 'Bing', pinyin: 'bǐng', element: 'fire', polarity: 'yang', definition: 'Yang Fire — the sun; brightness, generosity and visibility.' },\n { key: 'ding', zh: '丁', en: 'Ding', pinyin: 'dīng', element: 'fire', polarity: 'yin', definition: 'Yin Fire — a candle or lamp flame; focus, warmth and refinement.' },\n { key: 'wu', zh: '戊', en: 'Wu', pinyin: 'wù', element: 'earth', polarity: 'yang', definition: 'Yang Earth — a mountain or city wall; stability and reliability.' },\n { key: 'ji', zh: '己', en: 'Ji', pinyin: 'jǐ', element: 'earth', polarity: 'yin', definition: 'Yin Earth — garden soil; nourishment, patience and practicality.' },\n { key: 'geng', zh: '庚', en: 'Geng', pinyin: 'gēng', element: 'metal', polarity: 'yang', definition: 'Yang Metal — a sword or axe; decisiveness, justice and resolve.' },\n { key: 'xin', zh: '辛', en: 'Xin', pinyin: 'xīn', element: 'metal', polarity: 'yin', definition: 'Yin Metal — jewelry and fine ornaments; precision, elegance and sensitivity.' },\n { key: 'ren', zh: '壬', en: 'Ren', pinyin: 'rén', element: 'water', polarity: 'yang', definition: 'Yang Water — the ocean or a great river; movement, ambition and resourcefulness.' },\n { key: 'gui', zh: '癸', en: 'Gui', pinyin: 'guǐ', element: 'water', polarity: 'yin', definition: 'Yin Water — rain, dew and springs; intuition, gentleness and permeation.' },\n] as const;\n\n/** Lookup: Chinese character → stem term. */\nexport const STEM_BY_CHAR: Readonly<Record<string, StemTerm>> = Object.freeze(\n Object.fromEntries(STEMS.map((s) => [s.zh, s])),\n);\n\n/** Lookup: key → stem term. */\nexport const STEM_BY_KEY: Readonly<Record<string, StemTerm>> = Object.freeze(\n Object.fromEntries(STEMS.map((s) => [s.key, s])),\n);\n\n/**\n * Resolve a Heavenly Stem from a Chinese character.\n * Returns undefined for unknown characters instead of throwing,\n * so callers can render raw data defensively.\n */\nexport function stemByChar(char: string): StemTerm | undefined {\n return STEM_BY_CHAR[char];\n}\n","import type { BranchTerm } from '../types.js';\n\n/**\n * The Twelve Earthly Branches (十二地支).\n * Order matters: index is used for clash/combination arithmetic.\n * Note: the key for 午 (Horse) is 'wuHorse' to avoid colliding with stem 戊 (wu).\n */\nexport const BRANCHES: readonly BranchTerm[] = [\n { key: 'zi', zh: '子', en: 'Zi', pinyin: 'zǐ', zodiacZh: '鼠', zodiacEn: 'Rat', element: 'water', hours: '23:00-01:00', definition: 'Rat branch — cardinal Water; midnight, winter solstice, hidden beginnings.' },\n { key: 'chou', zh: '丑', en: 'Chou', pinyin: 'chǒu', zodiacZh: '牛', zodiacEn: 'Ox', element: 'earth', hours: '01:00-03:00', definition: 'Ox branch — moist Earth; late winter, quiet accumulation.' },\n { key: 'yin', zh: '寅', en: 'Yin', pinyin: 'yín', zodiacZh: '虎', zodiacEn: 'Tiger', element: 'wood', hours: '03:00-05:00', definition: 'Tiger branch — Yang Wood; early spring, the start of the zodiac year.' },\n { key: 'mao', zh: '卯', en: 'Mao', pinyin: 'mǎo', zodiacZh: '兔', zodiacEn: 'Rabbit', element: 'wood', hours: '05:00-07:00', definition: 'Rabbit branch — Yin Wood; mid-spring, sunrise and expansion.' },\n { key: 'chen', zh: '辰', en: 'Chen', pinyin: 'chén', zodiacZh: '龙', zodiacEn: 'Dragon', element: 'earth', hours: '07:00-09:00', definition: 'Dragon branch — wet Earth; late spring, the water reservoir.' },\n { key: 'si', zh: '巳', en: 'Si', pinyin: 'sì', zodiacZh: '蛇', zodiacEn: 'Snake', element: 'fire', hours: '09:00-11:00', definition: 'Snake branch — Yin Fire; early summer, hidden heat.' },\n { key: 'wuHorse', zh: '午', en: 'Wu', pinyin: 'wǔ', zodiacZh: '马', zodiacEn: 'Horse', element: 'fire', hours: '11:00-13:00', definition: 'Horse branch — cardinal Fire; noon, summer solstice, peak Yang.' },\n { key: 'wei', zh: '未', en: 'Wei', pinyin: 'wèi', zodiacZh: '羊', zodiacEn: 'Goat', element: 'earth', hours: '13:00-15:00', definition: 'Goat branch — dry Earth; late summer, the wood reservoir.' },\n { key: 'shen', zh: '申', en: 'Shen', pinyin: 'shēn', zodiacZh: '猴', zodiacEn: 'Monkey', element: 'metal', hours: '15:00-17:00', definition: 'Monkey branch — Yang Metal; early autumn, the water birthplace.' },\n { key: 'you', zh: '酉', en: 'You', pinyin: 'yǒu', zodiacZh: '鸡', zodiacEn: 'Rooster', element: 'metal', hours: '17:00-19:00', definition: 'Rooster branch — cardinal Metal; mid-autumn, sunset and precision.' },\n { key: 'xu', zh: '戌', en: 'Xu', pinyin: 'xū', zodiacZh: '狗', zodiacEn: 'Dog', element: 'earth', hours: '19:00-21:00', definition: 'Dog branch — dry Earth; late autumn, the fire reservoir.' },\n { key: 'hai', zh: '亥', en: 'Hai', pinyin: 'hài', zodiacZh: '猪', zodiacEn: 'Pig', element: 'water', hours: '21:00-23:00', definition: 'Pig branch — Yang Water; early winter, the wood birthplace.' },\n] as const;\n\n/** Lookup: Chinese character → branch term. */\nexport const BRANCH_BY_CHAR: Readonly<Record<string, BranchTerm>> = Object.freeze(\n Object.fromEntries(BRANCHES.map((b) => [b.zh, b])),\n);\n\n/** Lookup: key → branch term. */\nexport const BRANCH_BY_KEY: Readonly<Record<string, BranchTerm>> = Object.freeze(\n Object.fromEntries(BRANCHES.map((b) => [b.key, b])),\n);\n\n/** Resolve an Earthly Branch from a Chinese character. */\nexport function branchByChar(char: string): BranchTerm | undefined {\n return BRANCH_BY_CHAR[char];\n}\n","import type { ElementKey, Term } from '../types.js';\n\nexport interface ElementTerm extends Term {\n key: ElementKey;\n}\n\n/** The Five Elements (五行). */\nexport const ELEMENTS: readonly ElementTerm[] = [\n { key: 'wood', zh: '木', en: 'Wood', pinyin: 'mù', definition: 'Growth, expansion and benevolence; associated with spring and the east.' },\n { key: 'fire', zh: '火', en: 'Fire', pinyin: 'huǒ', definition: 'Heat, illumination and propriety; associated with summer and the south.' },\n { key: 'earth', zh: '土', en: 'Earth', pinyin: 'tǔ', definition: 'Stability, nourishment and trust; associated with the late-season transitions and the center.' },\n { key: 'metal', zh: '金', en: 'Metal', pinyin: 'jīn', definition: 'Structure, decisiveness and righteousness; associated with autumn and the west.' },\n { key: 'water', zh: '水', en: 'Water', pinyin: 'shuǐ', definition: 'Flow, wisdom and adaptability; associated with winter and the north.' },\n] as const;\n\n/** Lookup: Chinese character → element term. */\nexport const ELEMENT_BY_CHAR: Readonly<Record<string, ElementTerm>> = Object.freeze(\n Object.fromEntries(ELEMENTS.map((e) => [e.zh, e])),\n);\n\n/** Lookup: key → element term. */\nexport const ELEMENT_BY_KEY: Readonly<Record<string, ElementTerm>> = Object.freeze(\n Object.fromEntries(ELEMENTS.map((e) => [e.key, e])),\n);\n\n/** Resolve a Five Element from a Chinese character or an English key. */\nexport function elementOf(input: string): ElementTerm | undefined {\n return ELEMENT_BY_CHAR[input] ?? ELEMENT_BY_KEY[input];\n}\n\n/**\n * The generating (生) and controlling (克) cycles, as key pairs.\n * generating: Wood→Fire→Earth→Metal→Water→Wood\n * controlling: Wood→Earth→Water→Fire→Metal→Wood\n */\nexport const ELEMENT_CYCLES = {\n generating: [\n ['wood', 'fire'],\n ['fire', 'earth'],\n ['earth', 'metal'],\n ['metal', 'water'],\n ['water', 'wood'],\n ] as [ElementKey, ElementKey][],\n controlling: [\n ['wood', 'earth'],\n ['earth', 'water'],\n ['water', 'fire'],\n ['fire', 'metal'],\n ['metal', 'wood'],\n ] as [ElementKey, ElementKey][],\n} as const;\n","import type { TenGodKey, Term } from '../types.js';\n\nexport interface TenGodTerm extends Term {\n key: TenGodKey;\n}\n\n/**\n * The Ten Gods (十神) — relationship labels between each stem\n * and the Day Master, based on element and polarity.\n * Plus the Day Master itself, which engines emit as 日主 / 元男 / 元女.\n */\nexport const TEN_GODS: readonly TenGodTerm[] = [\n { key: 'biJian', zh: '比肩', en: 'Friend', pinyin: 'bǐ jiān', definition: 'Same element, same polarity as the Day Master: peers, siblings, competitors and self-reliance.' },\n { key: 'jieCai', zh: '劫财', en: 'Rob Wealth', pinyin: 'jié cái', definition: 'Same element, opposite polarity: rivals who share your resources; boldness and spending.' },\n { key: 'shiShen', zh: '食神', en: 'Eating God', pinyin: 'shí shén', definition: 'Element the Day Master generates, same polarity: creativity, enjoyment, expression and fertility.' },\n { key: 'shangGuan', zh: '伤官', en: 'Hurting Officer', pinyin: 'shāng guān', definition: 'Element the Day Master generates, opposite polarity: talent, rebellion and rule-breaking brilliance.' },\n { key: 'pianCai', zh: '偏财', en: 'Indirect Wealth', pinyin: 'piān cái', definition: 'Element the Day Master controls, same polarity: windfall money, business acumen and generosity.' },\n { key: 'zhengCai', zh: '正财', en: 'Direct Wealth', pinyin: 'zhèng cái', definition: 'Element the Day Master controls, opposite polarity: stable income, savings and (traditionally) the wife star.' },\n { key: 'qiSha', zh: '七杀', en: 'Seven Killings', pinyin: 'qī shā', definition: 'Element that controls the Day Master, same polarity: pressure, authority, courage and fierce ambition.' },\n { key: 'zhengGuan', zh: '正官', en: 'Direct Officer', pinyin: 'zhèng guān', definition: 'Element that controls the Day Master, opposite polarity: career, discipline, reputation and (traditionally) the husband star.' },\n { key: 'pianYin', zh: '偏印', en: 'Indirect Resource', pinyin: 'piān yìn', definition: 'Element that generates the Day Master, same polarity: unconventional learning, intuition and solitude.' },\n { key: 'zhengYin', zh: '正印', en: 'Direct Resource', pinyin: 'zhèng yìn', definition: 'Element that generates the Day Master, opposite polarity: education, protection, motherly support and credentials.' },\n { key: 'dayMaster', zh: '日主', en: 'Day Master', pinyin: 'rì zhǔ', definition: 'The Heavenly Stem of the Day Pillar — the reference point of the whole chart, representing the self.' },\n] as const;\n\n/** Lookup: key → ten-god term. */\nexport const TEN_GOD_BY_KEY: Readonly<Record<string, TenGodTerm>> = Object.freeze(\n Object.fromEntries(TEN_GODS.map((t) => [t.key, t])),\n);\n\n/**\n * Lookup: Chinese label → ten-god term.\n * Covers engine variants: 日主 / 元男 / 元女 all map to dayMaster;\n * 偏官 is a classic alias of 七杀.\n */\nconst TEN_GOD_ZH_ALIASES: Readonly<Record<string, TenGodKey>> = Object.freeze({\n 比肩: 'biJian',\n 劫财: 'jieCai',\n 食神: 'shiShen',\n 伤官: 'shangGuan',\n 偏财: 'pianCai',\n 正财: 'zhengCai',\n 七杀: 'qiSha',\n 偏官: 'qiSha',\n 正官: 'zhengGuan',\n 偏印: 'pianYin',\n 枭神: 'pianYin',\n 正印: 'zhengYin',\n 日主: 'dayMaster',\n 日元: 'dayMaster',\n 元男: 'dayMaster',\n 元女: 'dayMaster',\n});\n\n/** Resolve a Ten God from its Chinese label (aliases included). */\nexport function tenGodByZh(zh: string): TenGodTerm | undefined {\n const key = TEN_GOD_ZH_ALIASES[zh];\n return key ? TEN_GOD_BY_KEY[key] : undefined;\n}\n","import type { GrowthStageKey, Term } from '../types.js';\n\nexport interface GrowthStageTerm extends Term {\n key: GrowthStageKey;\n}\n\n/**\n * The Twelve Growth Stages (十二长生) — the lifecycle of an element\n * across the twelve branches: birth → bathing → … → extinction → gestation → nurturing.\n */\nexport const GROWTH_STAGES: readonly GrowthStageTerm[] = [\n { key: 'birth', zh: '长生', en: 'Birth', pinyin: 'cháng shēng', definition: 'Newly born energy; the element enters its most promising phase.' },\n { key: 'bathing', zh: '沐浴', en: 'Bathing', pinyin: 'mù yù', definition: 'Infancy and washing; vulnerable, romantic and unstable energy.' },\n { key: 'crowning', zh: '冠带', en: 'Crowning', pinyin: 'guàn dài', definition: 'Coming of age; the element dresses up and starts to show capability.' },\n { key: 'officiating', zh: '临官', en: 'Officiating', pinyin: 'lín guān', definition: 'Taking office; mature, productive energy approaching its peak.' },\n { key: 'peak', zh: '帝旺', en: 'Peak', pinyin: 'dì wàng', definition: 'Imperial prosperity; the element at maximum strength.' },\n { key: 'decline', zh: '衰', en: 'Decline', pinyin: 'shuāi', definition: 'Energy past its prime, gradually weakening.' },\n { key: 'illness', zh: '病', en: 'Illness', pinyin: 'bìng', definition: 'Weakened energy, like sickness; low vitality.' },\n { key: 'death', zh: '死', en: 'Death', pinyin: 'sǐ', definition: 'Dormant energy; quiet, still and inactive.' },\n { key: 'tomb', zh: '墓', en: 'Tomb', pinyin: 'mù', definition: 'Stored energy locked in the tomb; latent, hoarded, awaiting a key.' },\n { key: 'extinction', zh: '绝', en: 'Extinction', pinyin: 'jué', definition: 'The lowest point; energy seemingly gone but about to turn.' },\n { key: 'gestation', zh: '胎', en: 'Gestation', pinyin: 'tāi', definition: 'Conception; a new cycle forming in secret.' },\n { key: 'nurturing', zh: '养', en: 'Nurturing', pinyin: 'yǎng', definition: 'Nourishment before birth; gentle preparation for the next cycle.' },\n] as const;\n\n/** Lookup: key → growth-stage term. */\nexport const GROWTH_STAGE_BY_KEY: Readonly<Record<string, GrowthStageTerm>> = Object.freeze(\n Object.fromEntries(GROWTH_STAGES.map((g) => [g.key, g])),\n);\n\n/** Lookup: Chinese label → growth-stage term. */\nexport const GROWTH_STAGE_BY_ZH: Readonly<Record<string, GrowthStageTerm>> = Object.freeze(\n Object.fromEntries(GROWTH_STAGES.map((g) => [g.zh, g])),\n);\n\n/** Resolve a growth stage from its Chinese label. */\nexport function growthStageByZh(zh: string): GrowthStageTerm | undefined {\n return GROWTH_STAGE_BY_ZH[zh];\n}\n","import type { Term } from '../types.js';\n\n/**\n * Common Shen Sha (神煞) — symbolic stars overlaid on the chart.\n * Coverage: the stars emitted by common community Bazi engines’ golden\n * samples, plus the most frequently referenced traditional stars.\n * Lookup falls back to the raw Chinese name for stars not in this table,\n * so unknown engine output never breaks rendering.\n */\nexport const SHEN_SHA: readonly Term[] = [\n { key: 'tianYiGuiRen', zh: '天乙贵人', en: 'Heavenly Nobleman', pinyin: 'tiān yǐ guì rén', definition: 'The most auspicious star: helpful people and timely rescue in difficulty.' },\n { key: 'taiJiGuiRen', zh: '太极贵人', en: 'Taiji Nobleman', pinyin: 'tài jí guì rén', definition: 'Affinity with metaphysics, philosophy and deep research.' },\n { key: 'tianDeGuiRen', zh: '天德贵人', en: 'Heavenly Virtue', pinyin: 'tiān dé guì rén', definition: 'Heaven-sent protection that softens disasters.' },\n { key: 'yueDeGuiRen', zh: '月德贵人', en: 'Monthly Virtue', pinyin: 'yuè dé guì rén', definition: 'Gentle protective virtue; calming influence on misfortune.' },\n { key: 'tianDeHe', zh: '天德合', en: 'Heavenly Virtue Union', pinyin: 'tiān dé hé', definition: 'Companion star of Heavenly Virtue; reinforces protection.' },\n { key: 'yueDeHe', zh: '月德合', en: 'Monthly Virtue Union', pinyin: 'yuè dé hé', definition: 'Companion star of Monthly Virtue; reinforces protection.' },\n { key: 'deXiuGuiRen', zh: '德秀贵人', en: 'Virtue-Elegance Nobleman', pinyin: 'dé xiù guì rén', definition: 'Refined character and talent; turns danger into fortune.' },\n { key: 'fuXingGuiRen', zh: '福星贵人', en: 'Blessing Nobleman', pinyin: 'fú xīng guì rén', definition: 'Everyday blessings, comfort and a smooth life path.' },\n { key: 'wenChangGuiRen', zh: '文昌贵人', en: 'Literary Star', pinyin: 'wén chāng guì rén', definition: 'Academic success, writing talent and examination luck.' },\n { key: 'xueTang', zh: '学堂', en: 'School Hall', pinyin: 'xué táng', definition: 'Scholarly star favoring study and intellectual growth.' },\n { key: 'ciGuan', zh: '词馆', en: 'Literary Bureau', pinyin: 'cí guǎn', definition: 'Eloquence and literary accomplishment.' },\n { key: 'tianYi', zh: '天医', en: 'Heavenly Doctor', pinyin: 'tiān yī', definition: 'Affinity with medicine, healing and health work.' },\n { key: 'yiMa', zh: '驿马', en: 'Traveling Horse', pinyin: 'yì mǎ', definition: 'Movement: travel, relocation, overseas ties and restless change.' },\n { key: 'taoHua', zh: '桃花', en: 'Peach Blossom', pinyin: 'táo huā', definition: 'Romance, charm and social magnetism.' },\n { key: 'hongYan', zh: '红艳', en: 'Red Beauty', pinyin: 'hóng yàn', definition: 'Intense romantic allure; passion that can outshine caution.' },\n { key: 'hongLuan', zh: '红鸾', en: 'Red Phoenix', pinyin: 'hóng luán', definition: 'Marriage and celebration star; joyous occasions.' },\n { key: 'tianXi', zh: '天喜', en: 'Heavenly Joy', pinyin: 'tiān xǐ', definition: 'Happiness, weddings and festive events.' },\n { key: 'huaGai', zh: '华盖', en: 'Elegant Canopy', pinyin: 'huá gài', definition: 'Artistic genius and spiritual depth, tinged with solitude.' },\n { key: 'jinYu', zh: '金舆', en: 'Golden Carriage', pinyin: 'jīn yú', definition: 'Comfort, spousal support and an easy ride through life.' },\n { key: 'jiangXing', zh: '将星', en: 'General Star', pinyin: 'jiàng xīng', definition: 'Leadership, authority and command over others.' },\n { key: 'yangRen', zh: '羊刃', en: 'Blade', pinyin: 'yáng rèn', definition: 'Sharp, aggressive edge just past the peak; courage mixed with risk of injury.' },\n { key: 'feiRen', zh: '飞刃', en: 'Flying Blade', pinyin: 'fēi rèn', definition: 'The opposite-facing blade; sudden conflicts and impulsive force.' },\n { key: 'luShen', zh: '禄神', en: 'Prosperity Star', pinyin: 'lù shén', definition: 'Steady income and self-earned wealth; the stem at its own root.' },\n { key: 'liuXia', zh: '流霞', en: 'Flowing Mist', pinyin: 'liú xiá', definition: 'Blood-related caution star; watch for injuries and inflammation.' },\n { key: 'guChen', zh: '孤辰', en: 'Solitary Star', pinyin: 'gū chén', definition: 'Emotional distance and preference for solitude.' },\n { key: 'guaSu', zh: '寡宿', en: 'Widowed Star', pinyin: 'guǎ sù', definition: 'Loneliness in close relationships; inner detachment.' },\n { key: 'jieSha', zh: '劫煞', en: 'Robbery Star', pinyin: 'jié shà', definition: 'Sudden loss or seizure; act with caution in risky matters.' },\n { key: 'zaiSha', zh: '灾煞', en: 'Disaster Star', pinyin: 'zāi shà', definition: 'External misfortune; traditionally linked to accidents and setbacks.' },\n { key: 'wangShen', zh: '亡神', en: 'Lost Spirit', pinyin: 'wáng shén', definition: 'Hidden schemes and mental drain; can sharpen strategy when controlled.' },\n { key: 'piMa', zh: '披麻', en: 'Mourning Veil', pinyin: 'pī má', definition: 'Family worries and melancholy events.' },\n { key: 'tongZiSha', zh: '童子煞', en: 'Child Star', pinyin: 'tóng zǐ shà', definition: 'Folk belief of a celestial child identity; a youthful, otherworldly temperament.' },\n { key: 'liuXiuRi', zh: '六秀日', en: 'Six Elegance Day', pinyin: 'liù xiù rì', definition: 'Day pillar known for talent and refined appearance.' },\n { key: 'jiuChouRi', zh: '九丑日', en: 'Nine Ugly Day', pinyin: 'jiǔ chǒu rì', definition: 'Day pillar linked to romantic entanglements; name misleads, effect is relational friction.' },\n { key: 'kongWang', zh: '空亡', en: 'Void', pinyin: 'kōng wáng', definition: 'The two branches outside the current decade cycle; energy that feels hollow or deferred.' },\n { key: 'guoYin', zh: '国印', en: 'State Seal', pinyin: 'guó yìn', definition: 'Officialdom, seals of office and institutional power.' },\n { key: 'tianLuoDiWang', zh: '天罗地网', en: 'Sky Net & Earth Net', pinyin: 'tiān luó dì wǎng', definition: 'Confining combinations (戌亥 / 辰巳) that feel like being trapped.' },\n { key: 'yinChaYangCuo', zh: '阴差阳错', en: 'Yin-Yang Mismatch', pinyin: 'yīn chā yáng cuò', definition: 'Day pillar linked to misunderstandings in family and marriage matters.' },\n { key: 'shiEDaBai', zh: '十恶大败', en: 'Ten Evils Great Defeat', pinyin: 'shí è dà bài', definition: 'Classic inauspicious day pillar group; tradition advises careful money management.' },\n] as const;\n\n/** Lookup: Chinese name → shen sha term. */\nexport const SHEN_SHA_BY_ZH: Readonly<Record<string, Term>> = Object.freeze(\n Object.fromEntries(SHEN_SHA.map((s) => [s.zh, s])),\n);\n\n/** Lookup: key → shen sha term. */\nexport const SHEN_SHA_BY_KEY: Readonly<Record<string, Term>> = Object.freeze(\n Object.fromEntries(SHEN_SHA.map((s) => [s.key, s])),\n);\n\n/**\n * Resolve a Shen Sha star from its Chinese name.\n * Unknown stars return undefined — render the raw name instead of dropping data.\n */\nexport function shenShaByZh(zh: string): Term | undefined {\n return SHEN_SHA_BY_ZH[zh];\n}\n","import type { Term } from '../types.js';\n\nexport interface NaYinTerm extends Term {\n /** The two sexagenary pairs this melody covers, e.g. ['甲子', '乙丑']. */\n pairs: [string, string];\n}\n\n/**\n * The Sixty Jiazi Na Yin (六十甲子纳音) — 30 melodic elements,\n * each covering two consecutive sexagenary cycle entries.\n */\nexport const NA_YIN: readonly NaYinTerm[] = [\n { key: 'seaGold', zh: '海中金', en: 'Sea Gold', pairs: ['甲子', '乙丑'], definition: 'Gold hidden in the sea: talent waiting to be discovered.' },\n { key: 'furnaceFire', zh: '炉中火', en: 'Furnace Fire', pairs: ['丙寅', '丁卯'], definition: 'Fire in the furnace: energy that forges and transforms.' },\n { key: 'forestWood', zh: '大林木', en: 'Forest Wood', pairs: ['戊辰', '己巳'], definition: 'Great forest wood: abundant, sheltering growth.' },\n { key: 'roadsideEarth', zh: '路旁土', en: 'Roadside Earth', pairs: ['庚午', '辛未'], definition: 'Earth by the roadside: practical, trodden, serviceable.' },\n { key: 'swordEdgeGold', zh: '剑锋金', en: 'Sword-edge Gold', pairs: ['壬申', '癸酉'], definition: 'Sharpened blade metal: precision and cutting brilliance.' },\n { key: 'mountaintopFire', zh: '山头火', en: 'Mountaintop Fire', pairs: ['甲戌', '乙亥'], definition: 'Fire on the summit: visible, far-reaching light.' },\n { key: 'streamWater', zh: '涧下水', en: 'Stream Water', pairs: ['丙子', '丁丑'], definition: 'Water in the ravine: clear, quiet, persistent flow.' },\n { key: 'cityWallEarth', zh: '城头土', en: 'City-wall Earth', pairs: ['戊寅', '己卯'], definition: 'Rampart earth: defensive strength and boundaries.' },\n { key: 'waxGold', zh: '白蜡金', en: 'Wax Gold', pairs: ['庚辰', '辛巳'], definition: 'White wax metal: formable value needing refinement.' },\n { key: 'willowWood', zh: '杨柳木', en: 'Willow Wood', pairs: ['壬午', '癸未'], definition: 'Willow wood: graceful flexibility and resilience.' },\n { key: 'springWater', zh: '泉中水', en: 'Spring Water', pairs: ['甲申', '乙酉'], definition: 'Water in the well: inexhaustible, hidden source.' },\n { key: 'rooftopEarth', zh: '屋上土', en: 'Rooftop Earth', pairs: ['丙戌', '丁亥'], definition: 'Earth on the roof: shelter and protection.' },\n { key: 'thunderboltFire', zh: '霹雳火', en: 'Thunderbolt Fire', pairs: ['戊子', '己丑'], definition: 'Lightning fire: sudden, dramatic power.' },\n { key: 'pineWood', zh: '松柏木', en: 'Pine Wood', pairs: ['庚寅', '辛卯'], definition: 'Pine and cypress: endurance through seasons.' },\n { key: 'longFlowingWater', zh: '长流水', en: 'Long-flowing Water', pairs: ['壬辰', '癸巳'], definition: 'Ever-flowing water: momentum that never stagnates.' },\n { key: 'sandGold', zh: '沙中金', en: 'Sand Gold', pairs: ['甲午', '乙未'], definition: 'Gold in sand: value requiring patient sifting.' },\n { key: 'foothillFire', zh: '山下火', en: 'Foothill Fire', pairs: ['丙申', '丁酉'], definition: 'Fire below the mountain: warmth close to home.' },\n { key: 'plainWood', zh: '平地木', en: 'Plain Wood', pairs: ['戊戌', '己亥'], definition: 'Wood on the plain: steady, unpretentious growth.' },\n { key: 'wallEarth', zh: '壁上土', en: 'Wall Earth', pairs: ['庚子', '辛丑'], definition: 'Earth on the wall: quiet support and structure.' },\n { key: 'goldFoil', zh: '金箔金', en: 'Gold Foil', pairs: ['壬寅', '癸卯'], definition: 'Gilt foil: beauty, ornament and surface brilliance.' },\n { key: 'lampFire', zh: '覆灯火', en: 'Lamp Fire', pairs: ['甲辰', '乙巳'], definition: 'Covered lamp flame: small light that guides in darkness.' },\n { key: 'riverOfHeavenWater', zh: '天河水', en: 'River of Heaven Water', pairs: ['丙午', '丁未'], definition: 'Celestial river: the Milky Way; inspiration from above.' },\n { key: 'highwayEarth', zh: '大驿土', en: 'Highway Earth', pairs: ['戊申', '己酉'], definition: 'Great post-road earth: connection, travel and commerce.' },\n { key: 'hairpinGold', zh: '钗钏金', en: 'Hairpin Gold', pairs: ['庚戌', '辛亥'], definition: 'Ornamental jewelry metal: adornment and refined value.' },\n { key: 'mulberryWood', zh: '桑柘木', en: 'Mulberry Wood', pairs: ['壬子', '癸丑'], definition: 'Mulberry wood: cultivation, silkworms and useful craft.' },\n { key: 'greatStreamWater', zh: '大溪水', en: 'Great Stream Water', pairs: ['甲寅', '乙卯'], definition: 'Rushing stream: vigorous, purposeful movement.' },\n { key: 'desertEarth', zh: '沙中土', en: 'Desert Earth', pairs: ['丙辰', '丁巳'], definition: 'Earth in sand: loose foundation needing consolidation.' },\n { key: 'celestialFire', zh: '天上火', en: 'Celestial Fire', pairs: ['戊午', '己未'], definition: 'Fire in the sky: the sun itself; universal warmth.' },\n { key: 'pomegranateWood', zh: '石榴木', en: 'Pomegranate Wood', pairs: ['庚申', '辛酉'], definition: 'Pomegranate wood: hard wood bearing many fruits.' },\n { key: 'oceanWater', zh: '大海水', en: 'Ocean Water', pairs: ['壬戌', '癸亥'], definition: 'The open ocean: vastness, depth and inclusiveness.' },\n] as const;\n\n/** Lookup: Na Yin Chinese name → term. */\nexport const NA_YIN_BY_ZH: Readonly<Record<string, NaYinTerm>> = Object.freeze(\n Object.fromEntries(NA_YIN.map((n) => [n.zh, n])),\n);\n\n/** Lookup: sexagenary pair (e.g. '甲子') → Na Yin term. */\nexport const NA_YIN_BY_GAN_ZHI: Readonly<Record<string, NaYinTerm>> = Object.freeze(\n Object.fromEntries(NA_YIN.flatMap((n) => n.pairs.map((p) => [p, n]))),\n);\n\n/** Resolve a Na Yin melody from its Chinese name or a sexagenary pair. */\nexport function naYinOf(input: string): NaYinTerm | undefined {\n return NA_YIN_BY_ZH[input] ?? NA_YIN_BY_GAN_ZHI[input];\n}\n","import type { InteractionTypeKey, Term } from '../types.js';\n\nexport interface InteractionTerm extends Term {\n key: InteractionTypeKey;\n /** English interaction enum value (CLASH, TRINE, …), when one exists. */\n enumCode?: string;\n /** The Chinese verb embedded in description strings like \"午子相冲\". */\n zhVerb?: string;\n}\n\n/**\n * Chart interactions (刑冲合会) — the relationships between stems and branches.\n * Each entry carries two optional lookup codes:\n * - an English `type` enum (CLASH, TRINE, …) used by enum-style engines\n * - a Chinese verb embedded in description strings (\"午子相冲\")\n * The pairing tables below let callers verify or reconstruct a relationship\n * from raw branch characters.\n */\nexport const INTERACTION_TYPES: readonly InteractionTerm[] = [\n {\n key: 'stemCombination', zh: '天干五合', en: 'Stem Combination', pinyin: 'tiān gān wǔ hé',\n zhVerb: '合',\n definition: 'Five Heavenly Stem pairings that bond and may transform: 甲己, 乙庚, 丙辛, 丁壬, 戊癸.',\n },\n {\n key: 'liuHe', zh: '六合', en: 'Six Harmony', pinyin: 'liù hé',\n enumCode: 'COMBINATION_2', zhVerb: '合',\n definition: 'Six branch pairings of mutual affinity and support: 子丑, 寅亥, 卯戌, 辰酉, 巳申, 午未.',\n },\n {\n key: 'sanHe', zh: '三合', en: 'Three Harmony', pinyin: 'sān hé',\n enumCode: 'TRINE',\n definition: 'Triads that combine into one element: 申子辰(water), 亥卯未(wood), 寅午戌(fire), 巳酉丑(metal).',\n },\n {\n key: 'sanHui', zh: '三会', en: 'Directional Combination', pinyin: 'sān huì',\n enumCode: 'DIRECTIONAL',\n definition: 'Three adjacent branches of one seasonal direction: 寅卯辰(east), 巳午未(south), 申酉戌(west), 亥子丑(north).',\n },\n {\n key: 'liuChong', zh: '六冲', en: 'Clash', pinyin: 'liù chōng',\n enumCode: 'CLASH', zhVerb: '冲',\n definition: 'Six opposing branch pairings that collide and disrupt: 子午, 丑未, 寅申, 卯酉, 辰戌, 巳亥.',\n },\n {\n key: 'xiangXing', zh: '相刑', en: 'Punishment', pinyin: 'xiāng xíng',\n enumCode: 'PUNISHMENT', zhVerb: '刑',\n definition: 'Branch punishments that grind and injure: 寅巳申, 丑戌未, 子卯, and the self-punishments 辰/午/酉/亥.',\n },\n {\n key: 'xiangHai', zh: '相害', en: 'Harm', pinyin: 'xiāng hài',\n enumCode: 'HARM', zhVerb: '害',\n definition: 'Six branch pairings of hidden injury and betrayal: 子未, 丑午, 寅巳, 卯辰, 申亥, 酉戌.',\n },\n {\n key: 'xiangPo', zh: '相破', en: 'Destruction', pinyin: 'xiāng pò',\n enumCode: 'DESTRUCTION', zhVerb: '破',\n definition: 'Six branch pairings of breakage and erosion: 子酉, 卯午, 辰丑, 未戌, 寅亥, 巳申.',\n },\n] as const;\n\n/** Lookup: key → interaction term. */\nexport const INTERACTION_BY_KEY: Readonly<Record<string, InteractionTerm>> = Object.freeze(\n Object.fromEntries(INTERACTION_TYPES.map((i) => [i.key, i])),\n);\n\n/** Lookup: English interaction enum (CLASH/TRINE/…) → interaction term. */\nexport const INTERACTION_BY_ENUM: Readonly<Record<string, InteractionTerm>> = Object.freeze(\n Object.fromEntries(\n INTERACTION_TYPES.filter((i) => i.enumCode).map((i) => [i.enumCode as string, i]),\n ),\n);\n\n/**\n * Ordered Chinese-verb → interaction-type map used to parse Chinese descriptions.\n * Longer / more specific verbs are matched first (三合 before 合, 会 before 合).\n */\nconst ZH_VERB_RULES: readonly [string, InteractionTypeKey][] = [\n ['三合', 'sanHe'],\n ['三会', 'sanHui'],\n ['会', 'sanHui'],\n ['相冲', 'liuChong'],\n ['冲', 'liuChong'],\n ['相刑', 'xiangXing'],\n ['刑', 'xiangXing'],\n ['相破', 'xiangPo'],\n ['破', 'xiangPo'],\n ['相害', 'xiangHai'],\n ['害', 'xiangHai'],\n ['六合', 'liuHe'],\n ['相合', 'liuHe'],\n ['合', 'liuHe'],\n] as const;\n\n/**\n * Resolve an interaction type from a Chinese description string\n * such as \"午子相冲\" or \"卯子相刑\". Returns undefined when no verb matches.\n */\nexport function interactionFromZh(desc: string): InteractionTerm | undefined {\n for (const [verb, key] of ZH_VERB_RULES) {\n if (desc.includes(verb)) return INTERACTION_BY_KEY[key];\n }\n return undefined;\n}\n\n/** Resolve an interaction type from an English enum value (CLASH, TRINE, …). */\nexport function interactionFromEnum(type: string): InteractionTerm | undefined {\n return INTERACTION_BY_ENUM[type];\n}\n\n/* ------------------------------------------------------------------ *\n * Pairing tables (branch characters, matching raw engine output).\n * Useful for validation, tooltips and reconstructing relationships.\n * ------------------------------------------------------------------ */\n\n/** 天干五合 — the five Heavenly Stem combinations. */\nexport const STEM_COMBINATIONS: readonly (readonly [string, string])[] = [\n ['甲', '己'], ['乙', '庚'], ['丙', '辛'], ['丁', '壬'], ['戊', '癸'],\n] as const;\n\n/** 地支六合 — the six branch harmonies. */\nexport const LIU_HE: readonly (readonly [string, string])[] = [\n ['子', '丑'], ['寅', '亥'], ['卯', '戌'], ['辰', '酉'], ['巳', '申'], ['午', '未'],\n] as const;\n\n/** 地支六冲 — the six branch clashes. */\nexport const LIU_CHONG: readonly (readonly [string, string])[] = [\n ['子', '午'], ['丑', '未'], ['寅', '申'], ['卯', '酉'], ['辰', '戌'], ['巳', '亥'],\n] as const;\n\n/** 地支三合 — the four three-harmony triads (each resolving to one element). */\nexport const SAN_HE: readonly (readonly [string, string, string])[] = [\n ['申', '子', '辰'], ['亥', '卯', '未'], ['寅', '午', '戌'], ['巳', '酉', '丑'],\n] as const;\n\n/** 地支三会 — the four directional (seasonal) triads. */\nexport const SAN_HUI: readonly (readonly [string, string, string])[] = [\n ['寅', '卯', '辰'], ['巳', '午', '未'], ['申', '酉', '戌'], ['亥', '子', '丑'],\n] as const;\n\n/** 地支相害 — the six branch harms. */\nexport const XIANG_HAI: readonly (readonly [string, string])[] = [\n ['子', '未'], ['丑', '午'], ['寅', '巳'], ['卯', '辰'], ['申', '亥'], ['酉', '戌'],\n] as const;\n\n/** 地支相破 — the six branch destructions. */\nexport const XIANG_PO: readonly (readonly [string, string])[] = [\n ['子', '酉'], ['卯', '午'], ['辰', '丑'], ['未', '戌'], ['寅', '亥'], ['巳', '申'],\n] as const;\n\n/**\n * 地支相刑 — the punishments, grouped by classic type:\n * wuEn (无恩之刑) 寅巳申, shiShi (恃势之刑) 丑戌未,\n * wuLi (无礼之刑) 子卯, and ziXing (自刑) 辰/午/酉/亥 (each with itself).\n */\nexport const XIANG_XING = {\n wuEn: ['寅', '巳', '申'],\n shiShi: ['丑', '戌', '未'],\n wuLi: ['子', '卯'],\n ziXing: ['辰', '午', '酉', '亥'],\n} as const;\n","import type { Term } from '../types.js';\n\n/**\n * General chart vocabulary — the structural labels a renderer needs:\n * pillar names, calendar/time terms, cycle concepts and section headers.\n * Category-specific terms (stems, branches, ten gods, shen sha, na yin,\n * growth stages, interactions) live in their own modules; this file holds\n * everything else so a UI can label a chart bilingually end-to-end.\n */\nexport const GENERAL_TERMS: readonly Term[] = [\n /* Chart & pillars */\n { key: 'bazi', zh: '八字', en: 'BaZi (Four Pillars)', pinyin: 'bā zì', definition: 'The Eight Characters: a destiny chart built from the year, month, day and hour of birth.' },\n { key: 'fourPillars', zh: '四柱', en: 'Four Pillars', pinyin: 'sì zhù', definition: 'The four stem-branch pairs — year, month, day and hour — that make up a chart.' },\n { key: 'yearPillar', zh: '年柱', en: 'Year Pillar', pinyin: 'nián zhù', definition: 'The first pillar; roots, ancestry and early life.' },\n { key: 'monthPillar', zh: '月柱', en: 'Month Pillar', pinyin: 'yuè zhù', definition: 'The second pillar; parents, career environment and youth.' },\n { key: 'dayPillar', zh: '日柱', en: 'Day Pillar', pinyin: 'rì zhù', definition: 'The third pillar; the self (stem) and the spouse palace (branch).' },\n { key: 'hourPillar', zh: '时柱', en: 'Hour Pillar', pinyin: 'shí zhù', definition: 'The fourth pillar; children, later life and ambitions.' },\n { key: 'heavenlyStem', zh: '天干', en: 'Heavenly Stem', pinyin: 'tiān gān', definition: 'One of ten yang/yin symbols; the visible, active layer of a pillar.' },\n { key: 'earthlyBranch', zh: '地支', en: 'Earthly Branch', pinyin: 'dì zhī', definition: 'One of twelve symbols (the zodiac animals); the hidden, receptive layer of a pillar.' },\n { key: 'ganZhi', zh: '干支', en: 'Stem-Branch (GanZhi)', pinyin: 'gān zhī', definition: 'A stem paired with a branch; one unit of the sexagenary cycle.' },\n { key: 'hiddenStems', zh: '藏干', en: 'Hidden Stems', pinyin: 'cáng gān', definition: 'The stems concealed inside each branch, giving it layered meaning.' },\n\n /* Cycles & palaces */\n { key: 'daYun', zh: '大运', en: 'Luck Pillar', pinyin: 'dà yùn', definition: 'A ten-year fortune cycle overlaid on the natal chart.' },\n { key: 'liuNian', zh: '流年', en: 'Annual Fortune', pinyin: 'liú nián', definition: 'The influence of a specific calendar year on the chart.' },\n { key: 'xiaoYun', zh: '小运', en: 'Minor Cycle', pinyin: 'xiǎo yùn', definition: 'A one-year cycle used before the first Luck Pillar begins.' },\n { key: 'qiYun', zh: '起运', en: 'Luck Onset', pinyin: 'qǐ yùn', definition: 'The age at which the first Luck Pillar cycle starts.' },\n { key: 'mingGong', zh: '命宫', en: 'Life Palace', pinyin: 'mìng gōng', definition: 'An auxiliary pillar describing the core life theme.' },\n { key: 'shenGong', zh: '身宫', en: 'Body Palace', pinyin: 'shēn gōng', definition: 'An auxiliary pillar describing how life is lived out in practice.' },\n { key: 'taiYuan', zh: '胎元', en: 'Conception Pillar', pinyin: 'tāi yuán', definition: 'The stem-branch of conception; inherited and prenatal influence.' },\n { key: 'taiXi', zh: '胎息', en: 'Prenatal Breath', pinyin: 'tāi xī', definition: 'A pillar paired with the Conception Pillar; subtle life force.' },\n\n /* Symbolic systems */\n { key: 'yinYang', zh: '阴阳', en: 'Yin & Yang', pinyin: 'yīn yáng', definition: 'The two complementary polarities underlying every stem and branch.' },\n { key: 'wuXing', zh: '五行', en: 'Five Elements', pinyin: 'wǔ xíng', definition: 'Wood, Fire, Earth, Metal and Water — the phases of transforming energy.' },\n { key: 'shiShenGods', zh: '十神', en: 'Ten Gods', pinyin: 'shí shén', definition: 'Relationship labels between each stem and the Day Master.' },\n { key: 'shenSha', zh: '神煞', en: 'Shen Sha (Symbolic Stars)', pinyin: 'shén shà', definition: 'Auspicious and inauspicious symbolic stars overlaid on the chart.' },\n { key: 'naYin', zh: '纳音', en: 'Na Yin (Melodic Element)', pinyin: 'nà yīn', definition: 'The thirty melodic elements assigned to each stem-branch pair.' },\n { key: 'interactions', zh: '刑冲合会', en: 'Interactions', pinyin: 'xíng chōng hé huì', definition: 'The clashes, combinations, punishments, harms and destructions between stems and branches.' },\n { key: 'shengXiao', zh: '生肖', en: 'Chinese Zodiac', pinyin: 'shēng xiào', definition: 'The twelve animals mapped to the Earthly Branches.' },\n { key: 'xun', zh: '旬', en: 'Decade (Xun)', pinyin: 'xún', definition: 'A ten-day group of the sexagenary cycle; determines the void branches.' },\n { key: 'xingYun', zh: '星运', en: 'Growth Stage', pinyin: 'xīng yùn', definition: 'One of the twelve lifecycle stages of an element across the branches.' },\n { key: 'ziZuo', zh: '自坐', en: 'Self-sitting', pinyin: 'zì zuò', definition: 'The branch directly beneath the Day Stem and the ten god it forms.' },\n\n /* Scoring & roles */\n { key: 'wuXingFenZhi', zh: '五行分值', en: 'Element Score', pinyin: 'wǔ xíng fēn zhí', definition: 'Weighted strength of each of the Five Elements in the chart.' },\n { key: 'zhuXing', zh: '主星', en: 'Main Star', pinyin: 'zhǔ xīng', definition: 'The primary ten god of a pillar (usually its hidden main stem).' },\n { key: 'fuXing', zh: '副星', en: 'Secondary Star', pinyin: 'fù xīng', definition: 'The additional ten gods contributed by other hidden stems.' },\n { key: 'dayMasterElement', zh: '日主五行', en: 'Day Master Element', pinyin: 'rì zhǔ wǔ xíng', definition: 'The Five Element of the Day Stem — the self element of the chart.' },\n\n /* Calendar & time */\n { key: 'zhenTaiYangShi', zh: '真太阳时', en: 'True Solar Time', pinyin: 'zhēn tài yáng shí', definition: 'Local apparent solar time, corrected for longitude and season; the basis of the Hour Pillar.' },\n { key: 'shiChen', zh: '时辰', en: 'Double-hour', pinyin: 'shí chén', definition: 'A traditional two-hour period; twelve of them span a day.' },\n { key: 'nongLi', zh: '农历', en: 'Lunar Calendar', pinyin: 'nóng lì', definition: 'The traditional Chinese lunisolar calendar.' },\n { key: 'gongLi', zh: '公历', en: 'Gregorian Calendar', pinyin: 'gōng lì', definition: 'The international solar calendar.' },\n { key: 'gender', zh: '性别', en: 'Gender', pinyin: 'xìng bié', definition: 'Male or female; determines the direction of the Luck Pillar cycles.' },\n { key: 'male', zh: '男', en: 'Male', definition: 'Male gender input for chart calculation.' },\n { key: 'female', zh: '女', en: 'Female', definition: 'Female gender input for chart calculation.' },\n { key: 'forward', zh: '顺行', en: 'Forward', pinyin: 'shùn xíng', definition: 'Luck Pillars advancing in the natural cycle order.' },\n { key: 'backward', zh: '逆行', en: 'Backward', pinyin: 'nì xíng', definition: 'Luck Pillars advancing in the reverse cycle order.' },\n { key: 'current', zh: '当前', en: 'Current', pinyin: 'dāng qián', definition: 'Marks the Luck Pillar or year that is active now.' },\n] as const;\n\n/** Lookup: key → general term. */\nexport const GENERAL_BY_KEY: Readonly<Record<string, Term>> = Object.freeze(\n Object.fromEntries(GENERAL_TERMS.map((g) => [g.key, g])),\n);\n\n/** Lookup: Chinese label → general term. */\nexport const GENERAL_BY_ZH: Readonly<Record<string, Term>> = Object.freeze(\n Object.fromEntries(GENERAL_TERMS.map((g) => [g.zh, g])),\n);\n\n/** Resolve a general term by key. */\nexport function generalBy(key: string): Term | undefined {\n return GENERAL_BY_KEY[key];\n}\n\n/** Resolve a general term by its Chinese label. */\nexport function generalByZh(zh: string): Term | undefined {\n return GENERAL_BY_ZH[zh];\n}\n"],"mappings":"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","names":["t"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/** Supported output languages. */
|
|
2
|
+
type Lang = 'zh' | 'en';
|
|
3
|
+
/** A single bilingual terminology entry. */
|
|
4
|
+
interface Term {
|
|
5
|
+
/** Stable machine-readable identifier (camelCase pinyin or English). */
|
|
6
|
+
key: string;
|
|
7
|
+
/** Chinese name. */
|
|
8
|
+
zh: string;
|
|
9
|
+
/** English name. */
|
|
10
|
+
en: string;
|
|
11
|
+
/** Pinyin with tone marks (optional). */
|
|
12
|
+
pinyin?: string;
|
|
13
|
+
/** One-sentence English definition — what a blog author can copy-paste. */
|
|
14
|
+
definition?: string;
|
|
15
|
+
}
|
|
16
|
+
type StemKey = 'jia' | 'yi' | 'bing' | 'ding' | 'wu' | 'ji' | 'geng' | 'xin' | 'ren' | 'gui';
|
|
17
|
+
type BranchKey = 'zi' | 'chou' | 'yin' | 'mao' | 'chen' | 'si' | 'wuHorse' | 'wei' | 'shen' | 'you' | 'xu' | 'hai';
|
|
18
|
+
type ElementKey = 'wood' | 'fire' | 'earth' | 'metal' | 'water';
|
|
19
|
+
type Polarity = 'yang' | 'yin';
|
|
20
|
+
type TenGodKey = 'biJian' | 'jieCai' | 'shiShen' | 'shangGuan' | 'pianCai' | 'zhengCai' | 'qiSha' | 'zhengGuan' | 'pianYin' | 'zhengYin' | 'dayMaster';
|
|
21
|
+
type GrowthStageKey = 'birth' | 'bathing' | 'crowning' | 'officiating' | 'peak' | 'decline' | 'illness' | 'death' | 'tomb' | 'extinction' | 'gestation' | 'nurturing';
|
|
22
|
+
type InteractionTypeKey = 'stemCombination' | 'liuHe' | 'sanHe' | 'sanHui' | 'liuChong' | 'xiangXing' | 'xiangHai' | 'xiangPo';
|
|
23
|
+
/** Stem term enriched with element and polarity. */
|
|
24
|
+
interface StemTerm extends Term {
|
|
25
|
+
key: StemKey;
|
|
26
|
+
element: ElementKey;
|
|
27
|
+
polarity: Polarity;
|
|
28
|
+
}
|
|
29
|
+
/** Branch term enriched with zodiac animal, element and clock hours. */
|
|
30
|
+
interface BranchTerm extends Term {
|
|
31
|
+
key: BranchKey;
|
|
32
|
+
zodiacEn: string;
|
|
33
|
+
zodiacZh: string;
|
|
34
|
+
element: ElementKey;
|
|
35
|
+
/** Representative clock hour range, e.g. "23:00-01:00". */
|
|
36
|
+
hours: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The Ten Heavenly Stems (十天干).
|
|
41
|
+
* Order matters: index is used for combination/clash arithmetic.
|
|
42
|
+
*/
|
|
43
|
+
declare const STEMS: readonly StemTerm[];
|
|
44
|
+
/** Lookup: Chinese character → stem term. */
|
|
45
|
+
declare const STEM_BY_CHAR: Readonly<Record<string, StemTerm>>;
|
|
46
|
+
/** Lookup: key → stem term. */
|
|
47
|
+
declare const STEM_BY_KEY: Readonly<Record<string, StemTerm>>;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve a Heavenly Stem from a Chinese character.
|
|
50
|
+
* Returns undefined for unknown characters instead of throwing,
|
|
51
|
+
* so callers can render raw data defensively.
|
|
52
|
+
*/
|
|
53
|
+
declare function stemByChar(char: string): StemTerm | undefined;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The Twelve Earthly Branches (十二地支).
|
|
57
|
+
* Order matters: index is used for clash/combination arithmetic.
|
|
58
|
+
* Note: the key for 午 (Horse) is 'wuHorse' to avoid colliding with stem 戊 (wu).
|
|
59
|
+
*/
|
|
60
|
+
declare const BRANCHES: readonly BranchTerm[];
|
|
61
|
+
/** Lookup: Chinese character → branch term. */
|
|
62
|
+
declare const BRANCH_BY_CHAR: Readonly<Record<string, BranchTerm>>;
|
|
63
|
+
/** Lookup: key → branch term. */
|
|
64
|
+
declare const BRANCH_BY_KEY: Readonly<Record<string, BranchTerm>>;
|
|
65
|
+
/** Resolve an Earthly Branch from a Chinese character. */
|
|
66
|
+
declare function branchByChar(char: string): BranchTerm | undefined;
|
|
67
|
+
|
|
68
|
+
interface ElementTerm extends Term {
|
|
69
|
+
key: ElementKey;
|
|
70
|
+
}
|
|
71
|
+
/** The Five Elements (五行). */
|
|
72
|
+
declare const ELEMENTS: readonly ElementTerm[];
|
|
73
|
+
/** Lookup: Chinese character → element term. */
|
|
74
|
+
declare const ELEMENT_BY_CHAR: Readonly<Record<string, ElementTerm>>;
|
|
75
|
+
/** Lookup: key → element term. */
|
|
76
|
+
declare const ELEMENT_BY_KEY: Readonly<Record<string, ElementTerm>>;
|
|
77
|
+
/** Resolve a Five Element from a Chinese character or an English key. */
|
|
78
|
+
declare function elementOf(input: string): ElementTerm | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* The generating (生) and controlling (克) cycles, as key pairs.
|
|
81
|
+
* generating: Wood→Fire→Earth→Metal→Water→Wood
|
|
82
|
+
* controlling: Wood→Earth→Water→Fire→Metal→Wood
|
|
83
|
+
*/
|
|
84
|
+
declare const ELEMENT_CYCLES: {
|
|
85
|
+
readonly generating: [ElementKey, ElementKey][];
|
|
86
|
+
readonly controlling: [ElementKey, ElementKey][];
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
interface TenGodTerm extends Term {
|
|
90
|
+
key: TenGodKey;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The Ten Gods (十神) — relationship labels between each stem
|
|
94
|
+
* and the Day Master, based on element and polarity.
|
|
95
|
+
* Plus the Day Master itself, which engines emit as 日主 / 元男 / 元女.
|
|
96
|
+
*/
|
|
97
|
+
declare const TEN_GODS: readonly TenGodTerm[];
|
|
98
|
+
/** Lookup: key → ten-god term. */
|
|
99
|
+
declare const TEN_GOD_BY_KEY: Readonly<Record<string, TenGodTerm>>;
|
|
100
|
+
/** Resolve a Ten God from its Chinese label (aliases included). */
|
|
101
|
+
declare function tenGodByZh(zh: string): TenGodTerm | undefined;
|
|
102
|
+
|
|
103
|
+
interface GrowthStageTerm extends Term {
|
|
104
|
+
key: GrowthStageKey;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* The Twelve Growth Stages (十二长生) — the lifecycle of an element
|
|
108
|
+
* across the twelve branches: birth → bathing → … → extinction → gestation → nurturing.
|
|
109
|
+
*/
|
|
110
|
+
declare const GROWTH_STAGES: readonly GrowthStageTerm[];
|
|
111
|
+
/** Lookup: key → growth-stage term. */
|
|
112
|
+
declare const GROWTH_STAGE_BY_KEY: Readonly<Record<string, GrowthStageTerm>>;
|
|
113
|
+
/** Lookup: Chinese label → growth-stage term. */
|
|
114
|
+
declare const GROWTH_STAGE_BY_ZH: Readonly<Record<string, GrowthStageTerm>>;
|
|
115
|
+
/** Resolve a growth stage from its Chinese label. */
|
|
116
|
+
declare function growthStageByZh(zh: string): GrowthStageTerm | undefined;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Common Shen Sha (神煞) — symbolic stars overlaid on the chart.
|
|
120
|
+
* Coverage: the stars emitted by common community Bazi engines’ golden
|
|
121
|
+
* samples, plus the most frequently referenced traditional stars.
|
|
122
|
+
* Lookup falls back to the raw Chinese name for stars not in this table,
|
|
123
|
+
* so unknown engine output never breaks rendering.
|
|
124
|
+
*/
|
|
125
|
+
declare const SHEN_SHA: readonly Term[];
|
|
126
|
+
/** Lookup: Chinese name → shen sha term. */
|
|
127
|
+
declare const SHEN_SHA_BY_ZH: Readonly<Record<string, Term>>;
|
|
128
|
+
/** Lookup: key → shen sha term. */
|
|
129
|
+
declare const SHEN_SHA_BY_KEY: Readonly<Record<string, Term>>;
|
|
130
|
+
/**
|
|
131
|
+
* Resolve a Shen Sha star from its Chinese name.
|
|
132
|
+
* Unknown stars return undefined — render the raw name instead of dropping data.
|
|
133
|
+
*/
|
|
134
|
+
declare function shenShaByZh(zh: string): Term | undefined;
|
|
135
|
+
|
|
136
|
+
interface NaYinTerm extends Term {
|
|
137
|
+
/** The two sexagenary pairs this melody covers, e.g. ['甲子', '乙丑']. */
|
|
138
|
+
pairs: [string, string];
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* The Sixty Jiazi Na Yin (六十甲子纳音) — 30 melodic elements,
|
|
142
|
+
* each covering two consecutive sexagenary cycle entries.
|
|
143
|
+
*/
|
|
144
|
+
declare const NA_YIN: readonly NaYinTerm[];
|
|
145
|
+
/** Lookup: Na Yin Chinese name → term. */
|
|
146
|
+
declare const NA_YIN_BY_ZH: Readonly<Record<string, NaYinTerm>>;
|
|
147
|
+
/** Lookup: sexagenary pair (e.g. '甲子') → Na Yin term. */
|
|
148
|
+
declare const NA_YIN_BY_GAN_ZHI: Readonly<Record<string, NaYinTerm>>;
|
|
149
|
+
/** Resolve a Na Yin melody from its Chinese name or a sexagenary pair. */
|
|
150
|
+
declare function naYinOf(input: string): NaYinTerm | undefined;
|
|
151
|
+
|
|
152
|
+
interface InteractionTerm extends Term {
|
|
153
|
+
key: InteractionTypeKey;
|
|
154
|
+
/** English interaction enum value (CLASH, TRINE, …), when one exists. */
|
|
155
|
+
enumCode?: string;
|
|
156
|
+
/** The Chinese verb embedded in description strings like "午子相冲". */
|
|
157
|
+
zhVerb?: string;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Chart interactions (刑冲合会) — the relationships between stems and branches.
|
|
161
|
+
* Each entry carries two optional lookup codes:
|
|
162
|
+
* - an English `type` enum (CLASH, TRINE, …) used by enum-style engines
|
|
163
|
+
* - a Chinese verb embedded in description strings ("午子相冲")
|
|
164
|
+
* The pairing tables below let callers verify or reconstruct a relationship
|
|
165
|
+
* from raw branch characters.
|
|
166
|
+
*/
|
|
167
|
+
declare const INTERACTION_TYPES: readonly InteractionTerm[];
|
|
168
|
+
/** Lookup: key → interaction term. */
|
|
169
|
+
declare const INTERACTION_BY_KEY: Readonly<Record<string, InteractionTerm>>;
|
|
170
|
+
/** Lookup: English interaction enum (CLASH/TRINE/…) → interaction term. */
|
|
171
|
+
declare const INTERACTION_BY_ENUM: Readonly<Record<string, InteractionTerm>>;
|
|
172
|
+
/**
|
|
173
|
+
* Resolve an interaction type from a Chinese description string
|
|
174
|
+
* such as "午子相冲" or "卯子相刑". Returns undefined when no verb matches.
|
|
175
|
+
*/
|
|
176
|
+
declare function interactionFromZh(desc: string): InteractionTerm | undefined;
|
|
177
|
+
/** Resolve an interaction type from an English enum value (CLASH, TRINE, …). */
|
|
178
|
+
declare function interactionFromEnum(type: string): InteractionTerm | undefined;
|
|
179
|
+
/** 天干五合 — the five Heavenly Stem combinations. */
|
|
180
|
+
declare const STEM_COMBINATIONS: readonly (readonly [string, string])[];
|
|
181
|
+
/** 地支六合 — the six branch harmonies. */
|
|
182
|
+
declare const LIU_HE: readonly (readonly [string, string])[];
|
|
183
|
+
/** 地支六冲 — the six branch clashes. */
|
|
184
|
+
declare const LIU_CHONG: readonly (readonly [string, string])[];
|
|
185
|
+
/** 地支三合 — the four three-harmony triads (each resolving to one element). */
|
|
186
|
+
declare const SAN_HE: readonly (readonly [string, string, string])[];
|
|
187
|
+
/** 地支三会 — the four directional (seasonal) triads. */
|
|
188
|
+
declare const SAN_HUI: readonly (readonly [string, string, string])[];
|
|
189
|
+
/** 地支相害 — the six branch harms. */
|
|
190
|
+
declare const XIANG_HAI: readonly (readonly [string, string])[];
|
|
191
|
+
/** 地支相破 — the six branch destructions. */
|
|
192
|
+
declare const XIANG_PO: readonly (readonly [string, string])[];
|
|
193
|
+
/**
|
|
194
|
+
* 地支相刑 — the punishments, grouped by classic type:
|
|
195
|
+
* wuEn (无恩之刑) 寅巳申, shiShi (恃势之刑) 丑戌未,
|
|
196
|
+
* wuLi (无礼之刑) 子卯, and ziXing (自刑) 辰/午/酉/亥 (each with itself).
|
|
197
|
+
*/
|
|
198
|
+
declare const XIANG_XING: {
|
|
199
|
+
readonly wuEn: readonly ["寅", "巳", "申"];
|
|
200
|
+
readonly shiShi: readonly ["丑", "戌", "未"];
|
|
201
|
+
readonly wuLi: readonly ["子", "卯"];
|
|
202
|
+
readonly ziXing: readonly ["辰", "午", "酉", "亥"];
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* General chart vocabulary — the structural labels a renderer needs:
|
|
207
|
+
* pillar names, calendar/time terms, cycle concepts and section headers.
|
|
208
|
+
* Category-specific terms (stems, branches, ten gods, shen sha, na yin,
|
|
209
|
+
* growth stages, interactions) live in their own modules; this file holds
|
|
210
|
+
* everything else so a UI can label a chart bilingually end-to-end.
|
|
211
|
+
*/
|
|
212
|
+
declare const GENERAL_TERMS: readonly Term[];
|
|
213
|
+
/** Lookup: key → general term. */
|
|
214
|
+
declare const GENERAL_BY_KEY: Readonly<Record<string, Term>>;
|
|
215
|
+
/** Lookup: Chinese label → general term. */
|
|
216
|
+
declare const GENERAL_BY_ZH: Readonly<Record<string, Term>>;
|
|
217
|
+
/** Resolve a general term by key. */
|
|
218
|
+
declare function generalBy(key: string): Term | undefined;
|
|
219
|
+
/** Resolve a general term by its Chinese label. */
|
|
220
|
+
declare function generalByZh(zh: string): Term | undefined;
|
|
221
|
+
|
|
222
|
+
/** Every term from every category, in a stable order. */
|
|
223
|
+
declare const ALL_TERMS: readonly Term[];
|
|
224
|
+
/** Lookup: unique term key → term. Keys are unique across all categories. */
|
|
225
|
+
declare const TERM_BY_KEY: Readonly<Record<string, Term>>;
|
|
226
|
+
/** Lookup: Chinese label → term (exact match). */
|
|
227
|
+
declare const TERM_BY_ZH: Readonly<Record<string, Term>>;
|
|
228
|
+
/**
|
|
229
|
+
* Translate a term key into the requested language.
|
|
230
|
+
* Returns the key itself when unknown, so rendering never breaks.
|
|
231
|
+
*
|
|
232
|
+
* @example t('dayMaster') // 'Day Master'
|
|
233
|
+
* @example t('dayMaster', 'zh') // '日主'
|
|
234
|
+
*/
|
|
235
|
+
declare function t(key: string, lang?: Lang): string;
|
|
236
|
+
/**
|
|
237
|
+
* Best-effort translation of any raw engine value or term key.
|
|
238
|
+
* Resolution order (exact → fuzzy):
|
|
239
|
+
* 1. term key (e.g. 'qiSha')
|
|
240
|
+
* 2. exact Chinese label (e.g. '天乙贵人', '海中金', '比肩')
|
|
241
|
+
* 3. ten-god alias (e.g. '元男' → Day Master, '偏官' → Seven Killings)
|
|
242
|
+
* 4. Na Yin by GanZhi (e.g. '甲子' → Sea Gold)
|
|
243
|
+
* 5. interaction by verb (e.g. '午子相冲' → Clash)
|
|
244
|
+
* Falls back to the original input when nothing matches.
|
|
245
|
+
*
|
|
246
|
+
* @example translate('元男') // 'Day Master'
|
|
247
|
+
* @example translate('午子相冲') // 'Clash'
|
|
248
|
+
* @example translate('甲子', 'zh') // '海中金'
|
|
249
|
+
*/
|
|
250
|
+
declare function translate(input: string, lang?: Lang): string;
|
|
251
|
+
|
|
252
|
+
export { ALL_TERMS, BRANCHES, BRANCH_BY_CHAR, BRANCH_BY_KEY, type BranchKey, type BranchTerm, ELEMENTS, ELEMENT_BY_CHAR, ELEMENT_BY_KEY, ELEMENT_CYCLES, type ElementKey, type ElementTerm, GENERAL_BY_KEY, GENERAL_BY_ZH, GENERAL_TERMS, GROWTH_STAGES, GROWTH_STAGE_BY_KEY, GROWTH_STAGE_BY_ZH, type GrowthStageKey, type GrowthStageTerm, INTERACTION_BY_ENUM, INTERACTION_BY_KEY, INTERACTION_TYPES, type InteractionTerm, type InteractionTypeKey, LIU_CHONG, LIU_HE, type Lang, NA_YIN, NA_YIN_BY_GAN_ZHI, NA_YIN_BY_ZH, type NaYinTerm, type Polarity, SAN_HE, SAN_HUI, SHEN_SHA, SHEN_SHA_BY_KEY, SHEN_SHA_BY_ZH, STEMS, STEM_BY_CHAR, STEM_BY_KEY, STEM_COMBINATIONS, type StemKey, type StemTerm, TEN_GODS, TEN_GOD_BY_KEY, TERM_BY_KEY, TERM_BY_ZH, type TenGodKey, type TenGodTerm, type Term, XIANG_HAI, XIANG_PO, XIANG_XING, branchByChar, elementOf, generalBy, generalByZh, growthStageByZh, interactionFromEnum, interactionFromZh, naYinOf, shenShaByZh, stemByChar, t, tenGodByZh, translate };
|