{"version":3,"sources":["../src/shared/utils/dateUtils.ts","../src/apis/shared/zDotnetDateSchema.ts","../src/apis/shared/cacheFlushDate.ts"],"names":["wsdotDateTimeToJSDate","dateString","timestampStr","timezoneIndex","timestamp","timestampNum","date","jsDateToYyyyMmDd","convertDotNetDates","data","_","value","dotNetDate","isoDate","isIso8601DateString","datesHelper","zDotnetDate","z","isDotnetDateString","val","cacheFlushDateInputSchema","cacheFlushDateOutputSchema"],"mappings":"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","file":"chunk-BOH3LKTH.mjs","sourcesContent":["/**\n * @fileoverview Date Utilities for WS-Dottie\n *\n * This module provides date conversion utilities specifically designed for\n * handling WSDOT/WSF API date formats. It includes conversion from .NET\n * datetime strings to JavaScript Date objects and various date formatting\n * utilities for API requests and responses.\n */\n\n/**\n * Converts a WSDOT .NET timestamp string to a JavaScript Date object\n *\n * This function parses WSDOT's .NET datetime format (\"/Date(timestamp)/\")\n * and converts it to a JavaScript Date object. It handles both positive\n * and negative timestamps, as well as timezone offsets.\n *\n * The parsing logic:\n * - Extracts timestamp from position 6 to 6 characters from the end\n * - Handles timezone separators (+ or - after timestamp)\n * - Validates the resulting timestamp number\n *\n * @param dateString - The WSDOT date string to convert\n * @returns JavaScript Date object or null if parsing fails\n * @example\n * ```typescript\n * wsdotDateTimeToJSDate(\"/Date(1757451301100-0700)/\") // Returns Date object\n * wsdotDateTimeToJSDate(\"/Date(-2208945600000-0800)/\") // Returns Date object\n * wsdotDateTimeToJSDate(\"invalid\") // Returns null\n * ```\n */\nexport const wsdotDateTimeToJSDate = (dateString: string): Date | null => {\n  if (!dateString || typeof dateString !== \"string\") {\n    return null;\n  }\n\n  // Simple validation: must start with \"/Date(\" and end with \")/\"\n  if (!dateString.startsWith(\"/Date(\") || !dateString.endsWith(\")/\")) {\n    return null;\n  }\n\n  // Extract timestamp: start 6 chars in, end 6 chars from the end\n  const timestampStr = dateString.slice(6, -6);\n\n  // Find timezone separator (+ or - after timestamp)\n  const timezoneIndex = timestampStr.search(/[+-]/);\n  const timestamp =\n    timezoneIndex > 0 ? timestampStr.slice(0, timezoneIndex) : timestampStr;\n\n  const timestampNum = parseInt(timestamp, 10);\n\n  // Validate timestamp is a valid number\n  if (Number.isNaN(timestampNum)) {\n    return null;\n  }\n\n  const date = new Date(timestampNum);\n  return Number.isNaN(date.getTime()) ? null : date;\n};\n\n/**\n * Converts a JavaScript Date to ISO date stamp (YYYY-MM-DD)\n *\n * This function formats a JavaScript Date object as an ISO date string\n * in YYYY-MM-DD format, which is commonly used in API requests.\n *\n * @param date - The JavaScript Date object to convert\n * @returns ISO date string in YYYY-MM-DD format\n * @example\n * ```typescript\n * jsDateToYyyyMmDd(new Date(2024, 0, 15)) // Returns \"2024-01-15\"\n * ```\n */\nexport const jsDateToYyyyMmDd = (date: Date): string => {\n  return date.toISOString().split(\"T\")[0];\n};\n\n/**\n * Converts .NET datetime strings to JavaScript Date objects in response data\n *\n * This function recursively traverses an object/array structure and converts\n * any .NET datetime strings (format: \"/Date(1234567890123)/\") to JavaScript\n * Date objects, leaving other values unchanged. It uses JSON.parse with a\n * reviver function to process the data during parsing.\n *\n * @param data - The data structure to process\n * @returns The data with .NET dates converted to JS Date objects\n * @example\n * ```typescript\n * const data = { date: \"/Date(1757451301100-0700)/\", name: \"test\" };\n * const converted = convertDotNetDates(data);\n * // Result: { date: Date object, name: \"test\" }\n * ```\n */\nexport const convertDotNetDates = (data: unknown): unknown => {\n  return JSON.parse(JSON.stringify(data), (_, value) => {\n    if (typeof value === \"string\") {\n      // Try .NET date format first\n      const dotNetDate = wsdotDateTimeToJSDate(value);\n      if (dotNetDate) {\n        return dotNetDate;\n      }\n\n      // Try ISO-8601 date format\n      const isoDate = new Date(value);\n      if (!Number.isNaN(isoDate.getTime()) && isIso8601DateString(value)) {\n        return isoDate;\n      }\n\n      return value;\n    }\n    return value;\n  });\n};\n\n/**\n * Type guard for ISO-8601 date format\n *\n * This function checks if a string matches the ISO-8601 date format\n * with optional time and timezone information.\n *\n * @param value - The string to check\n * @returns True if the string matches ISO-8601 date format\n */\nconst isIso8601DateString = (value: string): boolean => {\n  const isoRegex =\n    /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,3})?)?(Z|[+-]\\d{2}:\\d{2})?$/;\n  return isoRegex.test(value);\n};\n\n/**\n * Date helper functions for runtime evaluation\n *\n * These functions return YYYY-MM-DD date strings when called, ensuring they are\n * evaluated at runtime rather than build time. This is useful for\n * generating dynamic dates in API requests and sample data.\n */\nexport const datesHelper = {\n  /** Returns tomorrow's date as YYYY-MM-DD string */\n  tomorrow: (): string =>\n    jsDateToYyyyMmDd(new Date(Date.now() + 24 * 60 * 60 * 1000)),\n  /** Returns the day after tomorrow's date as YYYY-MM-DD string */\n  dayAfterTomorrow: (): string =>\n    jsDateToYyyyMmDd(new Date(Date.now() + 2 * 24 * 60 * 60 * 1000)),\n  /** Returns today's date as YYYY-MM-DD string */\n  today: (): string => jsDateToYyyyMmDd(new Date()),\n  /** Returns yesterday's date as YYYY-MM-DD string */\n  yesterday: (): string =>\n    jsDateToYyyyMmDd(new Date(Date.now() - 24 * 60 * 60 * 1000)),\n  /** Returns August 1, 2025 (start of month for sample data) as YYYY-MM-DD string */\n  startOfMonth: (): string => jsDateToYyyyMmDd(new Date(2025, 7, 1)), // August 1, 2025\n  /** Returns August 31, 2025 (end of month for sample data) as YYYY-MM-DD string */\n  endOfMonth: (): string => jsDateToYyyyMmDd(new Date(2025, 7, 31)), // August 31, 2025\n} as const;\n","/**\n * @fileoverview .NET Date Validation for TanStack Query\n *\n * This module provides Zod schema validation for .NET date formats,\n * including the specialized \"/Date(timestamp)/\" format used by .NET\n * APIs. It handles validation and transformation to JavaScript Date objects.\n */\n\nimport { wsdotDateTimeToJSDate } from \"@/shared/utils/dateUtils\";\nimport { z } from \"@/shared/zod\";\n\n/**\n * .NET date validation and transformation schema\n *\n * This Zod schema handles .NET's \"/Date(timestamp)/\" format only.\n * It validates the input format and transforms it to a JavaScript Date object.\n */\nexport const zDotnetDate = () =>\n  z\n    .string()\n    .refine((value) => isDotnetDateString(value), {\n      message: \"Invalid date format. Expected .NET /Date(timestamp)/ format\",\n    })\n    .transform((val) => {\n      const date = wsdotDateTimeToJSDate(val.replace(/\\\\\\//g, \"/\"));\n      if (!date) throw new Error(`Failed to parse .NET date: ${val}`);\n      return date;\n    });\n\n/**\n * Type guard for .NET date format\n *\n * This function checks if a string matches the .NET \"/Date(timestamp)/\"\n * format, including escaped versions that may appear in JSON responses.\n *\n * @param value - The string to check\n * @returns True if the string matches .NET date format\n */\nconst isDotnetDateString = (value: string): boolean =>\n  value.length >= 19 &&\n  (value.startsWith(\"/Date(\") || value.startsWith(\"\\\\/Date(\")) &&\n  (value.endsWith(\")/\") || value.endsWith(\")\\\\/\"));\n","/**\n * @fileoverview Shared schemas for cache flush date endpoints\n *\n * This module provides reusable input and output schemas for cache flush date\n * endpoints across all WSF APIs (wsf-fares, wsf-schedule, wsf-terminals, wsf-vessels).\n */\n\nimport type { z as zod } from \"zod\";\nimport { z } from \"@/shared/zod\";\nimport { zDotnetDate } from \"./zDotnetDateSchema\";\n\n/**\n * Shared input schema for cache flush date endpoints\n *\n * All cache flush date endpoints accept no parameters, so this is an empty object.\n */\nexport const cacheFlushDateInputSchema = z\n  .object({})\n  .describe(\"Input parameters for cache flush date endpoint.\");\n\nexport type CacheFlushDateInput = zod.infer<typeof cacheFlushDateInputSchema>;\n\n/**\n * Shared output schema for cache flush date endpoints\n *\n * Returns an optional UTC datetime indicating when static endpoint data was\n * last updated. Used for cache invalidation purposes.\n */\nexport const cacheFlushDateOutputSchema = zDotnetDate()\n  .optional()\n  .describe(\n    \"UTC datetime when static endpoint data was last updated, or undefined if no update has occurred.\"\n  );\n\nexport type CacheFlushDateOutput = zod.infer<typeof cacheFlushDateOutputSchema>;\n"]}