{"version":3,"sources":["../src/normalization.ts","../src/detection.ts","../src/aliases.ts","../src/validation.ts","../src/conversion.ts","../src/comparison.ts","../src/formatting.ts","../src/sync.ts","../src/engine.ts","../src/tenant.ts","../src/site-utils.ts","../src/world-clock.ts","../src/storage.ts"],"names":["safeIntlSupported","isNode","isBrowser","TimezoneCache","fromZonedTime","toZonedTime","memoize","formatInTimeZone","toDate","getRegionalPattern","formatDistanceToNow","formatRelative","getLocaleMetadata","ConfigManager","PluginManager","getCountryTimezones","getCityTimezone","getTimezoneInfo","createConsoleLogger","formatDate","listAllTimezones"],"mappings":"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","file":"index.cjs","sourcesContent":["import { safeIntlSupported } from \"@multisystemsuite/timezone-engine-utils\";\n\nconst DISPLAY_SUFFIX_PATTERN = /\\s*\\(.*\\)\\s*$/;\n\n/**\n * Strip any display suffix from a timezone string and return a bare IANA id.\n *\n * @example\n * normalizeTimezone(\"America/New_York (GMT-5:00)\") // \"America/New_York\"\n * normalizeTimezone(\"Asia/Kolkata (GMT+5:30)\")     // \"Asia/Kolkata\"\n * normalizeTimezone(\"\")                            // \"UTC\"\n */\nexport function normalizeTimezone(timeZone: string | null | undefined): string {\n  if (!timeZone) return \"UTC\";\n  const stripped = timeZone.replace(DISPLAY_SUFFIX_PATTERN, \"\").trim();\n  return stripped || \"UTC\";\n}\n\n/** Validate a bare IANA timezone id using the runtime Intl implementation */\nexport function isValidIanaTimezone(timeZone: string): boolean {\n  if (!safeIntlSupported()) return true;\n  try {\n    Intl.DateTimeFormat(undefined, { timeZone });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Normalise and validate in one step. Returns the IANA id if valid,\n * otherwise returns the fallback and logs a warning.\n */\nexport function safeTimezone(timeZone: string | null | undefined, fallback = \"UTC\"): string {\n  const tz = normalizeTimezone(timeZone);\n  if (isValidIanaTimezone(tz)) return tz;\n  console.warn(\n    `[timezone-engine] Invalid timezone \"${String(timeZone)}\" (normalised: \"${tz}\"), falling back to ${fallback}`,\n  );\n  return fallback;\n}\n\n/**\n * Sanitise a timezone value before saving it to the database.\n * Strips any display suffix so only the bare IANA id is persisted.\n *\n * @example\n * site.TimeZone = sanitizeTimezoneForDB(req.body.TimeZone);\n */\nexport function sanitizeTimezoneForDB(timeZone: string | null | undefined): string {\n  return safeTimezone(timeZone);\n}\n","import type {\n  DetectTimezoneResult,\n  Environment,\n} from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { isBrowser, isNode, safeIntlSupported } from \"@multisystemsuite/timezone-engine-utils\";\nimport { isValidIanaTimezone, normalizeTimezone } from \"./normalization.js\";\n\nconst DEFAULT_TIMEZONE = \"UTC\";\n\nfunction detectViaIntl(): string | undefined {\n  if (!safeIntlSupported()) return undefined;\n  try {\n    return Intl.DateTimeFormat().resolvedOptions().timeZone;\n  } catch {\n    return undefined;\n  }\n}\n\nfunction detectViaEnv(): string | undefined {\n  if (isNode()) {\n    return process.env[\"TZ\"] ?? process.env[\"DEFAULT_TIMEZONE\"];\n  }\n  return undefined;\n}\n\nfunction getEnvironment(): Environment {\n  if (isBrowser()) return \"browser\";\n  if (isNode()) return \"node\";\n  return \"ssr\";\n}\n\n/** Detect timezone in browser environment */\nexport function detectBrowserTimezone(): DetectTimezoneResult {\n  const timezone = detectViaIntl() ?? DEFAULT_TIMEZONE;\n  return { timezone, source: \"intl\", environment: \"browser\" };\n}\n\n/** Detect timezone in Node.js environment */\nexport function detectNodeTimezone(): DetectTimezoneResult {\n  const envTz = detectViaEnv();\n  const timezone = envTz ?? detectViaIntl() ?? DEFAULT_TIMEZONE;\n  return {\n    timezone,\n    source: envTz ? \"env\" : \"intl\",\n    environment: \"node\",\n  };\n}\n\n/** Detect server timezone */\nexport function detectServerTimezone(defaultTimezone = DEFAULT_TIMEZONE): DetectTimezoneResult {\n  const envTz = detectViaEnv();\n  const timezone = envTz ?? defaultTimezone;\n  return {\n    timezone,\n    source: envTz ? \"env\" : \"config\",\n    environment: isNode() ? \"node\" : \"ssr\",\n  };\n}\n\n/** Universal timezone detection — SSR-safe */\nexport function detectTimezone(fallback = DEFAULT_TIMEZONE): DetectTimezoneResult {\n  const intlTz = detectViaIntl();\n  const envTz = detectViaEnv();\n\n  if (intlTz) {\n    return { timezone: intlTz, source: \"intl\", environment: getEnvironment() };\n  }\n  if (envTz) {\n    return { timezone: envTz, source: \"env\", environment: getEnvironment() };\n  }\n  return { timezone: fallback, source: \"config\", environment: getEnvironment() };\n}\n\n/** Get user's current timezone */\nexport function getUserTimezone(fallback = DEFAULT_TIMEZONE): string {\n  return detectTimezone(fallback).timezone;\n}\n\n/** Resolve timezone from header, cookie, or query param value */\nexport function resolveTimezoneFromValue(\n  value: string | undefined,\n  fallback = DEFAULT_TIMEZONE,\n): DetectTimezoneResult {\n  const normalized = normalizeTimezone(value);\n  if (value && isValidTimezone(normalized)) {\n    return { timezone: normalized, source: \"header\", environment: getEnvironment() };\n  }\n  return detectTimezone(fallback);\n}\n\n/**\n * Validate that a timezone string (after normalisation) is a valid IANA id\n * recognised by the runtime Intl implementation.\n */\nexport function isValidTimezone(timeZone: string | null | undefined): boolean {\n  const tz = normalizeTimezone(timeZone);\n  return isValidIanaTimezone(tz);\n}\n\n/** List all supported IANA timezones via Intl */\nexport function listSupportedTimezones(): string[] {\n  if (typeof Intl.supportedValuesOf === \"function\") {\n    return Intl.supportedValuesOf(\"timeZone\");\n  }\n  return [];\n}\n","import type { AliasResolveResult } from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { isValidIanaTimezone, normalizeTimezone } from \"./normalization.js\";\n\n/** Abbreviations that map to multiple regions — never auto-resolve */\nexport const AMBIGUOUS_TIMEZONE_ABBREVIATIONS = new Set([\n  \"IST\",\n  \"CST\",\n  \"EST\",\n  \"PST\",\n  \"MST\",\n  \"AST\",\n  \"BST\",\n  \"GST\",\n  \"CAT\",\n  \"WAT\",\n  \"SST\",\n  \"NST\",\n]);\n\n/** Safe legacy and regional alias mappings to canonical IANA ids */\nconst SAFE_IANA_ALIASES: Record<string, string> = {\n  GMT: \"UTC\",\n  Greenwich: \"UTC\",\n  Zulu: \"UTC\",\n  \"US/Eastern\": \"America/New_York\",\n  \"US/Central\": \"America/Chicago\",\n  \"US/Mountain\": \"America/Denver\",\n  \"US/Pacific\": \"America/Los_Angeles\",\n  \"US/Alaska\": \"America/Anchorage\",\n  \"US/Hawaii\": \"Pacific/Honolulu\",\n  \"Asia/Calcutta\": \"Asia/Kolkata\",\n  \"Asia/Saigon\": \"Asia/Ho_Chi_Minh\",\n  \"Asia/Rangoon\": \"Asia/Yangon\",\n  \"Europe/Kiev\": \"Europe/Kyiv\",\n  \"America/Buenos_Aires\": \"America/Argentina/Buenos_Aires\",\n};\n\nconst INVALID_PATTERNS = [/^Asia\\/India$/i, /^US\\/NewYork$/i, /^US\\/LosAngeles$/i, /^Europe\\/UK$/i];\n\nfunction lookupAlias(value: string): string | undefined {\n  const direct = SAFE_IANA_ALIASES[value];\n  if (direct) return direct;\n\n  const lower = value.toLowerCase();\n  for (const [alias, iana] of Object.entries(SAFE_IANA_ALIASES)) {\n    if (alias.toLowerCase() === lower) return iana;\n  }\n  return undefined;\n}\n\n/**\n * Resolve known timezone aliases to canonical IANA ids.\n * Rejects ambiguous abbreviations (IST, CST, etc.) and invalid legacy names.\n */\nexport function aliasTimezoneResolver(input: string | null | undefined): AliasResolveResult {\n  const normalized = normalizeTimezone(input);\n\n  if (!input || normalized === \"UTC\") {\n    return { input: normalized, resolved: \"UTC\", reason: \"valid_iana\" };\n  }\n\n  if (INVALID_PATTERNS.some((pattern) => pattern.test(normalized))) {\n    return { input: normalized, resolved: null, reason: \"invalid\" };\n  }\n\n  if (AMBIGUOUS_TIMEZONE_ABBREVIATIONS.has(normalized.toUpperCase())) {\n    return { input: normalized, resolved: null, reason: \"ambiguous\" };\n  }\n\n  const alias = lookupAlias(normalized);\n  if (alias && isValidIanaTimezone(alias)) {\n    return { input: normalized, resolved: alias, reason: \"alias\" };\n  }\n\n  if (isValidIanaTimezone(normalized)) {\n    return { input: normalized, resolved: normalized, reason: \"valid_iana\" };\n  }\n\n  return { input: normalized, resolved: null, reason: \"invalid\" };\n}\n","import { aliasTimezoneResolver } from \"./aliases.js\";\nimport { isValidIanaTimezone, safeTimezone } from \"./normalization.js\";\n\n/** Strict IANA timezone validation — rejects ambiguous abbreviations and invalid aliases */\nexport function validateTimezone(timeZone: string | null | undefined): boolean {\n  const resolved = aliasTimezoneResolver(timeZone);\n  if (!resolved.resolved) return false;\n  return isValidIanaTimezone(resolved.resolved);\n}\n\n/** Normalise and validate with fallback — enterprise-safe default */\nexport function safeTimezoneFallback(\n  timeZone: string | null | undefined,\n  fallback = \"UTC\",\n): string {\n  const resolved = aliasTimezoneResolver(timeZone);\n  if (resolved.resolved && isValidIanaTimezone(resolved.resolved)) {\n    return resolved.resolved;\n  }\n  return safeTimezone(fallback, \"UTC\");\n}\n","import { toZonedTime, fromZonedTime, formatInTimeZone } from \"date-fns-tz\";\nimport type { ConvertTimezoneOptions } from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { memoize, TimezoneCache } from \"@multisystemsuite/timezone-engine-utils\";\n\nconst conversionCache = new TimezoneCache();\n\nfunction toDate(input: Date | string | number): Date {\n  if (input instanceof Date) return input;\n  return new Date(input);\n}\n\n/** Convert date to UTC */\nexport function toUTC(date: Date | string | number, sourceTimezone: string): Date {\n  const d = toDate(date);\n  return fromZonedTime(d, sourceTimezone);\n}\n\n/** Convert UTC date to target timezone representation */\nexport function fromUTC(date: Date | string | number, targetTimezone: string): Date {\n  const d = toDate(date);\n  return toZonedTime(d, targetTimezone);\n}\n\n/** Convert date between timezones */\nexport function convertTimezone(options: ConvertTimezoneOptions): Date {\n  const { sourceTimezone, targetTimezone, date = new Date() } = options;\n  const utcDate = toUTC(date, sourceTimezone);\n  return fromUTC(utcDate, targetTimezone);\n}\n\nconst memoizedConvert = memoize(\n  (sourceTimezone: string, targetTimezone: string, timestamp: number) =>\n    convertTimezone({ sourceTimezone, targetTimezone, date: new Date(timestamp) }),\n  (source, target, ts) => `${source}:${target}:${ts}`,\n  conversionCache,\n);\n\n/** Cached timezone conversion for high-performance scenarios */\nexport function convertTimezoneCached(\n  sourceTimezone: string,\n  targetTimezone: string,\n  date: Date | string | number = new Date(),\n): Date {\n  return memoizedConvert(sourceTimezone, targetTimezone, toDate(date).getTime());\n}\n\n/** Detect if DST is active for a timezone at a given date */\nexport function detectDST(timezone: string, date: Date | string | number = new Date()): boolean {\n  const d = toDate(date);\n  const jan = new Date(d.getFullYear(), 0, 1);\n  const jul = new Date(d.getFullYear(), 6, 1);\n\n  const janOffset = getTimezoneOffsetMinutes(timezone, jan);\n  const julOffset = getTimezoneOffsetMinutes(timezone, jul);\n  const currentOffset = getTimezoneOffsetMinutes(timezone, d);\n\n  if (janOffset === julOffset) return false;\n  return currentOffset !== Math.max(janOffset, julOffset);\n}\n\n/** Get UTC offset string for a timezone (e.g. \"+05:30\") */\nexport function getUtcOffset(timezone: string, date: Date | string | number = new Date()): string {\n  const d = toDate(date);\n  const formatted = formatInTimeZone(d, timezone, \"xxx\");\n  return formatted;\n}\n\n/** Get offset in minutes from UTC */\nexport function getTimezoneOffsetMinutes(\n  timezone: string,\n  date: Date | string | number = new Date(),\n): number {\n  const d = toDate(date);\n  const utcDate = toUTC(d, timezone);\n  return (utcDate.getTime() - d.getTime()) / 60_000;\n}\n","import type { TimezoneComparison } from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { getTimezoneOffsetMinutes, toUTC } from \"./conversion.js\";\n\nfunction formatOffsetDifference(minutes: number): string {\n  const abs = Math.abs(minutes);\n  const hours = Math.floor(abs / 60);\n  const mins = abs % 60;\n  const sign = minutes >= 0 ? \"+\" : \"-\";\n  return `${sign}${String(hours).padStart(2, \"0\")}:${String(mins).padStart(2, \"0\")}`;\n}\n\n/** Compare two timezones */\nexport function compareTimezones(\n  source: string,\n  target: string,\n  date: Date | string | number = new Date(),\n): TimezoneComparison {\n  const sourceOffset = getTimezoneOffsetMinutes(source, date);\n  const targetOffset = getTimezoneOffsetMinutes(target, date);\n  const diff = targetOffset - sourceOffset;\n\n  return {\n    source,\n    target,\n    offsetDifferenceMinutes: diff,\n    offsetDifferenceLabel: formatOffsetDifference(diff),\n    sameOffset: diff === 0,\n    sourceAhead: diff < 0,\n  };\n}\n\n/** Compare multiple timezones against a reference */\nexport function compareMultipleTimezones(\n  reference: string,\n  targets: string[],\n  date: Date | string | number = new Date(),\n): TimezoneComparison[] {\n  return targets.map((target) => compareTimezones(reference, target, date));\n}\n\n/** Find best meeting time across timezones (simple overlap window) */\nexport function findCommonWorkingHours(\n  timezones: string[],\n  workStartHour = 9,\n  workEndHour = 17,\n  date: Date = new Date(),\n): { startHourUTC: number; endHourUTC: number; overlapHours: number } {\n  if (timezones.length === 0) {\n    return { startHourUTC: workStartHour, endHourUTC: workEndHour, overlapHours: 0 };\n  }\n\n  const offsets = timezones.map((tz) => getTimezoneOffsetMinutes(tz, date));\n  const minOffset = Math.min(...offsets);\n  const maxOffset = Math.max(...offsets);\n\n  const startUTC = workStartHour - maxOffset / 60;\n  const endUTC = workEndHour - minOffset / 60;\n  const overlap = Math.max(0, endUTC - startUTC);\n\n  return {\n    startHourUTC: startUTC,\n    endHourUTC: endUTC,\n    overlapHours: overlap,\n  };\n}\n\nfunction toDate(input: Date | string | number): Date {\n  if (input instanceof Date) return input;\n  return new Date(input);\n}\n\n/** Timezone-safe instant comparison — compares UTC instants, not wall-clock strings */\nexport function timezoneSafeCompare(\n  a: Date | string | number,\n  b: Date | string | number,\n  timezoneA = \"UTC\",\n  timezoneB = \"UTC\",\n): { equal: boolean; differenceMs: number; aUTC: Date; bUTC: Date } {\n  const aUTC = toUTC(toDate(a), timezoneA);\n  const bUTC = toUTC(toDate(b), timezoneB);\n  const differenceMs = aUTC.getTime() - bUTC.getTime();\n  return {\n    equal: differenceMs === 0,\n    differenceMs,\n    aUTC,\n    bUTC,\n  };\n}\n","import { formatInTimeZone } from \"date-fns-tz\";\nimport { formatDistanceToNow, formatRelative } from \"date-fns\";\nimport type {\n  FormatDateOptions,\n  DateFormatType,\n} from \"@multisystemsuite/timezone-engine-shared-types\";\nimport {\n  getLocaleMetadata,\n  getRegionalPattern,\n} from \"@multisystemsuite/timezone-engine-world-data\";\nimport { memoize, TimezoneCache } from \"@multisystemsuite/timezone-engine-utils\";\n\nconst formatCache = new TimezoneCache();\n\nconst FORMAT_PATTERNS: Record<DateFormatType, string> = {\n  ISO: \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\",\n  UTC: \"yyyy-MM-dd'T'HH:mm:ss'Z'\",\n  LOCAL: \"Pp\",\n  SHORT: \"P\",\n  LONG: \"PPP\",\n  FULL: \"PPPP\",\n  DATETIME: \"Pp\",\n  TIME_ONLY: \"p\",\n  DATE_ONLY: \"P\",\n};\n\nfunction toDate(input: Date | string | number): Date {\n  if (input instanceof Date) return input;\n  return new Date(input);\n}\n\nfunction resolvePattern(options: FormatDateOptions): string {\n  const formatType = options.format ?? \"ISO\";\n\n  if (options.regionalFormat) {\n    const regional = getRegionalPattern(options.regionalFormat);\n    if (formatType === \"TIME_ONLY\") return \"p\";\n    if (formatType === \"DATE_ONLY\" || formatType === \"SHORT\") return regional;\n    return `${regional} HH:mm`;\n  }\n\n  return FORMAT_PATTERNS[formatType];\n}\n\nfunction resolveLocale(options: FormatDateOptions): string {\n  if (options.locale) return options.locale;\n  if (options.regionalFormat) {\n    const mapping: Record<string, string> = {\n      IN: \"en-IN\",\n      US: \"en-US\",\n      EU: \"de-DE\",\n      UK: \"en-GB\",\n      JP: \"ja-JP\",\n      AR: \"ar-AE\",\n      CN: \"zh-CN\",\n      ISO: \"en-GB\",\n    };\n    return mapping[options.regionalFormat] ?? \"en-US\";\n  }\n  return \"en-US\";\n}\n\n/** Format date with locale and timezone awareness */\nexport function formatDate(date: Date | string | number, options: FormatDateOptions = {}): string {\n  const d = toDate(date);\n  const timezone = options.timezone ?? \"UTC\";\n  const pattern = resolvePattern(options);\n\n  if (options.format === \"UTC\") {\n    return formatInTimeZone(d, \"UTC\", pattern);\n  }\n\n  return formatInTimeZone(d, timezone, pattern);\n}\n\nconst memoizedFormat = memoize(\n  (timestamp: number, timezone: string, format: string, _locale: string) =>\n    formatInTimeZone(new Date(timestamp), timezone, format),\n  (ts, tz, fmt, loc) => `${ts}:${tz}:${fmt}:${loc}`,\n  formatCache,\n);\n\n/** Cached date formatting for high-performance scenarios */\nexport function formatDateCached(\n  date: Date | string | number,\n  options: FormatDateOptions = {},\n): string {\n  const d = toDate(date);\n  const timezone = options.timezone ?? \"UTC\";\n  const pattern = resolvePattern(options);\n  const locale = resolveLocale(options);\n  return memoizedFormat(d.getTime(), timezone, pattern, locale);\n}\n\n/** Format relative time (e.g. \"2 hours ago\") */\nexport function formatRelativeTime(\n  date: Date | string | number,\n  _baseDate: Date | string | number = new Date(),\n): string {\n  return formatDistanceToNow(toDate(date), { addSuffix: true });\n}\n\n/** Format relative date with timezone context */\nexport function formatRelativeDate(\n  date: Date | string | number,\n  baseDate: Date | string | number = new Date(),\n): string {\n  return formatRelative(toDate(date), toDate(baseDate));\n}\n\n/** Format time in 12h or 24h style */\nexport function formatTime(\n  date: Date | string | number,\n  timezone: string,\n  style: \"12h\" | \"24h\" = \"24h\",\n  _locale = \"en-US\",\n): string {\n  const pattern = style === \"12h\" ? \"h:mm a\" : \"HH:mm\";\n  return formatInTimeZone(toDate(date), timezone, pattern);\n}\n\n/** Get locale-aware date format for a locale string */\nexport function getLocaleDateFormat(locale: string): string {\n  const meta = getLocaleMetadata(locale);\n  if (meta) return getRegionalPattern(meta.dateFormat);\n  return getRegionalPattern(\"ISO\");\n}\n\n/** Get locale time format preference */\nexport function getLocaleTimeFormat(locale: string): \"12h\" | \"24h\" {\n  const meta = getLocaleMetadata(locale);\n  return meta?.timeFormat ?? \"24h\";\n}\n","import type {\n  ClockDriftResult,\n  ServerClientSyncPayload,\n} from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { compareTimezones } from \"./comparison.js\";\nimport { detectServerTimezone } from \"./detection.js\";\nimport { formatDate } from \"./formatting.js\";\nimport { safeTimezoneFallback } from \"./validation.js\";\n\nfunction toDate(input: Date | string | number): Date {\n  if (input instanceof Date) return input;\n  return new Date(input);\n}\n\n/** Detect client/server clock drift for distributed sync scenarios */\nexport function detectClockDrift(\n  clientTime: Date | string | number,\n  serverTime: Date | string | number = new Date(),\n  toleranceMs = 5000,\n): ClockDriftResult {\n  const client = toDate(clientTime);\n  const server = toDate(serverTime);\n  const driftMs = client.getTime() - server.getTime();\n\n  return {\n    driftMs,\n    driftSeconds: driftMs / 1000,\n    withinTolerance: Math.abs(driftMs) <= toleranceMs,\n    toleranceMs,\n    serverTime: server,\n    clientTime: client,\n  };\n}\n\n/** Synchronize server and client timezone context with drift detection */\nexport function syncServerTime(options: {\n  clientTimezone: string;\n  serverTimezone?: string;\n  clientTime?: Date | string | number;\n  toleranceMs?: number;\n}): ServerClientSyncPayload & { drift: ClockDriftResult } {\n  const clientTimezone = safeTimezoneFallback(options.clientTimezone);\n  const serverTimezone = safeTimezoneFallback(\n    options.serverTimezone ?? detectServerTimezone().timezone,\n  );\n  const now = new Date();\n  const clientTime = options.clientTime ? toDate(options.clientTime) : now;\n  const drift = detectClockDrift(clientTime, now, options.toleranceMs ?? 5000);\n  const comparison = compareTimezones(serverTimezone, clientTimezone, now);\n\n  return {\n    serverTimezone,\n    clientTimezone,\n    serverTime: formatDate(now, { format: \"ISO\", timezone: serverTimezone }),\n    clientTime: formatDate(clientTime, { format: \"ISO\", timezone: clientTimezone }),\n    offsetDifferenceMinutes: comparison.offsetDifferenceMinutes,\n    driftMs: drift.driftMs,\n    driftWithinTolerance: drift.withinTolerance,\n    drift,\n  };\n}\n","import type { TimezoneEngineConfig } from \"@multisystemsuite/timezone-engine-shared-types\";\nimport type {\n  ConvertTimezoneOptions,\n  FormatDateOptions,\n} from \"@multisystemsuite/timezone-engine-shared-types\";\nimport {\n  ConfigManager,\n  PluginManager,\n  TimezoneCache,\n  createConsoleLogger,\n} from \"@multisystemsuite/timezone-engine-utils\";\nimport {\n  getCountryTimezones,\n  getCityTimezone,\n  getTimezoneInfo,\n} from \"@multisystemsuite/timezone-engine-world-data\";\nimport { convertTimezone as convertTimezoneCore } from \"./conversion.js\";\nimport { formatDate as formatDateCore } from \"./formatting.js\";\n\n/** Enterprise timezone engine with config, cache, and plugin support */\nexport class TimezoneEngine {\n  readonly config: ConfigManager;\n  readonly plugins: PluginManager;\n  readonly cache: TimezoneCache;\n\n  constructor(config: TimezoneEngineConfig = {}) {\n    this.config = new ConfigManager(config);\n    this.plugins = new PluginManager();\n    this.cache = new TimezoneCache(this.config.get().cacheTTL);\n\n    const cfg = this.config.get();\n    if (cfg.plugins) {\n      for (const plugin of cfg.plugins) {\n        this.plugins.register(plugin);\n      }\n    }\n    this.plugins.init(cfg);\n  }\n\n  formatDate(date: Date | string | number, options: FormatDateOptions = {}): string {\n    const d = date instanceof Date ? date : new Date(date);\n    const cfg = this.config.get();\n    const baseOptions: FormatDateOptions = {\n      timezone: cfg.defaultTimezone ?? \"UTC\",\n      locale: cfg.defaultLocale ?? \"en-US\",\n      ...options,\n    };\n    if (cfg.defaultFormat) {\n      baseOptions.format = options.format ?? cfg.defaultFormat;\n    }\n    const resolvedOptions = this.plugins.runBeforeFormat(d, baseOptions);\n    const result = formatDateCore(d, resolvedOptions);\n    return this.plugins.runAfterFormat(d, result);\n  }\n\n  convertTimezone(options: ConvertTimezoneOptions): Date {\n    const resolved = this.plugins.runBeforeConvert(options);\n    return convertTimezoneCore(resolved);\n  }\n\n  getCountryTimezones(countryCode: string) {\n    return getCountryTimezones(countryCode);\n  }\n\n  getCityTimezone(city: string) {\n    return getCityTimezone(city);\n  }\n\n  getTimezoneInfo(timezone: string) {\n    return getTimezoneInfo(timezone);\n  }\n\n  enableLogging(): void {\n    this.config.update({ logger: createConsoleLogger() });\n  }\n}\n\n/** Create a configured timezone engine instance */\nexport function createTimezoneEngine(config?: TimezoneEngineConfig): TimezoneEngine {\n  return new TimezoneEngine(config);\n}\n\n/** Default singleton engine instance */\nexport const defaultEngine = createTimezoneEngine();\n","import type {\n  TenantTimezoneConfig,\n  TimezoneEngineConfig,\n} from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { createTimezoneEngine, type TimezoneEngine } from \"./engine.js\";\nimport { safeTimezoneFallback } from \"./validation.js\";\n\n/** Multi-tenant timezone registry for SaaS / HRMS / ERP isolation */\nexport class TenantTimezoneRegistry {\n  private readonly tenants = new Map<string, TenantTimezoneConfig>();\n  private readonly engines = new Map<string, TimezoneEngine>();\n\n  register(config: TenantTimezoneConfig): void {\n    const timezone = safeTimezoneFallback(config.timezone);\n    this.tenants.set(config.tenantId, { ...config, timezone });\n    this.engines.delete(config.tenantId);\n  }\n\n  unregister(tenantId: string): void {\n    this.tenants.delete(tenantId);\n    this.engines.delete(tenantId);\n  }\n\n  getConfig(tenantId: string): TenantTimezoneConfig | undefined {\n    return this.tenants.get(tenantId);\n  }\n\n  getTimezone(tenantId: string, fallback = \"UTC\"): string {\n    return this.tenants.get(tenantId)?.timezone ?? fallback;\n  }\n\n  getLocale(tenantId: string, fallback = \"en-US\"): string {\n    return this.tenants.get(tenantId)?.locale ?? fallback;\n  }\n\n  /** Create or retrieve an isolated engine instance per tenant */\n  getEngine(tenantId: string, config: TimezoneEngineConfig = {}): TimezoneEngine {\n    const existing = this.engines.get(tenantId);\n    if (existing) return existing;\n\n    const tenant = this.tenants.get(tenantId);\n    const engineConfig: TimezoneEngineConfig = {\n      defaultTimezone: tenant?.timezone ?? \"UTC\",\n      defaultLocale: tenant?.locale ?? \"en-US\",\n      ...config,\n    };\n    if (tenant?.defaultFormat) {\n      engineConfig.defaultFormat = tenant.defaultFormat;\n    }\n    const engine = createTimezoneEngine(engineConfig);\n    this.engines.set(tenantId, engine);\n    return engine;\n  }\n\n  listTenants(): string[] {\n    return [...this.tenants.keys()];\n  }\n}\n\n/** Create a tenant-scoped timezone engine with isolated configuration */\nexport function createTenantTimezoneEngine(\n  tenantId: string,\n  timezone: string,\n  config: TimezoneEngineConfig = {},\n): TimezoneEngine {\n  return createTimezoneEngine({\n    ...config,\n    defaultTimezone: safeTimezoneFallback(timezone),\n  });\n}\n\n/** Default singleton tenant registry */\nexport const defaultTenantRegistry = new TenantTimezoneRegistry();\n","import { safeTimezone } from \"./normalization.js\";\n\nexport { normalizeTimezone, safeTimezone, sanitizeTimezoneForDB } from \"./normalization.js\";\nexport { isValidTimezone } from \"./detection.js\";\n\n/**\n * Convert a Date object to a wall-clock Date in the given timezone.\n * The returned Date's local methods (.getHours(), .getDate(), …) reflect\n * the time at that location.\n */\nexport function convertToTimezone(date: Date, timeZone: string): Date {\n  const tz = safeTimezone(timeZone);\n  try {\n    const formatter = new Intl.DateTimeFormat(\"en-US\", {\n      timeZone: tz,\n      year: \"numeric\",\n      month: \"2-digit\",\n      day: \"2-digit\",\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n      hour12: false,\n    });\n\n    const parts = formatter.formatToParts(date);\n    const get = (type: Intl.DateTimeFormatPartTypes) =>\n      parts.find((p) => p.type === type)?.value ?? \"0\";\n\n    return new Date(\n      parseInt(get(\"year\"), 10),\n      parseInt(get(\"month\"), 10) - 1,\n      parseInt(get(\"day\"), 10),\n      parseInt(get(\"hour\"), 10),\n      parseInt(get(\"minute\"), 10),\n      parseInt(get(\"second\"), 10),\n    );\n  } catch (error) {\n    console.error(`[timezone-engine] convertToTimezone failed for \"${timeZone}\", using UTC`, error);\n    return date;\n  }\n}\n\n/**\n * Format a Date using a simple token-based format string.\n *\n * Supported tokens: YYYY, YY, MM, DD, HH, mm, ss, SSS\n *\n * @example\n * formatDate(new Date(), \"DD/MM/YYYY HH:mm\")\n */\nexport function formatDate(date: Date, format: string): string {\n  const pad = (n: number, len = 2) => String(n).padStart(len, \"0\");\n  const tokens: Record<string, string> = {\n    YYYY: String(date.getFullYear()),\n    YY: String(date.getFullYear()).slice(-2),\n    MM: pad(date.getMonth() + 1),\n    DD: pad(date.getDate()),\n    HH: pad(date.getHours()),\n    mm: pad(date.getMinutes()),\n    ss: pad(date.getSeconds()),\n    SSS: pad(date.getMilliseconds(), 3),\n  };\n\n  let result = format;\n  for (const [token, value] of Object.entries(tokens)) {\n    result = result.replace(new RegExp(token, \"g\"), value);\n  }\n  return result;\n}\n\n/**\n * Convert a date to the site's timezone then format it.\n * Returns null if the date is invalid or not provided.\n */\nexport function formatDateForSite(\n  date: Date | string | null | undefined,\n  timeZone: string,\n  dateTimeFormat: string,\n): string | null {\n  if (!date) return null;\n  const dateObj = typeof date === \"string\" ? new Date(date) : date;\n  if (isNaN(dateObj.getTime())) return null;\n  const converted = convertToTimezone(dateObj, timeZone);\n  return formatDate(converted, dateTimeFormat);\n}\n\n/**\n * Return the current timestamp formatted for a given site timezone + format.\n */\nexport function getFormattedDateTime(timeZone: string, dateTimeFormat: string): string {\n  return formatDateForSite(new Date(), timeZone, dateTimeFormat) ?? new Date().toISOString();\n}\n\n/** Alias for token-based formatting — avoids clash with locale-aware formatDate */\nexport const formatDateWithPattern = formatDate;\n","import { formatInTimeZone } from \"date-fns-tz\";\nimport type { WorldClockEntry } from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { getTimezoneInfo, listAllTimezones } from \"@multisystemsuite/timezone-engine-world-data\";\nimport { detectDST, getUtcOffset } from \"./conversion.js\";\n\nfunction buildClockEntry(timezone: string, label: string, now: Date): WorldClockEntry {\n  const info = getTimezoneInfo(timezone);\n  const formattedTime = formatInTimeZone(now, timezone, \"PPpp\");\n  const utcOffset = getUtcOffset(timezone, now);\n  const isDST = detectDST(timezone, now);\n\n  return {\n    timezone,\n    label: label || info?.city || timezone,\n    localTime: now,\n    formattedTime,\n    utcOffset,\n    isDST,\n  };\n}\n\n/** Get world clock for a single timezone */\nexport function getWorldClockTime(\n  timezone: string,\n  label?: string,\n  now: Date = new Date(),\n): WorldClockEntry {\n  return buildClockEntry(timezone, label ?? timezone, now);\n}\n\n/** Get world clock for multiple timezones */\nexport function getWorldClock(timezones: string[], now: Date = new Date()): WorldClockEntry[] {\n  return timezones.map((tz) => buildClockEntry(tz, tz, now));\n}\n\n/** Get default world clock with major cities */\nexport function getDefaultWorldClock(now: Date = new Date()): WorldClockEntry[] {\n  const defaults = [\n    \"UTC\",\n    \"America/New_York\",\n    \"Europe/London\",\n    \"Asia/Kolkata\",\n    \"Asia/Tokyo\",\n    \"Australia/Sydney\",\n  ];\n  return getWorldClock(defaults, now);\n}\n\n/** Get all registered world clock entries */\nexport function getFullWorldClock(now: Date = new Date()): WorldClockEntry[] {\n  return getWorldClock(listAllTimezones(), now);\n}\n\n/** Create a live clock updater callback */\nexport function createLiveClockUpdater(\n  timezones: string[],\n  onUpdate: (clocks: WorldClockEntry[]) => void,\n  intervalMs = 1000,\n): { start: () => void; stop: () => void } {\n  let timerId: ReturnType<typeof setInterval> | undefined;\n\n  const tick = () => {\n    onUpdate(getWorldClock(timezones));\n  };\n\n  return {\n    start: () => {\n      tick();\n      timerId = setInterval(tick, intervalMs);\n    },\n    stop: () => {\n      if (timerId !== undefined) {\n        clearInterval(timerId);\n        timerId = undefined;\n      }\n    },\n  };\n}\n","import type { UTCStorageRecord } from \"@multisystemsuite/timezone-engine-shared-types\";\nimport { getUtcOffset, toUTC } from \"./conversion.js\";\nimport { safeTimezoneFallback } from \"./validation.js\";\n\nfunction toDate(input: Date | string | number): Date {\n  if (input instanceof Date) return input;\n  return new Date(input);\n}\n\n/** Normalize and persist timestamps in UTC with source timezone metadata */\nexport function ensureUTCStorage(\n  date: Date | string | number,\n  sourceTimezone: string,\n): UTCStorageRecord {\n  const tz = safeTimezoneFallback(sourceTimezone);\n  const d = toUTC(toDate(date), tz);\n  return {\n    utc: d.toISOString(),\n    sourceTimezone: tz,\n    originalOffset: getUtcOffset(tz, d),\n    storedAt: new Date().toISOString(),\n  };\n}\n\n/** Rehydrate a UTC storage record to a Date instance */\nexport function parseUTCStorage(record: UTCStorageRecord): Date {\n  return new Date(record.utc);\n}\n"]}