@mostlyrightmd/core 0.1.0-rc.7

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/discovery/index.cjs +1646 -0
  4. package/dist/discovery/index.cjs.map +1 -0
  5. package/dist/discovery/index.d.cts +313 -0
  6. package/dist/discovery/index.d.ts +313 -0
  7. package/dist/discovery/index.mjs +1609 -0
  8. package/dist/discovery/index.mjs.map +1 -0
  9. package/dist/formats/index.cjs +498 -0
  10. package/dist/formats/index.cjs.map +1 -0
  11. package/dist/formats/index.d.cts +97 -0
  12. package/dist/formats/index.d.ts +97 -0
  13. package/dist/formats/index.mjs +465 -0
  14. package/dist/formats/index.mjs.map +1 -0
  15. package/dist/index.cjs +1624 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.cts +559 -0
  18. package/dist/index.d.ts +559 -0
  19. package/dist/index.global.js +1582 -0
  20. package/dist/index.global.js.map +1 -0
  21. package/dist/index.mjs +1557 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/internal/bounds.cjs +125 -0
  24. package/dist/internal/bounds.cjs.map +1 -0
  25. package/dist/internal/bounds.d.cts +36 -0
  26. package/dist/internal/bounds.d.ts +36 -0
  27. package/dist/internal/bounds.mjs +81 -0
  28. package/dist/internal/bounds.mjs.map +1 -0
  29. package/dist/internal/cache/fs.cjs +217 -0
  30. package/dist/internal/cache/fs.cjs.map +1 -0
  31. package/dist/internal/cache/fs.d.cts +57 -0
  32. package/dist/internal/cache/fs.d.ts +57 -0
  33. package/dist/internal/cache/fs.mjs +179 -0
  34. package/dist/internal/cache/fs.mjs.map +1 -0
  35. package/dist/internal/cache/index.browser.cjs +1184 -0
  36. package/dist/internal/cache/index.browser.cjs.map +1 -0
  37. package/dist/internal/cache/index.browser.d.cts +20 -0
  38. package/dist/internal/cache/index.browser.d.ts +20 -0
  39. package/dist/internal/cache/index.browser.mjs +36 -0
  40. package/dist/internal/cache/index.browser.mjs.map +1 -0
  41. package/dist/internal/cache/index.cjs +1389 -0
  42. package/dist/internal/cache/index.cjs.map +1 -0
  43. package/dist/internal/cache/index.d.cts +16 -0
  44. package/dist/internal/cache/index.d.ts +16 -0
  45. package/dist/internal/cache/index.mjs +40 -0
  46. package/dist/internal/cache/index.mjs.map +1 -0
  47. package/dist/internal/chunk-PKJXHY27.mjs +1137 -0
  48. package/dist/internal/chunk-PKJXHY27.mjs.map +1 -0
  49. package/dist/internal/convert.cjs +161 -0
  50. package/dist/internal/convert.cjs.map +1 -0
  51. package/dist/internal/convert.d.cts +44 -0
  52. package/dist/internal/convert.d.ts +44 -0
  53. package/dist/internal/convert.mjs +117 -0
  54. package/dist/internal/convert.mjs.map +1 -0
  55. package/dist/internal/fs-O6XR4WWW.mjs +183 -0
  56. package/dist/internal/fs-O6XR4WWW.mjs.map +1 -0
  57. package/dist/internal/keys-B7C8C88N.d.cts +191 -0
  58. package/dist/internal/keys-B7C8C88N.d.ts +191 -0
  59. package/dist/internal/merge/index.cjs +75 -0
  60. package/dist/internal/merge/index.cjs.map +1 -0
  61. package/dist/internal/merge/index.d.cts +74 -0
  62. package/dist/internal/merge/index.d.ts +74 -0
  63. package/dist/internal/merge/index.mjs +46 -0
  64. package/dist/internal/merge/index.mjs.map +1 -0
  65. package/dist/internal/pairs.cjs +328 -0
  66. package/dist/internal/pairs.cjs.map +1 -0
  67. package/dist/internal/pairs.d.cts +105 -0
  68. package/dist/internal/pairs.d.ts +105 -0
  69. package/dist/internal/pairs.mjs +298 -0
  70. package/dist/internal/pairs.mjs.map +1 -0
  71. package/dist/qc/index.cjs +247 -0
  72. package/dist/qc/index.cjs.map +1 -0
  73. package/dist/qc/index.d.cts +140 -0
  74. package/dist/qc/index.d.ts +140 -0
  75. package/dist/qc/index.mjs +212 -0
  76. package/dist/qc/index.mjs.map +1 -0
  77. package/dist/temporal/index.cjs +504 -0
  78. package/dist/temporal/index.cjs.map +1 -0
  79. package/dist/temporal/index.d.cts +121 -0
  80. package/dist/temporal/index.d.ts +121 -0
  81. package/dist/temporal/index.mjs +474 -0
  82. package/dist/temporal/index.mjs.map +1 -0
  83. package/dist/transforms/index.cjs +399 -0
  84. package/dist/transforms/index.cjs.map +1 -0
  85. package/dist/transforms/index.d.cts +193 -0
  86. package/dist/transforms/index.d.ts +193 -0
  87. package/dist/transforms/index.mjs +362 -0
  88. package/dist/transforms/index.mjs.map +1 -0
  89. package/dist/validator.cjs +1870 -0
  90. package/dist/validator.cjs.map +1 -0
  91. package/dist/validator.d.cts +30 -0
  92. package/dist/validator.d.ts +30 -0
  93. package/dist/validator.mjs +1843 -0
  94. package/dist/validator.mjs.map +1 -0
  95. package/package.json +115 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/validator.ts","../src/exceptions/index.ts","../src/schemas/validators/schema_forecast_iem_mos_v1.js","../src/schemas/validators/schema_observation_ledger_v1.js","../src/schemas/validators/schema_observation_qc_v1.js","../src/schemas/validators/schema_observation_v1.js","../src/schemas/validators/schema_settlement_cli_v1.js","../src/schemas/validators/format-map.ts","../src/schemas/validators/index.ts"],"sourcesContent":["// validateRows — public schema validation API with Python-vocabulary\n// violations + source-identity invariant.\n//\n// Mirrors `packages/core/src/mostlyright/core/validator.py`. The wire-vocab\n// `violations[].rule` strings MUST match Python EXACTLY for cross-language\n// MCP serialization parity. Vocabulary:\n// - unknown_schema_id\n// - source_attr_required\n// - source_column_required\n// - retrieved_at_required\n// - required_column_missing\n// - non_nullable_has_nulls\n// - mixed_null_sentinels\n// - dtype_mismatch\n// - enum_value_violation\n//\n// Check order (matches Python):\n// 1. Schema lookup (unknown_schema_id)\n// 2. allowSourceDrift type guard (TypeError / RangeError; loud)\n// 3. Source attribute resolution (source_attr_required)\n// 4. Per-row source-column check (SourceMismatchError)\n// 5. Per-row ajv validation + mixed_null_sentinels scan\n// 6. retrievedAt resolution (retrieved_at_required) — appended to the\n// same violations list as step 5 so a row missing BOTH a required\n// column AND retrieved_at surfaces both violations in one error.\n//\n// iter-6 H11: steps 5 and 6 were previously inverted — retrievedAt\n// resolution threw standalone before ajv validation ran, masking any\n// structural violation a row might also have had. Python collects\n// violations and raises once; we now mirror that semantic, with the\n// additional improvement of folding `retrieved_at_required` into the\n// same violations array so callers see the FULL set of issues at once.\n\nimport { SchemaValidationError, SourceMismatchError } from \"./exceptions/index.js\";\nimport type { AjvErrorObject } from \"./schemas/validators/index.js\";\nimport { getFormatMap, getValidator } from \"./schemas/validators/index.js\";\n\nconst SAMPLE_CAP = 10;\n\n// ISO 8601 date (YYYY-MM-DD) and date-time format guards.\n//\n// Codegen's ajv config uses `strict: false` + no `addFormats`, so\n// `format: \"date\"` / `\"date-time\"` keywords are silently ignored by the\n// compiled standalone validators (per the codegen.ts header comment —\n// addFormats would defeat the MV3-CSP guarantee). This means the wire\n// validator alone would accept `event_time: \"not-an-iso-string\"`.\n//\n// The format post-pass below closes that gap: walks the per-schema format\n// map (emitted by codegen) and applies these CSP-safe regex checks to each\n// row's value. Mismatches surface as `dtype_mismatch` violations — matching\n// Python's behavior (Python uses pandas dtype checks for date / timestamp_utc\n// columns; in TS our wire shape is JSON strings, so format-on-string is the\n// equivalent guard).\nconst ISO_DATE_ONLY_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n// date-time: require explicit `T` (or space) separator AND tz suffix\n// (`Z` or `±HH:MM` / `±HHMM`). Matches TimePoint's constructor semantics.\nconst ISO_DATETIME_SEPARATOR_REGEX = /[T ]/;\nconst ISO_DATETIME_TZ_SUFFIX_REGEX = /(?:Z|[+-]\\d{2}:?\\d{2})$/;\nconst ISO_DATETIME_DATE_PREFIX_REGEX = /^\\d{4}-\\d{2}-\\d{2}/;\n\nfunction isIsoDate(v: unknown): boolean {\n if (typeof v !== \"string\") return false;\n if (!ISO_DATE_ONLY_REGEX.test(v)) return false;\n // Reject \"2025-13-01\" / \"2025-02-30\" etc. — Date.parse accepts them but\n // normalizes silently; we want strict calendar validity.\n const ms = Date.parse(`${v}T00:00:00Z`);\n if (!Number.isFinite(ms)) return false;\n const reparsed = new Date(ms).toISOString().slice(0, 10);\n return reparsed === v;\n}\n\nfunction isIsoDateTime(v: unknown): boolean {\n if (typeof v !== \"string\") return false;\n const trimmed = v.trim();\n if (trimmed.length === 0) return false;\n if (!ISO_DATETIME_DATE_PREFIX_REGEX.test(trimmed)) return false;\n if (!ISO_DATETIME_SEPARATOR_REGEX.test(trimmed)) return false;\n if (!ISO_DATETIME_TZ_SUFFIX_REGEX.test(trimmed)) return false;\n const ms = Date.parse(trimmed);\n if (!Number.isFinite(ms)) return false;\n // Calendar-validity check (iter-3 C8 sibling): `Date.parse` silently\n // normalizes impossible dates (e.g. \"2025-02-30T00:00:00Z\" →\n // \"2025-03-02T00:00:00.000Z\"). Python's datetime.fromisoformat rejects\n // these; mirror that contract here so schema validation catches them as\n // `dtype_mismatch` violations (same path as malformed strings).\n const dateMatch = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(trimmed);\n if (dateMatch === null) return false;\n const litYear = Number(dateMatch[1]);\n const litMonth = Number(dateMatch[2]);\n const litDay = Number(dateMatch[3]);\n let offsetMin = 0;\n const tzMatch = /(Z|[+-]\\d{2}:?\\d{2})$/.exec(trimmed);\n // Mirror the timepoint.ts narrowing (iter-4 C10): noUncheckedIndexedAccess\n // makes RegExpExecArray indexing yield `string | undefined`, so we must\n // narrow the capture explicitly even after the `null` guard on `exec`.\n const tz = tzMatch === null ? undefined : tzMatch[1];\n if (tz !== undefined && tz !== \"Z\") {\n const sign = tz.startsWith(\"-\") ? -1 : 1;\n const body = tz.slice(1).replace(\":\", \"\");\n const hh = Number(body.slice(0, 2));\n const mm = Number(body.slice(2, 4));\n offsetMin = sign * (hh * 60 + mm);\n }\n const sourceMs = ms + offsetMin * 60_000;\n const sourceDate = new Date(sourceMs);\n return (\n sourceDate.getUTCFullYear() === litYear &&\n sourceDate.getUTCMonth() + 1 === litMonth &&\n sourceDate.getUTCDate() === litDay\n );\n}\n\n/**\n * Per-schema canonical source — mirrors Python `_registered_source` on\n * each Schema subclass (truth lives in\n * `packages/core/src/mostlyright/core/schemas/*.py`).\n *\n * Drift in this map produces silent cross-language source-identity\n * violations: a TS producer stamped `cli.archive` would falsely fail\n * the validator under the previous `iem.cli` mapping. Every entry below\n * MUST equal the `_registered_source: ClassVar[str]` on its Python peer.\n *\n * Iter-1 C2 fix: corrected `schema.settlement.cli.v1` (was `iem.cli`),\n * corrected `schema.forecast.iem_mos.v1` (was `iem.mos`), and added the\n * two catalog-internal schemas (`observation_ledger.v1`,\n * `observation_qc.v1`) — Python registers `iem.archive` for both.\n */\nconst SCHEMA_REGISTERED_SOURCE: Readonly<Record<string, string>> = Object.freeze({\n \"schema.observation.v1\": \"iem.archive\",\n \"schema.settlement.cli.v1\": \"cli.archive\",\n \"schema.forecast.iem_mos.v1\": \"iem.archive\",\n \"schema.observation_ledger.v1\": \"iem.archive\",\n \"schema.observation_qc.v1\": \"iem.archive\",\n});\n\nexport interface ValidateOptions {\n /** Producer-stamped source string. Falls back to `rows[0].source` if absent. */\n readonly source?: string;\n /** Producer-stamped retrieval timestamp. Falls back to `rows[i].retrieved_at`. */\n readonly retrievedAt?: string;\n /** Non-empty reason string. Presence skips the source-identity check. */\n readonly allowSourceDrift?: string;\n}\n\nexport interface ValidateResult {\n readonly rowCount: number;\n readonly source: string;\n readonly retrievedAt: string;\n}\n\ninterface Violation {\n readonly rule: string;\n readonly column?: string;\n readonly row_idx?: number;\n readonly count?: number;\n readonly value?: unknown;\n}\n\nfunction mapAjvErrorToViolation(err: AjvErrorObject, rowIdx: number): Violation {\n const keyword = err.keyword;\n // Required-column violations bubble up the missing property name.\n if (keyword === \"required\") {\n const missing = (err.params as { missingProperty?: string }).missingProperty;\n if (typeof missing === \"string\") {\n return { rule: \"required_column_missing\", column: missing, row_idx: rowIdx };\n }\n return { rule: \"required_column_missing\", row_idx: rowIdx };\n }\n if (keyword === \"type\") {\n // For non-nullable nulls, ajv emits `type` violations when the value is\n // null and `null` is not in the allowed types. Differentiate from a\n // generic dtype mismatch by inspecting the value.\n const column = err.instancePath.replace(/^\\//, \"\").replace(/\\//g, \".\");\n return {\n rule: \"dtype_mismatch\",\n column,\n row_idx: rowIdx,\n };\n }\n if (keyword === \"enum\") {\n const column = err.instancePath.replace(/^\\//, \"\").replace(/\\//g, \".\");\n return {\n rule: \"enum_value_violation\",\n column,\n row_idx: rowIdx,\n };\n }\n // Unknown keyword — surface as dtype_mismatch with the inferred column.\n const column = err.instancePath.replace(/^\\//, \"\").replace(/\\//g, \".\");\n if (column.length > 0) {\n return { rule: \"dtype_mismatch\", column, row_idx: rowIdx };\n }\n return { rule: \"dtype_mismatch\", row_idx: rowIdx };\n}\n\nfunction detectMixedNullSentinels(rows: ReadonlyArray<Record<string, unknown>>): string[] {\n // TS analog of Python's _has_mixed_null_sentinels (np.nan + pd.NA mix).\n // In TS we flag columns containing BOTH `null` and `undefined` (the two\n // missing-value sentinels native to JS — distinguishable but ambiguous\n // when serializers normalize them).\n const cols = new Map<string, { hasNull: boolean; hasUndef: boolean }>();\n for (const row of rows) {\n for (const [k, v] of Object.entries(row)) {\n const entry = cols.get(k) ?? { hasNull: false, hasUndef: false };\n if (v === null) entry.hasNull = true;\n if (v === undefined) entry.hasUndef = true;\n cols.set(k, entry);\n }\n }\n const mixed: string[] = [];\n for (const [k, e] of cols) {\n if (e.hasNull && e.hasUndef) mixed.push(k);\n }\n return mixed;\n}\n\n/**\n * Validate `rows` against the named canonical schema.\n *\n * Returns `{ rowCount, source, retrievedAt }` on success.\n *\n * Throws `SchemaValidationError` (with Python-vocabulary `violations[]`) on\n * structural / dtype / enum / required-column failures, OR\n * `SourceMismatchError` when per-row source identity drifts.\n *\n * @throws SchemaValidationError — see violations vocabulary in the module header.\n * @throws SourceMismatchError — per-row `source` column doesn't match resolved source.\n * @throws TypeError — `allowSourceDrift` is non-string.\n * @throws RangeError — `allowSourceDrift` is empty after trim.\n */\nexport function validateRows<Row extends Record<string, unknown> = Record<string, unknown>>(\n rows: ReadonlyArray<Row>,\n schemaId: string,\n opts: ValidateOptions = {},\n): ValidateResult {\n // 1. Schema lookup\n const validate = getValidator(schemaId);\n if (validate == null) {\n throw new SchemaValidationError(`Unknown schema_id ${JSON.stringify(schemaId)}`, {\n schemaId,\n violations: [{ rule: \"unknown_schema_id\" }],\n quarantineCount: rows.length,\n sampleViolations: [],\n });\n }\n\n // 2. allowSourceDrift type guard\n if (opts.allowSourceDrift !== undefined) {\n if (typeof opts.allowSourceDrift !== \"string\") {\n throw new TypeError(\n `allowSourceDrift must be a non-empty reason string; got ${typeof opts.allowSourceDrift}`,\n );\n }\n if (opts.allowSourceDrift.trim().length === 0) {\n throw new RangeError(\n \"allowSourceDrift must be a non-empty reason string (stripped whitespace)\",\n );\n }\n }\n\n // 3. Source attribute resolution\n const firstRow = rows.length > 0 ? (rows[0] as Record<string, unknown>) : undefined;\n const resolvedSource =\n opts.source ?? (firstRow !== undefined ? (firstRow.source as string | undefined) : undefined);\n if (resolvedSource === undefined || resolvedSource === null) {\n throw new SchemaValidationError(\n \"DataFrame missing source attribute; cannot validate source-identity\",\n {\n schemaId,\n violations: [{ rule: \"source_attr_required\" }],\n quarantineCount: rows.length,\n sampleViolations: [],\n },\n );\n }\n\n // 3b. Source-identity invariant — opts.source vs canonical registered.\n const registeredSource = SCHEMA_REGISTERED_SOURCE[schemaId];\n if (\n registeredSource !== undefined &&\n resolvedSource !== registeredSource &&\n opts.allowSourceDrift === undefined\n ) {\n throw new SourceMismatchError(\n `Source drift: data is ${JSON.stringify(resolvedSource)}, schema expects ${JSON.stringify(registeredSource)}`,\n {\n schemaSource: registeredSource,\n dataSource: resolvedSource,\n },\n );\n }\n\n // 4. Per-row source-column check (when rows non-empty)\n if (rows.length > 0) {\n const hasSourceColumn = rows.some((r) => \"source\" in (r as object));\n if (!hasSourceColumn) {\n throw new SchemaValidationError(\n \"Rows are missing the per-row 'source' overlay column required by canonical-schema producers.\",\n {\n schemaId,\n violations: [{ column: \"source\", rule: \"source_column_required\" }],\n quarantineCount: rows.length,\n sampleViolations: [],\n },\n );\n }\n // Per-row mismatch check\n const badRows: Array<{ row_idx: number; source: unknown }> = [];\n for (let i = 0; i < rows.length; i++) {\n const r = rows[i] as Record<string, unknown>;\n const v = r.source;\n if (v == null || v !== resolvedSource) {\n badRows.push({ row_idx: i, source: v ?? null });\n }\n }\n if (badRows.length > 0) {\n const distinctBad = Array.from(\n new Set(badRows.map(({ source }) => (source == null ? \"<null>\" : String(source)))),\n ).slice(0, SAMPLE_CAP);\n throw new SourceMismatchError(\n `Per-row 'source' column has ${badRows.length} row(s) not matching resolved source=${JSON.stringify(resolvedSource)}; distinct bad values: ${JSON.stringify(distinctBad)}`,\n {\n schemaSource: resolvedSource,\n dataSource: distinctBad[0] ?? \"<null>\",\n },\n );\n }\n }\n\n // 5. Per-row ajv validation + mixed_null_sentinels scan\n //\n // iter-6 H11: ajv validation now runs BEFORE retrievedAt resolution.\n // The previous order threw `retrieved_at_required` standalone when\n // provenance was missing, masking any structural violation the same\n // row might have had (e.g. a row missing both `retrieved_at` AND a\n // required column would only surface `retrieved_at_required`). Now\n // we collect ajv violations first, then APPEND `retrieved_at_required`\n // to the same array (step 7), and raise once with the full list.\n const violations: Violation[] = [];\n for (let i = 0; i < rows.length; i++) {\n const r = rows[i];\n const ok = validate(r);\n if (!ok && validate.errors != null) {\n // Detect non-nullable-with-null: ajv emits `type` keyword when null\n // hits a non-nullable property.\n for (const err of validate.errors) {\n const value = r as Record<string, unknown>;\n const column = err.instancePath.replace(/^\\//, \"\");\n if (\n err.keyword === \"type\" &&\n value !== undefined &&\n column.length > 0 &&\n value[column] === null\n ) {\n violations.push({\n rule: \"non_nullable_has_nulls\",\n column,\n row_idx: i,\n });\n } else {\n violations.push(mapAjvErrorToViolation(err, i));\n }\n if (violations.length >= SAMPLE_CAP * 2) break;\n }\n }\n }\n\n // 6b. Format post-pass: ajv `strict: false` + no addFormats means\n // `format: \"date\"` / `\"date-time\"` keywords are silently ignored by the\n // compiled standalone validators. Walk the codegen-emitted format map and\n // apply CSP-safe regex checks here. Mismatches surface as\n // `dtype_mismatch` violations (Python's analog: the dtype check on a\n // `date` / `timestamp_utc` column fails when the column isn't actually a\n // date / tz-aware datetime).\n const formatMap = getFormatMap(schemaId);\n if (formatMap !== null) {\n for (let i = 0; i < rows.length; i++) {\n const r = rows[i] as Record<string, unknown>;\n for (const [propName, kind] of Object.entries(formatMap)) {\n if (!(propName in r)) continue;\n const v = r[propName];\n // Null/undefined handled by the ajv `type` keyword + non_nullable\n // check above; here we only police format on present, non-null\n // string-typed values.\n if (v == null) continue;\n const valid = kind === \"date\" ? isIsoDate(v) : isIsoDateTime(v);\n if (!valid) {\n violations.push({\n rule: \"dtype_mismatch\",\n column: propName,\n row_idx: i,\n value: v,\n });\n }\n if (violations.length >= SAMPLE_CAP * 2) break;\n }\n if (violations.length >= SAMPLE_CAP * 2) break;\n }\n }\n\n // mixed_null_sentinels detection (column-wise)\n const mixedColumns = detectMixedNullSentinels(rows as ReadonlyArray<Record<string, unknown>>);\n for (const col of mixedColumns) {\n violations.push({ rule: \"mixed_null_sentinels\", column: col });\n }\n\n // 6. retrievedAt resolution — APPEND to violations (do not throw\n // standalone). iter-6 H11: a row missing both `retrieved_at` AND a\n // required column must surface BOTH violations in the same error so\n // callers can fix everything in one pass. The previous standalone\n // throw masked any structural violation that ran first.\n //\n // iter-10 H20: row-level fallback now scans ALL rows for non-empty\n // `retrieved_at` values and returns the maximum, matching Python\n // `validator.py:394-396` (`df[\"retrieved_at\"].dropna().max()`). The\n // previous TS implementation read only `firstRow?.retrieved_at`, which:\n // (a) raised a false `retrieved_at_required` violation when row 0\n // lacked provenance but later rows had it, and\n // (b) silently returned stale provenance when row 0 carried an older\n // timestamp than the column max.\n // Both modes corrupted amendment-window audits (the same risk the\n // codex iter-2 HIGH fix addressed in Python). Comparing ISO 8601 UTC\n // strings lexicographically is sound iff every value is well-formed\n // (digits and `-`/`T`/`:`/`.`/`Z`/`+`/`-` only, fixed width). We\n // additionally `Date.parse` each candidate to reject malformed values\n // (return NaN → excluded from max), matching Python's pd.Timestamp(...)\n // which raises on garbage.\n let resolvedRetrievedAt: string | undefined = opts.retrievedAt;\n if (resolvedRetrievedAt === undefined) {\n // Scan every row, not just firstRow. Track the max non-empty value.\n let maxInstantMs = Number.NEGATIVE_INFINITY;\n let maxValue: string | undefined;\n for (const r of rows) {\n const v = (r as Record<string, unknown>).retrieved_at;\n if (typeof v !== \"string\" || v.length === 0) continue;\n const ms = Date.parse(v);\n if (!Number.isFinite(ms)) continue;\n if (ms > maxInstantMs) {\n maxInstantMs = ms;\n maxValue = v;\n }\n }\n if (maxValue !== undefined) resolvedRetrievedAt = maxValue;\n }\n if (resolvedRetrievedAt === undefined) {\n violations.push({ rule: \"retrieved_at_required\" });\n }\n\n if (violations.length > 0) {\n throw new SchemaValidationError(\n `Schema validation failed with ${violations.length} violation(s) under ${schemaId}`,\n {\n schemaId,\n violations: violations as unknown as Array<Record<string, unknown>>,\n quarantineCount: rows.length,\n sampleViolations: violations.slice(0, SAMPLE_CAP) as unknown as Array<\n Record<string, unknown>\n >,\n },\n );\n }\n\n // Narrow for TS: violations.length === 0 guarantees the\n // `retrieved_at_required` violation didn't fire, so resolvedRetrievedAt\n // is defined. The runtime check above guarantees this; the assertion\n // is only for the compiler.\n if (resolvedRetrievedAt === undefined) {\n // Unreachable — the violation would have been raised above.\n throw new Error(\n \"internal invariant: resolvedRetrievedAt is undefined but violations array was empty\",\n );\n }\n\n return {\n rowCount: rows.length,\n source: resolvedSource,\n retrievedAt: resolvedRetrievedAt,\n };\n}\n","// Structured exception hierarchy for the mostlyright TS SDK.\n//\n// Mirrors the Python design in `packages/core/src/mostlyright/core/exceptions.py`\n// and `packages/core/src/mostlyright/_internal/exceptions.py`. Every error\n// subclasses `TradewindsError` and exposes a `toDict()` method that returns a\n// JSON-safe payload suitable for MCP `error.data` / extension messaging.\n//\n// Role-name vocabulary for SourceMismatchError matches Python:\n// \"observations\" / \"forecasts\" / \"settlement\" (long form, NOT the col prefixes)\n\n// ---------------------------------------------------------------------------\n// JSON-safe coercion (mirrors `mostlyright.core._json_safe.to_json_safe`)\n// ---------------------------------------------------------------------------\n\n/**\n * Recursively coerce `value` into a JSON-serializable structure.\n *\n * Coercion rules (mirrors Python's `to_json_safe`):\n * - `null` / `undefined` / `NaN` / `Infinity` / `-Infinity` → `null`\n * - `Date` → ISO 8601 UTC string ending in `Z`\n * - Numeric / boolean / string scalars pass through (non-finite numbers → null)\n * - Arrays + plain objects → recursive (cycles → `{ _cycle: true, value: String(obj) }`)\n * - Dict keys MUST be strings; non-string keys throw `TypeError`.\n * - Anything else (Symbol, function, class instance without `toJSON`) →\n * `{ _repr_only: true, value: String(value) }`.\n */\nexport function toJsonSafe(value: unknown, seen?: WeakSet<object>): unknown {\n const visited = seen ?? new WeakSet<object>();\n\n // null / undefined → null\n if (value === null || value === undefined) {\n return null;\n }\n\n // Booleans pass through.\n if (typeof value === \"boolean\") {\n return value;\n }\n\n // Strings pass through.\n if (typeof value === \"string\") {\n return value;\n }\n\n // Numbers — non-finite (NaN, +/-Infinity) coerce to null.\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : null;\n }\n\n // bigint → number when safe, else stringify (JSON can't natively encode bigint).\n if (typeof value === \"bigint\") {\n // Match Python: integers pass through as native numeric. Safe-range only.\n if (value >= BigInt(Number.MIN_SAFE_INTEGER) && value <= BigInt(Number.MAX_SAFE_INTEGER)) {\n return Number(value);\n }\n return { _repr_only: true, value: value.toString() };\n }\n\n // Date → ISO 8601 UTC string (always ending in \"Z\").\n if (value instanceof Date) {\n if (Number.isNaN(value.getTime())) {\n return null;\n }\n return value.toISOString();\n }\n\n // Arrays — recurse, track cycles.\n if (Array.isArray(value)) {\n if (visited.has(value)) {\n return { _cycle: true, value: String(value) };\n }\n visited.add(value);\n try {\n return value.map((item) => toJsonSafe(item, visited));\n } finally {\n visited.delete(value);\n }\n }\n\n // Plain objects — recurse, track cycles, enforce string keys.\n if (typeof value === \"object\") {\n if (visited.has(value as object)) {\n return { _cycle: true, value: String(value) };\n }\n visited.add(value as object);\n try {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>)) {\n if (typeof key !== \"string\") {\n throw new TypeError(`toJsonSafe dict keys must be string; got ${typeof key}`);\n }\n out[key] = toJsonSafe((value as Record<string, unknown>)[key], visited);\n }\n return out;\n } finally {\n visited.delete(value as object);\n }\n }\n\n // Symbols, functions, etc. — repr-only marker.\n return { _repr_only: true, value: String(value) };\n}\n\n// ---------------------------------------------------------------------------\n// Base class\n// ---------------------------------------------------------------------------\n\nexport interface TradewindsErrorOptions {\n errorCode?: string;\n source?: string | null;\n requestId?: string | null;\n}\n\n/**\n * Base class for all mostlyright structured errors.\n *\n * `errorCode` is a stable enum (e.g. \"SOURCE_UNAVAILABLE\") used by callers /\n * agents to branch on without parsing message text. `source` is the source id\n * involved (e.g. \"iem.archive\") when applicable, and `requestId` correlates a\n * JSON-RPC / MCP request id when applicable.\n */\nexport class TradewindsError extends Error {\n /** Subclass override — the stable string enum surfaced via `errorCode`. */\n static defaultErrorCode = \"TRADEWINDS_ERROR\";\n\n readonly errorCode: string;\n readonly source: string | null;\n readonly requestId: string | null;\n\n constructor(message = \"\", options: TradewindsErrorOptions = {}) {\n super(message);\n this.name = new.target.name;\n const ctor = this.constructor as typeof TradewindsError;\n this.errorCode = options.errorCode ?? ctor.defaultErrorCode;\n this.source = options.source ?? null;\n this.requestId = options.requestId ?? null;\n // Restore prototype chain after `Error` (needed for `instanceof` across\n // transpilation / ES5 targets).\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Subclass hook returning the structured attributes for `toDict`.\n * Values are passed through `toJsonSafe` by `toDict()`, so subclasses\n * don't need to coerce values themselves.\n */\n protected payload(): Record<string, unknown> {\n return {\n error_code: this.errorCode,\n message: this.message,\n source: this.source,\n request_id: this.requestId,\n };\n }\n\n /** Return a JSON-safe dict suitable for MCP `error.data`. */\n toDict(): Record<string, unknown> {\n const safe = toJsonSafe(this.payload());\n return safe as Record<string, unknown>;\n }\n}\n\n// ---------------------------------------------------------------------------\n// SourceUnavailableError\n// ---------------------------------------------------------------------------\n\nexport interface SourceUnavailableErrorOptions extends TradewindsErrorOptions {\n httpStatus?: number | null;\n retryable?: boolean;\n retryAfterS?: number | null;\n underlying?: string;\n url?: string | null;\n}\n\nexport class SourceUnavailableError extends TradewindsError {\n static override defaultErrorCode = \"SOURCE_UNAVAILABLE\";\n\n readonly httpStatus: number | null;\n readonly retryable: boolean;\n readonly retryAfterS: number | null;\n readonly underlying: string;\n readonly url: string | null;\n\n constructor(message = \"\", options: SourceUnavailableErrorOptions = {}) {\n super(message, options);\n this.httpStatus = options.httpStatus ?? null;\n this.retryable = options.retryable ?? false;\n this.retryAfterS = options.retryAfterS ?? null;\n this.underlying = options.underlying ?? \"\";\n this.url = options.url ?? null;\n }\n\n protected override payload(): Record<string, unknown> {\n return {\n ...super.payload(),\n http_status: this.httpStatus,\n retryable: this.retryable,\n retry_after_s: this.retryAfterS,\n underlying: this.underlying,\n url: this.url,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// SchemaValidationError\n// ---------------------------------------------------------------------------\n\nexport interface SchemaValidationErrorOptions extends TradewindsErrorOptions {\n schemaId: string;\n violations?: Array<Record<string, unknown>>;\n quarantineCount?: number;\n sampleViolations?: Array<Record<string, unknown>>;\n}\n\nexport class SchemaValidationError extends TradewindsError {\n static override defaultErrorCode = \"SCHEMA_VALIDATION_FAILED\";\n\n readonly schemaId: string;\n readonly violations: Array<Record<string, unknown>>;\n readonly quarantineCount: number;\n readonly sampleViolations: Array<Record<string, unknown>>;\n\n constructor(message: string, options: SchemaValidationErrorOptions) {\n super(message, options);\n this.schemaId = options.schemaId;\n this.violations = [...(options.violations ?? [])];\n this.quarantineCount = options.quarantineCount ?? 0;\n this.sampleViolations = [...(options.sampleViolations ?? [])];\n }\n\n protected override payload(): Record<string, unknown> {\n return {\n ...super.payload(),\n schema_id: this.schemaId,\n violations: this.violations,\n quarantine_count: this.quarantineCount,\n sample_violations: this.sampleViolations,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// SourceMismatchError\n// ---------------------------------------------------------------------------\n\nexport type SourceMismatchRole = \"observations\" | \"forecasts\" | \"settlement\";\n\nexport interface SourceMismatchErrorOptions extends TradewindsErrorOptions {\n schemaSource: string;\n dataSource: string;\n role?: SourceMismatchRole | null;\n catalogWarning?: string | null;\n}\n\nexport class SourceMismatchError extends TradewindsError {\n static override defaultErrorCode = \"SOURCE_MISMATCH\";\n\n /** Canonical role-name vocabulary (design.md §R). */\n static readonly VALID_ROLES: ReadonlySet<SourceMismatchRole> = new Set([\n \"observations\",\n \"forecasts\",\n \"settlement\",\n ]);\n\n readonly schemaSource: string;\n readonly dataSource: string;\n readonly role: SourceMismatchRole | null;\n readonly catalogWarning: string | null;\n\n constructor(message: string, options: SourceMismatchErrorOptions) {\n super(message, options);\n this.schemaSource = options.schemaSource;\n this.dataSource = options.dataSource;\n this.role = options.role ?? null;\n this.catalogWarning = options.catalogWarning ?? null;\n }\n\n protected override payload(): Record<string, unknown> {\n return {\n ...super.payload(),\n schema_source: this.schemaSource,\n data_source: this.dataSource,\n role: this.role,\n catalog_warning: this.catalogWarning,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// LeakageError\n// ---------------------------------------------------------------------------\n\nexport interface LeakageErrorOptions extends TradewindsErrorOptions {\n asOf: string;\n violatingCount: number;\n sampleViolations?: Array<Record<string, unknown>>;\n}\n\nexport class LeakageError extends TradewindsError {\n static override defaultErrorCode = \"LEAKAGE_DETECTED\";\n\n readonly asOf: string;\n readonly violatingCount: number;\n readonly sampleViolations: Array<Record<string, unknown>>;\n\n constructor(message: string, options: LeakageErrorOptions) {\n super(message, options);\n this.asOf = options.asOf;\n this.violatingCount = options.violatingCount;\n this.sampleViolations = [...(options.sampleViolations ?? [])];\n }\n\n protected override payload(): Record<string, unknown> {\n return {\n ...super.payload(),\n as_of: this.asOf,\n violating_count: this.violatingCount,\n sample_violations: this.sampleViolations,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// TemporalDriftError\n// ---------------------------------------------------------------------------\n\nexport interface TemporalDriftErrorOptions extends TradewindsErrorOptions {\n schemaId: string;\n assertedRange: [string, string];\n violatingRows: number;\n sampleViolations?: Array<Record<string, unknown>>;\n}\n\nexport class TemporalDriftError extends TradewindsError {\n static override defaultErrorCode = \"TEMPORAL_DRIFT\";\n\n readonly schemaId: string;\n readonly assertedRange: [string, string];\n readonly violatingRows: number;\n readonly sampleViolations: Array<Record<string, unknown>>;\n\n constructor(message: string, options: TemporalDriftErrorOptions) {\n super(message, options);\n this.schemaId = options.schemaId;\n this.assertedRange = [options.assertedRange[0], options.assertedRange[1]];\n this.violatingRows = options.violatingRows;\n this.sampleViolations = [...(options.sampleViolations ?? [])];\n }\n\n protected override payload(): Record<string, unknown> {\n return {\n ...super.payload(),\n schema_id: this.schemaId,\n asserted_range: [this.assertedRange[0], this.assertedRange[1]],\n violating_rows: this.violatingRows,\n sample_violations: this.sampleViolations,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// PayloadTooLargeError\n// ---------------------------------------------------------------------------\n\nexport interface PayloadTooLargeErrorOptions extends TradewindsErrorOptions {\n declaredSize: number;\n limit: number;\n acceptedModes?: string[];\n}\n\nexport class PayloadTooLargeError extends TradewindsError {\n static override defaultErrorCode = \"PAYLOAD_TOO_LARGE\";\n\n readonly declaredSize: number;\n readonly limit: number;\n readonly acceptedModes: string[];\n\n constructor(message: string, options: PayloadTooLargeErrorOptions) {\n super(message, options);\n this.declaredSize = options.declaredSize;\n this.limit = options.limit;\n this.acceptedModes = [...(options.acceptedModes ?? [])];\n }\n\n protected override payload(): Record<string, unknown> {\n return {\n ...super.payload(),\n declared_size: this.declaredSize,\n limit: this.limit,\n accepted_modes: this.acceptedModes,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// DeferredMarketError (TS-W6 placeholder; mirrors mostlyright.international)\n// ---------------------------------------------------------------------------\n\nexport class DeferredMarketError extends TradewindsError {\n static override defaultErrorCode = \"DEFERRED_MARKET\";\n}\n\n// ---------------------------------------------------------------------------\n// PolymarketEventError (TS-W5 placeholder; mirrors mostlyright.markets.polymarket)\n// ---------------------------------------------------------------------------\n\nexport class PolymarketEventError extends TradewindsError {\n static override defaultErrorCode = \"POLYMARKET_EVENT_INVALID\";\n}\n\n// ---------------------------------------------------------------------------\n// HTTP-layer hierarchy (mirrors mostlyright._internal.exceptions)\n// ---------------------------------------------------------------------------\n\nexport interface TherminalErrorOptions extends TradewindsErrorOptions {\n statusCode?: number | null;\n retryAfter?: number | null;\n}\n\n/**\n * Base HTTP-layer marker. Subclass of `TradewindsError` so callers that\n * catch `TradewindsError` also catch transport errors.\n */\nexport class TherminalError extends TradewindsError {\n static override defaultErrorCode = \"HTTP_ERROR\";\n\n readonly statusCode: number | null;\n\n constructor(message: string, options: TherminalErrorOptions = {}) {\n super(message, options);\n this.statusCode = options.statusCode ?? null;\n }\n\n protected override payload(): Record<string, unknown> {\n return {\n ...super.payload(),\n status_code: this.statusCode,\n };\n }\n}\n\nexport class NotFoundError extends TherminalError {\n static override defaultErrorCode = \"HTTP_NOT_FOUND\";\n\n constructor(message = \"Resource not found\", options: TherminalErrorOptions = {}) {\n super(message, { ...options, statusCode: options.statusCode ?? 404 });\n }\n}\n\nexport interface RateLimitErrorOptions extends TherminalErrorOptions {\n retryAfter?: number | null;\n}\n\nexport class RateLimitError extends TherminalError {\n static override defaultErrorCode = \"HTTP_RATE_LIMITED\";\n\n readonly retryAfter: number | null;\n\n constructor(retryAfter: number | null = 1, options: RateLimitErrorOptions = {}) {\n const msg = `Rate limit exceeded. Retry after ${retryAfter ?? \"?\"}s`;\n super(msg, { ...options, statusCode: options.statusCode ?? 429 });\n this.retryAfter = retryAfter;\n }\n\n protected override payload(): Record<string, unknown> {\n return {\n ...super.payload(),\n retry_after: this.retryAfter,\n };\n }\n}\n\nexport class ValidationError extends TherminalError {\n static override defaultErrorCode = \"HTTP_BAD_REQUEST\";\n\n constructor(message = \"Invalid request\", options: TherminalErrorOptions = {}) {\n super(message, { ...options, statusCode: options.statusCode ?? 400 });\n }\n}\n\nexport class AuthenticationError extends TherminalError {\n static override defaultErrorCode = \"HTTP_UNAUTHORIZED\";\n\n constructor(message = \"Authentication required\", options: TherminalErrorOptions = {}) {\n super(message, { ...options, statusCode: options.statusCode ?? 401 });\n }\n}\n\nexport class ForbiddenError extends TherminalError {\n static override defaultErrorCode = \"HTTP_FORBIDDEN\";\n\n constructor(message = \"Access denied\", options: TherminalErrorOptions = {}) {\n super(message, { ...options, statusCode: options.statusCode ?? 403 });\n }\n}\n\nexport class ServerError extends TherminalError {\n static override defaultErrorCode = \"HTTP_SERVER_ERROR\";\n\n constructor(message = \"Server error\", options: TherminalErrorOptions = {}) {\n super(message, { ...options, statusCode: options.statusCode ?? 500 });\n }\n}\n\n// ---------------------------------------------------------------------------\n// LiveStreamError + NoLiveDataError (Phase 11)\n// ---------------------------------------------------------------------------\n\n/**\n * Base class for `mostlyright.live.stream` / `live.latest` failures.\n *\n * Mirrors Python `LiveStreamError`. Live-streaming errors are a separate\n * sub-tree from `SourceUnavailableError` because the recovery path differs —\n * `stream()` swallows empty-tick errors and waits for the next polite-floor\n * cycle. Only `latest()` raises `NoLiveDataError` on empty responses.\n */\nexport class LiveStreamError extends TradewindsError {\n static override defaultErrorCode = \"LIVE_STREAM_ERROR\";\n}\n\nexport interface NoLiveDataErrorOptions extends TradewindsErrorOptions {\n station: string;\n source: string;\n}\n\n/**\n * `mostlyright.live.latest` returned no observations for the station.\n *\n * Carries the resolved ICAO `station` and the canonical source identity\n * tag (`\"awc.live\"` / `\"iem.live\"`) so caller logs can branch by source\n * without re-parsing the message.\n */\nexport class NoLiveDataError extends LiveStreamError {\n static override defaultErrorCode = \"NO_LIVE_DATA\";\n\n readonly station: string;\n\n constructor(message = \"\", options: NoLiveDataErrorOptions) {\n super(message, { ...options, source: options.source });\n this.station = options.station;\n }\n\n protected override payload(): Record<string, unknown> {\n return {\n ...super.payload(),\n station: this.station,\n };\n }\n}\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/json/schema.forecast.iem_mos.v1.json.\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\n\"use strict\";\nexport const schema_forecast_iem_mos_v1 = validate21;\nconst schema32 = {\"$id\":\"https://mostlyright.dev/schemas/schema.forecast.iem_mos.v1.json\",\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"imperialRenames\":{\"dew_point_c\":\"dew_point_F\",\"temp_c\":\"temp_F\",\"wind_speed_ms\":\"wind_speed_kt\"},\"properties\":{\"dew_point_c\":{\"description\":\"units: celsius\",\"type\":[\"null\",\"number\"]},\"forecast_hour\":{\"description\":\"units: hours — (valid_at - issued_at).total_seconds() / 3600\",\"type\":\"integer\"},\"issued_at\":{\"description\":\"model run time (from source `runtime` field)\",\"format\":\"date-time\",\"type\":\"string\"},\"model\":{\"description\":\"e.g. NBE, GFS, LAV, MET\",\"type\":\"string\"},\"precip_probability\":{\"description\":\"units: probability — bounded [0, 1]\",\"type\":[\"null\",\"number\"]},\"sky_cover_pct\":{\"description\":\"units: percent — bounded [0, 100]\",\"type\":[\"integer\",\"null\"]},\"station\":{\"type\":\"string\"},\"temp_c\":{\"description\":\"units: celsius\",\"type\":[\"null\",\"number\"]},\"valid_at\":{\"description\":\"forecast target time (from source `ftime`)\",\"format\":\"date-time\",\"type\":\"string\"},\"wind_dir_deg\":{\"description\":\"units: degrees\",\"type\":[\"integer\",\"null\"]},\"wind_speed_ms\":{\"description\":\"units: m/s\",\"type\":[\"null\",\"number\"]}},\"required\":[\"forecast_hour\",\"issued_at\",\"model\",\"station\",\"valid_at\"],\"title\":\"schema.forecast.iem_mos.v1\",\"type\":\"object\",\"version\":\"v1\"};\n\nfunction validate21(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){\n/*# sourceURL=\"https://mostlyright.dev/schemas/schema.forecast.iem_mos.v1.json\" */;\nlet vErrors = null;\nlet errors = 0;\nconst evaluated0 = validate21.evaluated;\nif(evaluated0.dynamicProps){\nevaluated0.props = undefined;\n}\nif(evaluated0.dynamicItems){\nevaluated0.items = undefined;\n}\nif(data && typeof data == \"object\" && !Array.isArray(data)){\nif(data.forecast_hour === undefined){\nconst err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"forecast_hour\"},message:\"must have required property '\"+\"forecast_hour\"+\"'\"};\nif(vErrors === null){\nvErrors = [err0];\n}\nelse {\nvErrors.push(err0);\n}\nerrors++;\n}\nif(data.issued_at === undefined){\nconst err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"issued_at\"},message:\"must have required property '\"+\"issued_at\"+\"'\"};\nif(vErrors === null){\nvErrors = [err1];\n}\nelse {\nvErrors.push(err1);\n}\nerrors++;\n}\nif(data.model === undefined){\nconst err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"model\"},message:\"must have required property '\"+\"model\"+\"'\"};\nif(vErrors === null){\nvErrors = [err2];\n}\nelse {\nvErrors.push(err2);\n}\nerrors++;\n}\nif(data.station === undefined){\nconst err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"station\"},message:\"must have required property '\"+\"station\"+\"'\"};\nif(vErrors === null){\nvErrors = [err3];\n}\nelse {\nvErrors.push(err3);\n}\nerrors++;\n}\nif(data.valid_at === undefined){\nconst err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"valid_at\"},message:\"must have required property '\"+\"valid_at\"+\"'\"};\nif(vErrors === null){\nvErrors = [err4];\n}\nelse {\nvErrors.push(err4);\n}\nerrors++;\n}\nif(data.dew_point_c !== undefined){\nlet data0 = data.dew_point_c;\nif((data0 !== null) && (!(typeof data0 == \"number\"))){\nconst err5 = {instancePath:instancePath+\"/dew_point_c\",schemaPath:\"#/properties/dew_point_c/type\",keyword:\"type\",params:{type: schema32.properties.dew_point_c.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err5];\n}\nelse {\nvErrors.push(err5);\n}\nerrors++;\n}\n}\nif(data.forecast_hour !== undefined){\nlet data1 = data.forecast_hour;\nif(!((typeof data1 == \"number\") && (!(data1 % 1) && !isNaN(data1)))){\nconst err6 = {instancePath:instancePath+\"/forecast_hour\",schemaPath:\"#/properties/forecast_hour/type\",keyword:\"type\",params:{type: \"integer\"},message:\"must be integer\"};\nif(vErrors === null){\nvErrors = [err6];\n}\nelse {\nvErrors.push(err6);\n}\nerrors++;\n}\n}\nif(data.issued_at !== undefined){\nif(!(typeof data.issued_at === \"string\")){\nconst err7 = {instancePath:instancePath+\"/issued_at\",schemaPath:\"#/properties/issued_at/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err7];\n}\nelse {\nvErrors.push(err7);\n}\nerrors++;\n}\n}\nif(data.model !== undefined){\nif(typeof data.model !== \"string\"){\nconst err8 = {instancePath:instancePath+\"/model\",schemaPath:\"#/properties/model/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err8];\n}\nelse {\nvErrors.push(err8);\n}\nerrors++;\n}\n}\nif(data.precip_probability !== undefined){\nlet data4 = data.precip_probability;\nif((data4 !== null) && (!(typeof data4 == \"number\"))){\nconst err9 = {instancePath:instancePath+\"/precip_probability\",schemaPath:\"#/properties/precip_probability/type\",keyword:\"type\",params:{type: schema32.properties.precip_probability.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err9];\n}\nelse {\nvErrors.push(err9);\n}\nerrors++;\n}\n}\nif(data.sky_cover_pct !== undefined){\nlet data5 = data.sky_cover_pct;\nif((!((typeof data5 == \"number\") && (!(data5 % 1) && !isNaN(data5)))) && (data5 !== null)){\nconst err10 = {instancePath:instancePath+\"/sky_cover_pct\",schemaPath:\"#/properties/sky_cover_pct/type\",keyword:\"type\",params:{type: schema32.properties.sky_cover_pct.type},message:\"must be integer,null\"};\nif(vErrors === null){\nvErrors = [err10];\n}\nelse {\nvErrors.push(err10);\n}\nerrors++;\n}\n}\nif(data.station !== undefined){\nif(typeof data.station !== \"string\"){\nconst err11 = {instancePath:instancePath+\"/station\",schemaPath:\"#/properties/station/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err11];\n}\nelse {\nvErrors.push(err11);\n}\nerrors++;\n}\n}\nif(data.temp_c !== undefined){\nlet data7 = data.temp_c;\nif((data7 !== null) && (!(typeof data7 == \"number\"))){\nconst err12 = {instancePath:instancePath+\"/temp_c\",schemaPath:\"#/properties/temp_c/type\",keyword:\"type\",params:{type: schema32.properties.temp_c.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err12];\n}\nelse {\nvErrors.push(err12);\n}\nerrors++;\n}\n}\nif(data.valid_at !== undefined){\nif(!(typeof data.valid_at === \"string\")){\nconst err13 = {instancePath:instancePath+\"/valid_at\",schemaPath:\"#/properties/valid_at/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err13];\n}\nelse {\nvErrors.push(err13);\n}\nerrors++;\n}\n}\nif(data.wind_dir_deg !== undefined){\nlet data9 = data.wind_dir_deg;\nif((!((typeof data9 == \"number\") && (!(data9 % 1) && !isNaN(data9)))) && (data9 !== null)){\nconst err14 = {instancePath:instancePath+\"/wind_dir_deg\",schemaPath:\"#/properties/wind_dir_deg/type\",keyword:\"type\",params:{type: schema32.properties.wind_dir_deg.type},message:\"must be integer,null\"};\nif(vErrors === null){\nvErrors = [err14];\n}\nelse {\nvErrors.push(err14);\n}\nerrors++;\n}\n}\nif(data.wind_speed_ms !== undefined){\nlet data10 = data.wind_speed_ms;\nif((data10 !== null) && (!(typeof data10 == \"number\"))){\nconst err15 = {instancePath:instancePath+\"/wind_speed_ms\",schemaPath:\"#/properties/wind_speed_ms/type\",keyword:\"type\",params:{type: schema32.properties.wind_speed_ms.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err15];\n}\nelse {\nvErrors.push(err15);\n}\nerrors++;\n}\n}\n}\nelse {\nconst err16 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};\nif(vErrors === null){\nvErrors = [err16];\n}\nelse {\nvErrors.push(err16);\n}\nerrors++;\n}\nvalidate21.errors = vErrors;\nreturn errors === 0;\n}\nvalidate21.evaluated = {\"props\":{\"dew_point_c\":true,\"forecast_hour\":true,\"issued_at\":true,\"model\":true,\"precip_probability\":true,\"sky_cover_pct\":true,\"station\":true,\"temp_c\":true,\"valid_at\":true,\"wind_dir_deg\":true,\"wind_speed_ms\":true},\"dynamicProps\":false,\"dynamicItems\":false};\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/json/schema.observation_ledger.v1.json.\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\n\"use strict\";\nexport const schema_observation_ledger_v1 = validate23;\nconst schema34 = {\"$id\":\"https://mostlyright.dev/schemas/schema.observation_ledger.v1.json\",\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"properties\":{\"as_of_time\":{\"format\":\"date-time\",\"type\":[\"null\",\"string\"]},\"dewpoint_c\":{\"description\":\"units: celsius\",\"type\":[\"null\",\"number\"]},\"ingestion_id\":{\"type\":[\"null\",\"string\"]},\"observation_kind\":{\"enum\":[\"METAR\",\"SPECI\",null],\"type\":[\"null\",\"string\"]},\"observation_quality\":{\"description\":\"Lineage row-quality flag per LINEAGE-01; distinct from qc_status enum slot AND distinct from the obs_qc_status bitmask column per QC-05.\",\"enum\":[\"clean\",\"flagged\",\"suspect\",null],\"type\":[\"null\",\"string\"]},\"observation_type\":{\"enum\":[\"METAR\",\"SPECI\"],\"type\":\"string\"},\"observed_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"parser_name\":{\"enum\":[\"ghcnh\",\"iem\",\"mostlyright_v1\",\"ncei\",null],\"type\":[\"null\",\"string\"]},\"parser_version\":{\"type\":[\"null\",\"string\"]},\"provenance\":{\"enum\":[\"legacy\",\"reingested\",null],\"type\":[\"null\",\"string\"]},\"qc_status\":{\"enum\":[\"clean\",\"flagged\",\"suspect\",null],\"type\":[\"null\",\"string\"]},\"source\":{\"description\":\"ncei reserved per D-2.1-09; never written in v0.1.0.\",\"enum\":[\"awc\",\"ghcnh\",\"iem\",\"ncei\"],\"type\":\"string\"},\"source_received_at\":{\"type\":[\"null\",\"string\"]},\"station_code\":{\"type\":\"string\"},\"temp_c\":{\"description\":\"units: celsius\",\"type\":[\"null\",\"number\"]}},\"required\":[\"observation_type\",\"observed_at\",\"source\",\"station_code\"],\"title\":\"schema.observation_ledger.v1\",\"type\":\"object\",\"version\":\"v1\"};\n\nfunction validate23(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){\n/*# sourceURL=\"https://mostlyright.dev/schemas/schema.observation_ledger.v1.json\" */;\nlet vErrors = null;\nlet errors = 0;\nconst evaluated0 = validate23.evaluated;\nif(evaluated0.dynamicProps){\nevaluated0.props = undefined;\n}\nif(evaluated0.dynamicItems){\nevaluated0.items = undefined;\n}\nif(data && typeof data == \"object\" && !Array.isArray(data)){\nif(data.observation_type === undefined){\nconst err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"observation_type\"},message:\"must have required property '\"+\"observation_type\"+\"'\"};\nif(vErrors === null){\nvErrors = [err0];\n}\nelse {\nvErrors.push(err0);\n}\nerrors++;\n}\nif(data.observed_at === undefined){\nconst err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"observed_at\"},message:\"must have required property '\"+\"observed_at\"+\"'\"};\nif(vErrors === null){\nvErrors = [err1];\n}\nelse {\nvErrors.push(err1);\n}\nerrors++;\n}\nif(data.source === undefined){\nconst err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"source\"},message:\"must have required property '\"+\"source\"+\"'\"};\nif(vErrors === null){\nvErrors = [err2];\n}\nelse {\nvErrors.push(err2);\n}\nerrors++;\n}\nif(data.station_code === undefined){\nconst err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"station_code\"},message:\"must have required property '\"+\"station_code\"+\"'\"};\nif(vErrors === null){\nvErrors = [err3];\n}\nelse {\nvErrors.push(err3);\n}\nerrors++;\n}\nif(data.as_of_time !== undefined){\nlet data0 = data.as_of_time;\nif((data0 !== null) && (typeof data0 !== \"string\")){\nconst err4 = {instancePath:instancePath+\"/as_of_time\",schemaPath:\"#/properties/as_of_time/type\",keyword:\"type\",params:{type: schema34.properties.as_of_time.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err4];\n}\nelse {\nvErrors.push(err4);\n}\nerrors++;\n}\n}\nif(data.dewpoint_c !== undefined){\nlet data1 = data.dewpoint_c;\nif((data1 !== null) && (!(typeof data1 == \"number\"))){\nconst err5 = {instancePath:instancePath+\"/dewpoint_c\",schemaPath:\"#/properties/dewpoint_c/type\",keyword:\"type\",params:{type: schema34.properties.dewpoint_c.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err5];\n}\nelse {\nvErrors.push(err5);\n}\nerrors++;\n}\n}\nif(data.ingestion_id !== undefined){\nlet data2 = data.ingestion_id;\nif((data2 !== null) && (typeof data2 !== \"string\")){\nconst err6 = {instancePath:instancePath+\"/ingestion_id\",schemaPath:\"#/properties/ingestion_id/type\",keyword:\"type\",params:{type: schema34.properties.ingestion_id.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err6];\n}\nelse {\nvErrors.push(err6);\n}\nerrors++;\n}\n}\nif(data.observation_kind !== undefined){\nlet data3 = data.observation_kind;\nif((data3 !== null) && (typeof data3 !== \"string\")){\nconst err7 = {instancePath:instancePath+\"/observation_kind\",schemaPath:\"#/properties/observation_kind/type\",keyword:\"type\",params:{type: schema34.properties.observation_kind.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err7];\n}\nelse {\nvErrors.push(err7);\n}\nerrors++;\n}\nif(!(((data3 === \"METAR\") || (data3 === \"SPECI\")) || (data3 === null))){\nconst err8 = {instancePath:instancePath+\"/observation_kind\",schemaPath:\"#/properties/observation_kind/enum\",keyword:\"enum\",params:{allowedValues: schema34.properties.observation_kind.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err8];\n}\nelse {\nvErrors.push(err8);\n}\nerrors++;\n}\n}\nif(data.observation_quality !== undefined){\nlet data4 = data.observation_quality;\nif((data4 !== null) && (typeof data4 !== \"string\")){\nconst err9 = {instancePath:instancePath+\"/observation_quality\",schemaPath:\"#/properties/observation_quality/type\",keyword:\"type\",params:{type: schema34.properties.observation_quality.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err9];\n}\nelse {\nvErrors.push(err9);\n}\nerrors++;\n}\nif(!((((data4 === \"clean\") || (data4 === \"flagged\")) || (data4 === \"suspect\")) || (data4 === null))){\nconst err10 = {instancePath:instancePath+\"/observation_quality\",schemaPath:\"#/properties/observation_quality/enum\",keyword:\"enum\",params:{allowedValues: schema34.properties.observation_quality.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err10];\n}\nelse {\nvErrors.push(err10);\n}\nerrors++;\n}\n}\nif(data.observation_type !== undefined){\nlet data5 = data.observation_type;\nif(typeof data5 !== \"string\"){\nconst err11 = {instancePath:instancePath+\"/observation_type\",schemaPath:\"#/properties/observation_type/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err11];\n}\nelse {\nvErrors.push(err11);\n}\nerrors++;\n}\nif(!((data5 === \"METAR\") || (data5 === \"SPECI\"))){\nconst err12 = {instancePath:instancePath+\"/observation_type\",schemaPath:\"#/properties/observation_type/enum\",keyword:\"enum\",params:{allowedValues: schema34.properties.observation_type.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err12];\n}\nelse {\nvErrors.push(err12);\n}\nerrors++;\n}\n}\nif(data.observed_at !== undefined){\nif(!(typeof data.observed_at === \"string\")){\nconst err13 = {instancePath:instancePath+\"/observed_at\",schemaPath:\"#/properties/observed_at/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err13];\n}\nelse {\nvErrors.push(err13);\n}\nerrors++;\n}\n}\nif(data.parser_name !== undefined){\nlet data7 = data.parser_name;\nif((data7 !== null) && (typeof data7 !== \"string\")){\nconst err14 = {instancePath:instancePath+\"/parser_name\",schemaPath:\"#/properties/parser_name/type\",keyword:\"type\",params:{type: schema34.properties.parser_name.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err14];\n}\nelse {\nvErrors.push(err14);\n}\nerrors++;\n}\nif(!(((((data7 === \"ghcnh\") || (data7 === \"iem\")) || (data7 === \"mostlyright_v1\")) || (data7 === \"ncei\")) || (data7 === null))){\nconst err15 = {instancePath:instancePath+\"/parser_name\",schemaPath:\"#/properties/parser_name/enum\",keyword:\"enum\",params:{allowedValues: schema34.properties.parser_name.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err15];\n}\nelse {\nvErrors.push(err15);\n}\nerrors++;\n}\n}\nif(data.parser_version !== undefined){\nlet data8 = data.parser_version;\nif((data8 !== null) && (typeof data8 !== \"string\")){\nconst err16 = {instancePath:instancePath+\"/parser_version\",schemaPath:\"#/properties/parser_version/type\",keyword:\"type\",params:{type: schema34.properties.parser_version.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err16];\n}\nelse {\nvErrors.push(err16);\n}\nerrors++;\n}\n}\nif(data.provenance !== undefined){\nlet data9 = data.provenance;\nif((data9 !== null) && (typeof data9 !== \"string\")){\nconst err17 = {instancePath:instancePath+\"/provenance\",schemaPath:\"#/properties/provenance/type\",keyword:\"type\",params:{type: schema34.properties.provenance.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err17];\n}\nelse {\nvErrors.push(err17);\n}\nerrors++;\n}\nif(!(((data9 === \"legacy\") || (data9 === \"reingested\")) || (data9 === null))){\nconst err18 = {instancePath:instancePath+\"/provenance\",schemaPath:\"#/properties/provenance/enum\",keyword:\"enum\",params:{allowedValues: schema34.properties.provenance.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err18];\n}\nelse {\nvErrors.push(err18);\n}\nerrors++;\n}\n}\nif(data.qc_status !== undefined){\nlet data10 = data.qc_status;\nif((data10 !== null) && (typeof data10 !== \"string\")){\nconst err19 = {instancePath:instancePath+\"/qc_status\",schemaPath:\"#/properties/qc_status/type\",keyword:\"type\",params:{type: schema34.properties.qc_status.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err19];\n}\nelse {\nvErrors.push(err19);\n}\nerrors++;\n}\nif(!((((data10 === \"clean\") || (data10 === \"flagged\")) || (data10 === \"suspect\")) || (data10 === null))){\nconst err20 = {instancePath:instancePath+\"/qc_status\",schemaPath:\"#/properties/qc_status/enum\",keyword:\"enum\",params:{allowedValues: schema34.properties.qc_status.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err20];\n}\nelse {\nvErrors.push(err20);\n}\nerrors++;\n}\n}\nif(data.source !== undefined){\nlet data11 = data.source;\nif(typeof data11 !== \"string\"){\nconst err21 = {instancePath:instancePath+\"/source\",schemaPath:\"#/properties/source/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err21];\n}\nelse {\nvErrors.push(err21);\n}\nerrors++;\n}\nif(!((((data11 === \"awc\") || (data11 === \"ghcnh\")) || (data11 === \"iem\")) || (data11 === \"ncei\"))){\nconst err22 = {instancePath:instancePath+\"/source\",schemaPath:\"#/properties/source/enum\",keyword:\"enum\",params:{allowedValues: schema34.properties.source.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err22];\n}\nelse {\nvErrors.push(err22);\n}\nerrors++;\n}\n}\nif(data.source_received_at !== undefined){\nlet data12 = data.source_received_at;\nif((data12 !== null) && (typeof data12 !== \"string\")){\nconst err23 = {instancePath:instancePath+\"/source_received_at\",schemaPath:\"#/properties/source_received_at/type\",keyword:\"type\",params:{type: schema34.properties.source_received_at.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err23];\n}\nelse {\nvErrors.push(err23);\n}\nerrors++;\n}\n}\nif(data.station_code !== undefined){\nif(typeof data.station_code !== \"string\"){\nconst err24 = {instancePath:instancePath+\"/station_code\",schemaPath:\"#/properties/station_code/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err24];\n}\nelse {\nvErrors.push(err24);\n}\nerrors++;\n}\n}\nif(data.temp_c !== undefined){\nlet data14 = data.temp_c;\nif((data14 !== null) && (!(typeof data14 == \"number\"))){\nconst err25 = {instancePath:instancePath+\"/temp_c\",schemaPath:\"#/properties/temp_c/type\",keyword:\"type\",params:{type: schema34.properties.temp_c.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err25];\n}\nelse {\nvErrors.push(err25);\n}\nerrors++;\n}\n}\n}\nelse {\nconst err26 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};\nif(vErrors === null){\nvErrors = [err26];\n}\nelse {\nvErrors.push(err26);\n}\nerrors++;\n}\nvalidate23.errors = vErrors;\nreturn errors === 0;\n}\nvalidate23.evaluated = {\"props\":{\"as_of_time\":true,\"dewpoint_c\":true,\"ingestion_id\":true,\"observation_kind\":true,\"observation_quality\":true,\"observation_type\":true,\"observed_at\":true,\"parser_name\":true,\"parser_version\":true,\"provenance\":true,\"qc_status\":true,\"source\":true,\"source_received_at\":true,\"station_code\":true,\"temp_c\":true},\"dynamicProps\":false,\"dynamicItems\":false};\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/json/schema.observation_qc.v1.json.\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\n\"use strict\";\nexport const schema_observation_qc_v1 = validate24;\nconst schema35 = {\"$id\":\"https://mostlyright.dev/schemas/schema.observation_qc.v1.json\",\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"properties\":{\"as_of_time\":{\"format\":\"date-time\",\"type\":[\"null\",\"string\"]},\"detector_metadata\":{\"description\":\"JSON-serialized detector payload; shape per qc_system.\",\"type\":[\"null\",\"string\"]},\"field\":{\"description\":\"Observation column the rule evaluated (e.g. temp_c).\",\"type\":\"string\"},\"flag\":{\"enum\":[\"clean\",\"flagged\",\"suspect\"],\"type\":\"string\"},\"ingestion_id\":{\"type\":[\"null\",\"string\"]},\"observation_kind\":{\"enum\":[\"METAR\",\"SPECI\",null],\"type\":[\"null\",\"string\"]},\"observed_at\":{\"format\":\"date-time\",\"type\":\"string\"},\"parser_name\":{\"type\":[\"null\",\"string\"]},\"qc_system\":{\"type\":\"string\"},\"qc_version\":{\"type\":\"string\"},\"rule_id\":{\"type\":\"string\"},\"source\":{\"enum\":[\"awc\",\"ghcnh\",\"iem\",\"ncei\"],\"type\":\"string\"},\"station_code\":{\"type\":\"string\"}},\"required\":[\"field\",\"flag\",\"observed_at\",\"qc_system\",\"qc_version\",\"rule_id\",\"source\",\"station_code\"],\"title\":\"schema.observation_qc.v1\",\"type\":\"object\",\"version\":\"v1\"};\n\nfunction validate24(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){\n/*# sourceURL=\"https://mostlyright.dev/schemas/schema.observation_qc.v1.json\" */;\nlet vErrors = null;\nlet errors = 0;\nconst evaluated0 = validate24.evaluated;\nif(evaluated0.dynamicProps){\nevaluated0.props = undefined;\n}\nif(evaluated0.dynamicItems){\nevaluated0.items = undefined;\n}\nif(data && typeof data == \"object\" && !Array.isArray(data)){\nif(data.field === undefined){\nconst err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"field\"},message:\"must have required property '\"+\"field\"+\"'\"};\nif(vErrors === null){\nvErrors = [err0];\n}\nelse {\nvErrors.push(err0);\n}\nerrors++;\n}\nif(data.flag === undefined){\nconst err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"flag\"},message:\"must have required property '\"+\"flag\"+\"'\"};\nif(vErrors === null){\nvErrors = [err1];\n}\nelse {\nvErrors.push(err1);\n}\nerrors++;\n}\nif(data.observed_at === undefined){\nconst err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"observed_at\"},message:\"must have required property '\"+\"observed_at\"+\"'\"};\nif(vErrors === null){\nvErrors = [err2];\n}\nelse {\nvErrors.push(err2);\n}\nerrors++;\n}\nif(data.qc_system === undefined){\nconst err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"qc_system\"},message:\"must have required property '\"+\"qc_system\"+\"'\"};\nif(vErrors === null){\nvErrors = [err3];\n}\nelse {\nvErrors.push(err3);\n}\nerrors++;\n}\nif(data.qc_version === undefined){\nconst err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"qc_version\"},message:\"must have required property '\"+\"qc_version\"+\"'\"};\nif(vErrors === null){\nvErrors = [err4];\n}\nelse {\nvErrors.push(err4);\n}\nerrors++;\n}\nif(data.rule_id === undefined){\nconst err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"rule_id\"},message:\"must have required property '\"+\"rule_id\"+\"'\"};\nif(vErrors === null){\nvErrors = [err5];\n}\nelse {\nvErrors.push(err5);\n}\nerrors++;\n}\nif(data.source === undefined){\nconst err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"source\"},message:\"must have required property '\"+\"source\"+\"'\"};\nif(vErrors === null){\nvErrors = [err6];\n}\nelse {\nvErrors.push(err6);\n}\nerrors++;\n}\nif(data.station_code === undefined){\nconst err7 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"station_code\"},message:\"must have required property '\"+\"station_code\"+\"'\"};\nif(vErrors === null){\nvErrors = [err7];\n}\nelse {\nvErrors.push(err7);\n}\nerrors++;\n}\nif(data.as_of_time !== undefined){\nlet data0 = data.as_of_time;\nif((data0 !== null) && (typeof data0 !== \"string\")){\nconst err8 = {instancePath:instancePath+\"/as_of_time\",schemaPath:\"#/properties/as_of_time/type\",keyword:\"type\",params:{type: schema35.properties.as_of_time.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err8];\n}\nelse {\nvErrors.push(err8);\n}\nerrors++;\n}\n}\nif(data.detector_metadata !== undefined){\nlet data1 = data.detector_metadata;\nif((data1 !== null) && (typeof data1 !== \"string\")){\nconst err9 = {instancePath:instancePath+\"/detector_metadata\",schemaPath:\"#/properties/detector_metadata/type\",keyword:\"type\",params:{type: schema35.properties.detector_metadata.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err9];\n}\nelse {\nvErrors.push(err9);\n}\nerrors++;\n}\n}\nif(data.field !== undefined){\nif(typeof data.field !== \"string\"){\nconst err10 = {instancePath:instancePath+\"/field\",schemaPath:\"#/properties/field/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err10];\n}\nelse {\nvErrors.push(err10);\n}\nerrors++;\n}\n}\nif(data.flag !== undefined){\nlet data3 = data.flag;\nif(typeof data3 !== \"string\"){\nconst err11 = {instancePath:instancePath+\"/flag\",schemaPath:\"#/properties/flag/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err11];\n}\nelse {\nvErrors.push(err11);\n}\nerrors++;\n}\nif(!(((data3 === \"clean\") || (data3 === \"flagged\")) || (data3 === \"suspect\"))){\nconst err12 = {instancePath:instancePath+\"/flag\",schemaPath:\"#/properties/flag/enum\",keyword:\"enum\",params:{allowedValues: schema35.properties.flag.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err12];\n}\nelse {\nvErrors.push(err12);\n}\nerrors++;\n}\n}\nif(data.ingestion_id !== undefined){\nlet data4 = data.ingestion_id;\nif((data4 !== null) && (typeof data4 !== \"string\")){\nconst err13 = {instancePath:instancePath+\"/ingestion_id\",schemaPath:\"#/properties/ingestion_id/type\",keyword:\"type\",params:{type: schema35.properties.ingestion_id.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err13];\n}\nelse {\nvErrors.push(err13);\n}\nerrors++;\n}\n}\nif(data.observation_kind !== undefined){\nlet data5 = data.observation_kind;\nif((data5 !== null) && (typeof data5 !== \"string\")){\nconst err14 = {instancePath:instancePath+\"/observation_kind\",schemaPath:\"#/properties/observation_kind/type\",keyword:\"type\",params:{type: schema35.properties.observation_kind.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err14];\n}\nelse {\nvErrors.push(err14);\n}\nerrors++;\n}\nif(!(((data5 === \"METAR\") || (data5 === \"SPECI\")) || (data5 === null))){\nconst err15 = {instancePath:instancePath+\"/observation_kind\",schemaPath:\"#/properties/observation_kind/enum\",keyword:\"enum\",params:{allowedValues: schema35.properties.observation_kind.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err15];\n}\nelse {\nvErrors.push(err15);\n}\nerrors++;\n}\n}\nif(data.observed_at !== undefined){\nif(!(typeof data.observed_at === \"string\")){\nconst err16 = {instancePath:instancePath+\"/observed_at\",schemaPath:\"#/properties/observed_at/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err16];\n}\nelse {\nvErrors.push(err16);\n}\nerrors++;\n}\n}\nif(data.parser_name !== undefined){\nlet data7 = data.parser_name;\nif((data7 !== null) && (typeof data7 !== \"string\")){\nconst err17 = {instancePath:instancePath+\"/parser_name\",schemaPath:\"#/properties/parser_name/type\",keyword:\"type\",params:{type: schema35.properties.parser_name.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err17];\n}\nelse {\nvErrors.push(err17);\n}\nerrors++;\n}\n}\nif(data.qc_system !== undefined){\nif(typeof data.qc_system !== \"string\"){\nconst err18 = {instancePath:instancePath+\"/qc_system\",schemaPath:\"#/properties/qc_system/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err18];\n}\nelse {\nvErrors.push(err18);\n}\nerrors++;\n}\n}\nif(data.qc_version !== undefined){\nif(typeof data.qc_version !== \"string\"){\nconst err19 = {instancePath:instancePath+\"/qc_version\",schemaPath:\"#/properties/qc_version/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err19];\n}\nelse {\nvErrors.push(err19);\n}\nerrors++;\n}\n}\nif(data.rule_id !== undefined){\nif(typeof data.rule_id !== \"string\"){\nconst err20 = {instancePath:instancePath+\"/rule_id\",schemaPath:\"#/properties/rule_id/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err20];\n}\nelse {\nvErrors.push(err20);\n}\nerrors++;\n}\n}\nif(data.source !== undefined){\nlet data11 = data.source;\nif(typeof data11 !== \"string\"){\nconst err21 = {instancePath:instancePath+\"/source\",schemaPath:\"#/properties/source/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err21];\n}\nelse {\nvErrors.push(err21);\n}\nerrors++;\n}\nif(!((((data11 === \"awc\") || (data11 === \"ghcnh\")) || (data11 === \"iem\")) || (data11 === \"ncei\"))){\nconst err22 = {instancePath:instancePath+\"/source\",schemaPath:\"#/properties/source/enum\",keyword:\"enum\",params:{allowedValues: schema35.properties.source.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err22];\n}\nelse {\nvErrors.push(err22);\n}\nerrors++;\n}\n}\nif(data.station_code !== undefined){\nif(typeof data.station_code !== \"string\"){\nconst err23 = {instancePath:instancePath+\"/station_code\",schemaPath:\"#/properties/station_code/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err23];\n}\nelse {\nvErrors.push(err23);\n}\nerrors++;\n}\n}\n}\nelse {\nconst err24 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};\nif(vErrors === null){\nvErrors = [err24];\n}\nelse {\nvErrors.push(err24);\n}\nerrors++;\n}\nvalidate24.errors = vErrors;\nreturn errors === 0;\n}\nvalidate24.evaluated = {\"props\":{\"as_of_time\":true,\"detector_metadata\":true,\"field\":true,\"flag\":true,\"ingestion_id\":true,\"observation_kind\":true,\"observed_at\":true,\"parser_name\":true,\"qc_system\":true,\"qc_version\":true,\"rule_id\":true,\"source\":true,\"station_code\":true},\"dynamicProps\":false,\"dynamicItems\":false};\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/json/schema.observation.v1.json.\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\n\"use strict\";\nexport const schema_observation_v1 = validate20;\nconst schema31 = {\"$id\":\"https://mostlyright.dev/schemas/schema.observation.v1.json\",\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"imperialRenames\":{\"dew_point_c\":\"dew_point_F\",\"event_time\":\"utc_datetime\",\"precip_mm_1h\":\"precip_in_1h\",\"sky_base_1_m\":\"sky_base_1_ft\",\"sky_base_2_m\":\"sky_base_2_ft\",\"sky_base_3_m\":\"sky_base_3_ft\",\"sky_base_4_m\":\"sky_base_4_ft\",\"temp_c\":\"temp_F\",\"visibility_m\":\"vsby\",\"wind_gust_ms\":\"gust_kt\",\"wind_speed_ms\":\"wind_speed_kt\"},\"properties\":{\"dew_point_c\":{\"description\":\"units: celsius — bounded\",\"type\":[\"null\",\"number\"]},\"event_time\":{\"description\":\"observation valid time\",\"format\":\"date-time\",\"type\":\"string\"},\"metar_raw\":{\"description\":\"raw METAR text if source has it; null for AWC JSON (structured-only)\",\"type\":[\"null\",\"string\"]},\"observation_type\":{\"description\":\"METAR | SPECI; defaults METAR when source can't distinguish (e.g. AWC JSON)\",\"enum\":[\"METAR\",\"SPECI\"],\"type\":\"string\"},\"precip_mm_1h\":{\"description\":\"units: mm — hourly precip (METAR p01i, converted from inches)\",\"type\":[\"null\",\"number\"]},\"sky_base_1_m\":{\"description\":\"units: meters — first cloud layer base height (converted from feet)\",\"type\":[\"null\",\"number\"]},\"sky_base_2_m\":{\"description\":\"units: meters\",\"type\":[\"null\",\"number\"]},\"sky_base_3_m\":{\"description\":\"units: meters\",\"type\":[\"null\",\"number\"]},\"sky_base_4_m\":{\"description\":\"units: meters\",\"type\":[\"null\",\"number\"]},\"sky_cover_1\":{\"description\":\"first cloud layer cover code\",\"enum\":[\"BKN\",\"CLR\",\"FEW\",\"OVC\",\"SCT\",\"VV\",null],\"type\":[\"null\",\"string\"]},\"sky_cover_2\":{\"description\":\"second layer; null if not present\",\"enum\":[\"BKN\",\"CLR\",\"FEW\",\"OVC\",\"SCT\",\"VV\",null],\"type\":[\"null\",\"string\"]},\"sky_cover_3\":{\"description\":\"third layer; null if not present\",\"enum\":[\"BKN\",\"CLR\",\"FEW\",\"OVC\",\"SCT\",\"VV\",null],\"type\":[\"null\",\"string\"]},\"sky_cover_4\":{\"description\":\"fourth layer; null if not present\",\"enum\":[\"BKN\",\"CLR\",\"FEW\",\"OVC\",\"SCT\",\"VV\",null],\"type\":[\"null\",\"string\"]},\"slp_hpa\":{\"description\":\"units: hPa — sea-level pressure (canonical aviation unit, not converted across modes)\",\"type\":[\"null\",\"number\"]},\"station\":{\"description\":\"ICAO/ASOS station ID (e.g. KORD)\",\"type\":\"string\"},\"temp_c\":{\"description\":\"units: celsius — bounded TEMP_MIN_C..TEMP_MAX_C\",\"type\":[\"null\",\"number\"]},\"visibility_m\":{\"description\":\"units: meters — converted from statute miles\",\"type\":[\"null\",\"number\"]},\"wind_dir_deg\":{\"description\":\"units: degrees — 0-360, bounded\",\"type\":[\"integer\",\"null\"]},\"wind_gust_ms\":{\"description\":\"units: m/s — converted from kt\",\"type\":[\"null\",\"number\"]},\"wind_speed_ms\":{\"description\":\"units: m/s — converted from kt\",\"type\":[\"null\",\"number\"]}},\"required\":[\"event_time\",\"observation_type\",\"station\"],\"title\":\"schema.observation.v1\",\"type\":\"object\",\"version\":\"v1\"};\n\nfunction validate20(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){\n/*# sourceURL=\"https://mostlyright.dev/schemas/schema.observation.v1.json\" */;\nlet vErrors = null;\nlet errors = 0;\nconst evaluated0 = validate20.evaluated;\nif(evaluated0.dynamicProps){\nevaluated0.props = undefined;\n}\nif(evaluated0.dynamicItems){\nevaluated0.items = undefined;\n}\nif(data && typeof data == \"object\" && !Array.isArray(data)){\nif(data.event_time === undefined){\nconst err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"event_time\"},message:\"must have required property '\"+\"event_time\"+\"'\"};\nif(vErrors === null){\nvErrors = [err0];\n}\nelse {\nvErrors.push(err0);\n}\nerrors++;\n}\nif(data.observation_type === undefined){\nconst err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"observation_type\"},message:\"must have required property '\"+\"observation_type\"+\"'\"};\nif(vErrors === null){\nvErrors = [err1];\n}\nelse {\nvErrors.push(err1);\n}\nerrors++;\n}\nif(data.station === undefined){\nconst err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"station\"},message:\"must have required property '\"+\"station\"+\"'\"};\nif(vErrors === null){\nvErrors = [err2];\n}\nelse {\nvErrors.push(err2);\n}\nerrors++;\n}\nif(data.dew_point_c !== undefined){\nlet data0 = data.dew_point_c;\nif((data0 !== null) && (!(typeof data0 == \"number\"))){\nconst err3 = {instancePath:instancePath+\"/dew_point_c\",schemaPath:\"#/properties/dew_point_c/type\",keyword:\"type\",params:{type: schema31.properties.dew_point_c.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err3];\n}\nelse {\nvErrors.push(err3);\n}\nerrors++;\n}\n}\nif(data.event_time !== undefined){\nif(!(typeof data.event_time === \"string\")){\nconst err4 = {instancePath:instancePath+\"/event_time\",schemaPath:\"#/properties/event_time/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err4];\n}\nelse {\nvErrors.push(err4);\n}\nerrors++;\n}\n}\nif(data.metar_raw !== undefined){\nlet data2 = data.metar_raw;\nif((data2 !== null) && (typeof data2 !== \"string\")){\nconst err5 = {instancePath:instancePath+\"/metar_raw\",schemaPath:\"#/properties/metar_raw/type\",keyword:\"type\",params:{type: schema31.properties.metar_raw.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err5];\n}\nelse {\nvErrors.push(err5);\n}\nerrors++;\n}\n}\nif(data.observation_type !== undefined){\nlet data3 = data.observation_type;\nif(typeof data3 !== \"string\"){\nconst err6 = {instancePath:instancePath+\"/observation_type\",schemaPath:\"#/properties/observation_type/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err6];\n}\nelse {\nvErrors.push(err6);\n}\nerrors++;\n}\nif(!((data3 === \"METAR\") || (data3 === \"SPECI\"))){\nconst err7 = {instancePath:instancePath+\"/observation_type\",schemaPath:\"#/properties/observation_type/enum\",keyword:\"enum\",params:{allowedValues: schema31.properties.observation_type.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err7];\n}\nelse {\nvErrors.push(err7);\n}\nerrors++;\n}\n}\nif(data.precip_mm_1h !== undefined){\nlet data4 = data.precip_mm_1h;\nif((data4 !== null) && (!(typeof data4 == \"number\"))){\nconst err8 = {instancePath:instancePath+\"/precip_mm_1h\",schemaPath:\"#/properties/precip_mm_1h/type\",keyword:\"type\",params:{type: schema31.properties.precip_mm_1h.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err8];\n}\nelse {\nvErrors.push(err8);\n}\nerrors++;\n}\n}\nif(data.sky_base_1_m !== undefined){\nlet data5 = data.sky_base_1_m;\nif((data5 !== null) && (!(typeof data5 == \"number\"))){\nconst err9 = {instancePath:instancePath+\"/sky_base_1_m\",schemaPath:\"#/properties/sky_base_1_m/type\",keyword:\"type\",params:{type: schema31.properties.sky_base_1_m.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err9];\n}\nelse {\nvErrors.push(err9);\n}\nerrors++;\n}\n}\nif(data.sky_base_2_m !== undefined){\nlet data6 = data.sky_base_2_m;\nif((data6 !== null) && (!(typeof data6 == \"number\"))){\nconst err10 = {instancePath:instancePath+\"/sky_base_2_m\",schemaPath:\"#/properties/sky_base_2_m/type\",keyword:\"type\",params:{type: schema31.properties.sky_base_2_m.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err10];\n}\nelse {\nvErrors.push(err10);\n}\nerrors++;\n}\n}\nif(data.sky_base_3_m !== undefined){\nlet data7 = data.sky_base_3_m;\nif((data7 !== null) && (!(typeof data7 == \"number\"))){\nconst err11 = {instancePath:instancePath+\"/sky_base_3_m\",schemaPath:\"#/properties/sky_base_3_m/type\",keyword:\"type\",params:{type: schema31.properties.sky_base_3_m.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err11];\n}\nelse {\nvErrors.push(err11);\n}\nerrors++;\n}\n}\nif(data.sky_base_4_m !== undefined){\nlet data8 = data.sky_base_4_m;\nif((data8 !== null) && (!(typeof data8 == \"number\"))){\nconst err12 = {instancePath:instancePath+\"/sky_base_4_m\",schemaPath:\"#/properties/sky_base_4_m/type\",keyword:\"type\",params:{type: schema31.properties.sky_base_4_m.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err12];\n}\nelse {\nvErrors.push(err12);\n}\nerrors++;\n}\n}\nif(data.sky_cover_1 !== undefined){\nlet data9 = data.sky_cover_1;\nif((data9 !== null) && (typeof data9 !== \"string\")){\nconst err13 = {instancePath:instancePath+\"/sky_cover_1\",schemaPath:\"#/properties/sky_cover_1/type\",keyword:\"type\",params:{type: schema31.properties.sky_cover_1.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err13];\n}\nelse {\nvErrors.push(err13);\n}\nerrors++;\n}\nif(!(((((((data9 === \"BKN\") || (data9 === \"CLR\")) || (data9 === \"FEW\")) || (data9 === \"OVC\")) || (data9 === \"SCT\")) || (data9 === \"VV\")) || (data9 === null))){\nconst err14 = {instancePath:instancePath+\"/sky_cover_1\",schemaPath:\"#/properties/sky_cover_1/enum\",keyword:\"enum\",params:{allowedValues: schema31.properties.sky_cover_1.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err14];\n}\nelse {\nvErrors.push(err14);\n}\nerrors++;\n}\n}\nif(data.sky_cover_2 !== undefined){\nlet data10 = data.sky_cover_2;\nif((data10 !== null) && (typeof data10 !== \"string\")){\nconst err15 = {instancePath:instancePath+\"/sky_cover_2\",schemaPath:\"#/properties/sky_cover_2/type\",keyword:\"type\",params:{type: schema31.properties.sky_cover_2.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err15];\n}\nelse {\nvErrors.push(err15);\n}\nerrors++;\n}\nif(!(((((((data10 === \"BKN\") || (data10 === \"CLR\")) || (data10 === \"FEW\")) || (data10 === \"OVC\")) || (data10 === \"SCT\")) || (data10 === \"VV\")) || (data10 === null))){\nconst err16 = {instancePath:instancePath+\"/sky_cover_2\",schemaPath:\"#/properties/sky_cover_2/enum\",keyword:\"enum\",params:{allowedValues: schema31.properties.sky_cover_2.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err16];\n}\nelse {\nvErrors.push(err16);\n}\nerrors++;\n}\n}\nif(data.sky_cover_3 !== undefined){\nlet data11 = data.sky_cover_3;\nif((data11 !== null) && (typeof data11 !== \"string\")){\nconst err17 = {instancePath:instancePath+\"/sky_cover_3\",schemaPath:\"#/properties/sky_cover_3/type\",keyword:\"type\",params:{type: schema31.properties.sky_cover_3.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err17];\n}\nelse {\nvErrors.push(err17);\n}\nerrors++;\n}\nif(!(((((((data11 === \"BKN\") || (data11 === \"CLR\")) || (data11 === \"FEW\")) || (data11 === \"OVC\")) || (data11 === \"SCT\")) || (data11 === \"VV\")) || (data11 === null))){\nconst err18 = {instancePath:instancePath+\"/sky_cover_3\",schemaPath:\"#/properties/sky_cover_3/enum\",keyword:\"enum\",params:{allowedValues: schema31.properties.sky_cover_3.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err18];\n}\nelse {\nvErrors.push(err18);\n}\nerrors++;\n}\n}\nif(data.sky_cover_4 !== undefined){\nlet data12 = data.sky_cover_4;\nif((data12 !== null) && (typeof data12 !== \"string\")){\nconst err19 = {instancePath:instancePath+\"/sky_cover_4\",schemaPath:\"#/properties/sky_cover_4/type\",keyword:\"type\",params:{type: schema31.properties.sky_cover_4.type},message:\"must be null,string\"};\nif(vErrors === null){\nvErrors = [err19];\n}\nelse {\nvErrors.push(err19);\n}\nerrors++;\n}\nif(!(((((((data12 === \"BKN\") || (data12 === \"CLR\")) || (data12 === \"FEW\")) || (data12 === \"OVC\")) || (data12 === \"SCT\")) || (data12 === \"VV\")) || (data12 === null))){\nconst err20 = {instancePath:instancePath+\"/sky_cover_4\",schemaPath:\"#/properties/sky_cover_4/enum\",keyword:\"enum\",params:{allowedValues: schema31.properties.sky_cover_4.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err20];\n}\nelse {\nvErrors.push(err20);\n}\nerrors++;\n}\n}\nif(data.slp_hpa !== undefined){\nlet data13 = data.slp_hpa;\nif((data13 !== null) && (!(typeof data13 == \"number\"))){\nconst err21 = {instancePath:instancePath+\"/slp_hpa\",schemaPath:\"#/properties/slp_hpa/type\",keyword:\"type\",params:{type: schema31.properties.slp_hpa.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err21];\n}\nelse {\nvErrors.push(err21);\n}\nerrors++;\n}\n}\nif(data.station !== undefined){\nif(typeof data.station !== \"string\"){\nconst err22 = {instancePath:instancePath+\"/station\",schemaPath:\"#/properties/station/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err22];\n}\nelse {\nvErrors.push(err22);\n}\nerrors++;\n}\n}\nif(data.temp_c !== undefined){\nlet data15 = data.temp_c;\nif((data15 !== null) && (!(typeof data15 == \"number\"))){\nconst err23 = {instancePath:instancePath+\"/temp_c\",schemaPath:\"#/properties/temp_c/type\",keyword:\"type\",params:{type: schema31.properties.temp_c.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err23];\n}\nelse {\nvErrors.push(err23);\n}\nerrors++;\n}\n}\nif(data.visibility_m !== undefined){\nlet data16 = data.visibility_m;\nif((data16 !== null) && (!(typeof data16 == \"number\"))){\nconst err24 = {instancePath:instancePath+\"/visibility_m\",schemaPath:\"#/properties/visibility_m/type\",keyword:\"type\",params:{type: schema31.properties.visibility_m.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err24];\n}\nelse {\nvErrors.push(err24);\n}\nerrors++;\n}\n}\nif(data.wind_dir_deg !== undefined){\nlet data17 = data.wind_dir_deg;\nif((!((typeof data17 == \"number\") && (!(data17 % 1) && !isNaN(data17)))) && (data17 !== null)){\nconst err25 = {instancePath:instancePath+\"/wind_dir_deg\",schemaPath:\"#/properties/wind_dir_deg/type\",keyword:\"type\",params:{type: schema31.properties.wind_dir_deg.type},message:\"must be integer,null\"};\nif(vErrors === null){\nvErrors = [err25];\n}\nelse {\nvErrors.push(err25);\n}\nerrors++;\n}\n}\nif(data.wind_gust_ms !== undefined){\nlet data18 = data.wind_gust_ms;\nif((data18 !== null) && (!(typeof data18 == \"number\"))){\nconst err26 = {instancePath:instancePath+\"/wind_gust_ms\",schemaPath:\"#/properties/wind_gust_ms/type\",keyword:\"type\",params:{type: schema31.properties.wind_gust_ms.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err26];\n}\nelse {\nvErrors.push(err26);\n}\nerrors++;\n}\n}\nif(data.wind_speed_ms !== undefined){\nlet data19 = data.wind_speed_ms;\nif((data19 !== null) && (!(typeof data19 == \"number\"))){\nconst err27 = {instancePath:instancePath+\"/wind_speed_ms\",schemaPath:\"#/properties/wind_speed_ms/type\",keyword:\"type\",params:{type: schema31.properties.wind_speed_ms.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err27];\n}\nelse {\nvErrors.push(err27);\n}\nerrors++;\n}\n}\n}\nelse {\nconst err28 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};\nif(vErrors === null){\nvErrors = [err28];\n}\nelse {\nvErrors.push(err28);\n}\nerrors++;\n}\nvalidate20.errors = vErrors;\nreturn errors === 0;\n}\nvalidate20.evaluated = {\"props\":{\"dew_point_c\":true,\"event_time\":true,\"metar_raw\":true,\"observation_type\":true,\"precip_mm_1h\":true,\"sky_base_1_m\":true,\"sky_base_2_m\":true,\"sky_base_3_m\":true,\"sky_base_4_m\":true,\"sky_cover_1\":true,\"sky_cover_2\":true,\"sky_cover_3\":true,\"sky_cover_4\":true,\"slp_hpa\":true,\"station\":true,\"temp_c\":true,\"visibility_m\":true,\"wind_dir_deg\":true,\"wind_gust_ms\":true,\"wind_speed_ms\":true},\"dynamicProps\":false,\"dynamicItems\":false};\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/json/schema.settlement.cli.v1.json.\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\n\"use strict\";\nexport const schema_settlement_cli_v1 = validate22;\nconst schema33 = {\"$id\":\"https://mostlyright.dev/schemas/schema.settlement.cli.v1.json\",\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"properties\":{\"cli_data_quality\":{\"description\":\"NWS CLI data-quality marker (Pitfall 6/16). Allows downstream code to filter or weight settlement rows by issuer quality without re-parsing the product header.\",\"enum\":[\"clean\",\"flagged_instrument\",\"flagged_late\",\"flagged_other\",\"missing\"],\"type\":\"string\"},\"event_time\":{\"description\":\"00:00 local time on observation_date converted to UTC; for sort/join only\",\"format\":\"date-time\",\"type\":\"string\"},\"observation_date\":{\"description\":\"local climate day per NWS convention (no timezone applied to the date itself)\",\"format\":\"date\",\"type\":\"string\"},\"precipitation_in\":{\"description\":\"units: inches\",\"type\":[\"null\",\"number\"]},\"product_release_time\":{\"description\":\"parsed from CLI product header (_climate.py::_parse_product_timestamp)\",\"format\":\"date-time\",\"type\":\"string\"},\"report_type\":{\"description\":\"preliminary | final | correction; dedup priority preliminary < final < correction\",\"enum\":[\"correction\",\"final\",\"preliminary\"],\"type\":\"string\"},\"settlement_finality\":{\"description\":\"provisional | final | superseded. Kalshi NHIGH/NLOW settlement contractually requires 'final'; 'provisional' values are kept for early-look research only.\",\"enum\":[\"final\",\"provisional\",\"superseded\"],\"type\":\"string\"},\"snowfall_in\":{\"description\":\"units: inches\",\"type\":[\"null\",\"number\"]},\"station\":{\"description\":\"ICAO/ASOS station ID\",\"type\":\"string\"},\"station_tz\":{\"description\":\"IANA timezone for the station (e.g. America/Chicago for KORD). Required for local-climate-day semantics; see §U.\",\"type\":\"string\"},\"temp_max_F\":{\"description\":\"units: fahrenheit — daily high (uppercase F for consistency with obs imperial mode)\",\"type\":[\"null\",\"number\"]},\"temp_min_F\":{\"description\":\"units: fahrenheit — daily low\",\"type\":[\"null\",\"number\"]}},\"required\":[\"cli_data_quality\",\"event_time\",\"observation_date\",\"product_release_time\",\"report_type\",\"settlement_finality\",\"station\",\"station_tz\"],\"title\":\"schema.settlement.cli.v1\",\"type\":\"object\",\"version\":\"v1\"};\n\nfunction validate22(data, {instancePath=\"\", parentData, parentDataProperty, rootData=data, dynamicAnchors={}}={}){\n/*# sourceURL=\"https://mostlyright.dev/schemas/schema.settlement.cli.v1.json\" */;\nlet vErrors = null;\nlet errors = 0;\nconst evaluated0 = validate22.evaluated;\nif(evaluated0.dynamicProps){\nevaluated0.props = undefined;\n}\nif(evaluated0.dynamicItems){\nevaluated0.items = undefined;\n}\nif(data && typeof data == \"object\" && !Array.isArray(data)){\nif(data.cli_data_quality === undefined){\nconst err0 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"cli_data_quality\"},message:\"must have required property '\"+\"cli_data_quality\"+\"'\"};\nif(vErrors === null){\nvErrors = [err0];\n}\nelse {\nvErrors.push(err0);\n}\nerrors++;\n}\nif(data.event_time === undefined){\nconst err1 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"event_time\"},message:\"must have required property '\"+\"event_time\"+\"'\"};\nif(vErrors === null){\nvErrors = [err1];\n}\nelse {\nvErrors.push(err1);\n}\nerrors++;\n}\nif(data.observation_date === undefined){\nconst err2 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"observation_date\"},message:\"must have required property '\"+\"observation_date\"+\"'\"};\nif(vErrors === null){\nvErrors = [err2];\n}\nelse {\nvErrors.push(err2);\n}\nerrors++;\n}\nif(data.product_release_time === undefined){\nconst err3 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"product_release_time\"},message:\"must have required property '\"+\"product_release_time\"+\"'\"};\nif(vErrors === null){\nvErrors = [err3];\n}\nelse {\nvErrors.push(err3);\n}\nerrors++;\n}\nif(data.report_type === undefined){\nconst err4 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"report_type\"},message:\"must have required property '\"+\"report_type\"+\"'\"};\nif(vErrors === null){\nvErrors = [err4];\n}\nelse {\nvErrors.push(err4);\n}\nerrors++;\n}\nif(data.settlement_finality === undefined){\nconst err5 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"settlement_finality\"},message:\"must have required property '\"+\"settlement_finality\"+\"'\"};\nif(vErrors === null){\nvErrors = [err5];\n}\nelse {\nvErrors.push(err5);\n}\nerrors++;\n}\nif(data.station === undefined){\nconst err6 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"station\"},message:\"must have required property '\"+\"station\"+\"'\"};\nif(vErrors === null){\nvErrors = [err6];\n}\nelse {\nvErrors.push(err6);\n}\nerrors++;\n}\nif(data.station_tz === undefined){\nconst err7 = {instancePath,schemaPath:\"#/required\",keyword:\"required\",params:{missingProperty: \"station_tz\"},message:\"must have required property '\"+\"station_tz\"+\"'\"};\nif(vErrors === null){\nvErrors = [err7];\n}\nelse {\nvErrors.push(err7);\n}\nerrors++;\n}\nif(data.cli_data_quality !== undefined){\nlet data0 = data.cli_data_quality;\nif(typeof data0 !== \"string\"){\nconst err8 = {instancePath:instancePath+\"/cli_data_quality\",schemaPath:\"#/properties/cli_data_quality/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err8];\n}\nelse {\nvErrors.push(err8);\n}\nerrors++;\n}\nif(!(((((data0 === \"clean\") || (data0 === \"flagged_instrument\")) || (data0 === \"flagged_late\")) || (data0 === \"flagged_other\")) || (data0 === \"missing\"))){\nconst err9 = {instancePath:instancePath+\"/cli_data_quality\",schemaPath:\"#/properties/cli_data_quality/enum\",keyword:\"enum\",params:{allowedValues: schema33.properties.cli_data_quality.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err9];\n}\nelse {\nvErrors.push(err9);\n}\nerrors++;\n}\n}\nif(data.event_time !== undefined){\nif(!(typeof data.event_time === \"string\")){\nconst err10 = {instancePath:instancePath+\"/event_time\",schemaPath:\"#/properties/event_time/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err10];\n}\nelse {\nvErrors.push(err10);\n}\nerrors++;\n}\n}\nif(data.observation_date !== undefined){\nif(!(typeof data.observation_date === \"string\")){\nconst err11 = {instancePath:instancePath+\"/observation_date\",schemaPath:\"#/properties/observation_date/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err11];\n}\nelse {\nvErrors.push(err11);\n}\nerrors++;\n}\n}\nif(data.precipitation_in !== undefined){\nlet data3 = data.precipitation_in;\nif((data3 !== null) && (!(typeof data3 == \"number\"))){\nconst err12 = {instancePath:instancePath+\"/precipitation_in\",schemaPath:\"#/properties/precipitation_in/type\",keyword:\"type\",params:{type: schema33.properties.precipitation_in.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err12];\n}\nelse {\nvErrors.push(err12);\n}\nerrors++;\n}\n}\nif(data.product_release_time !== undefined){\nif(!(typeof data.product_release_time === \"string\")){\nconst err13 = {instancePath:instancePath+\"/product_release_time\",schemaPath:\"#/properties/product_release_time/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err13];\n}\nelse {\nvErrors.push(err13);\n}\nerrors++;\n}\n}\nif(data.report_type !== undefined){\nlet data5 = data.report_type;\nif(typeof data5 !== \"string\"){\nconst err14 = {instancePath:instancePath+\"/report_type\",schemaPath:\"#/properties/report_type/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err14];\n}\nelse {\nvErrors.push(err14);\n}\nerrors++;\n}\nif(!(((data5 === \"correction\") || (data5 === \"final\")) || (data5 === \"preliminary\"))){\nconst err15 = {instancePath:instancePath+\"/report_type\",schemaPath:\"#/properties/report_type/enum\",keyword:\"enum\",params:{allowedValues: schema33.properties.report_type.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err15];\n}\nelse {\nvErrors.push(err15);\n}\nerrors++;\n}\n}\nif(data.settlement_finality !== undefined){\nlet data6 = data.settlement_finality;\nif(typeof data6 !== \"string\"){\nconst err16 = {instancePath:instancePath+\"/settlement_finality\",schemaPath:\"#/properties/settlement_finality/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err16];\n}\nelse {\nvErrors.push(err16);\n}\nerrors++;\n}\nif(!(((data6 === \"final\") || (data6 === \"provisional\")) || (data6 === \"superseded\"))){\nconst err17 = {instancePath:instancePath+\"/settlement_finality\",schemaPath:\"#/properties/settlement_finality/enum\",keyword:\"enum\",params:{allowedValues: schema33.properties.settlement_finality.enum},message:\"must be equal to one of the allowed values\"};\nif(vErrors === null){\nvErrors = [err17];\n}\nelse {\nvErrors.push(err17);\n}\nerrors++;\n}\n}\nif(data.snowfall_in !== undefined){\nlet data7 = data.snowfall_in;\nif((data7 !== null) && (!(typeof data7 == \"number\"))){\nconst err18 = {instancePath:instancePath+\"/snowfall_in\",schemaPath:\"#/properties/snowfall_in/type\",keyword:\"type\",params:{type: schema33.properties.snowfall_in.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err18];\n}\nelse {\nvErrors.push(err18);\n}\nerrors++;\n}\n}\nif(data.station !== undefined){\nif(typeof data.station !== \"string\"){\nconst err19 = {instancePath:instancePath+\"/station\",schemaPath:\"#/properties/station/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err19];\n}\nelse {\nvErrors.push(err19);\n}\nerrors++;\n}\n}\nif(data.station_tz !== undefined){\nif(typeof data.station_tz !== \"string\"){\nconst err20 = {instancePath:instancePath+\"/station_tz\",schemaPath:\"#/properties/station_tz/type\",keyword:\"type\",params:{type: \"string\"},message:\"must be string\"};\nif(vErrors === null){\nvErrors = [err20];\n}\nelse {\nvErrors.push(err20);\n}\nerrors++;\n}\n}\nif(data.temp_max_F !== undefined){\nlet data10 = data.temp_max_F;\nif((data10 !== null) && (!(typeof data10 == \"number\"))){\nconst err21 = {instancePath:instancePath+\"/temp_max_F\",schemaPath:\"#/properties/temp_max_F/type\",keyword:\"type\",params:{type: schema33.properties.temp_max_F.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err21];\n}\nelse {\nvErrors.push(err21);\n}\nerrors++;\n}\n}\nif(data.temp_min_F !== undefined){\nlet data11 = data.temp_min_F;\nif((data11 !== null) && (!(typeof data11 == \"number\"))){\nconst err22 = {instancePath:instancePath+\"/temp_min_F\",schemaPath:\"#/properties/temp_min_F/type\",keyword:\"type\",params:{type: schema33.properties.temp_min_F.type},message:\"must be null,number\"};\nif(vErrors === null){\nvErrors = [err22];\n}\nelse {\nvErrors.push(err22);\n}\nerrors++;\n}\n}\n}\nelse {\nconst err23 = {instancePath,schemaPath:\"#/type\",keyword:\"type\",params:{type: \"object\"},message:\"must be object\"};\nif(vErrors === null){\nvErrors = [err23];\n}\nelse {\nvErrors.push(err23);\n}\nerrors++;\n}\nvalidate22.errors = vErrors;\nreturn errors === 0;\n}\nvalidate22.evaluated = {\"props\":{\"cli_data_quality\":true,\"event_time\":true,\"observation_date\":true,\"precipitation_in\":true,\"product_release_time\":true,\"report_type\":true,\"settlement_finality\":true,\"snowfall_in\":true,\"station\":true,\"station_tz\":true,\"temp_max_F\":true,\"temp_min_F\":true},\"dynamicProps\":false,\"dynamicItems\":false};\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/(generated).\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\n\n// Per-schema map of { propertyName: \"date\" | \"date-time\" } extracted\n// from `schemas/json/*.json` `properties[*].format` at codegen time.\n// Consumed by validateRows() to run a post-pass format check (CSP-safe\n// regex, no jsonschema / ajv-formats runtime dependency).\n\nexport type FormatKind = \"date\" | \"date-time\";\n\nexport type SchemaFormatMap = Readonly<Record<string, FormatKind>>;\n\nconst FORMAT_MAPS: Readonly<Record<string, SchemaFormatMap>> = Object.freeze({\n \"schema.forecast.iem_mos.v1\": Object.freeze({\n \"issued_at\": \"date-time\",\n \"valid_at\": \"date-time\",\n }),\n \"schema.observation_ledger.v1\": Object.freeze({\n \"as_of_time\": \"date-time\",\n \"observed_at\": \"date-time\",\n }),\n \"schema.observation_qc.v1\": Object.freeze({\n \"as_of_time\": \"date-time\",\n \"observed_at\": \"date-time\",\n }),\n \"schema.observation.v1\": Object.freeze({\n \"event_time\": \"date-time\",\n }),\n \"schema.settlement.cli.v1\": Object.freeze({\n \"event_time\": \"date-time\",\n \"observation_date\": \"date\",\n \"product_release_time\": \"date-time\",\n }),\n});\n\n/** Return the per-property format map for `schemaId`, or null if unknown. */\nexport function getFormatMap(schemaId: string): SchemaFormatMap | null {\n return FORMAT_MAPS[schemaId] ?? null;\n}\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/(generated).\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\n\n// ajv-standalone validators compiled by @mostlyrightmd/codegen at build time.\n// No runtime ajv dependency — MV3-CSP-safe (no eval, no Function ctor).\n// Group A schemas always compile; Group B schemas (when added) fall through\n// to the null-return path in `getValidator`.\n\nimport { schema_forecast_iem_mos_v1 as validate_schema_forecast_iem_mos_v1 } from \"./schema_forecast_iem_mos_v1.js\";\nimport { schema_observation_ledger_v1 as validate_schema_observation_ledger_v1 } from \"./schema_observation_ledger_v1.js\";\nimport { schema_observation_qc_v1 as validate_schema_observation_qc_v1 } from \"./schema_observation_qc_v1.js\";\nimport { schema_observation_v1 as validate_schema_observation_v1 } from \"./schema_observation_v1.js\";\nimport { schema_settlement_cli_v1 as validate_schema_settlement_cli_v1 } from \"./schema_settlement_cli_v1.js\";\n\nexport type AjvErrorObject = {\n readonly instancePath: string;\n readonly schemaPath: string;\n readonly keyword: string;\n readonly params: Record<string, unknown>;\n readonly message?: string;\n};\n\nexport type AjvValidator = ((data: unknown) => boolean) & {\n errors?: AjvErrorObject[] | null;\n};\n\nconst VALIDATORS: Record<string, AjvValidator> = {\n \"schema.forecast.iem_mos.v1\": validate_schema_forecast_iem_mos_v1 as unknown as AjvValidator,\n \"schema.observation_ledger.v1\": validate_schema_observation_ledger_v1 as unknown as AjvValidator,\n \"schema.observation_qc.v1\": validate_schema_observation_qc_v1 as unknown as AjvValidator,\n \"schema.observation.v1\": validate_schema_observation_v1 as unknown as AjvValidator,\n \"schema.settlement.cli.v1\": validate_schema_settlement_cli_v1 as unknown as AjvValidator,\n};\n\nexport function getValidator(schemaId: string): AjvValidator | null {\n return VALIDATORS[schemaId] ?? null;\n}\n\nexport function listValidators(): readonly string[] {\n return Object.freeze(Object.keys(VALIDATORS));\n}\n\nexport { getFormatMap } from \"./format-map.js\";\nexport type { FormatKind, SchemaFormatMap } from \"./format-map.js\";\n"],"mappings":"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","names":["column"]}
