@dclimate/zarr-map 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +374 -0
- package/dist/core/index.cjs +1603 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +50 -0
- package/dist/core/index.d.ts +50 -0
- package/dist/core/index.js +1575 -0
- package/dist/core/index.js.map +1 -0
- package/dist/dclimate/index.cjs +1859 -0
- package/dist/dclimate/index.cjs.map +1 -0
- package/dist/dclimate/index.d.cts +80 -0
- package/dist/dclimate/index.d.ts +80 -0
- package/dist/dclimate/index.js +1856 -0
- package/dist/dclimate/index.js.map +1 -0
- package/dist/index.cjs +3071 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +5 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +3038 -0
- package/dist/index.js.map +1 -0
- package/dist/jaxray-CZWT_ZgD.d.ts +57 -0
- package/dist/jaxray-D_mmLPHk.d.cts +57 -0
- package/dist/react/index.cjs +3953 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +71 -0
- package/dist/react/index.d.ts +71 -0
- package/dist/react/index.js +3945 -0
- package/dist/react/index.js.map +1 -0
- package/dist/renderers/index.cjs +903 -0
- package/dist/renderers/index.cjs.map +1 -0
- package/dist/renderers/index.d.cts +115 -0
- package/dist/renderers/index.d.ts +115 -0
- package/dist/renderers/index.js +899 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/types-DEZwfJNY.d.cts +210 -0
- package/dist/types-DEZwfJNY.d.ts +210 -0
- package/docs/README.md +12 -0
- package/docs/api-design.md +185 -0
- package/docs/architecture.md +246 -0
- package/docs/decision-record-renderer.md +144 -0
- package/docs/package-boundaries.md +50 -0
- package/docs/release-checklist.md +31 -0
- package/package.json +121 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/errors.ts","../src/core/color.ts","../src/core/validation.ts","../src/core/selectors.ts","../src/core/jaxray.ts","../src/core/preflight.ts","../src/core/query.ts","../src/dclimate/index.ts","../src/renderers/maplibre.ts"],"names":["colors","name","numericCoordinates","range","spatialRange","coordinateValues"],"mappings":"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","file":"index.js","sourcesContent":["export type GridErrorCode =\n | \"MISSING_VARIABLE\"\n | \"MISSING_DIMENSION\"\n | \"MISSING_SPATIAL_DIMENSIONS\"\n | \"MISSING_BOUNDS\"\n | \"MISSING_COORDINATES\"\n | \"UNSUPPORTED_DIMENSION\"\n | \"UNSUPPORTED_SELECTOR\"\n | \"UNSUPPORTED_GEOMETRY\"\n | \"UNSUPPORTED_DTYPE\"\n | \"UNSUPPORTED_UNIT\"\n | \"INVALID_COLOR_SCALE\"\n | \"QUERY_TOO_EXPENSIVE\"\n | \"ABORTED\"\n | \"SOURCE_LOAD_FAILED\"\n | \"RENDERER_SETUP_FAILED\"\n | \"CHUNK_LOAD_FAILED\";\n\nexport interface GridErrorDetails {\n code: GridErrorCode;\n message: string;\n cause?: unknown;\n dimension?: string;\n variable?: string;\n sourceId?: string;\n context?: Record<string, unknown>;\n}\n\nexport class GridError extends Error {\n readonly code: GridErrorCode;\n override readonly cause?: unknown;\n readonly dimension?: string;\n readonly variable?: string;\n readonly sourceId?: string;\n readonly context?: Record<string, unknown>;\n\n constructor(details: GridErrorDetails) {\n super(details.message);\n this.name = \"GridError\";\n this.code = details.code;\n this.cause = details.cause;\n this.dimension = details.dimension;\n this.variable = details.variable;\n this.sourceId = details.sourceId;\n this.context = details.context;\n }\n}\n\nexport function isGridError(error: unknown): error is GridError {\n return error instanceof GridError;\n}\n\nexport function toGridError(details: GridErrorDetails | GridError): GridError {\n return details instanceof GridError ? details : new GridError(details);\n}\n","import { GridError } from \"./errors\";\nimport type { ColorPalette, GridColorScale, GridDisplayQuantity } from \"./types\";\n\nexport type RendererColorMap = readonly string[];\n\nconst builtinPalettes: Record<string, RendererColorMap> = {\n viridis: [\"#440154\", \"#31688e\", \"#35b779\", \"#fde725\"],\n inferno: [\"#000004\", \"#57106e\", \"#bc3754\", \"#f98e09\", \"#fcffa4\"],\n magma: [\"#000004\", \"#3b0f70\", \"#8c2981\", \"#de4968\", \"#fe9f6d\", \"#fcfdbf\"],\n plasma: [\"#0d0887\", \"#7e03a8\", \"#cc4778\", \"#f89540\", \"#f0f921\"],\n cividis: [\"#00204c\", \"#31446b\", \"#666870\", \"#958f78\", \"#c6b866\", \"#ffe945\"],\n turbo: [\"#30123b\", \"#466be3\", \"#35ab6b\", \"#faba39\", \"#7a0403\"],\n greys: [\"#000000\", \"#777777\", \"#ffffff\"],\n grays: [\"#000000\", \"#777777\", \"#ffffff\"],\n temperature: [\"#2c5ab4\", \"#67b0f0\", \"#e0e4dc\", \"#ffb266\", \"#cd4434\"],\n precipitation: [\"#bae6fd\", \"#60a5fa\", \"#2563eb\", \"#4f46e5\", \"#6d28d9\"],\n humidity: [\"#374151\", \"#2d5a6e\", \"#1890b0\", \"#2dd4bf\", \"#99f6e4\"],\n vegetation: [\"#f7fee7\", \"#bef264\", \"#4ade80\", \"#15803d\", \"#064e3b\"],\n wind: [\"#e2e8f0\", \"#7dd3fc\", \"#2dd4bf\", \"#14b8a6\"]\n};\n\nexport function validateColorScale(colorScale: GridColorScale): GridColorScale {\n const [min, max] = colorScale.domain;\n\n if (!Number.isFinite(min) || !Number.isFinite(max) || min >= max) {\n throw new GridError({\n code: \"INVALID_COLOR_SCALE\",\n message: \"Color scale domain must be finite and ordered as [min, max].\",\n context: { domain: colorScale.domain }\n });\n }\n\n if (!colorScale.palette) {\n throw new GridError({\n code: \"INVALID_COLOR_SCALE\",\n message: \"Color scale must include a palette name or color stop array.\"\n });\n }\n\n paletteToRendererColorMap(colorScale.palette);\n return colorScale;\n}\n\nexport function colorScaleToRendererOptions(colorScale?: GridColorScale):\n | {\n colormap?: RendererColorMap;\n clim?: readonly [number, number];\n }\n | undefined {\n if (!colorScale) {\n return undefined;\n }\n\n validateColorScale(colorScale);\n return {\n colormap: paletteToRendererColorMap(colorScale.palette),\n clim: colorScale.domain\n };\n}\n\nexport function paletteToRendererColorMap(palette: ColorPalette): RendererColorMap {\n if (typeof palette !== \"string\") {\n if (palette.length < 2) {\n throw new GridError({\n code: \"INVALID_COLOR_SCALE\",\n message: \"Custom color palettes must include at least two color stops.\",\n context: { palette }\n });\n }\n const colors = palette.map((color) => color.trim());\n const invalid = colors.find((color) => color.length === 0);\n if (invalid !== undefined) {\n throw new GridError({\n code: \"INVALID_COLOR_SCALE\",\n message: \"Custom color palettes cannot include empty color stops.\",\n context: { palette }\n });\n }\n return colors;\n }\n\n const normalized = palette.toLowerCase();\n const colors = builtinPalettes[normalized];\n if (!colors) {\n throw new GridError({\n code: \"INVALID_COLOR_SCALE\",\n message: `Unsupported renderer palette \"${palette}\". Use one of: ${Object.keys(builtinPalettes).join(\", \")}.`,\n context: { palette }\n });\n }\n return colors;\n}\n\nexport function colorScaleDisplayDomain(colorScale: GridColorScale): readonly [number, number] {\n const { displayUnit, quantity, unit } = colorScale;\n if (!displayUnit || !unit || displayUnit === unit || !quantity) {\n return colorScale.domain;\n }\n\n return [\n convertDisplayValue(colorScale.domain[0], {\n fromUnit: unit,\n quantity,\n toUnit: displayUnit\n }),\n convertDisplayValue(colorScale.domain[1], {\n fromUnit: unit,\n quantity,\n toUnit: displayUnit\n })\n ];\n}\n\nexport function convertDisplayValue(\n value: number,\n options: {\n fromUnit: string;\n toUnit: string;\n quantity: GridDisplayQuantity;\n }\n): number {\n if (!Number.isFinite(value)) {\n return value;\n }\n\n if (options.quantity === \"temperature\") {\n return temperatureFromKelvin(temperatureToKelvin(value, options.fromUnit), options.toUnit);\n }\n\n return precipitationFromMeters(precipitationToMeters(value, options.fromUnit), options.toUnit);\n}\n\nfunction temperatureToKelvin(value: number, unit: string): number {\n const normalized = normalizeUnit(unit);\n if (normalized === \"k\" || normalized === \"kelvin\") {\n return value;\n }\n if ([\"c\", \"degc\", \"celsius\"].includes(normalized)) {\n return value + 273.15;\n }\n if ([\"f\", \"degf\", \"fahrenheit\"].includes(normalized)) {\n return ((value - 32) * 5) / 9 + 273.15;\n }\n throw unsupportedUnit(unit, \"temperature\");\n}\n\nfunction temperatureFromKelvin(value: number, unit: string): number {\n const normalized = normalizeUnit(unit);\n if (normalized === \"k\" || normalized === \"kelvin\") {\n return value;\n }\n if ([\"c\", \"degc\", \"celsius\"].includes(normalized)) {\n return value - 273.15;\n }\n if ([\"f\", \"degf\", \"fahrenheit\"].includes(normalized)) {\n return ((value - 273.15) * 9) / 5 + 32;\n }\n throw unsupportedUnit(unit, \"temperature\");\n}\n\nfunction precipitationToMeters(value: number, unit: string): number {\n const normalized = normalizeUnit(unit);\n if ([\"m\", \"meter\", \"meters\"].includes(normalized)) {\n return value;\n }\n if ([\"mm\", \"millimeter\", \"millimeters\"].includes(normalized)) {\n return value / 1000;\n }\n if (isKilogramPerSquareMeter(normalized)) {\n return value / 1000;\n }\n if ([\"in\", \"inch\", \"inches\"].includes(normalized)) {\n return value * 0.0254;\n }\n throw unsupportedUnit(unit, \"precipitation\");\n}\n\nfunction precipitationFromMeters(value: number, unit: string): number {\n const normalized = normalizeUnit(unit);\n if ([\"m\", \"meter\", \"meters\"].includes(normalized)) {\n return value;\n }\n if ([\"mm\", \"millimeter\", \"millimeters\"].includes(normalized)) {\n return value * 1000;\n }\n if (isKilogramPerSquareMeter(normalized)) {\n return value * 1000;\n }\n if ([\"in\", \"inch\", \"inches\"].includes(normalized)) {\n return value / 0.0254;\n }\n throw unsupportedUnit(unit, \"precipitation\");\n}\n\nfunction isKilogramPerSquareMeter(normalizedUnit: string): boolean {\n const compact = normalizedUnit.replace(/\\s+/g, \"\");\n return [\"kgm**-2\", \"kgm^-2\", \"kgm-2\", \"kg/m2\", \"kg/m^2\"].includes(compact);\n}\n\nfunction normalizeUnit(unit: string): string {\n return unit\n .trim()\n .toLowerCase()\n .replace(/^degrees?_?/, \"deg\")\n .replace(\"°\", \"deg\");\n}\n\nfunction unsupportedUnit(unit: string, quantity: GridDisplayQuantity): GridError {\n return new GridError({\n code: \"UNSUPPORTED_UNIT\",\n message: `Unsupported ${quantity} display unit \"${unit}\".`,\n context: { quantity, unit }\n });\n}\n","import { GridError } from \"./errors\";\nimport type {\n GridDataSource,\n GridDimension,\n GridSourceValidationResult,\n GridSpatialDimensions,\n GridVariable\n} from \"./types\";\n\nconst xAliases = new Set([\"x\", \"lon\", \"lng\", \"longitude\"]);\nconst yAliases = new Set([\"y\", \"lat\", \"latitude\"]);\nconst numericDtypes = new Set([\n \"int8\",\n \"uint8\",\n \"int16\",\n \"uint16\",\n \"int32\",\n \"uint32\",\n \"float32\",\n \"float64\",\n \"i1\",\n \"u1\",\n \"i2\",\n \"u2\",\n \"i4\",\n \"u4\",\n \"f4\",\n \"f8\"\n]);\n\nexport function findVariable(\n source: GridDataSource,\n variableName: string\n): GridVariable | undefined {\n return source.variables.find(\n (variable) => variable.name === variableName || variable.path === variableName\n );\n}\n\nexport function findDimension(\n source: GridDataSource,\n dimensionName: string\n): GridDimension | undefined {\n return source.dimensions.find((dimension) => dimension.name === dimensionName);\n}\n\nexport function inferSpatialDimensions(\n source: GridDataSource,\n variableName = source.variables[0]?.name\n): GridSpatialDimensions | undefined {\n const variable = variableName ? findVariable(source, variableName) : source.variables[0];\n if (source.spatialDimensions) {\n return variableIncludesSpatialDimensions(variable, source.spatialDimensions)\n ? source.spatialDimensions\n : undefined;\n }\n\n const candidateNames =\n variable?.dimensions ?? source.dimensions.map((dimension) => dimension.name);\n let x: string | undefined;\n let y: string | undefined;\n\n for (const name of candidateNames) {\n const dimension = findDimension(source, name);\n const normalizedName = name.toLowerCase();\n const standardName = String(dimension?.standardName ?? \"\").toLowerCase();\n const kind = dimension?.kind;\n\n if (!x && (kind === \"x\" || xAliases.has(normalizedName) || standardName === \"longitude\")) {\n x = name;\n }\n\n if (!y && (kind === \"y\" || yAliases.has(normalizedName) || standardName === \"latitude\")) {\n y = name;\n }\n }\n\n return x && y ? { x, y } : undefined;\n}\n\nfunction variableIncludesSpatialDimensions(\n variable: GridVariable | undefined,\n spatialDimensions: GridSpatialDimensions\n): boolean {\n if (!variable) {\n return false;\n }\n return (\n variable.dimensions.includes(spatialDimensions.x) &&\n variable.dimensions.includes(spatialDimensions.y)\n );\n}\n\nexport function validateGridDataSource(\n source: GridDataSource,\n options: { variable?: string; requireRenderable?: boolean } = {}\n): GridSourceValidationResult {\n const errors: GridError[] = [];\n const warnings: string[] = [];\n\n if (source.variables.length === 0) {\n errors.push(\n new GridError({\n code: \"MISSING_VARIABLE\",\n message: \"GridDataSource must expose at least one variable.\",\n sourceId: source.id\n })\n );\n }\n\n const variable = options.variable ? findVariable(source, options.variable) : source.variables[0];\n if (options.variable && !variable) {\n errors.push(\n new GridError({\n code: \"MISSING_VARIABLE\",\n message: `Variable \"${options.variable}\" is not present in the grid source.`,\n sourceId: source.id,\n variable: options.variable\n })\n );\n }\n\n for (const dimension of source.dimensions) {\n if (!Number.isInteger(dimension.size) || dimension.size <= 0) {\n errors.push(\n new GridError({\n code: \"UNSUPPORTED_DIMENSION\",\n message: `Dimension \"${dimension.name}\" must have a positive integer size.`,\n dimension: dimension.name,\n sourceId: source.id\n })\n );\n }\n\n if (dimension.coordinates && dimension.coordinates.length !== dimension.size) {\n errors.push(\n new GridError({\n code: \"MISSING_COORDINATES\",\n message: `Dimension \"${dimension.name}\" has ${dimension.coordinates.length} coordinates for size ${dimension.size}.`,\n dimension: dimension.name,\n sourceId: source.id\n })\n );\n }\n }\n\n if (variable) {\n if (!isNumericDType(variable.dtype)) {\n errors.push(\n new GridError({\n code: \"UNSUPPORTED_DTYPE\",\n message: `Variable \"${variable.name}\" has unsupported dtype \"${variable.dtype}\".`,\n variable: variable.name,\n sourceId: source.id\n })\n );\n }\n\n if (variable.dimensions.length !== variable.shape.length) {\n errors.push(\n new GridError({\n code: \"MISSING_DIMENSION\",\n message: `Variable \"${variable.name}\" has ${variable.dimensions.length} dimensions but ${variable.shape.length} shape entries.`,\n variable: variable.name,\n sourceId: source.id\n })\n );\n }\n\n variable.dimensions.forEach((dimensionName, index) => {\n const dimension = findDimension(source, dimensionName);\n if (!dimension) {\n errors.push(\n new GridError({\n code: \"MISSING_DIMENSION\",\n message: `Variable \"${variable.name}\" references missing dimension \"${dimensionName}\".`,\n dimension: dimensionName,\n variable: variable.name,\n sourceId: source.id\n })\n );\n return;\n }\n\n const expectedSize = variable.shape[index];\n if (expectedSize !== dimension.size) {\n warnings.push(\n `Variable \"${variable.name}\" shape for dimension \"${dimensionName}\" is ${expectedSize}, but the dimension size is ${dimension.size}.`\n );\n }\n });\n\n const spatialDimensions = inferSpatialDimensions(source, variable.name);\n if (!spatialDimensions) {\n errors.push(\n new GridError({\n code: \"MISSING_SPATIAL_DIMENSIONS\",\n message: `Variable \"${variable.name}\" needs latitude/longitude or x/y spatial dimensions before it can render.`,\n variable: variable.name,\n sourceId: source.id\n })\n );\n }\n\n if (options.requireRenderable && !source.bounds) {\n errors.push(\n new GridError({\n code: \"MISSING_BOUNDS\",\n message:\n \"Renderable grid sources must include explicit [west, south, east, north] bounds.\",\n variable: variable.name,\n sourceId: source.id\n })\n );\n }\n }\n\n return {\n ok: errors.length === 0,\n errors,\n warnings\n };\n}\n\nexport function assertValidGridDataSource(\n source: GridDataSource,\n options: { variable?: string; requireRenderable?: boolean } = {}\n): void {\n const result = validateGridDataSource(source, options);\n if (!result.ok) {\n throw result.errors[0];\n }\n}\n\nexport function isNumericDType(dtype: string): boolean {\n return numericDtypes.has(dtype.toLowerCase()) || /^[<>|]?[ifu]\\d+$/.test(dtype.toLowerCase());\n}\n","import { GridError } from \"./errors\";\nimport { findDimension, findVariable } from \"./validation\";\nimport type {\n DebounceHandle,\n GridCoordinateValue,\n GridDataSource,\n GridDimension,\n GridSelectorInput,\n GridSelectors,\n NormalizedGridSelectors,\n NormalizedSelector,\n TimeCoordinate\n} from \"./types\";\n\nexport function indexSelector(index: number): GridSelectorInput {\n return { kind: \"index\", index };\n}\n\nexport function coordinateSelector(value: GridCoordinateValue): GridSelectorInput {\n return { kind: \"coordinate\", value };\n}\n\nexport function isoTimeSelector(iso: string): GridSelectorInput {\n return { kind: \"isoTime\", iso };\n}\n\nexport function normalizeSelectors(\n source: GridDataSource,\n variableName: string,\n selectors: GridSelectors = {}\n): NormalizedGridSelectors {\n const variable = findVariable(source, variableName);\n if (!variable) {\n throw new GridError({\n code: \"MISSING_VARIABLE\",\n message: `Variable \"${variableName}\" is not present in the grid source.`,\n variable: variableName,\n sourceId: source.id\n });\n }\n\n const normalized: NormalizedGridSelectors = {};\n for (const dimensionName of variable.dimensions) {\n const dimension = findDimension(source, dimensionName);\n if (!dimension) {\n throw new GridError({\n code: \"MISSING_DIMENSION\",\n message: `Selector normalization cannot find dimension \"${dimensionName}\".`,\n dimension: dimensionName,\n variable: variableName,\n sourceId: source.id\n });\n }\n\n const input = selectors[dimensionName];\n if (input === undefined) {\n normalized[dimensionName] = defaultSelectorForDimension(dimension);\n continue;\n }\n\n normalized[dimensionName] = normalizeSelectorValue(dimension, input, source.id);\n }\n\n return normalized;\n}\n\nexport function normalizeSelectorValue(\n dimension: GridDimension,\n input: GridSelectorInput,\n sourceId?: string\n): NormalizedSelector {\n if (input instanceof Date) {\n return { kind: \"coordinate\", value: input.toISOString() };\n }\n\n if (typeof input !== \"object\") {\n return normalizeCoordinateSelector(dimension, input, sourceId);\n }\n\n if (input.kind === \"coordinate\") {\n const value = input.value instanceof Date ? input.value.toISOString() : input.value;\n return normalizeCoordinateSelector(dimension, value, sourceId);\n }\n\n if (input.kind === \"index\") {\n assertIndexInRange(dimension, input.index, sourceId);\n const value = dimension.coordinates?.[input.index];\n return {\n kind: \"index\",\n index: input.index,\n value: value instanceof Date ? value.toISOString() : value\n };\n }\n\n if (input.kind === \"isoTime\") {\n const value = findCoordinateForIso(dimension, input.iso);\n return value === undefined\n ? { kind: \"isoTime\", iso: input.iso }\n : { kind: \"isoTime\", iso: input.iso, value };\n }\n\n throw new GridError({\n code: \"UNSUPPORTED_SELECTOR\",\n message: `Unsupported selector for dimension \"${dimension.name}\".`,\n dimension: dimension.name,\n sourceId\n });\n}\n\nexport function toRendererSelectors(\n selectors: NormalizedGridSelectors\n): Record<string, { selected: number | string; type: \"index\" | \"value\" }> {\n const output: Record<string, { selected: number | string; type: \"index\" | \"value\" }> = {};\n\n for (const [dimensionName, selector] of Object.entries(selectors)) {\n if (selector.kind === \"index\") {\n output[dimensionName] = { selected: selector.index, type: \"index\" };\n continue;\n }\n\n if (selector.kind === \"isoTime\") {\n output[dimensionName] = {\n selected: selector.value ?? selector.iso,\n type: \"value\"\n };\n continue;\n }\n\n output[dimensionName] = { selected: selector.value, type: \"value\" };\n }\n\n return output;\n}\n\nexport function selectorToIndex(dimension: GridDimension, selector: NormalizedSelector): number {\n if (selector.kind === \"index\") {\n return selector.index;\n }\n\n const selected = selector.kind === \"isoTime\" ? (selector.value ?? selector.iso) : selector.value;\n const index =\n dimension.coordinates?.findIndex((coordinate) => sameCoordinate(coordinate, selected)) ?? -1;\n if (index >= 0) {\n return index;\n }\n\n throw new GridError({\n code: \"UNSUPPORTED_SELECTOR\",\n message: `Selector value \"${String(selected)}\" does not match coordinates for dimension \"${dimension.name}\".`,\n dimension: dimension.name\n });\n}\n\nexport function listTimeCoordinates(\n source: GridDataSource,\n dimensionName = \"time\"\n): readonly TimeCoordinate[] {\n const dimension = findDimension(source, dimensionName);\n if (!dimension) {\n throw new GridError({\n code: \"MISSING_DIMENSION\",\n message: `Time dimension \"${dimensionName}\" is not present in the grid source.`,\n dimension: dimensionName,\n sourceId: source.id\n });\n }\n\n if (!dimension.coordinates) {\n throw new GridError({\n code: \"MISSING_COORDINATES\",\n message: `Time dimension \"${dimensionName}\" needs coordinate values for a slider.`,\n dimension: dimensionName,\n sourceId: source.id\n });\n }\n\n const coordinates = dimension.coordinates.map((coordinate, index) => {\n const decoded = decodeTimeCoordinate(coordinate, dimension.units);\n const forecastLabel = formatForecastStepLabel(source, dimension, coordinate);\n return {\n index,\n value: decoded.value,\n label:\n forecastLabel ??\n (decoded.iso ? formatHumanUtcDateTime(decoded.iso) : String(decoded.value)),\n ...(decoded.iso ? { iso: decoded.iso } : {})\n };\n });\n\n assertMonotonicTimeCoordinates(coordinates, dimension.name, source.id);\n return coordinates;\n}\n\nfunction formatForecastStepLabel(\n source: GridDataSource,\n dimension: GridDimension,\n coordinate: GridCoordinateValue\n): string | undefined {\n if (!isForecastStepDimension(dimension.name)) {\n return undefined;\n }\n\n const reference = forecastReferenceDate(source);\n const offsetMs = forecastStepOffsetMs(coordinate, dimension.units);\n if (!reference || offsetMs === undefined) {\n return undefined;\n }\n\n return formatHumanUtcDateTime(new Date(reference.getTime() + offsetMs));\n}\n\nfunction isForecastStepDimension(name: string): boolean {\n return normalizeDimensionName(name) === \"step\";\n}\n\nfunction forecastReferenceDate(source: GridDataSource): Date | undefined {\n const referenceDimension = source.dimensions.find((dimension) =>\n [\"forecastreferencetime\", \"forecastreferencedate\"].includes(\n normalizeDimensionName(dimension.name)\n )\n );\n if (!referenceDimension) {\n return undefined;\n }\n\n const referenceCoordinate = referenceDimension.coordinates?.[0];\n if (referenceCoordinate === undefined) {\n return undefined;\n }\n\n const decoded = decodeTimeCoordinate(referenceCoordinate, referenceDimension.units);\n const referenceValue =\n decoded.iso ?? (typeof decoded.value === \"string\" ? decoded.value : undefined);\n if (!referenceValue) {\n return undefined;\n }\n\n const date = new Date(referenceValue);\n return Number.isNaN(date.getTime()) ? undefined : date;\n}\n\nfunction forecastStepOffsetMs(coordinate: GridCoordinateValue, units?: string): number | undefined {\n const value = numericCoordinateValue(coordinate);\n if (value === undefined) {\n return undefined;\n }\n\n return value * forecastStepUnitMultiplier(units);\n}\n\nfunction numericCoordinateValue(coordinate: GridCoordinateValue): number | undefined {\n if (typeof coordinate === \"number\") {\n return Number.isFinite(coordinate) ? coordinate : undefined;\n }\n if (typeof coordinate !== \"string\") {\n return undefined;\n }\n\n const value = Number(coordinate);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction forecastStepUnitMultiplier(units?: string): number {\n const normalizedUnits = units?.toLowerCase() ?? \"\";\n if (normalizedUnits.includes(\"second\")) {\n return 1_000;\n }\n if (normalizedUnits.includes(\"minute\")) {\n return 60_000;\n }\n if (normalizedUnits.includes(\"day\")) {\n return 86_400_000;\n }\n return 3_600_000;\n}\n\nfunction normalizeDimensionName(name: string): string {\n return name.toLowerCase().replace(/[_\\-\\s]+/g, \"\");\n}\n\nconst UTC_MONTH_LABELS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n] as const;\n\nfunction formatHumanUtcDateTime(input: Date | string): string {\n const date = input instanceof Date ? input : new Date(input);\n return [\n UTC_MONTH_LABELS[date.getUTCMonth()],\n \" \",\n date.getUTCDate(),\n \", \",\n date.getUTCFullYear(),\n \", \",\n padDatePart(date.getUTCHours()),\n \":\",\n padDatePart(date.getUTCMinutes()),\n \" UTC\"\n ].join(\"\");\n}\n\nfunction padDatePart(value: number): string {\n return String(value).padStart(2, \"0\");\n}\n\nexport function createDebouncer<TArgs extends readonly unknown[]>(\n callback: (...args: TArgs) => void,\n waitMs: number\n): DebounceHandle<TArgs> {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n let lastArgs: TArgs | undefined;\n\n const flush = () => {\n if (!lastArgs) {\n return;\n }\n const args = lastArgs;\n lastArgs = undefined;\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n callback(...args);\n };\n\n return {\n call(...args: TArgs) {\n lastArgs = args;\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(flush, waitMs);\n },\n flush,\n cancel() {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = undefined;\n lastArgs = undefined;\n }\n };\n}\n\nfunction defaultSelectorForDimension(dimension: GridDimension): NormalizedSelector {\n const firstValue = dimension.coordinates?.[0];\n if (firstValue !== undefined) {\n return {\n kind: \"coordinate\",\n value: firstValue instanceof Date ? firstValue.toISOString() : firstValue\n };\n }\n return { kind: \"index\", index: 0 };\n}\n\nfunction normalizeCoordinateSelector(\n dimension: GridDimension,\n value: number | string,\n sourceId?: string\n): NormalizedSelector {\n if (\n dimension.coordinates &&\n !dimension.coordinates.some((coordinate) => sameCoordinate(coordinate, value))\n ) {\n throw new GridError({\n code: \"UNSUPPORTED_SELECTOR\",\n message: `Selector value \"${String(value)}\" does not match coordinates for dimension \"${dimension.name}\".`,\n dimension: dimension.name,\n sourceId\n });\n }\n\n return { kind: \"coordinate\", value };\n}\n\nfunction assertIndexInRange(dimension: GridDimension, index: number, sourceId?: string): void {\n if (!Number.isInteger(index) || index < 0 || index >= dimension.size) {\n throw new GridError({\n code: \"UNSUPPORTED_SELECTOR\",\n message: `Index selector ${index} is outside dimension \"${dimension.name}\" size ${dimension.size}.`,\n dimension: dimension.name,\n sourceId\n });\n }\n}\n\nfunction findCoordinateForIso(dimension: GridDimension, iso: string): number | string | undefined {\n return dimension.coordinates\n ?.map((coordinate) => decodeTimeCoordinate(coordinate, dimension.units))\n .find((coordinate) => coordinate.iso === iso || coordinate.value === iso)?.value;\n}\n\nfunction decodeTimeCoordinate(\n coordinate: GridCoordinateValue,\n units?: string\n): { value: number | string; iso?: string } {\n if (coordinate instanceof Date) {\n return { value: coordinate.toISOString(), iso: coordinate.toISOString() };\n }\n\n if (typeof coordinate === \"string\") {\n const date = new Date(coordinate);\n return Number.isNaN(date.getTime())\n ? { value: coordinate }\n : { value: coordinate, iso: date.toISOString() };\n }\n\n const cfTime = decodeCfTime(coordinate, units);\n return cfTime ? { value: coordinate, iso: cfTime } : { value: coordinate };\n}\n\nfunction decodeCfTime(value: number, units?: string): string | undefined {\n if (!units) {\n return undefined;\n }\n\n const match =\n /^(seconds|minutes|hours|days) since ([0-9]{4}-[0-9]{2}-[0-9]{2})(?:[ T]([0-9:.Z+-]+))?/i.exec(\n units\n );\n if (!match) {\n return undefined;\n }\n\n const unit = match[1]?.toLowerCase();\n const date = match[2];\n const time = match[3] ?? \"00:00:00Z\";\n const origin = new Date(`${date}T${time.replace(/Z?$/, \"Z\")}`);\n if (Number.isNaN(origin.getTime())) {\n return undefined;\n }\n\n const multiplier =\n unit === \"seconds\"\n ? 1_000\n : unit === \"minutes\"\n ? 60_000\n : unit === \"hours\"\n ? 3_600_000\n : 86_400_000;\n return new Date(origin.getTime() + value * multiplier).toISOString();\n}\n\nfunction assertMonotonicTimeCoordinates(\n coordinates: readonly TimeCoordinate[],\n dimensionName: string,\n sourceId?: string\n): void {\n let direction: \"ascending\" | \"descending\" | undefined;\n\n for (let index = 1; index < coordinates.length; index += 1) {\n const previous = comparableTimeValue(coordinates[index - 1]);\n const current = comparableTimeValue(coordinates[index]);\n if (previous === current) {\n throw new GridError({\n code: \"UNSUPPORTED_DIMENSION\",\n message: `Time dimension \"${dimensionName}\" has duplicate coordinate values.`,\n dimension: dimensionName,\n sourceId\n });\n }\n\n const pairDirection = current > previous ? \"ascending\" : \"descending\";\n direction ??= pairDirection;\n if (pairDirection !== direction) {\n throw new GridError({\n code: \"UNSUPPORTED_DIMENSION\",\n message: `Time dimension \"${dimensionName}\" must be monotonic for slider controls.`,\n dimension: dimensionName,\n sourceId\n });\n }\n }\n}\n\nfunction comparableTimeValue(coordinate: TimeCoordinate | undefined): number {\n if (!coordinate) {\n return 0;\n }\n if (coordinate.iso) {\n return new Date(coordinate.iso).getTime();\n }\n if (typeof coordinate.value === \"number\") {\n return coordinate.value;\n }\n const parsed = new Date(coordinate.value).getTime();\n return Number.isNaN(parsed) ? coordinate.index : parsed;\n}\n\nfunction sameCoordinate(left: GridCoordinateValue, right: number | string): boolean {\n const normalizedLeft = left instanceof Date ? left.toISOString() : left;\n return normalizedLeft === right || String(normalizedLeft) === String(right);\n}\n","import { GridError } from \"./errors\";\nimport { indexSelector, normalizeSelectors, selectorToIndex } from \"./selectors\";\nimport { assertValidGridDataSource, findDimension, inferSpatialDimensions } from \"./validation\";\nimport type {\n GridBounds,\n GridDataSource,\n GridDimension,\n GridReadableStore,\n GridSelectorInput,\n GridSlice,\n GridVariable,\n NormalizedGridSelectors\n} from \"./types\";\n\nexport interface JaxrayArrayLike {\n name?: string;\n dims?: readonly string[];\n dimensions?: readonly string[];\n shape?: readonly number[];\n chunks?: readonly number[];\n dtype?: string;\n attrs?: Record<string, unknown>;\n coords?: Record<\n string,\n readonly unknown[] | { values?: readonly unknown[]; data?: readonly unknown[] }\n >;\n data?: ArrayLike<number>;\n values?: ArrayLike<number>;\n get?: (selection: Record<string, number>) => Promise<number> | number;\n isel?: (selection: Record<string, number>) => Promise<JaxrayArrayLike> | JaxrayArrayLike;\n compute?: () => Promise<JaxrayArrayLike> | JaxrayArrayLike;\n isLazy?: boolean;\n}\n\nexport interface JaxrayDatasetLike {\n id?: string;\n attrs?: Record<string, unknown>;\n data_vars?: Record<string, JaxrayArrayLike> | Map<string, JaxrayArrayLike>;\n dataVars?: Record<string, JaxrayArrayLike> | Map<string, JaxrayArrayLike> | readonly string[];\n variables?: Record<string, JaxrayArrayLike> | Map<string, JaxrayArrayLike>;\n coords?:\n | Record<\n string,\n readonly unknown[] | { values?: readonly unknown[]; data?: readonly unknown[] }\n >\n | Map<string, readonly unknown[] | { values?: readonly unknown[]; data?: readonly unknown[] }>;\n sizes?: Record<string, number> | Map<string, number>;\n getVariable?: (name: string) => JaxrayArrayLike;\n store?: GridReadableStore;\n}\n\nexport interface CreateJaxraySourceOptions {\n id?: string;\n label?: string;\n source?: string;\n store?: GridReadableStore;\n bounds?: GridBounds;\n crs?: string;\n proj4?: string;\n zarrVersion?: 2 | 3;\n spatialDimensions?: { x: string; y: string };\n dimensions?: Partial<Record<string, Partial<GridDimension>>>;\n variables?: Partial<Record<string, Partial<GridVariable>>>;\n}\n\nexport function createJaxraySource(\n input: JaxrayDatasetLike | JaxrayArrayLike,\n options: CreateJaxraySourceOptions = {}\n): GridDataSource {\n const dataset = isDatasetLike(input) ? input : arrayToDataset(input);\n const variables = inferVariables(dataset, options);\n const dimensions = inferDimensions(dataset, variables, options);\n const source: GridDataSource = {\n id: options.id ?? dataset.id,\n label: options.label,\n source: options.source,\n store: options.store ?? dataset.store,\n zarrVersion: options.zarrVersion,\n crs: options.crs ?? stringAttr(dataset.attrs, \"crs\") ?? \"EPSG:4326\",\n proj4: options.proj4 ?? stringAttr(dataset.attrs, \"proj4\"),\n bounds: options.bounds ?? inferBounds(dimensions, dataset.attrs),\n spatialDimensions: options.spatialDimensions,\n dimensions,\n variables,\n metadata: dataset.attrs,\n readSlice: async (request) =>\n readJaxraySlice(dataset, source, request.variable, request.selectors)\n };\n\n const firstSpatialVariable = variables.find((variable) =>\n inferSpatialDimensions(source, variable.name)\n );\n source.spatialDimensions =\n options.spatialDimensions ??\n inferSpatialDimensions(source) ??\n (firstSpatialVariable ? inferSpatialDimensions(source, firstSpatialVariable.name) : undefined);\n assertValidGridDataSource(source, {\n variable: firstSpatialVariable?.name ?? variables[0]?.name\n });\n return source;\n}\n\nfunction isDatasetLike(input: JaxrayDatasetLike | JaxrayArrayLike): input is JaxrayDatasetLike {\n return (\n \"data_vars\" in input ||\n \"dataVars\" in input ||\n (\"variables\" in input && !(\"shape\" in input)) ||\n \"sizes\" in input\n );\n}\n\nfunction arrayToDataset(array: JaxrayArrayLike): JaxrayDatasetLike {\n const name = array.name ?? \"variable\";\n return {\n data_vars: { [name]: array },\n coords: array.coords,\n attrs: array.attrs\n };\n}\n\nfunction inferVariables(\n dataset: JaxrayDatasetLike,\n options: CreateJaxraySourceOptions\n): GridVariable[] {\n return Array.from(variableEntries(dataset)).map(([name, array]) => {\n const dimensions = array.dims ?? array.dimensions;\n if (!dimensions) {\n throw new GridError({\n code: \"MISSING_DIMENSION\",\n message: `Jaxray variable \"${name}\" does not expose dims/dimensions metadata.`,\n variable: name\n });\n }\n\n const shape =\n array.shape ?? dimensions.map((dimensionName) => dimensionSize(dataset, dimensionName));\n if (!shape) {\n throw new GridError({\n code: \"MISSING_DIMENSION\",\n message: `Jaxray variable \"${name}\" does not expose shape metadata.`,\n variable: name\n });\n }\n\n const override = options.variables?.[name] ?? {};\n return {\n name,\n path: stringAttr(array.attrs, \"path\"),\n dtype: override.dtype ?? array.dtype ?? stringAttr(array.attrs, \"dtype\") ?? \"float32\",\n dimensions,\n shape,\n chunks: override.chunks ?? array.chunks,\n units: override.units ?? stringAttr(array.attrs, \"units\"),\n longName: override.longName ?? stringAttr(array.attrs, \"long_name\"),\n standardName: override.standardName ?? stringAttr(array.attrs, \"standard_name\"),\n fillValue:\n override.fillValue ??\n numberAttr(array.attrs, \"_FillValue\") ??\n numberAttr(array.attrs, \"fill_value\") ??\n null,\n scaleFactor: override.scaleFactor ?? numberAttr(array.attrs, \"scale_factor\"),\n addOffset: override.addOffset ?? numberAttr(array.attrs, \"add_offset\"),\n attrs: array.attrs\n };\n });\n}\n\nfunction inferDimensions(\n dataset: JaxrayDatasetLike,\n variables: readonly GridVariable[],\n options: CreateJaxraySourceOptions\n): GridDimension[] {\n const dimensions = new Map<string, GridDimension>();\n const coords = dataset.coords;\n\n for (const variable of variables) {\n variable.dimensions.forEach((name, index) => {\n const existing = dimensions.get(name);\n const coordinates = normalizeCoordinateArray(coordinateValue(coords, name));\n const override = options.dimensions?.[name] ?? {};\n const inferredKind = inferDimensionKind(name);\n const size = variable.shape[index] ?? coordinates?.length ?? 0;\n\n dimensions.set(name, {\n ...existing,\n name,\n size: override.size ?? existing?.size ?? size,\n kind: override.kind ?? existing?.kind ?? inferredKind,\n coordinates: override.coordinates ?? existing?.coordinates ?? coordinates,\n units: override.units ?? existing?.units,\n calendar: override.calendar ?? existing?.calendar,\n longName: override.longName ?? existing?.longName,\n standardName: override.standardName ?? existing?.standardName,\n ascending: override.ascending ?? existing?.ascending ?? inferAscending(coordinates),\n attrs: override.attrs ?? existing?.attrs\n });\n });\n }\n\n return Array.from(dimensions.values());\n}\n\nfunction inferDimensionKind(name: string): GridDimension[\"kind\"] {\n const normalized = name.toLowerCase();\n if ([\"lon\", \"lng\", \"longitude\", \"x\"].includes(normalized)) {\n return \"x\";\n }\n if ([\"lat\", \"latitude\", \"y\"].includes(normalized)) {\n return \"y\";\n }\n if ([\"time\", \"valid_time\", \"date\"].includes(normalized)) {\n return \"time\";\n }\n if ([\"band\", \"month\"].includes(normalized)) {\n return \"band\";\n }\n if ([\"level\", \"height\", \"pressure\"].includes(normalized)) {\n return \"vertical\";\n }\n return \"other\";\n}\n\nfunction inferBounds(\n dimensions: readonly GridDimension[],\n attrs?: Record<string, unknown>\n): GridBounds | undefined {\n const attrBounds = attrs?.bounds;\n if (\n Array.isArray(attrBounds) &&\n attrBounds.length === 4 &&\n attrBounds.every((value) => typeof value === \"number\")\n ) {\n return attrBounds as GridBounds;\n }\n\n const x = dimensions.find((dimension) => dimension.kind === \"x\");\n const y = dimensions.find((dimension) => dimension.kind === \"y\");\n const xCoordinates = x?.coordinates?.filter(\n (value): value is number => typeof value === \"number\"\n );\n const yCoordinates = y?.coordinates?.filter(\n (value): value is number => typeof value === \"number\"\n );\n if (!xCoordinates?.length || !yCoordinates?.length) {\n return undefined;\n }\n\n return [\n Math.min(...xCoordinates),\n Math.min(...yCoordinates),\n Math.max(...xCoordinates),\n Math.max(...yCoordinates)\n ];\n}\n\nasync function readJaxraySlice(\n dataset: JaxrayDatasetLike,\n source: GridDataSource,\n variableName: string,\n selectors: Record<string, GridSelectorInput> | NormalizedGridSelectors = {}\n): Promise<GridSlice> {\n const entry = variableEntries(dataset).find(([name]) => name === variableName);\n if (!entry) {\n throw new GridError({\n code: \"MISSING_VARIABLE\",\n message: `Jaxray source cannot read missing variable \"${variableName}\".`,\n variable: variableName,\n sourceId: source.id\n });\n }\n\n const [name, array] = entry;\n const variable = source.variables.find((candidate) => candidate.name === name);\n if (!variable) {\n throw new GridError({\n code: \"MISSING_VARIABLE\",\n message: `Jaxray source metadata is missing variable \"${name}\".`,\n variable: name,\n sourceId: source.id\n });\n }\n\n const normalizedSelectors = isNormalizedSelectors(selectors)\n ? selectors\n : normalizeSelectors(source, variable.name, selectors);\n const selection = variable.dimensions.reduce<Record<string, number>>(\n (accumulator, dimensionName) => {\n const dimension = findDimension(source, dimensionName);\n if (!dimension) {\n return accumulator;\n }\n accumulator[dimensionName] = selectorToIndex(\n dimension,\n normalizedSelectors[dimensionName] ?? { kind: \"index\", index: 0 }\n );\n return accumulator;\n },\n {}\n );\n\n const value = await readArrayValue(array, variable, selection);\n return {\n variable: name,\n selectors: normalizedSelectors,\n dimensions: [],\n shape: [],\n data: [value],\n unit: variable.units,\n fillValue: variable.fillValue\n };\n}\n\nasync function readArrayValue(\n array: JaxrayArrayLike,\n variable: GridVariable,\n selection: Record<string, number>\n): Promise<number> {\n if (array.get) {\n return array.get(selection);\n }\n\n if (array.isel) {\n const selected = await array.isel(selection);\n const computed = selected.isLazy && selected.compute ? await selected.compute() : selected;\n return scalarFromArrayLike(computed.data ?? computed.values);\n }\n\n const data = array.data ?? array.values;\n if (!data) {\n throw new GridError({\n code: \"SOURCE_LOAD_FAILED\",\n message: `Jaxray variable \"${variable.name}\" does not expose readable data for query helpers.`,\n variable: variable.name\n });\n }\n\n let offset = 0;\n let stride = 1;\n for (let index = variable.dimensions.length - 1; index >= 0; index -= 1) {\n const dimensionName = variable.dimensions[index];\n if (!dimensionName) {\n continue;\n }\n offset += (selection[dimensionName] ?? 0) * stride;\n stride *= variable.shape[index] ?? 1;\n }\n\n return data[offset] ?? Number.NaN;\n}\n\nfunction scalarFromArrayLike(value: unknown): number {\n if (typeof value === \"number\") {\n return value;\n }\n if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n const first = Array.from(value as unknown as ArrayLike<unknown>)[0];\n return scalarFromArrayLike(first);\n }\n return Number.NaN;\n}\n\nfunction variableEntries(dataset: JaxrayDatasetLike): [string, JaxrayArrayLike][] {\n if (Array.isArray(dataset.dataVars) && typeof dataset.getVariable === \"function\") {\n return dataset.dataVars.map((name) => [name, dataset.getVariable?.(name) ?? {}]);\n }\n\n if (Array.isArray(dataset.dataVars)) {\n throw new GridError({\n code: \"MISSING_VARIABLE\",\n message: \"Jaxray Dataset exposes dataVars names but no getVariable(name) method.\"\n });\n }\n\n const variables = dataset.data_vars ?? dataset.dataVars ?? dataset.variables ?? {};\n if (variables instanceof Map) {\n return Array.from(variables.entries());\n }\n return Object.entries(variables);\n}\n\nfunction normalizeCoordinateArray(input: unknown): readonly (number | string)[] | undefined {\n const raw = Array.isArray(input)\n ? input\n : ArrayBuffer.isView(input)\n ? Array.from(input as unknown as ArrayLike<unknown>)\n : typeof input === \"object\" &&\n input !== null &&\n \"values\" in input &&\n isArrayLike(input.values)\n ? Array.from(input.values)\n : typeof input === \"object\" && input !== null && \"data\" in input && isArrayLike(input.data)\n ? Array.from(input.data)\n : undefined;\n\n return raw?.filter(\n (value): value is number | string => typeof value === \"number\" || typeof value === \"string\"\n );\n}\n\nfunction coordinateValue(\n coords: JaxrayDatasetLike[\"coords\"] | undefined,\n name: string\n): readonly unknown[] | { values?: readonly unknown[]; data?: readonly unknown[] } | undefined {\n if (!coords) {\n return undefined;\n }\n return coords instanceof Map ? coords.get(name) : coords[name];\n}\n\nfunction dimensionSize(dataset: JaxrayDatasetLike, dimensionName: string): number {\n const sizes = dataset.sizes;\n if (!sizes) {\n return 0;\n }\n return sizes instanceof Map ? (sizes.get(dimensionName) ?? 0) : (sizes[dimensionName] ?? 0);\n}\n\nfunction isArrayLike(value: unknown): value is ArrayLike<unknown> {\n return (\n Array.isArray(value) ||\n ArrayBuffer.isView(value) ||\n (typeof value === \"object\" &&\n value !== null &&\n \"length\" in value &&\n typeof value.length === \"number\")\n );\n}\n\nfunction inferAscending(\n coordinates: readonly (number | string)[] | undefined\n): boolean | undefined {\n if (!coordinates || coordinates.length < 2) {\n return undefined;\n }\n const first = coordinates[0];\n const second = coordinates[1];\n return typeof first === \"number\" && typeof second === \"number\" ? second > first : undefined;\n}\n\nfunction stringAttr(attrs: Record<string, unknown> | undefined, name: string): string | undefined {\n const value = attrs?.[name];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction numberAttr(attrs: Record<string, unknown> | undefined, name: string): number | undefined {\n const value = attrs?.[name];\n return typeof value === \"number\" ? value : undefined;\n}\n\nfunction isNormalizedSelectors(\n selectors: Record<string, GridSelectorInput> | NormalizedGridSelectors\n): selectors is NormalizedGridSelectors {\n return Object.values(selectors).every(\n (value) => typeof value === \"object\" && value !== null && \"kind\" in value\n );\n}\n\nexport { indexSelector };\n","import { GridError } from \"./errors\";\nimport { findDimension, findVariable, inferSpatialDimensions } from \"./validation\";\nimport type {\n GridBounds,\n GridCoordinateValue,\n GridDimension,\n GridRequestPreflight,\n GridRequestPreflightOptions,\n GridTimeRange\n} from \"./types\";\n\nconst dtypeByteSizes: Record<string, number> = {\n int8: 1,\n uint8: 1,\n i1: 1,\n u1: 1,\n int16: 2,\n uint16: 2,\n i2: 2,\n u2: 2,\n int32: 4,\n uint32: 4,\n float32: 4,\n i4: 4,\n u4: 4,\n f4: 4,\n float64: 8,\n f8: 8\n};\n\nexport function preflightGridRequest(options: GridRequestPreflightOptions): GridRequestPreflight {\n const errors: GridError[] = [];\n const warnings: string[] = [];\n const dimensions: Record<string, number> = {};\n const variable = findVariable(options.source, options.variable);\n\n if (!variable) {\n errors.push(\n new GridError({\n code: \"MISSING_VARIABLE\",\n message: `Variable \"${options.variable}\" is not present in the grid source.`,\n sourceId: options.source.id,\n variable: options.variable\n })\n );\n return { ok: false, dimensions, warnings, errors };\n }\n\n const spatialDimensions = inferSpatialDimensions(options.source, variable.name);\n\n for (const dimensionName of variable.dimensions) {\n const dimension = findDimension(options.source, dimensionName);\n if (!dimension) {\n errors.push(\n new GridError({\n code: \"MISSING_DIMENSION\",\n message: `Variable \"${variable.name}\" references missing dimension \"${dimensionName}\".`,\n dimension: dimensionName,\n sourceId: options.source.id,\n variable: variable.name\n })\n );\n continue;\n }\n\n dimensions[dimension.name] = selectedDimensionSize({\n bounds: options.bounds,\n dimension,\n isSpatialX: spatialDimensions?.x === dimension.name,\n isSpatialY: spatialDimensions?.y === dimension.name,\n selectorIsPresent: options.selectors?.[dimension.name] !== undefined,\n sourceBounds: options.source.bounds,\n timeRange: options.timeRange,\n warnings\n });\n }\n\n const cells = Object.values(dimensions).reduce((total, size) => total * size, 1);\n const byteSize = dtypeByteSize(variable.dtype);\n const bytes = byteSize === undefined ? undefined : cells * byteSize;\n\n if (byteSize === undefined) {\n warnings.push(`Variable \"${variable.name}\" has unknown dtype byte size \"${variable.dtype}\".`);\n }\n\n if (options.limits?.maxCells !== undefined && cells > options.limits.maxCells) {\n errors.push(\n new GridError({\n code: \"QUERY_TOO_EXPENSIVE\",\n message: `Grid request would select approximately ${cells} cells, above the limit of ${options.limits.maxCells}.`,\n context: { cells, maxCells: options.limits.maxCells },\n sourceId: options.source.id,\n variable: variable.name\n })\n );\n }\n\n if (\n bytes !== undefined &&\n options.limits?.maxBytes !== undefined &&\n bytes > options.limits.maxBytes\n ) {\n errors.push(\n new GridError({\n code: \"QUERY_TOO_EXPENSIVE\",\n message: `Grid request would read approximately ${bytes} uncompressed bytes, above the limit of ${options.limits.maxBytes}.`,\n context: { bytes, maxBytes: options.limits.maxBytes },\n sourceId: options.source.id,\n variable: variable.name\n })\n );\n }\n\n return {\n ok: errors.length === 0,\n cells,\n bytes,\n dimensions,\n warnings,\n errors\n };\n}\n\nfunction selectedDimensionSize(options: {\n bounds?: GridBounds;\n dimension: GridDimension;\n isSpatialX: boolean;\n isSpatialY: boolean;\n selectorIsPresent: boolean;\n sourceBounds?: GridBounds;\n timeRange?: GridTimeRange;\n warnings: string[];\n}): number {\n if (options.selectorIsPresent) {\n return 1;\n }\n\n if (options.bounds && options.isSpatialX) {\n return spatialCount(options.dimension, options.bounds[0], options.bounds[2], {\n axis: \"x\",\n sourceBounds: options.sourceBounds,\n warnings: options.warnings\n });\n }\n\n if (options.bounds && options.isSpatialY) {\n return spatialCount(options.dimension, options.bounds[1], options.bounds[3], {\n axis: \"y\",\n sourceBounds: options.sourceBounds,\n warnings: options.warnings\n });\n }\n\n if (options.timeRange && options.dimension.kind === \"time\") {\n return timeRangeCount(options.dimension, options.timeRange, options.warnings);\n }\n\n return options.dimension.size;\n}\n\nfunction spatialCount(\n dimension: GridDimension,\n lowerBound: number,\n upperBound: number,\n options: {\n axis: \"x\" | \"y\";\n sourceBounds?: GridBounds;\n warnings: string[];\n }\n): number {\n const low = Math.min(lowerBound, upperBound);\n const high = Math.max(lowerBound, upperBound);\n const numericCoordinates = dimension.coordinates?.filter(\n (coordinate): coordinate is number => typeof coordinate === \"number\"\n );\n\n if (numericCoordinates?.length) {\n return numericCoordinates.filter((coordinate) => coordinate >= low && coordinate <= high)\n .length;\n }\n\n const sourceRange = spatialRange(options.sourceBounds, options.axis);\n if (!sourceRange) {\n options.warnings.push(\n `Dimension \"${dimension.name}\" has no coordinates or source bounds, so preflight used the full dimension size.`\n );\n return dimension.size;\n }\n\n const [sourceLow, sourceHigh] = sourceRange;\n const span = sourceHigh - sourceLow;\n if (span <= 0 || dimension.size <= 0) {\n return 0;\n }\n\n const overlap = Math.max(0, Math.min(high, sourceHigh) - Math.max(low, sourceLow));\n if (overlap === 0) {\n return 0;\n }\n return Math.max(1, Math.min(dimension.size, Math.ceil((overlap / span) * dimension.size)));\n}\n\nfunction timeRangeCount(\n dimension: GridDimension,\n timeRange: GridTimeRange,\n warnings: string[]\n): number {\n if (!dimension.coordinates?.length) {\n warnings.push(\n `Time dimension \"${dimension.name}\" has no coordinates, so preflight used the full time size.`\n );\n return dimension.size;\n }\n\n const start = timeToMillis(timeRange.start, dimension.units);\n const end = timeToMillis(timeRange.end, dimension.units);\n if (start === undefined || end === undefined) {\n warnings.push(\n `Time range for \"${dimension.name}\" could not be parsed, so preflight used the full time size.`\n );\n return dimension.size;\n }\n\n const low = Math.min(start, end);\n const high = Math.max(start, end);\n let count = 0;\n for (const coordinate of dimension.coordinates) {\n const value = timeToMillis(coordinate, dimension.units);\n if (value !== undefined && value >= low && value <= high) {\n count += 1;\n }\n }\n return count;\n}\n\nfunction timeToMillis(value: GridCoordinateValue, units?: string): number | undefined {\n if (value instanceof Date) {\n return value.getTime();\n }\n\n if (typeof value === \"string\") {\n const parsed = Date.parse(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n\n if (typeof value === \"number\") {\n return numericTimeToMillis(value, units);\n }\n\n return undefined;\n}\n\nfunction numericTimeToMillis(value: number, units?: string): number | undefined {\n if (!units) {\n return undefined;\n }\n\n const match = /^(seconds?|minutes?|hours?|days?) since (.+)$/i.exec(units.trim());\n if (!match) {\n return undefined;\n }\n\n const [, unit, epoch] = match;\n if (!unit || !epoch) {\n return undefined;\n }\n\n const epochMillis = Date.parse(epoch);\n if (Number.isNaN(epochMillis)) {\n return undefined;\n }\n\n const multiplier = unit.toLowerCase().startsWith(\"second\")\n ? 1000\n : unit.toLowerCase().startsWith(\"minute\")\n ? 60 * 1000\n : unit.toLowerCase().startsWith(\"hour\")\n ? 60 * 60 * 1000\n : 24 * 60 * 60 * 1000;\n\n return epochMillis + value * multiplier;\n}\n\nfunction spatialRange(\n bounds: GridBounds | undefined,\n axis: \"x\" | \"y\"\n): [number, number] | undefined {\n if (!bounds) {\n return undefined;\n }\n return axis === \"x\" ? [bounds[0], bounds[2]] : [bounds[1], bounds[3]];\n}\n\nfunction dtypeByteSize(dtype: string): number | undefined {\n const normalized = dtype.toLowerCase().replace(/^[<>|]/, \"\");\n return dtypeByteSizes[normalized];\n}\n","import { GridError } from \"./errors\";\nimport { normalizeSelectors } from \"./selectors\";\nimport { findDimension, findVariable, inferSpatialDimensions } from \"./validation\";\nimport type {\n GridBounds,\n GridDataSource,\n GridDimension,\n GridGeometry,\n GridGeometryQueryRequest,\n GridQueryResult,\n GridQuerySample,\n GridSelectors,\n NormalizedGridSelectors\n} from \"./types\";\n\nexport async function queryGrid(request: GridGeometryQueryRequest): Promise<GridQueryResult> {\n if (request.signal?.aborted) {\n throw abortedError();\n }\n\n if (request.source.queryGeometry) {\n return request.source.queryGeometry({\n variable: request.variable,\n geometry: request.geometry,\n selectors: request.selectors,\n maxCells: request.maxCells,\n signal: request.signal\n });\n }\n\n switch (request.geometry.type) {\n case \"Point\":\n return queryPoint(\n request.source,\n request.variable,\n request.geometry.coordinates,\n request.selectors,\n request.signal\n );\n case \"BoundingBox\":\n return queryBoundingBox({\n ...request,\n geometry: request.geometry\n });\n case \"Polygon\":\n return queryPolygon({\n ...request,\n geometry: request.geometry\n });\n default:\n throw new GridError({\n code: \"UNSUPPORTED_GEOMETRY\",\n message: \"Unsupported grid query geometry.\"\n });\n }\n}\n\nexport async function queryPoint(\n source: GridDataSource,\n variableName: string,\n coordinates: [longitude: number, latitude: number],\n selectors: GridSelectors = {},\n signal?: AbortSignal\n): Promise<GridQueryResult> {\n const context = queryContext(source, variableName, selectors);\n const xIndex = nearestCoordinateIndex(context.xDimension, coordinates[0], source.bounds, \"x\");\n const yIndex = nearestCoordinateIndex(context.yDimension, coordinates[1], source.bounds, \"y\");\n const sample = await readSample(source, context, xIndex, yIndex, signal);\n\n return {\n variable: variableName,\n selectors: context.normalizedSelectors,\n geometry: { type: \"Point\", coordinates },\n unit: context.variable.units,\n samples: [sample],\n warnings: []\n };\n}\n\nasync function queryBoundingBox(\n request: Omit<GridGeometryQueryRequest, \"geometry\"> & {\n geometry: Extract<GridGeometry, { type: \"BoundingBox\" }>;\n }\n): Promise<GridQueryResult> {\n const context = queryContext(request.source, request.variable, request.selectors);\n const [west, south, east, north] = request.geometry.bounds;\n const xIndexes = coordinateIndexesInBounds(context.xDimension, west, east);\n const yIndexes = coordinateIndexesInBounds(context.yDimension, south, north);\n const estimatedCells = xIndexes.length * yIndexes.length;\n const maxCells = request.maxCells ?? 10_000;\n\n if (estimatedCells > maxCells) {\n throw new GridError({\n code: \"QUERY_TOO_EXPENSIVE\",\n message: `Bounding-box query would inspect ${estimatedCells} cells, above the limit of ${maxCells}.`,\n context: { estimatedCells, maxCells }\n });\n }\n\n const samples: GridQuerySample[] = [];\n for (const yIndex of yIndexes) {\n for (const xIndex of xIndexes) {\n if (request.signal?.aborted) {\n throw abortedError();\n }\n samples.push(await readSample(request.source, context, xIndex, yIndex, request.signal));\n }\n }\n\n return {\n variable: request.variable,\n selectors: context.normalizedSelectors,\n geometry: request.geometry,\n unit: context.variable.units,\n samples,\n warnings:\n estimatedCells > 1_000\n ? [\"Large bounded query; consider lowering maxCells or querying a coarser grid.\"]\n : []\n };\n}\n\nasync function queryPolygon(\n request: Omit<GridGeometryQueryRequest, \"geometry\"> & {\n geometry: Extract<GridGeometry, { type: \"Polygon\" }>;\n }\n): Promise<GridQueryResult> {\n const bounds = polygonBounds(request.geometry.coordinates);\n const bounded = await queryBoundingBox({\n ...request,\n geometry: { type: \"BoundingBox\", bounds }\n });\n\n return {\n ...bounded,\n geometry: request.geometry,\n samples: bounded.samples.filter((sample) =>\n pointInPolygon(sample.coordinates, request.geometry.coordinates)\n ),\n warnings: [\n ...bounded.warnings,\n \"Polygon queries are evaluated by scanning the polygon bounding box.\"\n ]\n };\n}\n\nfunction queryContext(source: GridDataSource, variableName: string, selectors: GridSelectors = {}) {\n const variable = findVariable(source, variableName);\n if (!variable) {\n throw new GridError({\n code: \"MISSING_VARIABLE\",\n message: `Variable \"${variableName}\" is not present in the grid source.`,\n variable: variableName,\n sourceId: source.id\n });\n }\n\n const spatialDimensions = inferSpatialDimensions(source, variable.name);\n if (!spatialDimensions) {\n throw new GridError({\n code: \"MISSING_SPATIAL_DIMENSIONS\",\n message: `Variable \"${variable.name}\" needs spatial dimensions for map queries.`,\n variable: variable.name,\n sourceId: source.id\n });\n }\n\n const xDimension = findDimension(source, spatialDimensions.x);\n const yDimension = findDimension(source, spatialDimensions.y);\n if (!xDimension || !yDimension) {\n throw new GridError({\n code: \"MISSING_SPATIAL_DIMENSIONS\",\n message: \"Spatial dimensions are missing from the grid source.\",\n variable: variable.name,\n sourceId: source.id\n });\n }\n\n if (!source.readSlice) {\n throw new GridError({\n code: \"SOURCE_LOAD_FAILED\",\n message:\n \"GridDataSource must implement readSlice or queryGeometry before query helpers can read values.\",\n sourceId: source.id,\n variable: variable.name\n });\n }\n\n return {\n variable,\n normalizedSelectors: normalizeSelectors(source, variable.name, selectors),\n xDimension,\n yDimension,\n spatialDimensions\n };\n}\n\nasync function readSample(\n source: GridDataSource,\n context: ReturnType<typeof queryContext>,\n xIndex: number,\n yIndex: number,\n signal?: AbortSignal\n): Promise<GridQuerySample> {\n if (signal?.aborted) {\n throw abortedError();\n }\n\n const selectors = selectorsWithSpatialIndexes(\n context.normalizedSelectors,\n context.spatialDimensions.x,\n xIndex,\n context.spatialDimensions.y,\n yIndex\n );\n const slice = await source.readSlice?.({\n variable: context.variable.name,\n selectors,\n signal\n });\n const rawValue = slice?.data[0];\n const value =\n rawValue === undefined || rawValue === context.variable.fillValue\n ? null\n : rawValue * (context.variable.scaleFactor ?? 1) + (context.variable.addOffset ?? 0);\n\n return {\n coordinates: [\n coordinateAt(context.xDimension, xIndex, source.bounds, \"x\"),\n coordinateAt(context.yDimension, yIndex, source.bounds, \"y\")\n ],\n indexes: {\n [context.spatialDimensions.x]: xIndex,\n [context.spatialDimensions.y]: yIndex\n },\n rawValue: rawValue ?? null,\n value\n };\n}\n\nfunction selectorsWithSpatialIndexes(\n selectors: NormalizedGridSelectors,\n xDimension: string,\n xIndex: number,\n yDimension: string,\n yIndex: number\n): NormalizedGridSelectors {\n return {\n ...selectors,\n [xDimension]: { kind: \"index\", index: xIndex },\n [yDimension]: { kind: \"index\", index: yIndex }\n };\n}\n\nfunction nearestCoordinateIndex(\n dimension: GridDimension,\n value: number,\n bounds: GridBounds | undefined,\n axis: \"x\" | \"y\"\n): number {\n if (!dimension.coordinates) {\n return boundedCoordinateIndex(dimension, value, bounds, axis);\n }\n\n let bestIndex = 0;\n let bestDistance = Number.POSITIVE_INFINITY;\n dimension.coordinates.forEach((coordinate, index) => {\n if (typeof coordinate !== \"number\") {\n return;\n }\n const distance = Math.abs(coordinate - value);\n if (distance < bestDistance) {\n bestDistance = distance;\n bestIndex = index;\n }\n });\n return bestIndex;\n}\n\nfunction coordinateIndexesInBounds(dimension: GridDimension, min: number, max: number): number[] {\n if (!dimension.coordinates) {\n return range(\n clamp(Math.floor(min), 0, dimension.size - 1),\n clamp(Math.ceil(max), 0, dimension.size - 1)\n );\n }\n\n const low = Math.min(min, max);\n const high = Math.max(min, max);\n return dimension.coordinates.reduce<number[]>((indexes, coordinate, index) => {\n if (typeof coordinate === \"number\" && coordinate >= low && coordinate <= high) {\n indexes.push(index);\n }\n return indexes;\n }, []);\n}\n\nfunction coordinateAt(\n dimension: GridDimension,\n index: number,\n bounds: GridBounds | undefined,\n axis: \"x\" | \"y\"\n): number {\n const coordinate = dimension.coordinates?.[index];\n if (typeof coordinate === \"number\") {\n return coordinate;\n }\n return boundedCoordinateAt(dimension, index, bounds, axis);\n}\n\nfunction boundedCoordinateIndex(\n dimension: GridDimension,\n value: number,\n bounds: GridBounds | undefined,\n axis: \"x\" | \"y\"\n): number {\n const range = spatialRange(bounds, axis);\n if (!range) {\n return clamp(Math.round(value), 0, dimension.size - 1);\n }\n const [min, max] = range;\n const span = max - min;\n if (span <= 0 || dimension.size <= 1) {\n return 0;\n }\n const ascending = dimension.ascending !== false;\n const ratio = ascending ? (value - min) / span : (max - value) / span;\n return clamp(Math.round(ratio * (dimension.size - 1)), 0, dimension.size - 1);\n}\n\nfunction boundedCoordinateAt(\n dimension: GridDimension,\n index: number,\n bounds: GridBounds | undefined,\n axis: \"x\" | \"y\"\n): number {\n const range = spatialRange(bounds, axis);\n if (!range || dimension.size <= 1) {\n return index;\n }\n const [min, max] = range;\n const ratio = clamp(index, 0, dimension.size - 1) / (dimension.size - 1);\n return dimension.ascending === false ? max - ratio * (max - min) : min + ratio * (max - min);\n}\n\nfunction spatialRange(\n bounds: GridBounds | undefined,\n axis: \"x\" | \"y\"\n): [number, number] | undefined {\n if (!bounds) {\n return undefined;\n }\n return axis === \"x\" ? [bounds[0], bounds[2]] : [bounds[1], bounds[3]];\n}\n\nfunction range(start: number, end: number): number[] {\n const values: number[] = [];\n for (let index = start; index <= end; index += 1) {\n values.push(index);\n }\n return values;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction polygonBounds(coordinates: readonly [number, number][]): GridBounds {\n return coordinates.reduce<GridBounds>(\n (bounds, [x, y]) => [\n Math.min(bounds[0], x),\n Math.min(bounds[1], y),\n Math.max(bounds[2], x),\n Math.max(bounds[3], y)\n ],\n [\n Number.POSITIVE_INFINITY,\n Number.POSITIVE_INFINITY,\n Number.NEGATIVE_INFINITY,\n Number.NEGATIVE_INFINITY\n ]\n );\n}\n\nfunction pointInPolygon(\n point: readonly [number, number],\n polygon: readonly [number, number][]\n): boolean {\n let inside = false;\n for (\n let index = 0, previous = polygon.length - 1;\n index < polygon.length;\n previous = index, index += 1\n ) {\n const currentPoint = polygon[index];\n const previousPoint = polygon[previous];\n if (!currentPoint || !previousPoint) {\n continue;\n }\n const intersects =\n currentPoint[1] > point[1] !== previousPoint[1] > point[1] &&\n point[0] <\n ((previousPoint[0] - currentPoint[0]) * (point[1] - currentPoint[1])) /\n (previousPoint[1] - currentPoint[1]) +\n currentPoint[0];\n if (intersects) {\n inside = !inside;\n }\n }\n return inside;\n}\n\nfunction abortedError(): GridError {\n return new GridError({\n code: \"ABORTED\",\n message: \"Grid query was aborted.\"\n });\n}\n","import { createJaxraySource, GridError, preflightGridRequest } from \"../core\";\nimport type { CreateJaxraySourceOptions, JaxrayDatasetLike } from \"../core/jaxray\";\nimport type {\n GridBounds,\n GridDataSource,\n GridReadableStore,\n GridRequestPreflightConfig\n} from \"../core/types\";\n\nexport interface DClimateDatasetRequest {\n collection?: string;\n dataset?: string;\n variant?: string;\n cid?: string;\n [key: string]: unknown;\n}\n\nexport interface DClimateClientLike {\n loadDataset?(input: {\n request: DClimateDatasetRequest;\n options?: Record<string, unknown>;\n }): Promise<unknown>;\n selectDataset?(input: {\n request: DClimateDatasetRequest;\n selection: DClimateSourceSelection;\n options?: Record<string, unknown>;\n }): Promise<unknown>;\n getDataset?(request: DClimateDatasetRequest): Promise<unknown>;\n resolveDataset?(request: DClimateDatasetRequest): Promise<unknown>;\n}\n\nexport interface DClimateTimeRange {\n start: Date | string;\n end: Date | string;\n}\n\nexport type DClimateSelectionBounds = readonly [\n west: number,\n south: number,\n east: number,\n north: number\n];\n\nexport interface DClimateBoundsSelectionOptions {\n latitudeKey?: string;\n longitudeKey?: string;\n}\n\nexport interface DClimateBoundsSelection {\n west: number;\n south: number;\n east: number;\n north: number;\n options?: DClimateBoundsSelectionOptions;\n}\n\nexport type DClimateCoordinateSelectionValue =\n | number\n | string\n | Date\n | {\n start: number | string | Date;\n stop: number | string | Date;\n };\n\nexport interface DClimateSourceSelection {\n bounds?: DClimateSelectionBounds | DClimateBoundsSelection;\n boundsOptions?: DClimateBoundsSelectionOptions;\n coordinates?: Record<string, DClimateCoordinateSelectionValue>;\n timeRange?: DClimateTimeRange;\n}\n\nexport type DClimateLoadStage =\n | \"request\"\n | \"client\"\n | \"dataset\"\n | \"selection\"\n | \"store\"\n | \"source\"\n | \"ready\";\n\nexport interface DClimateLoadProgress {\n stage: DClimateLoadStage;\n message: string;\n percent: number;\n byteLength?: number;\n}\n\nexport interface CreateDClimateSourceOptions extends Omit<\n CreateJaxraySourceOptions,\n \"source\" | \"store\" | \"id\"\n> {\n id?: string;\n client?: DClimateClientLike;\n clientOptions?: Record<string, unknown>;\n gatewayUrl?: string;\n source?: string;\n store?: GridReadableStore;\n openIpfsStore?: (\n cid: string,\n options?: Record<string, unknown>\n ) => Promise<GridReadableStore> | GridReadableStore;\n loadDatasetOptions?: Record<string, unknown>;\n onProgress?: (progress: DClimateLoadProgress) => void;\n selection?: DClimateSourceSelection;\n preflight?: GridRequestPreflightConfig;\n}\n\ninterface InMemoryZarrStore extends GridReadableStore {\n byteLength: number;\n}\n\ntype NumericArrayLike = ArrayLike<number>;\n\nconst DEFAULT_TIME_KEYS = [\n \"time\",\n \"valid_time\",\n \"datetime\",\n \"date\",\n \"forecast_reference_time\",\n \"forecast_time\",\n \"analysis_time\",\n \"initial_time\",\n \"verification_time\",\n \"step\",\n \"t\"\n] as const;\n\nexport class DClimateAdapterError extends GridError {\n constructor(\n code: \"catalog\" | \"gateway\" | \"metadata\" | \"unsupported\",\n message: string,\n cause?: unknown,\n context?: Record<string, unknown>\n ) {\n super({\n code: code === \"unsupported\" ? \"UNSUPPORTED_DIMENSION\" : \"SOURCE_LOAD_FAILED\",\n message,\n cause,\n context: {\n adapter: \"dclimate\",\n adapterCode: code,\n ...context\n }\n });\n this.name = \"DClimateAdapterError\";\n }\n}\n\nfunction reportProgress(\n options: CreateDClimateSourceOptions,\n progress: DClimateLoadProgress\n): void {\n options.onProgress?.({\n ...progress,\n percent: Math.max(0, Math.min(100, progress.percent))\n });\n}\n\nfunction runDClimatePreflight(source: GridDataSource, options: CreateDClimateSourceOptions): void {\n const config = options.preflight;\n if (!config) {\n return;\n }\n\n const selectionBounds = options.selection?.bounds\n ? normalizeSelectionBounds(options.selection.bounds, options.selection.boundsOptions).bounds\n : undefined;\n const result = preflightGridRequest({\n bounds: config.bounds ?? selectionBounds,\n limits: config.limits,\n selectors: config.selectors,\n source,\n timeRange: config.timeRange ?? options.selection?.timeRange,\n variable: config.variable ?? source.variables[0]?.name ?? \"\"\n });\n\n config.onResult?.(result);\n if (!result.ok) {\n throw result.errors[0];\n }\n}\n\nexport async function createDClimateSource(\n request: DClimateDatasetRequest,\n options: CreateDClimateSourceOptions = {}\n): Promise<GridDataSource> {\n try {\n reportProgress(options, {\n stage: \"request\",\n message: \"Preparing dClimate request\",\n percent: 2\n });\n const loaded = await loadDClimateDataset(request, options);\n reportProgress(options, {\n stage: \"dataset\",\n message: \"Dataset metadata loaded\",\n percent: 45\n });\n const metadata = extractMetadata(loaded);\n const cid = extractString(loaded, [\"cid\", \"rootCid\", \"hash\"]) ?? metadata?.cid ?? request.cid;\n const dataset = extractDataset(loaded);\n const selectedForRendering = Boolean(options.selection?.bounds);\n\n if (!dataset) {\n const existingStore = options.store ?? extractStore(loaded);\n const hasExternalSource = Boolean(\n existingStore ||\n options.source ||\n request.cid ||\n options.openIpfsStore ||\n options.gatewayUrl\n );\n throw new DClimateAdapterError(\n \"metadata\",\n hasExternalSource\n ? \"dClimate CID/store loading requires dataset metadata before it can be normalized. Provide a dClimate client response with variables, dimensions, coordinates, bounds, CRS, fill values, and units, or use createJaxraySource with explicit metadata overrides.\"\n : \"dClimate response did not include a dataset, readable store, source URL, or CID.\",\n undefined,\n { request, cid, hasStore: Boolean(existingStore), source: options.source }\n );\n }\n\n reportProgress(options, {\n stage: \"source\",\n message: \"Normalizing raster metadata\",\n percent: 55\n });\n const source = createJaxraySource(dataset, {\n ...options,\n id: options.id ?? sourceIdForRequest(request),\n source:\n options.source ??\n (selectedForRendering ? undefined : gatewaySourceForCid(cid, options.gatewayUrl)),\n store: options.store ?? (selectedForRendering ? undefined : extractStore(loaded)),\n label: options.label ?? labelForRequest(request)\n });\n\n runDClimatePreflight(source, options);\n\n reportProgress(options, {\n stage: \"store\",\n message: selectedForRendering ? \"Preparing bounded raster chunks\" : \"Preparing raster source\",\n percent: selectedForRendering ? 62 : 72\n });\n const selectedStore = selectedForRendering ? await createInMemoryZarrStore(dataset) : undefined;\n const selectedStoreByteLength = selectedStore?.byteLength;\n reportProgress(options, {\n stage: \"store\",\n message: selectedForRendering ? \"Prepared bounded raster chunks\" : \"Prepared raster source\",\n percent: selectedForRendering ? 78 : 80,\n byteLength: selectedStoreByteLength\n });\n reportProgress(options, {\n stage: \"source\",\n message: \"Normalizing raster metadata\",\n percent: 84,\n byteLength: selectedStoreByteLength\n });\n const store =\n options.store ??\n selectedStore ??\n (selectedForRendering ? undefined : (source.store ?? extractStore(loaded))) ??\n (!selectedForRendering && cid && (options.gatewayUrl || options.openIpfsStore)\n ? await openStore(cid, options)\n : undefined);\n\n reportProgress(options, {\n stage: \"ready\",\n message: \"dClimate source ready\",\n percent: 100,\n byteLength: selectedStoreByteLength\n });\n\n return {\n ...source,\n store,\n metadata: {\n ...source.metadata,\n dclimate: {\n request,\n cid,\n clientMetadata: metadata,\n gatewayUrl: options.gatewayUrl,\n selectedStoreByteLength\n }\n }\n };\n } catch (error) {\n if (error instanceof DClimateAdapterError || error instanceof GridError) {\n throw error;\n }\n throw new DClimateAdapterError(\n \"catalog\",\n \"Failed to resolve or load the dClimate dataset.\",\n error,\n {\n request\n }\n );\n }\n}\n\nasync function loadDClimateDataset(\n request: DClimateDatasetRequest,\n options: CreateDClimateSourceOptions\n): Promise<unknown> {\n if (options.client) {\n reportProgress(options, {\n stage: \"client\",\n message: \"Using injected dClimate client\",\n percent: 8\n });\n return callClient(options.client, request, options);\n }\n\n if (request.cid && !request.collection && !request.dataset) {\n reportProgress(options, {\n stage: \"dataset\",\n message: \"Using CID dataset reference\",\n percent: 35\n });\n return { cid: request.cid };\n }\n\n reportProgress(options, {\n stage: \"client\",\n message: \"Loading dClimate client\",\n percent: 8\n });\n const module = (await import(\"@dclimate/dclimate-client-js\")) as unknown as {\n DClimateClient?: new (options?: Record<string, unknown>) => DClimateClientLike;\n default?: new (options?: Record<string, unknown>) => DClimateClientLike;\n };\n const Client = module.DClimateClient ?? module.default;\n if (!Client) {\n throw new DClimateAdapterError(\n \"catalog\",\n \"@dclimate/dclimate-client-js did not export DClimateClient.\"\n );\n }\n reportProgress(options, {\n stage: \"dataset\",\n message: \"Resolving dClimate dataset\",\n percent: 18\n });\n return callClient(new Client(options.clientOptions), request, options);\n}\n\nasync function callClient(\n client: DClimateClientLike,\n request: DClimateDatasetRequest,\n options: CreateDClimateSourceOptions\n): Promise<unknown> {\n if (options.selection?.bounds && client.loadDataset) {\n return loadBoundedDataset(client, request, options);\n }\n\n if (options.selection) {\n if (client.selectDataset) {\n return client.selectDataset({\n request,\n selection: options.selection,\n options: {\n ...options.loadDatasetOptions,\n gatewayUrl: options.gatewayUrl,\n returnJaxrayDataset: false\n }\n });\n }\n\n if (options.selection.bounds) {\n return loadBoundedDataset(client, request, options);\n }\n\n throw new DClimateAdapterError(\n \"unsupported\",\n \"Injected dClimate client must expose selectDataset when source selection is requested.\"\n );\n }\n\n if (client.loadDataset) {\n return client.loadDataset({\n request,\n options: {\n ...options.loadDatasetOptions,\n gatewayUrl: options.gatewayUrl,\n returnJaxrayDataset: true\n }\n });\n }\n if (client.getDataset) {\n return client.getDataset(request);\n }\n if (client.resolveDataset) {\n return client.resolveDataset(request);\n }\n throw new DClimateAdapterError(\n \"catalog\",\n \"Injected dClimate client must expose loadDataset, selectDataset, getDataset, or resolveDataset.\"\n );\n}\n\nasync function loadBoundedDataset(\n client: DClimateClientLike,\n request: DClimateDatasetRequest,\n options: CreateDClimateSourceOptions\n): Promise<unknown> {\n if (!client.loadDataset) {\n throw new DClimateAdapterError(\n \"unsupported\",\n \"Injected dClimate client must expose loadDataset when bounds selection is requested.\"\n );\n }\n\n const loaded = await client.loadDataset({\n request,\n options: {\n ...options.loadDatasetOptions,\n gatewayUrl: options.gatewayUrl,\n returnJaxrayDataset: false\n }\n });\n reportProgress(options, {\n stage: \"selection\",\n message: \"Selecting requested time and bounds\",\n percent: 35\n });\n const selected = await applyBoundedSelection(loaded, options.selection);\n reportProgress(options, {\n stage: \"selection\",\n message: \"Selected bounded raster window\",\n percent: 52\n });\n return replaceLoadedDataset(loaded, selected);\n}\n\nasync function applyBoundedSelection(\n loaded: unknown,\n selection: DClimateSourceSelection | undefined\n): Promise<unknown> {\n const dataset = extractGeoTemporalDataset(loaded);\n if (!dataset) {\n throw new DClimateAdapterError(\n \"unsupported\",\n \"dClimate bounds selection requires a GeoTemporalDataset response.\"\n );\n }\n\n const timeSelected = selection?.timeRange\n ? await applyTimeRangeSelection(dataset, selection.timeRange)\n : dataset;\n const coordinateSelected = await applyCoordinateSelection(timeSelected, selection?.coordinates);\n if (!selection?.bounds) {\n return coordinateSelected;\n }\n\n const { bounds, boundsOptions } = normalizeSelectionBounds(\n selection.bounds,\n selection.boundsOptions\n );\n const [west, south, east, north] = bounds;\n\n const gridSelected = await selectGriddedBounds(coordinateSelected, bounds, boundsOptions);\n if (gridSelected) {\n return gridSelected;\n }\n\n if (!hasRectangleSelection(coordinateSelected)) {\n throw new DClimateAdapterError(\n \"unsupported\",\n \"dClimate bounds selection requires rectangle or gridded axis selection support.\"\n );\n }\n\n return coordinateSelected.rectangle(south, west, north, east, boundsOptions);\n}\n\nasync function applyTimeRangeSelection(\n value: unknown,\n timeRange: DClimateTimeRange\n): Promise<unknown> {\n const gridSelected = await selectGriddedTimeRange(value, timeRange);\n if (gridSelected) {\n return gridSelected;\n }\n\n if (!hasTimeRange(value)) {\n return value;\n }\n\n return value.timeRange(timeRange);\n}\n\nasync function selectGriddedTimeRange(\n value: unknown,\n timeRange: DClimateTimeRange\n): Promise<unknown | undefined> {\n const grid = extractSelectableGrid(value);\n if (!grid?.coords || typeof grid.sel !== \"function\") {\n return undefined;\n }\n\n const timeKey = inferCoordinateKey(grid.coords, DEFAULT_TIME_KEYS);\n if (!timeKey) {\n return undefined;\n }\n\n const coordinates = coordinateValues(grid.coords[timeKey]);\n if (!coordinates?.length) {\n return undefined;\n }\n\n const range = timeCoordinateRange(coordinates, timeRange, timeCoordinateUnits(grid, timeKey));\n if (!range) {\n return undefined;\n }\n\n return grid.sel({\n [timeKey]: range\n });\n}\n\nasync function applyCoordinateSelection(\n value: unknown,\n coordinates: DClimateSourceSelection[\"coordinates\"] | undefined\n): Promise<unknown> {\n if (!coordinates || Object.keys(coordinates).length === 0) {\n return value;\n }\n\n const grid = extractSelectableGrid(value);\n if (!grid || typeof grid.sel !== \"function\") {\n throw new DClimateAdapterError(\n \"unsupported\",\n \"dClimate coordinate selection requires gridded axis selection support.\"\n );\n }\n\n return grid.sel(normalizeCoordinateSelection(coordinates));\n}\n\nfunction normalizeCoordinateSelection(\n coordinates: Record<string, DClimateCoordinateSelectionValue>\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(coordinates).map(([dimension, value]) => [\n dimension,\n normalizeCoordinateSelectionValue(value)\n ])\n );\n}\n\nfunction normalizeCoordinateSelectionValue(value: DClimateCoordinateSelectionValue): unknown {\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (typeof value !== \"object\") {\n return value;\n }\n return {\n start: value.start instanceof Date ? value.start.toISOString() : value.start,\n stop: value.stop instanceof Date ? value.stop.toISOString() : value.stop\n };\n}\n\nasync function selectGriddedBounds(\n value: unknown,\n bounds: GridBounds,\n boundsOptions?: DClimateBoundsSelectionOptions\n): Promise<unknown | undefined> {\n const grid = extractSelectableGrid(value);\n if (!grid?.coords || typeof grid.sel !== \"function\") {\n return undefined;\n }\n\n const latitudeKey =\n boundsOptions?.latitudeKey ?? inferCoordinateKey(grid.coords, [\"latitude\", \"lat\", \"y\"]);\n const longitudeKey =\n boundsOptions?.longitudeKey ??\n inferCoordinateKey(grid.coords, [\"longitude\", \"lon\", \"lng\", \"x\"]);\n if (!latitudeKey || !longitudeKey) {\n return undefined;\n }\n\n const latitudeCoords = numericCoordinates(grid.coords[latitudeKey]);\n const longitudeCoords = numericCoordinates(grid.coords[longitudeKey]);\n if (\n !latitudeCoords ||\n !longitudeCoords ||\n !hasGriddedSpatialAxes(grid, latitudeKey, longitudeKey)\n ) {\n return undefined;\n }\n\n const [west, south, east, north] = bounds;\n return grid.sel({\n [latitudeKey]: coordinateRange(latitudeCoords, south, north),\n [longitudeKey]: coordinateRange(longitudeCoords, west, east)\n });\n}\n\ntype DClimateSelectableGrid = {\n coordAttrs?: Record<string, unknown>;\n coords?: Record<string, unknown>;\n dataVars?: unknown;\n getVariable?: (name: string) => unknown;\n sel?: (selection: Record<string, unknown>) => Promise<unknown> | unknown;\n};\n\nfunction extractSelectableGrid(value: unknown): DClimateSelectableGrid | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const data = value.data;\n if (isSelectableGrid(data)) {\n return data;\n }\n return isSelectableGrid(value) ? value : undefined;\n}\n\nfunction isSelectableGrid(value: unknown): value is DClimateSelectableGrid {\n return isRecord(value) && isRecord(value.coords) && typeof value.sel === \"function\";\n}\n\nfunction timeCoordinateRange(\n coordinates: readonly unknown[],\n timeRange: DClimateTimeRange,\n units: string | undefined\n): { start: unknown; stop: unknown } | undefined {\n const start = timeRangeBoundaryMillis(timeRange.start);\n const end = timeRangeBoundaryMillis(timeRange.end);\n if (start === undefined || end === undefined) {\n return undefined;\n }\n\n const lowerBound = Math.min(start, end);\n const upperBound = Math.max(start, end);\n const matchingCoordinates = coordinates\n .map((value) => ({ value, millis: timeCoordinateMillis(value, units) }))\n .filter(\n (coordinate): coordinate is { value: unknown; millis: number } =>\n coordinate.millis !== undefined &&\n coordinate.millis >= lowerBound &&\n coordinate.millis <= upperBound\n );\n\n if (matchingCoordinates.length === 0) {\n throw new DClimateAdapterError(\n \"unsupported\",\n \"dClimate time range selection did not include any available time coordinates.\",\n undefined,\n { timeRange }\n );\n }\n\n return {\n start: matchingCoordinates[0]?.value,\n stop: matchingCoordinates.at(-1)?.value\n };\n}\n\nfunction timeCoordinateUnits(grid: DClimateSelectableGrid, timeKey: string): string | undefined {\n const attrs = grid.coordAttrs?.[timeKey];\n if (isRecord(attrs) && typeof attrs.units === \"string\") {\n return attrs.units;\n }\n return undefined;\n}\n\nfunction timeRangeBoundaryMillis(\n value: DClimateTimeRange[keyof DClimateTimeRange]\n): number | undefined {\n const date = value instanceof Date ? value : new Date(value);\n return Number.isNaN(date.getTime()) ? undefined : date.getTime();\n}\n\nfunction timeCoordinateMillis(value: unknown, units: string | undefined): number | undefined {\n if (value instanceof Date) {\n return value.getTime();\n }\n if (typeof value === \"string\") {\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? undefined : date.getTime();\n }\n if (typeof value === \"number\" && Number.isFinite(value) && units) {\n return cfTimeCoordinateMillis(value, units);\n }\n return undefined;\n}\n\nfunction cfTimeCoordinateMillis(value: number, units: string): number | undefined {\n const match =\n /^(seconds?|minutes?|hours?|days?) since ([0-9]{4}-[0-9]{2}-[0-9]{2})(?:[ T]([0-9:.Z+-]+))?/i.exec(\n units\n );\n if (!match) {\n return undefined;\n }\n\n const unit = match[1]?.toLowerCase();\n const date = match[2];\n const time = match[3] ?? \"00:00:00Z\";\n const origin = new Date(`${date}T${time.replace(/Z?$/, \"Z\")}`);\n if (Number.isNaN(origin.getTime())) {\n return undefined;\n }\n\n return origin.getTime() + value * cfTimeUnitMultiplier(unit);\n}\n\nfunction cfTimeUnitMultiplier(unit: string | undefined): number {\n if (unit?.startsWith(\"second\")) {\n return 1_000;\n }\n if (unit?.startsWith(\"minute\")) {\n return 60_000;\n }\n if (unit?.startsWith(\"hour\")) {\n return 3_600_000;\n }\n return 86_400_000;\n}\n\nfunction inferCoordinateKey(\n coords: Record<string, unknown>,\n candidates: readonly string[]\n): string | undefined {\n const keys = Object.keys(coords);\n const normalizedKeys = keys.map((key) => key.toLowerCase().replace(/[_\\-\\s]+/g, \"\"));\n\n for (const candidate of candidates) {\n const index = normalizedKeys.indexOf(candidate.toLowerCase().replace(/[_\\-\\s]+/g, \"\"));\n if (index !== -1) {\n return keys[index];\n }\n }\n return undefined;\n}\n\nfunction numericCoordinates(values: unknown): number[] | undefined {\n const raw = coordinateValues(values);\n if (!raw?.length) {\n return undefined;\n }\n const coordinates = raw.map((value) => (typeof value === \"number\" ? value : Number(value)));\n return coordinates.every((value) => Number.isFinite(value)) ? coordinates : undefined;\n}\n\nfunction hasGriddedSpatialAxes(\n grid: DClimateSelectableGrid,\n latitudeKey: string,\n longitudeKey: string\n): boolean {\n if (!Array.isArray(grid.dataVars) || typeof grid.getVariable !== \"function\") {\n return false;\n }\n\n return grid.dataVars.some((name) => {\n if (typeof name !== \"string\") {\n return false;\n }\n const variable = grid.getVariable?.(name);\n return isRecord(variable) && Array.isArray(variable.dims)\n ? variable.dims.includes(latitudeKey) && variable.dims.includes(longitudeKey)\n : false;\n });\n}\n\nfunction coordinateRange(\n coordinates: readonly number[],\n lowerBound: number,\n upperBound: number\n): { start: number; stop: number } {\n const first = coordinates[0];\n const last = coordinates.at(-1);\n const ascending = first === undefined || last === undefined || first <= last;\n const start = ascending\n ? firstCoordinateAtOrAbove(coordinates, lowerBound)\n : firstCoordinateAtOrBelow(coordinates, upperBound);\n const stop = ascending\n ? lastCoordinateAtOrBelow(coordinates, upperBound)\n : lastCoordinateAtOrAbove(coordinates, lowerBound);\n return { start, stop };\n}\n\nfunction firstCoordinateAtOrAbove(coordinates: readonly number[], bound: number): number {\n return (\n binarySearchCoordinate(coordinates, (coordinate) => coordinate >= bound, \"first\") ??\n nearestCoordinate(coordinates, bound)\n );\n}\n\nfunction firstCoordinateAtOrBelow(coordinates: readonly number[], bound: number): number {\n return (\n binarySearchCoordinate(coordinates, (coordinate) => coordinate <= bound, \"first\") ??\n nearestCoordinate(coordinates, bound)\n );\n}\n\nfunction lastCoordinateAtOrBelow(coordinates: readonly number[], bound: number): number {\n return (\n binarySearchCoordinate(coordinates, (coordinate) => coordinate <= bound, \"last\") ??\n nearestCoordinate(coordinates, bound)\n );\n}\n\nfunction lastCoordinateAtOrAbove(coordinates: readonly number[], bound: number): number {\n return (\n binarySearchCoordinate(coordinates, (coordinate) => coordinate >= bound, \"last\") ??\n nearestCoordinate(coordinates, bound)\n );\n}\n\nfunction binarySearchCoordinate(\n coordinates: readonly number[],\n matches: (coordinate: number) => boolean,\n position: \"first\" | \"last\"\n): number | undefined {\n let low = 0;\n let high = coordinates.length - 1;\n let found: number | undefined;\n\n while (low <= high) {\n const middle = Math.floor((low + high) / 2);\n const coordinate = coordinates[middle];\n if (coordinate === undefined) {\n break;\n }\n if (matches(coordinate)) {\n found = coordinate;\n if (position === \"first\") {\n high = middle - 1;\n } else {\n low = middle + 1;\n }\n continue;\n }\n if (position === \"first\") {\n low = middle + 1;\n } else {\n high = middle - 1;\n }\n }\n\n return found;\n}\n\nfunction nearestCoordinate(coordinates: readonly number[], value: number): number {\n return coordinates.reduce((nearest, coordinate) =>\n Math.abs(coordinate - value) < Math.abs(nearest - value) ? coordinate : nearest\n );\n}\n\nfunction replaceLoadedDataset(loaded: unknown, dataset: unknown): unknown {\n if (Array.isArray(loaded)) {\n return [dataset, loaded[1]];\n }\n return dataset;\n}\n\nasync function createInMemoryZarrStore(\n dataset: JaxrayDatasetLike | undefined\n): Promise<InMemoryZarrStore | undefined> {\n if (\n !dataset?.coords ||\n !Array.isArray(dataset.dataVars) ||\n typeof dataset.getVariable !== \"function\"\n ) {\n return undefined;\n }\n\n const entries = new Map<string, Uint8Array>();\n const encoder = new TextEncoder();\n const addJson = (path: string, value: unknown) => {\n entries.set(path, encoder.encode(JSON.stringify(value)));\n };\n const addBytes = (path: string, value: Uint8Array) => {\n entries.set(path, value);\n };\n\n addJson(\".zgroup\", { zarr_format: 2 });\n addJson(\".zattrs\", {});\n\n for (const [dimensionName, coordinateValues] of coordinateEntries(dataset.coords)) {\n const coordinates = numericCoordinates(coordinateValues);\n const strings = coordinates ? undefined : stringCoordinates(coordinateValues);\n if (!coordinates && !strings) {\n continue;\n }\n if (strings) {\n addJson(`${dimensionName}/.zarray`, {\n zarr_format: 2,\n shape: [strings.length],\n chunks: [strings.length],\n dtype: \"|O\",\n compressor: null,\n fill_value: null,\n order: \"C\",\n filters: [{ id: \"vlen-utf8\" }]\n });\n addJson(`${dimensionName}/.zattrs`, {\n _ARRAY_DIMENSIONS: [dimensionName]\n });\n addBytes(`${dimensionName}/0`, encodeVLenUtf8(strings));\n continue;\n }\n if (!coordinates) {\n continue;\n }\n\n addJson(`${dimensionName}/.zarray`, {\n zarr_format: 2,\n shape: [coordinates.length],\n chunks: [coordinates.length],\n dtype: \"<f8\",\n compressor: null,\n fill_value: null,\n order: \"C\",\n filters: null\n });\n addJson(`${dimensionName}/.zattrs`, {\n _ARRAY_DIMENSIONS: [dimensionName]\n });\n addBytes(`${dimensionName}/0`, encodeFloat64(coordinates));\n }\n\n for (const variableName of dataset.dataVars) {\n if (typeof variableName !== \"string\") {\n continue;\n }\n const variable = dataset.getVariable(variableName);\n if (!variable?.dims?.length || !variable.shape?.length) {\n continue;\n }\n const computed = await variable.compute?.();\n const values = flattenNumericValues(\n computed?.data ?? computed?.values ?? variable.data ?? variable.values\n );\n if (!values) {\n return undefined;\n }\n const chunks = chunkShapeFor(variable.shape);\n addJson(`${variableName}/.zarray`, {\n zarr_format: 2,\n shape: variable.shape,\n chunks,\n dtype: \"<f4\",\n compressor: null,\n fill_value: \"NaN\",\n order: \"C\",\n filters: null\n });\n addJson(`${variableName}/.zattrs`, {\n ...variable.attrs,\n _ARRAY_DIMENSIONS: variable.dims\n });\n addVariableChunks(entries, variableName, values, variable.shape, chunks);\n }\n\n const byteLength = Array.from(entries.values()).reduce(\n (total, value) => total + value.byteLength,\n 0\n );\n return {\n byteLength,\n get: async (key) => entries.get(normalizeStoreKey(key))\n };\n}\n\nfunction coordinateEntries(\n coords: JaxrayDatasetLike[\"coords\"]\n): Array<\n [string, readonly unknown[] | { values?: readonly unknown[]; data?: readonly unknown[] }]\n> {\n if (!coords) {\n return [];\n }\n return coords instanceof Map ? Array.from(coords.entries()) : Object.entries(coords);\n}\n\nfunction coordinateValues(values: unknown): readonly unknown[] | undefined {\n if (Array.isArray(values)) {\n return values;\n }\n if (ArrayBuffer.isView(values)) {\n return arrayBufferViewValues(values);\n }\n if (!isRecord(values)) {\n return undefined;\n }\n if (Array.isArray(values.values)) {\n return values.values;\n }\n if (ArrayBuffer.isView(values.values)) {\n return arrayBufferViewValues(values.values);\n }\n if (Array.isArray(values.data)) {\n return values.data;\n }\n if (ArrayBuffer.isView(values.data)) {\n return arrayBufferViewValues(values.data);\n }\n return undefined;\n}\n\nfunction arrayBufferViewValues(values: ArrayBufferView): readonly unknown[] | undefined {\n return \"length\" in values ? Array.from(values as unknown as ArrayLike<unknown>) : undefined;\n}\n\nfunction stringCoordinates(values: unknown): string[] | undefined {\n const raw = coordinateValues(values);\n if (!raw?.length) {\n return undefined;\n }\n const coordinates = raw.map((value) => {\n if (value instanceof Date) {\n return value.toISOString();\n }\n return typeof value === \"string\" ? value : undefined;\n });\n return coordinates.every((value): value is string => value !== undefined)\n ? coordinates\n : undefined;\n}\n\nfunction normalizeStoreKey(key: string): string {\n return key.replace(/^\\/+/, \"\");\n}\n\nfunction chunkShapeFor(shape: readonly number[]): number[] {\n if (shape.length === 0) {\n return [];\n }\n return shape.map((size, index) => (index === 0 && shape.length > 2 ? 1 : size));\n}\n\nfunction addVariableChunks(\n entries: Map<string, Uint8Array>,\n variableName: string,\n values: NumericArrayLike,\n shape: readonly number[],\n chunks: readonly number[]\n): void {\n if (shape.length === 0) {\n entries.set(`${variableName}/0`, encodeFloat32(values));\n return;\n }\n\n const chunkCounts = shape.map((size, index) => Math.ceil(size / (chunks[index] ?? size)));\n const chunkIndices = enumerateChunkIndices(chunkCounts);\n for (const chunkIndex of chunkIndices) {\n const contiguousRange = leadingContiguousChunkRange(shape, chunks, chunkIndex);\n const bytes = contiguousRange\n ? encodeFloat32(values, contiguousRange.start, contiguousRange.length)\n : encodeFloat32(extractChunk(values, shape, chunks, chunkIndex));\n entries.set(`${variableName}/${chunkIndex.join(\".\")}`, bytes);\n }\n}\n\nfunction leadingContiguousChunkRange(\n shape: readonly number[],\n chunks: readonly number[],\n chunkIndex: readonly number[]\n): { start: number; length: number } | undefined {\n if (shape.length === 0) {\n return { start: 0, length: 1 };\n }\n\n const starts = chunkIndex.map((index, dimension) => index * (chunks[dimension] ?? 1));\n const stops = starts.map((start, dimension) =>\n Math.min(start + (chunks[dimension] ?? 1), shape[dimension] ?? start)\n );\n\n for (let dimension = 1; dimension < shape.length; dimension += 1) {\n if ((starts[dimension] ?? 0) !== 0 || (stops[dimension] ?? 0) !== (shape[dimension] ?? 0)) {\n return undefined;\n }\n }\n\n const trailingSize = shape.slice(1).reduce((total, size) => total * size, 1);\n const leadingStart = starts[0] ?? 0;\n const leadingStop = stops[0] ?? leadingStart;\n return {\n start: leadingStart * trailingSize,\n length: Math.max(0, leadingStop - leadingStart) * trailingSize\n };\n}\n\nfunction enumerateChunkIndices(chunkCounts: readonly number[]): number[][] {\n const results: number[][] = [];\n const visit = (prefix: number[], dimension: number) => {\n if (dimension === chunkCounts.length) {\n results.push(prefix);\n return;\n }\n const count = chunkCounts[dimension] ?? 0;\n for (let index = 0; index < count; index += 1) {\n visit([...prefix, index], dimension + 1);\n }\n };\n visit([], 0);\n return results;\n}\n\nfunction extractChunk(\n values: NumericArrayLike,\n shape: readonly number[],\n chunks: readonly number[],\n chunkIndex: readonly number[]\n): number[] {\n const starts = chunkIndex.map((index, dimension) => index * (chunks[dimension] ?? 1));\n const stops = starts.map((start, dimension) =>\n Math.min(start + (chunks[dimension] ?? 1), shape[dimension] ?? start)\n );\n const result: number[] = [];\n\n const visit = (indices: number[], dimension: number) => {\n if (dimension === shape.length) {\n result.push(values[flatIndex(indices, shape)] ?? Number.NaN);\n return;\n }\n const start = starts[dimension] ?? 0;\n const stop = stops[dimension] ?? start;\n for (let index = start; index < stop; index += 1) {\n visit([...indices, index], dimension + 1);\n }\n };\n visit([], 0);\n return result;\n}\n\nfunction flatIndex(indices: readonly number[], shape: readonly number[]): number {\n return indices.reduce((offset, index, dimension) => offset * (shape[dimension] ?? 1) + index, 0);\n}\n\nfunction flattenNumericValues(value: unknown): NumericArrayLike | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === \"number\") {\n return [value];\n }\n if (isFlatNumericArrayLike(value)) {\n return value;\n }\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const result: number[] = [];\n const visit = (current: unknown) => {\n if (typeof current === \"number\") {\n result.push(current);\n return;\n }\n if (isFlatNumericArrayLike(current)) {\n for (let index = 0; index < current.length; index += 1) {\n result.push(current[index] ?? Number.NaN);\n }\n return;\n }\n if (Array.isArray(current)) {\n for (const item of current) {\n visit(item);\n }\n }\n };\n visit(value);\n return result;\n}\n\nfunction isFlatNumericArrayLike(value: unknown): value is NumericArrayLike {\n if (Array.isArray(value)) {\n return value.every((item) => typeof item === \"number\");\n }\n return (\n ArrayBuffer.isView(value) &&\n \"length\" in value &&\n typeof value.length === \"number\" &&\n !isBigIntArray(value)\n );\n}\n\nfunction isBigIntArray(value: ArrayBufferView): boolean {\n return typeof BigInt64Array !== \"undefined\" && value instanceof BigInt64Array\n ? true\n : typeof BigUint64Array !== \"undefined\" && value instanceof BigUint64Array;\n}\n\nfunction encodeFloat32(\n values: NumericArrayLike,\n start = 0,\n length = values.length - start\n): Uint8Array {\n if (length <= 0) {\n return new Uint8Array();\n }\n\n if (values instanceof Float32Array && isNativeLittleEndian()) {\n return new Uint8Array(values.buffer, values.byteOffset + start * 4, length * 4);\n }\n\n const bytes = new Uint8Array(length * 4);\n const view = new DataView(bytes.buffer);\n for (let index = 0; index < length; index += 1) {\n view.setFloat32(index * 4, values[start + index] ?? Number.NaN, true);\n }\n return bytes;\n}\n\nlet nativeLittleEndian: boolean | undefined;\n\nfunction isNativeLittleEndian(): boolean {\n nativeLittleEndian ??= new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n return nativeLittleEndian;\n}\n\nfunction encodeFloat64(values: readonly number[]): Uint8Array {\n const bytes = new Uint8Array(values.length * 8);\n const view = new DataView(bytes.buffer);\n values.forEach((value, index) => view.setFloat64(index * 8, value, true));\n return bytes;\n}\n\nfunction encodeVLenUtf8(values: readonly string[]): Uint8Array {\n const encoder = new TextEncoder();\n const encodedValues = values.map((value) => encoder.encode(value));\n const byteLength = 4 + encodedValues.reduce((total, value) => total + 4 + value.byteLength, 0);\n const bytes = new Uint8Array(byteLength);\n const view = new DataView(bytes.buffer);\n let offset = 0;\n view.setUint32(offset, encodedValues.length, true);\n offset += 4;\n for (const value of encodedValues) {\n view.setUint32(offset, value.byteLength, true);\n offset += 4;\n bytes.set(value, offset);\n offset += value.byteLength;\n }\n return bytes;\n}\n\nfunction normalizeSelectionBounds(\n bounds: DClimateSelectionBounds | DClimateBoundsSelection,\n fallbackOptions?: DClimateBoundsSelectionOptions\n): { bounds: GridBounds; boundsOptions?: DClimateBoundsSelectionOptions } {\n const isTuple = isSelectionBoundsTuple(bounds);\n const normalizedBounds = isTuple\n ? bounds\n : ([bounds.west, bounds.south, bounds.east, bounds.north] as const);\n if (\n normalizedBounds.length !== 4 ||\n normalizedBounds.some((value) => typeof value !== \"number\" || !Number.isFinite(value))\n ) {\n throw new DClimateAdapterError(\n \"metadata\",\n \"dClimate selection bounds must be finite [west, south, east, north] numbers.\"\n );\n }\n\n const [west, south, east, north] = normalizedBounds;\n if (west >= east || south >= north) {\n throw new DClimateAdapterError(\n \"metadata\",\n \"dClimate selection bounds must satisfy west < east and south < north.\"\n );\n }\n return {\n bounds: [west, south, east, north],\n boundsOptions: isTuple ? fallbackOptions : (bounds.options ?? fallbackOptions)\n };\n}\n\nfunction isSelectionBoundsTuple(\n bounds: DClimateSelectionBounds | DClimateBoundsSelection\n): bounds is DClimateSelectionBounds {\n return Array.isArray(bounds);\n}\n\nasync function openStore(\n cid: string,\n options: CreateDClimateSourceOptions\n): Promise<GridReadableStore | undefined> {\n try {\n if (options.openIpfsStore) {\n return options.openIpfsStore(cid, { gatewayUrl: options.gatewayUrl });\n }\n\n const module = (await import(\"@dclimate/jaxray\")) as unknown as {\n openIpfsStore?: (\n cid: string,\n options?: Record<string, unknown>\n ) =>\n | Promise<GridReadableStore | { store: GridReadableStore }>\n | GridReadableStore\n | { store: GridReadableStore };\n };\n const opened = await module.openIpfsStore?.(cid, { gatewayUrl: options.gatewayUrl });\n if (isRecord(opened) && \"store\" in opened && isReadableStore(opened.store)) {\n return opened.store;\n }\n return isReadableStore(opened) ? opened : undefined;\n } catch (error) {\n throw new DClimateAdapterError(\n \"gateway\",\n `Failed to open dClimate CID \"${cid}\" through Jaxray.`,\n error,\n {\n cid,\n gatewayUrl: options.gatewayUrl\n }\n );\n }\n}\n\nfunction extractDataset(value: unknown): JaxrayDatasetLike | undefined {\n if (Array.isArray(value)) {\n return extractDataset(value[0]);\n }\n if (!isRecord(value)) {\n return undefined;\n }\n const candidate =\n value.data ??\n value.dataset ??\n value.jaxrayDataset ??\n value.geoTemporalDataset ??\n (hasDatasetShape(value) ? value : undefined);\n return isRecord(candidate) ? (candidate as JaxrayDatasetLike) : undefined;\n}\n\nfunction extractGeoTemporalDataset(value: unknown): unknown {\n if (Array.isArray(value)) {\n return extractGeoTemporalDataset(value[0]);\n }\n if (!isRecord(value)) {\n return undefined;\n }\n return hasRectangleSelection(value) || hasTimeRange(value) ? value : undefined;\n}\n\ntype DClimateTimeSelectable = {\n timeRange(range: DClimateTimeRange): Promise<unknown> | unknown;\n};\n\ntype DClimateRectangleSelectable = {\n rectangle(\n minLat: number,\n minLon: number,\n maxLat: number,\n maxLon: number,\n options?: DClimateSourceSelection[\"boundsOptions\"]\n ): Promise<unknown> | unknown;\n};\n\nfunction hasTimeRange(value: unknown): value is DClimateTimeSelectable {\n return isRecord(value) && typeof value.timeRange === \"function\";\n}\n\nfunction hasRectangleSelection(value: unknown): value is DClimateRectangleSelectable {\n return isRecord(value) && typeof value.rectangle === \"function\";\n}\n\nfunction extractMetadata(value: unknown): ({ cid?: string } & Record<string, unknown>) | undefined {\n if (Array.isArray(value)) {\n return isRecord(value[1])\n ? (value[1] as { cid?: string } & Record<string, unknown>)\n : undefined;\n }\n if (!isRecord(value)) {\n return undefined;\n }\n const metadata = value.metadata ?? value.clientMetadata;\n return isRecord(metadata) ? (metadata as { cid?: string } & Record<string, unknown>) : undefined;\n}\n\nfunction extractStore(value: unknown): GridReadableStore | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const candidate = value.store ?? value.zarrStore ?? value.ipfsStore;\n return isReadableStore(candidate) ? candidate : undefined;\n}\n\nfunction extractString(value: unknown, keys: readonly string[]): string | undefined {\n const metadata = extractMetadata(value);\n if (metadata) {\n for (const key of keys) {\n const candidate = metadata[key];\n if (typeof candidate === \"string\") {\n return candidate;\n }\n }\n }\n\n if (!isRecord(value)) {\n return undefined;\n }\n\n for (const key of keys) {\n const candidate = value[key];\n if (typeof candidate === \"string\") {\n return candidate;\n }\n }\n return undefined;\n}\n\nfunction gatewaySourceForCid(\n cid: string | undefined,\n gatewayUrl: string | undefined\n): string | undefined {\n if (!cid || !gatewayUrl) {\n return undefined;\n }\n return `${gatewayUrl.replace(/\\/$/, \"\")}/ipfs/${cid}`;\n}\n\nfunction sourceIdForRequest(request: DClimateDatasetRequest): string | undefined {\n if (request.cid) {\n return `dclimate-${request.cid.slice(0, 12)}`;\n }\n return [request.collection, request.dataset, request.variant].filter(Boolean).join(\"-\");\n}\n\nfunction labelForRequest(request: DClimateDatasetRequest): string | undefined {\n return (\n [request.collection, request.dataset, request.variant].filter(Boolean).join(\" / \") ||\n request.cid\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction hasDatasetShape(value: Record<string, unknown>): boolean {\n return \"data_vars\" in value || \"dataVars\" in value || \"variables\" in value;\n}\n\nfunction isReadableStore(value: unknown): value is GridReadableStore {\n return isRecord(value) && typeof value.get === \"function\";\n}\n","import { colorScaleToRendererOptions, normalizeSelectors, toRendererSelectors } from \"../core\";\nimport { GridError } from \"../core/errors\";\nimport { assertValidGridDataSource, inferSpatialDimensions } from \"../core/validation\";\nimport type {\n GridColorScale,\n GridDataSource,\n GridSelectors,\n GridSpatialDimensions\n} from \"../core/types\";\n\nexport interface MapLibreLike {\n addLayer(layer: GridLayerInstance, beforeId?: string): void;\n removeLayer(id: string): void;\n getLayer(id: string): unknown;\n removeSource?(id: string): void;\n getSource?(id: string): unknown;\n isStyleLoaded?(): boolean;\n on?(event: string, listener: (...args: readonly unknown[]) => void): void;\n off?(event: string, listener: (...args: readonly unknown[]) => void): void;\n once?(event: string, listener: (...args: readonly unknown[]) => void): void;\n loaded?(): boolean;\n remove?(): void;\n}\n\nexport type GridLayerLoadingStage = \"map\" | \"layer\" | \"metadata\" | \"chunks\" | \"complete\";\n\nexport interface GridLayerLoadingState {\n loading: boolean;\n metadata: boolean;\n chunks: boolean;\n percent: number;\n stage?: GridLayerLoadingStage;\n}\n\nexport interface GridLayerInstance {\n id: string;\n type?: string;\n setSelector?(\n selector: Record<string, { selected: number | string; type: \"index\" | \"value\" }>\n ): void;\n setVariable?(variable: string): void;\n setColormap?(palette: readonly string[]): void;\n setClim?(domain: readonly [number, number]): void;\n setOpacity?(opacity: number): void;\n queryData?(geometry: unknown): Promise<unknown>;\n onAdd?(map: MapLibreLike, gl: WebGLRenderingContext | WebGL2RenderingContext): void;\n onRemove?(map: MapLibreLike, gl: WebGLRenderingContext | WebGL2RenderingContext): void;\n}\n\nexport interface MapLibreMapConfig {\n container: string | HTMLElement;\n style: string | Record<string, unknown>;\n center?: [longitude: number, latitude: number];\n zoom?: number;\n bounds?: [[west: number, south: number], [east: number, north: number]];\n maxBounds?: [[west: number, south: number], [east: number, north: number]];\n attributionControl?: boolean;\n}\n\nexport interface ZarrLayerFactoryOptions {\n id: string;\n source?: string;\n store?: GridDataSource[\"store\"];\n variable: string;\n selector?: Record<string, { selected: number | string; type: \"index\" | \"value\" }>;\n spatialDimensions?: { lon: string; lat: string };\n zarrVersion?: 2 | 3;\n crs?: string;\n proj4?: string;\n bounds?: readonly [number, number, number, number];\n fillValue?: number | null;\n colormap?: readonly string[];\n clim?: readonly [number, number];\n opacity?: number;\n latIsAscending?: boolean;\n customFrag?: string;\n uniforms?: Record<string, number>;\n onLoad?: () => void;\n onError?: (error: unknown) => void;\n onLoadingStateChange?: (loading: boolean | Partial<GridLayerLoadingState>) => void;\n}\n\nexport type GridLayerFactory = (\n options: ZarrLayerFactoryOptions\n) => GridLayerInstance | Promise<GridLayerInstance>;\nexport type MapFactory = (config: MapLibreMapConfig) => MapLibreLike | Promise<MapLibreLike>;\n\nexport interface GridLayerOptions {\n source: GridDataSource;\n variable: string;\n selectors?: GridSelectors;\n colorScale?: GridColorScale;\n opacity?: number;\n layerId?: string;\n beforeId?: string;\n map?: MapLibreLike;\n mapConfig?: MapLibreMapConfig;\n layerFactory?: GridLayerFactory;\n mapFactory?: MapFactory;\n onLoadingChange?: (loading: boolean) => void;\n onLoadingStateChange?: (state: GridLayerLoadingState) => void;\n onError?: (error: GridError) => void;\n}\n\nexport interface GridLayerUpdate {\n source?: GridDataSource;\n variable?: string;\n selectors?: GridSelectors;\n colorScale?: GridColorScale;\n opacity?: number;\n}\n\nexport interface GridLayerController {\n readonly id: string;\n readonly ownsMap: boolean;\n mount(): Promise<void>;\n update(update: GridLayerUpdate): Promise<void>;\n remove(): void;\n query(geometry: unknown): Promise<unknown>;\n getMap(): MapLibreLike | undefined;\n getLayer(): GridLayerInstance | undefined;\n}\n\nexport function createMapLibreGridLayer(options: GridLayerOptions): GridLayerController {\n return new MapLibreGridLayerController(options);\n}\n\nexport function buildZarrLayerOptions(options: GridLayerOptions): ZarrLayerFactoryOptions {\n assertValidGridDataSource(options.source, {\n variable: options.variable,\n requireRenderable: true\n });\n const variable = options.source.variables.find(\n (candidate) => candidate.name === options.variable || candidate.path === options.variable\n );\n if (!variable) {\n throw new GridError({\n code: \"MISSING_VARIABLE\",\n message: `Variable \"${options.variable}\" is not present in the grid source.`,\n variable: options.variable,\n sourceId: options.source.id\n });\n }\n\n const spatialDimensions = inferSpatialDimensions(options.source, variable.name);\n if (!spatialDimensions) {\n throw new GridError({\n code: \"MISSING_SPATIAL_DIMENSIONS\",\n message: `Variable \"${variable.name}\" needs spatial dimensions before rendering.`,\n variable: variable.name,\n sourceId: options.source.id\n });\n }\n\n const colorOptions = colorScaleToRendererOptions(options.colorScale);\n const rendererVariable = variable.path ?? variable.name;\n const normalizedSelectors = normalizeSelectors(options.source, variable.name, options.selectors);\n const rendererSelectors = omitSpatialSelectors(normalizedSelectors, spatialDimensions);\n const yDimension = options.source.dimensions.find(\n (dimension) => dimension.name === spatialDimensions.y\n );\n const shaderOptions = buildColorScaleShaderOptions(options.colorScale, rendererVariable);\n\n return {\n id: options.layerId ?? `zarr-map-${options.source.id ?? variable.name}`,\n source: options.source.source,\n store: options.source.store,\n variable: rendererVariable,\n selector: toRendererSelectors(rendererSelectors),\n spatialDimensions: { lon: spatialDimensions.x, lat: spatialDimensions.y },\n zarrVersion: options.source.zarrVersion,\n crs: options.source.crs,\n proj4: options.source.proj4,\n bounds: options.source.bounds,\n fillValue: variable.fillValue,\n colormap: colorOptions?.colormap,\n clim: colorOptions?.clim,\n opacity: options.opacity,\n latIsAscending: yDimension?.ascending,\n customFrag: shaderOptions?.customFrag,\n uniforms: shaderOptions?.uniforms,\n onLoad: () => {\n options.onLoadingChange?.(false);\n options.onLoadingStateChange?.(completeLoadingState());\n },\n onLoadingStateChange: (state) => {\n const loadingState = normalizeLoadingState(state);\n options.onLoadingChange?.(loadingState.loading);\n options.onLoadingStateChange?.(loadingState);\n },\n onError: (error) =>\n options.onError?.(\n new GridError({\n code: \"CHUNK_LOAD_FAILED\",\n message: \"Zarr renderer reported a metadata or chunk loading error.\",\n cause: error,\n sourceId: options.source.id,\n variable: options.variable\n })\n )\n };\n}\n\nfunction buildColorScaleShaderOptions(\n colorScale: GridColorScale | undefined,\n rendererVariable: string\n): Pick<ZarrLayerFactoryOptions, \"customFrag\" | \"uniforms\"> | undefined {\n const transparentPalette = transparentPaletteKind(colorScale);\n if (!transparentPalette || !isValidGlslIdentifier(rendererVariable)) {\n return undefined;\n }\n\n return {\n customFrag:\n transparentPalette === \"vegetation\"\n ? vegetationOverlayShader(rendererVariable)\n : transparentPalette === \"magma\"\n ? magmaTransparentLowerBoundShader(rendererVariable)\n : precipitationOverlayShader(rendererVariable),\n uniforms: {}\n };\n}\n\nfunction precipitationOverlayShader(rendererVariable: string): string {\n return `\n if (${rendererVariable} <= 0.0) {\n discard;\n }\n\n float rescaled = clamp((${rendererVariable} - clim.x) / (clim.y - clim.x), 0.0, 1.0);\n vec4 c = texture(colormap, vec2(rescaled, 0.5));\n float precipAlpha = opacity * mix(0.22, 1.0, rescaled);\n fragColor = vec4(c.rgb, precipAlpha);\n fragColor.rgb *= fragColor.a;\n`;\n}\n\nfunction vegetationOverlayShader(rendererVariable: string): string {\n return `\n float vegetationRange = clim.y - clim.x;\n float noVegetationCutoff = clim.x + vegetationRange * 0.04;\n if (${rendererVariable} <= noVegetationCutoff) {\n discard;\n }\n\n float rescaled = clamp((${rendererVariable} - clim.x) / vegetationRange, 0.0, 1.0);\n vec4 c = texture(colormap, vec2(rescaled, 0.5));\n float vegetationAlpha = opacity * mix(0.14, 1.0, smoothstep(0.04, 0.85, rescaled));\n fragColor = vec4(c.rgb, vegetationAlpha);\n fragColor.rgb *= fragColor.a;\n`;\n}\n\nfunction magmaTransparentLowerBoundShader(rendererVariable: string): string {\n return `\n float rescaled = clamp((${rendererVariable} - clim.x) / (clim.y - clim.x), 0.0, 1.0);\n vec4 c = texture(colormap, vec2(rescaled, 0.5));\n float magmaAlpha = opacity * smoothstep(0.0, 0.2, rescaled);\n fragColor = vec4(c.rgb, magmaAlpha);\n fragColor.rgb *= fragColor.a;\n`;\n}\n\nfunction transparentPaletteKind(\n colorScale: GridColorScale | undefined\n): \"magma\" | \"precipitation\" | \"vegetation\" | undefined {\n if (typeof colorScale?.palette !== \"string\") {\n return undefined;\n }\n const palette = colorScale.palette.toLowerCase();\n if (palette === \"magma\" || palette === \"precipitation\" || palette === \"vegetation\") {\n return palette;\n }\n return undefined;\n}\n\nfunction isValidGlslIdentifier(value: string): boolean {\n return /^[A-Za-z_][A-Za-z0-9_]*$/.test(value);\n}\n\nfunction colorScaleShaderSignature(options: GridLayerOptions): string {\n const variable = options.source.variables.find(\n (candidate) => candidate.name === options.variable || candidate.path === options.variable\n );\n const rendererVariable = variable?.path ?? variable?.name ?? options.variable;\n return buildColorScaleShaderOptions(options.colorScale, rendererVariable)?.customFrag ?? \"\";\n}\n\nclass MapLibreGridLayerController implements GridLayerController {\n readonly id: string;\n readonly ownsMap: boolean;\n\n private options: GridLayerOptions;\n private map: MapLibreLike | undefined;\n private layer: GridLayerInstance | undefined;\n private removed = false;\n\n constructor(options: GridLayerOptions) {\n this.id = options.layerId ?? `zarr-map-${options.source.id ?? options.variable}`;\n this.options = { ...options, layerId: this.id };\n this.map = options.map;\n this.ownsMap = !options.map;\n }\n\n async mount(): Promise<void> {\n if (this.layer || this.removed) {\n return;\n }\n\n this.options.onLoadingChange?.(true);\n this.options.onLoadingStateChange?.({\n loading: true,\n metadata: false,\n chunks: false,\n percent: 5,\n stage: \"map\"\n });\n try {\n this.map ??= await this.createMap();\n await this.whenMapReady(this.map);\n this.options.onLoadingStateChange?.({\n loading: true,\n metadata: false,\n chunks: false,\n percent: 25,\n stage: \"layer\"\n });\n this.layer = await (this.options.layerFactory ?? createDefaultZarrLayer)(\n buildZarrLayerOptions(this.options)\n );\n this.map.addLayer(this.layer, this.options.beforeId);\n this.options.onLoadingStateChange?.({\n loading: true,\n metadata: false,\n chunks: true,\n percent: 65,\n stage: \"chunks\"\n });\n } catch (error) {\n this.options.onLoadingChange?.(false);\n this.handleError(\"RENDERER_SETUP_FAILED\", \"Failed to create the MapLibre Zarr layer.\", error);\n }\n }\n\n async update(update: GridLayerUpdate): Promise<void> {\n const nextOptions = {\n ...this.options,\n ...update\n };\n\n if (!this.layer) {\n this.options = nextOptions;\n await this.mount();\n return;\n }\n\n try {\n if (update.source && update.source !== this.options.source) {\n await this.replaceLayer(nextOptions);\n this.options = nextOptions;\n return;\n }\n\n if (colorScaleShaderSignature(nextOptions) !== colorScaleShaderSignature(this.options)) {\n await this.replaceLayer(nextOptions);\n this.options = nextOptions;\n return;\n }\n\n this.options = nextOptions;\n\n if (update.colorScale) {\n const colorOptions = colorScaleToRendererOptions(update.colorScale);\n this.layer.setColormap?.(colorOptions?.colormap ?? []);\n this.layer.setClim?.(colorOptions?.clim ?? update.colorScale.domain);\n }\n\n if (typeof update.opacity === \"number\") {\n this.layer.setOpacity?.(update.opacity);\n }\n\n if (update.variable) {\n this.layer.setVariable?.(update.variable);\n }\n\n if (update.selectors || update.variable || update.source) {\n const variable = update.variable ?? this.options.variable;\n const source = update.source ?? this.options.source;\n const spatialDimensions = inferSpatialDimensions(source, variable);\n const normalizedSelectors = normalizeSelectors(source, variable, this.options.selectors);\n const rendererSelectors = spatialDimensions\n ? omitSpatialSelectors(normalizedSelectors, spatialDimensions)\n : normalizedSelectors;\n this.layer.setSelector?.(toRendererSelectors(rendererSelectors));\n }\n } catch (error) {\n this.handleError(\"RENDERER_SETUP_FAILED\", \"Failed to update the MapLibre Zarr layer.\", error);\n }\n }\n\n private async replaceLayer(nextOptions: GridLayerOptions): Promise<void> {\n if (!this.map) {\n this.options = nextOptions;\n await this.mount();\n return;\n }\n\n this.options.onLoadingChange?.(true);\n this.options.onLoadingStateChange?.({\n loading: true,\n metadata: false,\n chunks: false,\n percent: 5,\n stage: \"layer\"\n });\n\n const previousLayer = this.layer;\n if (previousLayer && this.map.getLayer(previousLayer.id)) {\n this.map.removeLayer(previousLayer.id);\n }\n if (previousLayer?.id && this.map.getSource?.(previousLayer.id)) {\n this.map.removeSource?.(previousLayer.id);\n }\n this.layer = undefined;\n\n try {\n this.options.onLoadingStateChange?.({\n loading: true,\n metadata: false,\n chunks: false,\n percent: 35,\n stage: \"layer\"\n });\n const nextLayer = await (nextOptions.layerFactory ?? createDefaultZarrLayer)(\n buildZarrLayerOptions(nextOptions)\n );\n\n this.layer = nextLayer;\n this.map.addLayer(nextLayer, nextOptions.beforeId);\n this.options.onLoadingStateChange?.({\n loading: true,\n metadata: false,\n chunks: true,\n percent: 65,\n stage: \"chunks\"\n });\n } catch (error) {\n this.options.onLoadingChange?.(false);\n this.handleError(\"RENDERER_SETUP_FAILED\", \"Failed to update the MapLibre Zarr layer.\", error);\n }\n }\n\n remove(): void {\n if (this.removed) {\n return;\n }\n this.removed = true;\n\n if (this.layer && this.map?.getLayer(this.layer.id)) {\n this.map.removeLayer(this.layer.id);\n }\n if (this.layer?.id && this.map?.getSource?.(this.layer.id)) {\n this.map.removeSource?.(this.layer.id);\n }\n if (this.ownsMap) {\n this.map?.remove?.();\n }\n this.layer = undefined;\n this.map = undefined;\n }\n\n async query(geometry: unknown): Promise<unknown> {\n if (!this.layer?.queryData) {\n throw new GridError({\n code: \"UNSUPPORTED_GEOMETRY\",\n message: \"The active renderer layer does not expose queryData.\"\n });\n }\n return this.layer.queryData(geometry);\n }\n\n getMap(): MapLibreLike | undefined {\n return this.map;\n }\n\n getLayer(): GridLayerInstance | undefined {\n return this.layer;\n }\n\n private async createMap(): Promise<MapLibreLike> {\n if (!this.options.mapConfig) {\n throw new GridError({\n code: \"RENDERER_SETUP_FAILED\",\n message: \"Provide either an existing map instance or mapConfig to create one.\"\n });\n }\n\n if (this.options.mapFactory) {\n return this.options.mapFactory(this.options.mapConfig);\n }\n\n const maplibre = await import(\"maplibre-gl\");\n return new maplibre.Map(\n this.options.mapConfig as unknown as ConstructorParameters<typeof maplibre.Map>[0]\n ) as unknown as MapLibreLike;\n }\n\n private async whenMapReady(map: MapLibreLike): Promise<void> {\n if (this.isStyleReady(map) || !map.once) {\n return;\n }\n\n if (map.isStyleLoaded) {\n await new Promise<void>((resolve) => {\n let resolved = false;\n const resolveWhenStyleReady = () => {\n if (resolved) {\n return;\n }\n if (this.isStyleReady(map)) {\n resolved = true;\n resolve();\n return;\n }\n map.once?.(\"styledata\", resolveWhenStyleReady);\n };\n map.once?.(\"styledata\", resolveWhenStyleReady);\n map.once?.(\"load\", resolveWhenStyleReady);\n });\n return;\n }\n\n if (!map.loaded || map.loaded()) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n map.once?.(\"load\", () => resolve());\n });\n }\n\n private isStyleReady(map: MapLibreLike): boolean {\n return map.isStyleLoaded?.() ?? map.loaded?.() ?? true;\n }\n\n private handleError(code: GridError[\"code\"], message: string, cause: unknown): never {\n const gridError =\n cause instanceof GridError\n ? cause\n : new GridError({\n code,\n message: errorMessageWithCause(message, cause),\n cause,\n sourceId: this.options.source.id,\n variable: this.options.variable\n });\n this.options.onError?.(gridError);\n throw gridError;\n }\n}\n\nfunction errorMessageWithCause(message: string, cause: unknown): string {\n if (cause instanceof Error && cause.message) {\n return `${message} ${cause.message}`;\n }\n return message;\n}\n\nfunction omitSpatialSelectors<TSelectors extends Record<string, unknown>>(\n selectors: TSelectors,\n spatialDimensions: GridSpatialDimensions\n): TSelectors {\n return Object.fromEntries(\n Object.entries(selectors).filter(([dimensionName]) => {\n return dimensionName !== spatialDimensions.x && dimensionName !== spatialDimensions.y;\n })\n ) as TSelectors;\n}\n\nfunction normalizeLoadingState(\n state: boolean | Partial<GridLayerLoadingState>\n): GridLayerLoadingState {\n if (typeof state === \"boolean\") {\n return {\n loading: state,\n metadata: state,\n chunks: false,\n percent: state ? 35 : 100,\n stage: state ? \"metadata\" : \"complete\"\n };\n }\n\n const loading = Boolean(state.loading ?? state.metadata ?? state.chunks);\n const metadata = Boolean(state.metadata);\n const chunks = Boolean(state.chunks);\n return {\n loading,\n metadata,\n chunks,\n stage: state.stage ?? loadingStage(loading, metadata, chunks),\n percent:\n typeof state.percent === \"number\"\n ? Math.max(0, Math.min(100, state.percent))\n : loading\n ? loadingPercent(metadata, chunks)\n : 100\n };\n}\n\nfunction loadingStage(loading: boolean, metadata: boolean, chunks: boolean): GridLayerLoadingStage {\n if (!loading) {\n return \"complete\";\n }\n if (chunks) {\n return \"chunks\";\n }\n if (metadata) {\n return \"metadata\";\n }\n return \"layer\";\n}\n\nfunction loadingPercent(metadata: boolean, chunks: boolean): number {\n if (chunks) {\n return 85;\n }\n if (metadata) {\n return 45;\n }\n return 65;\n}\n\nfunction completeLoadingState(): GridLayerLoadingState {\n return {\n loading: false,\n metadata: false,\n chunks: false,\n percent: 100,\n stage: \"complete\"\n };\n}\n\ntype ZarrLayerConstructor = new (options: ZarrLayerFactoryOptions) => GridLayerInstance;\n\nlet zarrLayerConstructorPromise: Promise<ZarrLayerConstructor> | undefined;\n\nexport async function preloadDefaultZarrLayer(): Promise<void> {\n await loadDefaultZarrLayerConstructor();\n}\n\nasync function createDefaultZarrLayer(\n options: ZarrLayerFactoryOptions\n): Promise<GridLayerInstance> {\n const ZarrLayer = await loadDefaultZarrLayerConstructor();\n return new ZarrLayer(options);\n}\n\nasync function loadDefaultZarrLayerConstructor(): Promise<ZarrLayerConstructor> {\n zarrLayerConstructorPromise ??= import(\"@carbonplan/zarr-layer\")\n .then((module) => {\n const zarrLayerModule = module as unknown as {\n ZarrLayer?: ZarrLayerConstructor;\n default?: ZarrLayerConstructor;\n };\n const ZarrLayer = zarrLayerModule.ZarrLayer ?? zarrLayerModule.default;\n if (!ZarrLayer) {\n throw new GridError({\n code: \"RENDERER_SETUP_FAILED\",\n message: \"@carbonplan/zarr-layer did not export ZarrLayer.\"\n });\n }\n return ZarrLayer;\n })\n .catch((error: unknown) => {\n zarrLayerConstructorPromise = undefined;\n throw error;\n });\n return zarrLayerConstructorPromise;\n}\n"]}
|