{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/types.ts","../src/lunar-date.ts","../src/utils/normalize.ts","../src/data/lunar-data.ts","../src/data/year-info.ts","../src/utils/timezone.ts","../src/conversion.ts","../src/format.ts"],"sourcesContent":["export { toLunar, toGregorian } from './conversion';\nexport { createLunarDate } from './lunar-date';\nexport { formatLunar, formatLunarParts } from './format';\nexport * from './types';\nexport * from './errors';\n","export class LunarError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = 'LunarError';\n  }\n}\n\nexport class InvalidLunarDateError extends LunarError {\n  constructor(message: string) {\n    super(message);\n    this.name = 'InvalidLunarDateError';\n  }\n}\n\nexport class InvalidGregorianDateError extends LunarError {\n  constructor(message: string) {\n    super(message);\n    this.name = 'InvalidGregorianDateError';\n  }\n}\n\nexport class NotImplementedError extends LunarError {\n  constructor(feature: string) {\n    super(`${feature} 尚未实现`);\n    this.name = 'NotImplementedError';\n  }\n}\n","/** 最早支持的农历年份（含农历 1890 年正月初一） */\nexport const MIN_SUPPORTED_YEAR = 1890;\n/** 最晚支持的农历年份（含农历 2100 年腊月） */\nexport const MAX_SUPPORTED_YEAR = 2100;\n\n/** 归一化后的农历日期结构，所有字段均不可变 */\nexport interface LunarDate {\n  /** 农历年份，范围为 MIN_SUPPORTED_YEAR - MAX_SUPPORTED_YEAR */\n  readonly year: number;\n  /** 农历月份，1 表示正月，12 表示腊月 */\n  readonly month: number;\n  /** 农历日期，1 表示初一，最大为 30 */\n  readonly day: number;\n  /** 是否为闰月（仅当年份存在闰月且该月为闰月时为 true） */\n  readonly isLeapMonth: boolean;\n}\n\n/** 数组形式的农历日期输入：[year, month, day, isLeapMonth?] */\nexport type LunarDateTuple = [number, number, number, boolean?];\n\n/** 对象形式的农历日期输入，month/day 与 LunarDate 相同（1 基） */\nexport interface LunarDateObject {\n  /** 农历年份 */\n  year: number;\n  /** 农历月份，取值 1-12 */\n  month: number;\n  /** 农历日期，取值 1-30 */\n  day: number;\n  /** 可选闰月标记 */\n  isLeapMonth?: boolean;\n}\n\n/** 支持对象或数组输入 */\nexport type LunarDateInput = LunarDateObject | LunarDateTuple;\n\n/** 以对象方式提供的公历日期字段（全部采用公历常见的 1 基月份） */\nexport interface GregorianDateFields {\n  /** 公历年，例如 2024 */\n  year: number;\n  /** 公历月，1-12 */\n  month: number;\n  /** 公历日，1-31（会按实际月份校验） */\n  day: number;\n}\n\n/** 支持 Date、时间戳（毫秒）或对象字段 */\nexport type GregorianDateInput = Date | number | GregorianDateFields;\n\n/** 转换选项 */\nexport interface ConversionOptions {\n  /** IANA 时区 ID（默认 Asia/Shanghai），用于解释/输出 “本地” 日期 */\n  timezone?: string;\n}\n\n/** 附加在结果上的元数据 */\nexport interface ConversionMetadata {\n  /** 实际使用的时区 ID */\n  timezone: string;\n}\n\nexport interface ToLunarResult {\n  /** 转换后的农历日期 */\n  lunar: LunarDate;\n  /** 归一化后的原始公历输入 */\n  source: Date;\n  /** 与转换相关的上下文信息 */\n  metadata: ConversionMetadata;\n}\n\nexport interface ToGregorianResult {\n  /** 转换后的公历日期（永远是 UTC 时间） */\n  date: Date;\n  /** 归一化后的农历输入 */\n  source: LunarDate;\n  /** 与转换相关的上下文信息 */\n  metadata: ConversionMetadata;\n}\n\n/** 控制 formatLunar 输出的风格 */\nexport type FormatLunarStyle = 'long' | 'short';\n\n/** formatLunar 的配置选项 */\nexport interface FormatLunarOptions {\n  /** 控制“农历”前缀，可传入字符串或 false（禁用前缀） */\n  prefix?: boolean | string;\n  /** 是否输出天干地支。true/'year' 仅输出年份，'all' 预留后续扩展 */\n  stemBranch?: boolean | 'year' | 'all';\n  /** 是否附带生肖（默认 false）。输出格式为 “（龙）” */\n  zodiac?: boolean;\n  /** 闰月前缀，默认 “闰” */\n  leapMarker?: string;\n  /** 月份/日期文案风格（当前 long/short 一致，预留扩展） */\n  style?: FormatLunarStyle;\n  /** 预留多语言支持，目前仅支持 'zh-CN' */\n  locale?: string;\n}\n\n/** formatLunarParts 返回的片段类型 */\nexport type FormatLunarPartType =\n  | 'prefix'\n  | 'yearStem'\n  | 'yearBranch'\n  | 'yearNumber'\n  | 'yearZodiac'\n  | 'literal'\n  | 'month'\n  | 'day';\n\nexport interface FormatLunarPart {\n  type: FormatLunarPartType;\n  value: string;\n}\n","import { InvalidLunarDateError } from './errors';\nimport type { LunarDate, LunarDateInput, LunarDateObject } from './types';\nimport { MAX_SUPPORTED_YEAR, MIN_SUPPORTED_YEAR } from './types';\n\nexport function createLunarDate(input: LunarDateInput): LunarDate {\n  const normalized = normalizeInput(input);\n  const { year, month, day } = normalized;\n  validateYear(year);\n  validateMonth(month);\n  validateDay(day);\n\n  const result: LunarDate = Object.freeze({\n    year,\n    month,\n    day,\n    isLeapMonth: normalized.isLeapMonth ?? false\n  });\n\n  return result;\n}\n\nfunction normalizeInput(input: LunarDateInput): LunarDateObject {\n  if (Array.isArray(input)) {\n    const [year, month, day, isLeapMonth] = input;\n    return { year, month, day, isLeapMonth };\n  }\n\n  return input;\n}\n\nfunction validateYear(year: number): void {\n  if (!Number.isInteger(year)) {\n    throw new InvalidLunarDateError('农历年份必须是整数');\n  }\n\n  if (year < MIN_SUPPORTED_YEAR || year > MAX_SUPPORTED_YEAR) {\n    throw new InvalidLunarDateError(\n      `农历年份仅支持 ${MIN_SUPPORTED_YEAR}-${MAX_SUPPORTED_YEAR}`\n    );\n  }\n}\n\nfunction validateMonth(month: number): void {\n  if (!Number.isInteger(month)) {\n    throw new InvalidLunarDateError('农历月份必须是整数');\n  }\n\n  if (month < 1 || month > 12) {\n    throw new InvalidLunarDateError('农历月份必须位于 1-12 之间');\n  }\n}\n\nfunction validateDay(day: number): void {\n  if (!Number.isInteger(day)) {\n    throw new InvalidLunarDateError('农历日期必须是整数');\n  }\n\n  if (day < 1 || day > 30) {\n    throw new InvalidLunarDateError('农历日期必须位于 1-30 之间');\n  }\n}\n","import { InvalidGregorianDateError } from '../errors';\nimport type { GregorianDateFields, GregorianDateInput } from '../types';\n\nexport function normalizeGregorianInput(input: GregorianDateInput): Date {\n  if (input instanceof Date) {\n    return ensureValidDate(new Date(input.getTime()));\n  }\n\n  if (typeof input === 'number') {\n    return ensureValidDate(new Date(input));\n  }\n\n  if (isPlainObject(input)) {\n    return fromFields(input);\n  }\n\n  throw new InvalidGregorianDateError('无法识别的公历输入格式');\n}\n\nfunction ensureValidDate(date: Date): Date {\n  if (Number.isNaN(date.getTime())) {\n    throw new InvalidGregorianDateError('无效的时间值');\n  }\n\n  return date;\n}\n\nfunction fromFields({ year, month, day }: GregorianDateFields): Date {\n  if (![year, month, day].every(Number.isInteger)) {\n    throw new InvalidGregorianDateError('公历年月日需为整数');\n  }\n\n  if (month < 1 || month > 12) {\n    throw new InvalidGregorianDateError('公历月份需位于 1-12 之间');\n  }\n\n  if (day < 1 || day > 31) {\n    throw new InvalidGregorianDateError('公历日期需位于 1-31 之间');\n  }\n\n  const candidate = new Date(Date.UTC(year, month - 1, day));\n\n  if (\n    candidate.getUTCFullYear() !== year ||\n    candidate.getUTCMonth() !== month - 1 ||\n    candidate.getUTCDate() !== day\n  ) {\n    throw new InvalidGregorianDateError('公历日期不存在');\n  }\n\n  return candidate;\n}\n\nfunction isPlainObject(value: unknown): value is GregorianDateFields {\n  return Boolean(value) && typeof value === 'object';\n}\n","export const DATA_YEAR_MIN = 1890;\nexport const DATA_YEAR_MAX = 2100;\n\nexport const ENCODED_LUNAR_YEARS: readonly number[] = Object.freeze([\n  1750378,\n  339370,\n  6020516,\n  405156,\n  314698,\n  4934293,\n  371351,\n  279894,\n  2804405,\n  346837,\n  8124114,\n  419666,\n  331429,\n  4961866,\n  394827,\n  297627,\n  3880278,\n  370026,\n  281433,\n  1759058,\n  345938,\n  6019877,\n  412453,\n  313931,\n  4936875,\n  377517,\n  288107,\n  1764201,\n  355753,\n  7093650,\n  429714,\n  331045,\n  4954701,\n  395862,\n  303798,\n  3872181,\n  370388,\n  282281,\n  1769106,\n  347794,\n  6016294,\n  402731,\n  313943,\n  4936374,\n  379738,\n  296660,\n  2821833,\n  354121,\n  7075475,\n  420499,\n  329003,\n  5991003,\n  387757,\n  304490,\n  3881813,\n  371620,\n  281417,\n  1759891,\n  346773,\n  7058733,\n  402742,\n  314029,\n  4945322,\n  378290,\n  290213,\n  2825546,\n  363850,\n  8120981,\n  412311,\n  329046,\n  5999285,\n  387797,\n  304850,\n  3878565,\n  372389,\n  280138,\n  2796695,\n  338587,\n  7066970,\n  402794,\n  314217,\n  4945746,\n  387922,\n  289573,\n  3864139,\n  354891,\n  8123563,\n  410285,\n  320877,\n  5999465,\n  396713,\n  306578,\n  3882277,\n  372005,\n  10246733,\n  428630,\n  336566,\n  6006197,\n  403157,\n  315049,\n  4947602,\n  388754,\n  298278,\n  2812502,\n  346711,\n  8123606,\n  418650,\n  321237,\n  4953801,\n  395081,\n  304787,\n  3872043,\n  361771,\n  272987,\n  1758554,\n  337258,\n  7060309,\n  412580,\n  322377,\n  4938387,\n  379541,\n  288045,\n  3861165,\n  346805,\n  9172394,\n  419282,\n  331173,\n  6004042,\n  396618,\n  306325,\n  3880238,\n  361814,\n  273077,\n  1758642,\n  345810,\n  6008485,\n  403237,\n  312907,\n  4934807,\n  371883,\n  288090,\n  2812630,\n  355177,\n  11269970,\n  420690,\n  330533,\n  6003275,\n  387659,\n  296107,\n  4916571,\n  361901,\n  273258,\n  1760082,\n  347538,\n  7068965,\n  404773,\n  313941,\n  4936877,\n  378038,\n  279989,\n  2813354,\n  356041,\n  8142482,\n  421522,\n  331046,\n  5999190,\n  387671,\n  296150,\n  3868373,\n  362325,\n  280393,\n  2797203,\n  337555,\n  7058731,\n  402731,\n  305755,\n  4937050,\n  378218,\n  289637,\n  3864394,\n  355146,\n  8125077,\n  420501,\n  320813,\n  5991085,\n  387765,\n  304554,\n  3869605,\n  363941,\n  281930,\n  2808981,\n  339094,\n  7059790,\n  402774,\n  314037,\n  4937138,\n  378578,\n  290469,\n  3870282,\n  345675,\n  8113303,\n  410795,\n  320859,\n  5991126,\n  387946,\n  304978,\n  3880741,\n  363301,\n  273035,\n  1750171,\n  337067\n]);\n\nif (ENCODED_LUNAR_YEARS.length !== DATA_YEAR_MAX - DATA_YEAR_MIN + 1) {\n  throw new Error('农历年表数据长度与年份范围不匹配');\n}\n\nexport const LUNAR_MONTH_NAMES: readonly string[] = Object.freeze([\n  '正月',\n  '二月',\n  '三月',\n  '四月',\n  '五月',\n  '六月',\n  '七月',\n  '八月',\n  '九月',\n  '十月',\n  '冬月',\n  '腊月'\n]);\n\nexport const LUNAR_DAY_NAMES: readonly string[] = Object.freeze([\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\nexport const HEAVENLY_STEMS: readonly string[] = Object.freeze([\n  '甲',\n  '乙',\n  '丙',\n  '丁',\n  '戊',\n  '己',\n  '庚',\n  '辛',\n  '壬',\n  '癸'\n]);\n\nexport const EARTHLY_BRANCHES: readonly string[] = Object.freeze([\n  '子',\n  '丑',\n  '寅',\n  '卯',\n  '辰',\n  '巳',\n  '午',\n  '未',\n  '申',\n  '酉',\n  '戌',\n  '亥'\n]);\n\nexport const ZODIAC_ANIMALS: readonly string[] = Object.freeze([\n  '鼠',\n  '牛',\n  '虎',\n  '兔',\n  '龙',\n  '蛇',\n  '马',\n  '羊',\n  '猴',\n  '鸡',\n  '狗',\n  '猪'\n]);\n\nexport const SOLAR_TERMS: readonly string[] = Object.freeze([\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\nexport const SOLAR_TERM_DEGREES: readonly number[] = Object.freeze([\n  0,\n  21208,\n  42467,\n  63836,\n  85337,\n  107014,\n  128867,\n  150921,\n  173149,\n  195551,\n  218072,\n  240693,\n  263343,\n  285989,\n  308563,\n  331033,\n  353350,\n  375494,\n  397447,\n  419210,\n  440795,\n  462224,\n  483532,\n  504758\n]);\n","import {\n  DATA_YEAR_MAX,\n  DATA_YEAR_MIN,\n  ENCODED_LUNAR_YEARS\n} from './lunar-data';\n\nconst MONTH_BIT_MASK = (1 << 13) - 1;\nconst MS_PER_DAY = 86400000;\n\nexport interface LunarYearInfo {\n  readonly year: number;\n  readonly startMonth: number;\n  readonly startDay: number;\n  readonly hasLeapMonth: boolean;\n  readonly leapMonthIndex: number | null;\n  readonly monthBits: number;\n}\n\nconst cache = new Map<number, LunarYearInfo>();\n\nexport function getYearInfo(year: number): LunarYearInfo {\n  if (year < DATA_YEAR_MIN || year > DATA_YEAR_MAX) {\n    throw new RangeError(`农历年仅支持 ${DATA_YEAR_MIN}-${DATA_YEAR_MAX}`);\n  }\n\n  if (cache.has(year)) {\n    return cache.get(year)!;\n  }\n\n  const encoded = ENCODED_LUNAR_YEARS[year - DATA_YEAR_MIN];\n  const hasLeapMonth = Boolean(encoded & (1 << 19));\n  const info: LunarYearInfo = {\n    year,\n    startMonth: (encoded >> 18) & 1,\n    startDay: (encoded >> 13) & 31,\n    hasLeapMonth,\n    leapMonthIndex: hasLeapMonth ? (encoded >> 20) & 15 : null,\n    monthBits: encoded & MONTH_BIT_MASK\n  };\n\n  cache.set(year, info);\n  return info;\n}\n\nexport function getSegmentCount(info: LunarYearInfo): number {\n  return 12 + (info.hasLeapMonth ? 1 : 0);\n}\n\nexport function getSegmentDays(info: LunarYearInfo, segmentIndex: number): number {\n  return info.monthBits & (1 << segmentIndex) ? 30 : 29;\n}\n\nexport function getYearStartTimestamp(info: LunarYearInfo): number {\n  return Date.UTC(info.year, info.startMonth, info.startDay);\n}\n\nexport function diffDaysFromYearStart(date: Date, startTimestamp: number): number {\n  return Math.floor((date.getTime() - startTimestamp) / MS_PER_DAY);\n}\n\nexport function getAccumulatedDaysBeforeSegment(info: LunarYearInfo, segmentIndex: number): number {\n  let total = 0;\n  for (let i = 0; i < segmentIndex; i += 1) {\n    total += getSegmentDays(info, i);\n  }\n  return total;\n}\n","const dateFormatterCache = new Map<string, Intl.DateTimeFormat>();\n\nexport interface ZonedDateParts {\n  year: number;\n  month: number;\n  day: number;\n}\n\nconst MS_PER_DAY = 86400000;\n\nexport function toTimeZoneDate(date: Date, timeZone: string): Date {\n  const parts = getZonedDateParts(date, timeZone);\n  return partsToUTC(parts);\n}\n\nexport function alignDateToTimeZone(date: Date, timeZone: string): Date {\n  const targetParts: ZonedDateParts = {\n    year: date.getUTCFullYear(),\n    month: date.getUTCMonth() + 1,\n    day: date.getUTCDate()\n  };\n\n  let candidate = partsToUTC(targetParts);\n  for (let i = 0; i < 3; i += 1) {\n    const zonedParts = getZonedDateParts(candidate, timeZone);\n    const diff = dayNumber(targetParts) - dayNumber(zonedParts);\n    if (diff === 0) {\n      return candidate;\n    }\n    candidate = new Date(candidate.getTime() + diff * MS_PER_DAY);\n  }\n\n  return candidate;\n}\n\nfunction getZonedDateParts(date: Date, timeZone: string): ZonedDateParts {\n  const formatter = getDateFormatter(timeZone);\n  const parts = formatter.formatToParts(date);\n  const year = Number(parts.find((p) => p.type === 'year')?.value ?? NaN);\n  const month = Number(parts.find((p) => p.type === 'month')?.value ?? NaN);\n  const day = Number(parts.find((p) => p.type === 'day')?.value ?? NaN);\n\n  if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(day)) {\n    throw new RangeError(`无法解析 ${timeZone} 的日期`);\n  }\n\n  return { year, month, day };\n}\n\nfunction getDateFormatter(timeZone: string): Intl.DateTimeFormat {\n  if (!dateFormatterCache.has(timeZone)) {\n    dateFormatterCache.set(\n      timeZone,\n      new Intl.DateTimeFormat('en-CA', {\n        timeZone,\n        year: 'numeric',\n        month: '2-digit',\n        day: '2-digit'\n      })\n    );\n  }\n\n  return dateFormatterCache.get(timeZone)!;\n}\n\nfunction partsToUTC(parts: ZonedDateParts): Date {\n  return new Date(Date.UTC(parts.year, parts.month - 1, parts.day));\n}\n\nfunction dayNumber(parts: ZonedDateParts): number {\n  return Date.UTC(parts.year, parts.month - 1, parts.day) / MS_PER_DAY;\n}\n","import { InvalidGregorianDateError, InvalidLunarDateError } from './errors';\nimport type {\n  ConversionOptions,\n  GregorianDateInput,\n  LunarDateInput,\n  ToGregorianResult,\n  ToLunarResult\n} from './types';\nimport { createLunarDate } from './lunar-date';\nimport { normalizeGregorianInput } from './utils/normalize';\nimport {\n  diffDaysFromYearStart,\n  getAccumulatedDaysBeforeSegment,\n  getSegmentCount,\n  getSegmentDays,\n  getYearInfo,\n  getYearStartTimestamp\n} from './data/year-info';\nimport { DATA_YEAR_MAX, DATA_YEAR_MIN } from './data/lunar-data';\nimport { alignDateToTimeZone, toTimeZoneDate } from './utils/timezone';\n\nconst DEFAULT_TIMEZONE = 'Asia/Shanghai';\nconst MS_PER_DAY = 86400000;\n\nexport function toLunar(\n  input: GregorianDateInput,\n  options: ConversionOptions = {}\n): ToLunarResult {\n  const source = normalizeGregorianInput(input);\n  const timezone = options.timezone ?? DEFAULT_TIMEZONE;\n\n  const localDate = toTimeZoneDate(source, timezone);\n  const { year, info, firstDayTimestamp } = resolveLunarYear(localDate);\n  const diffDays = diffDaysFromYearStart(localDate, firstDayTimestamp);\n\n  let accumulatedDays = 0;\n  let monthIndex = 0;\n  let monthLength = 0;\n  const totalSegments = getSegmentCount(info);\n\n  while (monthIndex < totalSegments) {\n    monthLength = getSegmentDays(info, monthIndex);\n    accumulatedDays += monthLength;\n    if (diffDays < accumulatedDays) {\n      break;\n    }\n    monthIndex += 1;\n  }\n\n  if (monthIndex === totalSegments) {\n    throw new InvalidGregorianDateError('无法匹配对应的农历日期');\n  }\n\n  const day = monthLength - (accumulatedDays - diffDays) + 1;\n  const { isLeap, displayMonthIndex } = resolveLeapMonth(info, monthIndex);\n  const month = displayMonthIndex + 1;\n\n  return {\n    lunar: createLunarDate({ year, month, day, isLeapMonth: isLeap }),\n    source,\n    metadata: { timezone }\n  };\n}\n\nexport function toGregorian(\n  input: LunarDateInput,\n  options: ConversionOptions = {}\n): ToGregorianResult {\n  const lunar = createLunarDate(input);\n  const timezone = options.timezone ?? DEFAULT_TIMEZONE;\n\n  const info = getYearInfo(lunar.year);\n  const { segmentIndex, monthLength } = resolveSegmentIndex(info, lunar.month, lunar.isLeapMonth);\n\n  if (lunar.day > monthLength) {\n    throw new InvalidLunarDateError('农历日期超出当月天数');\n  }\n\n  const offsetDays = getAccumulatedDaysBeforeSegment(info, segmentIndex) + (lunar.day - 1);\n  const timestamp = getYearStartTimestamp(info) + offsetDays * MS_PER_DAY;\n  const date = alignDateToTimeZone(new Date(timestamp), timezone);\n\n  return {\n    date,\n    source: lunar,\n    metadata: { timezone }\n  };\n}\n\nfunction resolveLunarYear(date: Date) {\n  let targetYear = date.getUTCFullYear();\n  if (targetYear < DATA_YEAR_MIN || targetYear > DATA_YEAR_MAX) {\n    throw new InvalidGregorianDateError(`仅支持公历 ${DATA_YEAR_MIN}-${DATA_YEAR_MAX} 年范围内的日期`);\n  }\n\n  let info = getYearInfo(targetYear);\n  let firstDayTimestamp = getYearStartTimestamp(info);\n\n  if (date.getTime() < firstDayTimestamp) {\n    targetYear -= 1;\n    if (targetYear < DATA_YEAR_MIN) {\n      throw new InvalidGregorianDateError(`仅支持公历 ${DATA_YEAR_MIN}-${DATA_YEAR_MAX} 年范围内的日期`);\n    }\n    info = getYearInfo(targetYear);\n    firstDayTimestamp = getYearStartTimestamp(info);\n  }\n\n  return { year: targetYear, info, firstDayTimestamp };\n}\n\nfunction resolveLeapMonth(info: ReturnType<typeof getYearInfo>, monthIndex: number) {\n  let displayMonthIndex = monthIndex;\n  let isLeap = false;\n\n  if (info.hasLeapMonth && info.leapMonthIndex !== null) {\n    if (monthIndex === info.leapMonthIndex + 1) {\n      isLeap = true;\n    }\n    if (monthIndex > info.leapMonthIndex) {\n      displayMonthIndex -= 1;\n    }\n  }\n\n  return { isLeap, displayMonthIndex };\n}\n\nfunction resolveSegmentIndex(\n  info: ReturnType<typeof getYearInfo>,\n  month: number,\n  isLeap: boolean\n) {\n  const zeroBasedMonth = month - 1;\n  if (zeroBasedMonth < 0 || zeroBasedMonth > 11) {\n    throw new InvalidLunarDateError('农历月份必须位于 1-12 之间');\n  }\n\n  if (isLeap) {\n    if (!info.hasLeapMonth || info.leapMonthIndex === null) {\n      throw new InvalidLunarDateError('该年份无闰月');\n    }\n    if (zeroBasedMonth !== info.leapMonthIndex) {\n      throw new InvalidLunarDateError('闰月编号与当年数据不匹配');\n    }\n    const segmentIndex = info.leapMonthIndex + 1;\n    return {\n      segmentIndex,\n      monthLength: getSegmentDays(info, segmentIndex)\n    };\n  }\n\n  let segmentIndex = zeroBasedMonth;\n  if (info.hasLeapMonth && info.leapMonthIndex !== null && zeroBasedMonth > info.leapMonthIndex) {\n    segmentIndex += 1;\n  }\n\n  const totalSegments = getSegmentCount(info);\n  if (segmentIndex >= totalSegments) {\n    throw new InvalidLunarDateError('农历月份与年表不匹配');\n  }\n\n  return {\n    segmentIndex,\n    monthLength: getSegmentDays(info, segmentIndex)\n  };\n}\n","import { createLunarDate } from './lunar-date';\nimport type {\n  FormatLunarOptions,\n  FormatLunarPart,\n  FormatLunarStyle,\n  LunarDate,\n  LunarDateInput\n} from './types';\n\nconst STEMS = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];\nconst BRANCHES = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];\nconst ZODIACS = ['鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪'];\n\nconst MONTH_NAMES: Record<FormatLunarStyle, string[]> = {\n  long: ['正月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '冬月', '腊月'],\n  short: ['正', '二', '三', '四', '五', '六', '七', '八', '九', '十', '冬', '腊']\n};\n\nconst DAY_NAMES: Record<FormatLunarStyle, string[]> = {\n  long: [\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  short: [\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 DEFAULT_PREFIX = '农历';\nconst DEFAULT_LEAP_MARKER = '闰';\nconst DEFAULT_STYLE: FormatLunarStyle = 'long';\nconst DEFAULT_LOCALE = 'zh-CN';\n\ninterface NormalizedFormatOptions {\n  prefixText?: string;\n  includeStemBranch: boolean;\n  includeZodiac: boolean;\n  leapMarker: string;\n  style: FormatLunarStyle;\n  locale: string;\n}\n\nexport function formatLunar(\n  input: LunarDateInput | LunarDate,\n  options: FormatLunarOptions = {}\n): string {\n  return formatLunarParts(input, options).map((part) => part.value).join('');\n}\n\nexport function formatLunarParts(\n  input: LunarDateInput | LunarDate,\n  options: FormatLunarOptions = {}\n): FormatLunarPart[] {\n  const lunar = createLunarDate(input);\n  const normalized = normalizeOptions(options);\n  const parts: FormatLunarPart[] = [];\n\n  if (normalized.locale !== DEFAULT_LOCALE) {\n    // 当前仅支持 zh-CN，其它 locale 暂时复用中文文案\n  }\n\n  if (normalized.prefixText) {\n    parts.push({ type: 'prefix', value: normalized.prefixText });\n  }\n\n  if (normalized.includeStemBranch) {\n    parts.push({ type: 'yearStem', value: getStem(lunar.year) });\n    parts.push({ type: 'yearBranch', value: getBranch(lunar.year) });\n  } else {\n    parts.push({ type: 'yearNumber', value: String(lunar.year) });\n  }\n\n  parts.push({ type: 'literal', value: '年' });\n\n  if (normalized.includeZodiac) {\n    parts.push({ type: 'literal', value: '（' });\n    parts.push({ type: 'yearZodiac', value: getZodiac(lunar.year) });\n    parts.push({ type: 'literal', value: '）' });\n  }\n\n  const monthText = formatMonth(lunar, normalized);\n  parts.push({ type: 'month', value: monthText });\n\n  const dayText = formatDay(lunar, normalized);\n  parts.push({ type: 'day', value: dayText });\n\n  return parts;\n}\n\nfunction normalizeOptions(options: FormatLunarOptions): NormalizedFormatOptions {\n  let prefixText: string | undefined;\n  if (options.prefix === undefined || options.prefix === true) {\n    prefixText = DEFAULT_PREFIX;\n  } else if (options.prefix && typeof options.prefix === 'string') {\n    prefixText = options.prefix;\n  }\n\n  const stemBranch = options.stemBranch ?? true;\n  const includeStemBranch =\n    stemBranch === true || stemBranch === 'year' || stemBranch === 'all';\n\n  const includeZodiac = options.zodiac ?? false;\n  const leapMarker =\n    options.leapMarker ?? DEFAULT_LEAP_MARKER;\n  const style = options.style ?? DEFAULT_STYLE;\n  const locale = options.locale ?? DEFAULT_LOCALE;\n\n  return {\n    prefixText,\n    includeStemBranch,\n    includeZodiac,\n    leapMarker,\n    style,\n    locale\n  };\n}\n\nfunction getStem(year: number): string {\n  const index = mod(year - 4, STEMS.length);\n  return STEMS[index];\n}\n\nfunction getBranch(year: number): string {\n  const index = mod(year - 4, BRANCHES.length);\n  return BRANCHES[index];\n}\n\nfunction getZodiac(year: number): string {\n  const index = mod(year - 4, ZODIACS.length);\n  return ZODIACS[index];\n}\n\nfunction formatMonth(lunar: LunarDate, options: NormalizedFormatOptions): string {\n  const monthNames = MONTH_NAMES[options.style];\n  const base = monthNames[lunar.month - 1];\n  return `${lunar.isLeapMonth ? options.leapMarker : ''}${base}`;\n}\n\nfunction formatDay(lunar: LunarDate, options: NormalizedFormatOptions): string {\n  const dayNames = DAY_NAMES[options.style];\n  return dayNames[lunar.day - 1];\n}\n\nfunction mod(n: number, base: number): number {\n  return ((n % base) + base) % base;\n}\n"],"mappings":"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,OAAO,UAAU;AAC5C;;;ACvDO,IAAM,gBAAgB;AACtB,IAAM,gBAAgB;AAEtB,IAAM,sBAAyC,OAAO,OAAO;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAI,oBAAoB,WAAW,gBAAgB,gBAAgB,GAAG;AACpE,QAAM,IAAI,MAAM,kGAAkB;AACpC;AAEO,IAAM,oBAAuC,OAAO,OAAO;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAA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","names":["MS_PER_DAY","MS_PER_DAY","segmentIndex"]}