@@ -0,0 +1,30 @@
1
+ interface ValidateOptions {
2
+ /** Producer-stamped source string. Falls back to `rows[0].source` if absent. */
3
+ readonly source?: string;
4
+ /** Producer-stamped retrieval timestamp. Falls back to `rows[i].retrieved_at`. */
5
+ readonly retrievedAt?: string;
6
+ /** Non-empty reason string. Presence skips the source-identity check. */
7
+ readonly allowSourceDrift?: string;
8
+ }
9
+ interface ValidateResult {
10
+ readonly rowCount: number;
11
+ readonly source: string;
12
+ readonly retrievedAt: string;
13
+ }
14
+ /**
15
+ * Validate `rows` against the named canonical schema.
16
+ *
17
+ * Returns `{ rowCount, source, retrievedAt }` on success.
18
+ *
19
+ * Throws `SchemaValidationError` (with Python-vocabulary `violations[]`) on
20
+ * structural / dtype / enum / required-column failures, OR
21
+ * `SourceMismatchError` when per-row source identity drifts.
22
+ *
23
+ * @throws SchemaValidationError — see violations vocabulary in the module header.
24
+ * @throws SourceMismatchError — per-row `source` column doesn't match resolved source.
25
+ * @throws TypeError — `allowSourceDrift` is non-string.
26
+ * @throws RangeError — `allowSourceDrift` is empty after trim.
27
+ */
28
+ declare function validateRows<Row extends Record<string, unknown> = Record<string, unknown>>(rows: ReadonlyArray<Row>, schemaId: string, opts?: ValidateOptions): ValidateResult;
29
+
30
+ export { type ValidateOptions, type ValidateResult, validateRows };
@@ -0,0 +1,30 @@
1
+ interface ValidateOptions {
2
+ /** Producer-stamped source string. Falls back to `rows[0].source` if absent. */
3
+ readonly source?: string;
4
+ /** Producer-stamped retrieval timestamp. Falls back to `rows[i].retrieved_at`. */
5
+ readonly retrievedAt?: string;
6
+ /** Non-empty reason string. Presence skips the source-identity check. */
7
+ readonly allowSourceDrift?: string;
8
+ }
9
+ interface ValidateResult {
10
+ readonly rowCount: number;
11
+ readonly source: string;
12
+ readonly retrievedAt: string;
13
+ }
14
+ /**
15
+ * Validate `rows` against the named canonical schema.
16
+ *
17
+ * Returns `{ rowCount, source, retrievedAt }` on success.
18
+ *
19
+ * Throws `SchemaValidationError` (with Python-vocabulary `violations[]`) on
20
+ * structural / dtype / enum / required-column failures, OR
21
+ * `SourceMismatchError` when per-row source identity drifts.
22
+ *
23
+ * @throws SchemaValidationError — see violations vocabulary in the module header.
24
+ * @throws SourceMismatchError — per-row `source` column doesn't match resolved source.
25
+ * @throws TypeError — `allowSourceDrift` is non-string.
26
+ * @throws RangeError — `allowSourceDrift` is empty after trim.
27
+ */
28
+ declare function validateRows<Row extends Record<string, unknown> = Record<string, unknown>>(rows: ReadonlyArray<Row>, schemaId: string, opts?: ValidateOptions): ValidateResult;
29
+
30
+ export { type ValidateOptions, type ValidateResult, validateRows };