@sqlrooms/deck 0.29.0-rc.10 → 0.29.0-rc.11
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/README.md +42 -6
- package/dist/DeckJsonMap.d.ts.map +1 -1
- package/dist/DeckJsonMap.js +2 -6
- package/dist/DeckJsonMap.js.map +1 -1
- package/dist/DeckJsonMapSpec.d.ts +875 -53
- package/dist/DeckJsonMapSpec.d.ts.map +1 -1
- package/dist/DeckJsonMapSpec.js +7 -0
- package/dist/DeckJsonMapSpec.js.map +1 -1
- package/dist/DeckMapDefaultStylesProvider.d.ts +3 -4
- package/dist/DeckMapDefaultStylesProvider.d.ts.map +1 -1
- package/dist/DeckMapDefaultStylesProvider.js +13 -7
- package/dist/DeckMapDefaultStylesProvider.js.map +1 -1
- package/dist/MapSettings.d.ts.map +1 -1
- package/dist/MapSettings.js +25 -11
- package/dist/MapSettings.js.map +1 -1
- package/dist/ai.d.ts +19 -5
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +60 -112
- package/dist/ai.js.map +1 -1
- package/dist/aiNormalize.d.ts +31 -0
- package/dist/aiNormalize.d.ts.map +1 -0
- package/dist/aiNormalize.js +629 -0
- package/dist/aiNormalize.js.map +1 -0
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +72 -8
- package/dist/dashboard.js.map +1 -1
- package/dist/dashboardConfig.d.ts +10 -1
- package/dist/dashboardConfig.d.ts.map +1 -1
- package/dist/dashboardConfig.js +55 -22
- package/dist/dashboardConfig.js.map +1 -1
- package/dist/datasets/PreparedDatasetStore.d.ts.map +1 -1
- package/dist/datasets/PreparedDatasetStore.js +31 -2
- package/dist/datasets/PreparedDatasetStore.js.map +1 -1
- package/dist/datasets/wrapGeometryAsWkb.d.ts +20 -0
- package/dist/datasets/wrapGeometryAsWkb.d.ts.map +1 -0
- package/dist/datasets/wrapGeometryAsWkb.js +65 -0
- package/dist/datasets/wrapGeometryAsWkb.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/json/compileGeoArrowAccessor.d.ts +5 -0
- package/dist/json/compileGeoArrowAccessor.d.ts.map +1 -1
- package/dist/json/compileGeoArrowAccessor.js +17 -3
- package/dist/json/compileGeoArrowAccessor.js.map +1 -1
- package/dist/json/createDeckJsonConfiguration.d.ts.map +1 -1
- package/dist/json/createDeckJsonConfiguration.js +85 -18
- package/dist/json/createDeckJsonConfiguration.js.map +1 -1
- package/dist/json/extractColorScaleLegends.d.ts.map +1 -1
- package/dist/json/extractColorScaleLegends.js +21 -7
- package/dist/json/extractColorScaleLegends.js.map +1 -1
- package/dist/json/layers/DeckH3HexagonLayer.d.ts.map +1 -1
- package/dist/json/layers/DeckH3HexagonLayer.js +9 -14
- package/dist/json/layers/DeckH3HexagonLayer.js.map +1 -1
- package/dist/json/layers/h3IndexFormat.d.ts +6 -0
- package/dist/json/layers/h3IndexFormat.d.ts.map +1 -0
- package/dist/json/layers/h3IndexFormat.js +17 -0
- package/dist/json/layers/h3IndexFormat.js.map +1 -0
- package/dist/json/layers/index.d.ts +1 -0
- package/dist/json/layers/index.d.ts.map +1 -1
- package/dist/json/layers/index.js +1 -0
- package/dist/json/layers/index.js.map +1 -1
- package/dist/json/rewriteGeoArrowAccessors.d.ts.map +1 -1
- package/dist/json/rewriteGeoArrowAccessors.js +9 -0
- package/dist/json/rewriteGeoArrowAccessors.js.map +1 -1
- package/dist/json/scaleFunction.d.ts +30 -0
- package/dist/json/scaleFunction.d.ts.map +1 -0
- package/dist/json/scaleFunction.js +126 -0
- package/dist/json/scaleFunction.js.map +1 -0
- package/dist/mapAiConfig.d.ts +2 -0
- package/dist/mapAiConfig.d.ts.map +1 -1
- package/dist/mapAiConfig.js +2 -1
- package/dist/mapAiConfig.js.map +1 -1
- package/dist/mapAiSharedInstructions.d.ts +3 -0
- package/dist/mapAiSharedInstructions.d.ts.map +1 -0
- package/dist/mapAiSharedInstructions.js +16 -0
- package/dist/mapAiSharedInstructions.js.map +1 -0
- package/dist/mapConfig.d.ts +6 -0
- package/dist/mapConfig.d.ts.map +1 -1
- package/dist/mapConfig.js.map +1 -1
- package/dist/mapConfigUtils.d.ts.map +1 -1
- package/dist/mapConfigUtils.js +2 -0
- package/dist/mapConfigUtils.js.map +1 -1
- package/dist/mapFit.d.ts +16 -0
- package/dist/mapFit.d.ts.map +1 -1
- package/dist/mapFit.js +208 -30
- package/dist/mapFit.js.map +1 -1
- package/dist/mapLayerConfigUtils.d.ts +9 -1
- package/dist/mapLayerConfigUtils.d.ts.map +1 -1
- package/dist/mapLayerConfigUtils.js +62 -12
- package/dist/mapLayerConfigUtils.js.map +1 -1
- package/dist/mapResourceAuthoring.d.ts +2 -0
- package/dist/mapResourceAuthoring.d.ts.map +1 -1
- package/dist/mapResourceAuthoring.js +402 -16
- package/dist/mapResourceAuthoring.js.map +1 -1
- package/dist/mosaic.d.ts +1 -1
- package/dist/mosaic.d.ts.map +1 -1
- package/dist/mosaic.js.map +1 -1
- package/dist/prepare/geoarrow.js.map +1 -1
- package/dist/prepare/wkbDecoder.d.ts +10 -0
- package/dist/prepare/wkbDecoder.d.ts.map +1 -1
- package/dist/prepare/wkbDecoder.js +93 -18
- package/dist/prepare/wkbDecoder.js.map +1 -1
- package/dist/prepare/wkbParser.d.ts +7 -0
- package/dist/prepare/wkbParser.d.ts.map +1 -1
- package/dist/prepare/wkbParser.js +21 -0
- package/dist/prepare/wkbParser.js.map +1 -1
- package/dist/selectStarAsWkbCollision.d.ts +3 -0
- package/dist/selectStarAsWkbCollision.d.ts.map +1 -0
- package/dist/selectStarAsWkbCollision.js +78 -0
- package/dist/selectStarAsWkbCollision.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/useDeckMapFitToBounds.d.ts.map +1 -1
- package/dist/useDeckMapFitToBounds.js +1 -1
- package/dist/useDeckMapFitToBounds.js.map +1 -1
- package/package.json +15 -15
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare const WKB_POINT = 1;
|
|
2
2
|
export declare const WKB_LINESTRING = 2;
|
|
3
3
|
export declare const WKB_POLYGON = 3;
|
|
4
|
+
export declare const WKB_MULTILINESTRING = 5;
|
|
4
5
|
export declare const WKB_MULTIPOLYGON = 6;
|
|
5
6
|
export type WKBHeader = {
|
|
6
7
|
view: DataView;
|
|
@@ -19,6 +20,12 @@ export declare function readWKBPointXY(header: WKBHeader): [number, number] | nu
|
|
|
19
20
|
* Reads a WKB LineString and returns an array of [x, y] coordinate pairs.
|
|
20
21
|
*/
|
|
21
22
|
export declare function readWKBLineStringXY(buf: ArrayBuffer, header: WKBHeader): Array<[number, number]> | null;
|
|
23
|
+
/**
|
|
24
|
+
* Reads a WKB MultiLineString with a single part as one coordinate sequence
|
|
25
|
+
* for PathLayer. Multi-part MultiLineStrings are rejected — flattening would
|
|
26
|
+
* draw artificial segments between disjoint parts.
|
|
27
|
+
*/
|
|
28
|
+
export declare function readWKBMultiLineStringXY(buf: ArrayBuffer, header: WKBHeader): Array<[number, number]> | null;
|
|
22
29
|
export declare function visitWKBPolygonCoordinates(buf: ArrayBuffer, header: WKBHeader, visitor: WKBPolygonCoordinateVisitor): number | null;
|
|
23
30
|
export declare function visitWKBMultiPolygonCoordinates(buf: ArrayBuffer, header: WKBHeader, visitor: WKBPolygonCoordinateVisitor): boolean;
|
|
24
31
|
//# sourceMappingURL=wkbParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wkbParser.d.ts","sourceRoot":"","sources":["../../src/prepare/wkbParser.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAyBlC,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,CAAC;AAIF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,WAAW,EAChB,WAAW,SAAI,GACd,SAAS,GAAG,IAAI,CA2BlB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAYzE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,GAChB,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAkBhC;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,2BAA2B,GACnC,MAAM,GAAG,IAAI,CAyBf;AAED,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAiBT"}
|
|
1
|
+
{"version":3,"file":"wkbParser.d.ts","sourceRoot":"","sources":["../../src/prepare/wkbParser.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAyBlC,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C,CAAC;AAIF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,WAAW,EAChB,WAAW,SAAI,GACd,SAAS,GAAG,IAAI,CA2BlB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAYzE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,GAChB,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAkBhC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,GAChB,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAYhC;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,2BAA2B,GACnC,MAAM,GAAG,IAAI,CAyBf;AAED,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAiBT"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export const WKB_POINT = 1;
|
|
2
2
|
export const WKB_LINESTRING = 2;
|
|
3
3
|
export const WKB_POLYGON = 3;
|
|
4
|
+
export const WKB_MULTILINESTRING = 5;
|
|
4
5
|
export const WKB_MULTIPOLYGON = 6;
|
|
5
6
|
// Local WKB parser used until geoarrow-js ships WKB to GeoArrow parsing:
|
|
6
7
|
// See: https://github.com/geoarrow/geoarrow-js/issues/54
|
|
@@ -87,6 +88,26 @@ export function readWKBLineStringXY(buf, header) {
|
|
|
87
88
|
}
|
|
88
89
|
return coords;
|
|
89
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Reads a WKB MultiLineString with a single part as one coordinate sequence
|
|
93
|
+
* for PathLayer. Multi-part MultiLineStrings are rejected — flattening would
|
|
94
|
+
* draw artificial segments between disjoint parts.
|
|
95
|
+
*/
|
|
96
|
+
export function readWKBMultiLineStringXY(buf, header) {
|
|
97
|
+
if (header.geomType !== WKB_MULTILINESTRING)
|
|
98
|
+
return null;
|
|
99
|
+
let offset = header.offset;
|
|
100
|
+
if (!hasBytes(buf, offset, WKB_UINT32_BYTES))
|
|
101
|
+
return null;
|
|
102
|
+
const numLines = header.view.getUint32(offset, header.isLE);
|
|
103
|
+
offset += WKB_UINT32_BYTES;
|
|
104
|
+
if (numLines !== 1)
|
|
105
|
+
return null;
|
|
106
|
+
const lineHeader = parseWKBHeader(buf, offset);
|
|
107
|
+
if (!lineHeader || lineHeader.geomType !== WKB_LINESTRING)
|
|
108
|
+
return null;
|
|
109
|
+
return readWKBLineStringXY(buf, lineHeader);
|
|
110
|
+
}
|
|
90
111
|
export function visitWKBPolygonCoordinates(buf, header, visitor) {
|
|
91
112
|
if (header.geomType !== WKB_POLYGON)
|
|
92
113
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wkbParser.js","sourceRoot":"","sources":["../../src/prepare/wkbParser.ts"],"names":[],"mappings":"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","sourcesContent":["export const WKB_POINT = 1;\nexport const WKB_LINESTRING = 2;\nexport const WKB_POLYGON = 3;\nexport const WKB_MULTIPOLYGON = 6;\n\n// Local WKB parser used until geoarrow-js ships WKB to GeoArrow parsing:\n// See: https://github.com/geoarrow/geoarrow-js/issues/54\nconst WKB_BYTE_ORDER_BYTES = 1;\nconst WKB_GEOMETRY_TYPE_BYTES = 4;\nconst WKB_HEADER_BYTES = WKB_BYTE_ORDER_BYTES + WKB_GEOMETRY_TYPE_BYTES;\nconst WKB_GEOMETRY_TYPE_OFFSET = WKB_BYTE_ORDER_BYTES;\nconst WKB_SRID_BYTES = 4;\nconst WKB_UINT32_BYTES = 4;\nconst XY_COORDINATE_BYTES = 16;\nconst OPTIONAL_COORDINATE_DIMENSION_BYTES = 8;\nconst Y_COORDINATE_OFFSET_BYTES = 8;\n\n// PostGIS EWKB stores Z/M/SRID metadata in the high bits\n// of the WKB type word.\nconst EWKB_Z_FLAG = 0x80000000;\nconst EWKB_M_FLAG = 0x40000000;\nconst EWKB_SRID_FLAG = 0x20000000;\nconst ISO_WKB_TYPE_MASK = 0xffff;\nconst ISO_WKB_Z_OFFSET = 1000;\nconst ISO_WKB_M_OFFSET = 2000;\nconst ISO_WKB_ZM_OFFSET = 3000;\nconst ISO_WKB_MAX_BASE_TYPE = 7;\n\nexport type WKBHeader = {\n view: DataView;\n isLE: boolean;\n geomType: number;\n offset: number;\n coordBytes: number;\n};\n\nexport type WKBPolygonCoordinateVisitor = {\n onRingStart: () => void;\n onCoordinate: (x: number, y: number) => void;\n};\n\n// Reads the shared WKB/EWKB prefix like byte order, geometry type, optional SRID\n// and bytes per coordinate. Point/polygon readers use this to find their data.\nexport function parseWKBHeader(\n buf: ArrayBuffer,\n startOffset = 0,\n): WKBHeader | null {\n if (buf.byteLength < startOffset + WKB_HEADER_BYTES) return null;\n const view = new DataView(buf);\n const isLE = view.getUint8(startOffset) === 1;\n const rawType = view.getUint32(startOffset + WKB_GEOMETRY_TYPE_OFFSET, isLE);\n const isoType = rawType & ISO_WKB_TYPE_MASK;\n const isoZ = hasIsoWKBTypeOffset(isoType, ISO_WKB_Z_OFFSET);\n const isoM = hasIsoWKBTypeOffset(isoType, ISO_WKB_M_OFFSET);\n const isoZM = hasIsoWKBTypeOffset(isoType, ISO_WKB_ZM_OFFSET);\n\n const hasZ = (rawType & EWKB_Z_FLAG) !== 0 || isoZ || isoZM;\n const hasM = (rawType & EWKB_M_FLAG) !== 0 || isoM || isoZM;\n const hasSRID = (rawType & EWKB_SRID_FLAG) !== 0;\n\n let base = isoType;\n if (isoZM) base -= ISO_WKB_ZM_OFFSET;\n else if (isoM) base -= ISO_WKB_M_OFFSET;\n else if (isoZ) base -= ISO_WKB_Z_OFFSET;\n\n let offset = startOffset + WKB_HEADER_BYTES;\n if (hasSRID) offset += WKB_SRID_BYTES;\n\n const coordBytes =\n XY_COORDINATE_BYTES +\n (hasZ ? OPTIONAL_COORDINATE_DIMENSION_BYTES : 0) +\n (hasM ? OPTIONAL_COORDINATE_DIMENSION_BYTES : 0);\n return {view, isLE, geomType: base, offset, coordBytes};\n}\n\nexport function readWKBPointXY(header: WKBHeader): [number, number] | null {\n if (header.geomType !== WKB_POINT) return null;\n if (!hasBytes(header.view.buffer, header.offset, header.coordBytes)) {\n return null;\n }\n return [\n header.view.getFloat64(header.offset, header.isLE),\n header.view.getFloat64(\n header.offset + Y_COORDINATE_OFFSET_BYTES,\n header.isLE,\n ),\n ];\n}\n\n/**\n * Reads a WKB LineString and returns an array of [x, y] coordinate pairs.\n */\nexport function readWKBLineStringXY(\n buf: ArrayBuffer,\n header: WKBHeader,\n): Array<[number, number]> | null {\n if (header.geomType !== WKB_LINESTRING) return null;\n\n const {view, isLE, offset: headerOffset, coordBytes} = header;\n let offset = headerOffset;\n if (!hasBytes(buf, offset, WKB_UINT32_BYTES)) return null;\n const numPoints = view.getUint32(offset, isLE);\n offset += WKB_UINT32_BYTES;\n\n const coords: Array<[number, number]> = [];\n for (let i = 0; i < numPoints; i++) {\n if (!hasBytes(buf, offset, coordBytes)) return null;\n const x = view.getFloat64(offset, isLE);\n const y = view.getFloat64(offset + Y_COORDINATE_OFFSET_BYTES, isLE);\n coords.push([x, y]);\n offset += coordBytes;\n }\n return coords;\n}\n\nexport function visitWKBPolygonCoordinates(\n buf: ArrayBuffer,\n header: WKBHeader,\n visitor: WKBPolygonCoordinateVisitor,\n): number | null {\n if (header.geomType !== WKB_POLYGON) return null;\n\n const {view, isLE, offset: headerOffset, coordBytes} = header;\n let offset = headerOffset;\n if (!hasBytes(buf, offset, WKB_UINT32_BYTES)) return null;\n const numRings = view.getUint32(offset, isLE);\n offset += WKB_UINT32_BYTES;\n\n for (let ringIndex = 0; ringIndex < numRings; ringIndex++) {\n visitor.onRingStart();\n if (!hasBytes(buf, offset, WKB_UINT32_BYTES)) return null;\n const numPoints = view.getUint32(offset, isLE);\n offset += WKB_UINT32_BYTES;\n for (let pointIndex = 0; pointIndex < numPoints; pointIndex++) {\n if (!hasBytes(buf, offset, coordBytes)) return null;\n visitor.onCoordinate(\n view.getFloat64(offset, isLE),\n view.getFloat64(offset + Y_COORDINATE_OFFSET_BYTES, isLE),\n );\n offset += coordBytes;\n }\n }\n\n return offset <= buf.byteLength ? offset : null;\n}\n\nexport function visitWKBMultiPolygonCoordinates(\n buf: ArrayBuffer,\n header: WKBHeader,\n visitor: WKBPolygonCoordinateVisitor,\n): boolean {\n if (header.geomType !== WKB_MULTIPOLYGON) return false;\n\n let offset = header.offset;\n if (!hasBytes(buf, offset, WKB_UINT32_BYTES)) return false;\n const numPolygons = header.view.getUint32(offset, header.isLE);\n offset += WKB_UINT32_BYTES;\n\n for (let polygonIndex = 0; polygonIndex < numPolygons; polygonIndex++) {\n const polygonHeader = parseWKBHeader(buf, offset);\n if (!polygonHeader || polygonHeader.geomType !== WKB_POLYGON) return false;\n const nextOffset = visitWKBPolygonCoordinates(buf, polygonHeader, visitor);\n if (nextOffset == null) return false;\n offset = nextOffset;\n }\n\n return offset <= buf.byteLength;\n}\n\nfunction hasIsoWKBTypeOffset(isoType: number, offset: number): boolean {\n return isoType >= offset && isoType <= offset + ISO_WKB_MAX_BASE_TYPE;\n}\n\nfunction hasBytes(\n buf: {byteLength: number},\n offset: number,\n byteLength: number,\n) {\n return offset >= 0 && offset + byteLength <= buf.byteLength;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"wkbParser.js","sourceRoot":"","sources":["../../src/prepare/wkbParser.ts"],"names":[],"mappings":"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","sourcesContent":["export const WKB_POINT = 1;\nexport const WKB_LINESTRING = 2;\nexport const WKB_POLYGON = 3;\nexport const WKB_MULTILINESTRING = 5;\nexport const WKB_MULTIPOLYGON = 6;\n\n// Local WKB parser used until geoarrow-js ships WKB to GeoArrow parsing:\n// See: https://github.com/geoarrow/geoarrow-js/issues/54\nconst WKB_BYTE_ORDER_BYTES = 1;\nconst WKB_GEOMETRY_TYPE_BYTES = 4;\nconst WKB_HEADER_BYTES = WKB_BYTE_ORDER_BYTES + WKB_GEOMETRY_TYPE_BYTES;\nconst WKB_GEOMETRY_TYPE_OFFSET = WKB_BYTE_ORDER_BYTES;\nconst WKB_SRID_BYTES = 4;\nconst WKB_UINT32_BYTES = 4;\nconst XY_COORDINATE_BYTES = 16;\nconst OPTIONAL_COORDINATE_DIMENSION_BYTES = 8;\nconst Y_COORDINATE_OFFSET_BYTES = 8;\n\n// PostGIS EWKB stores Z/M/SRID metadata in the high bits\n// of the WKB type word.\nconst EWKB_Z_FLAG = 0x80000000;\nconst EWKB_M_FLAG = 0x40000000;\nconst EWKB_SRID_FLAG = 0x20000000;\nconst ISO_WKB_TYPE_MASK = 0xffff;\nconst ISO_WKB_Z_OFFSET = 1000;\nconst ISO_WKB_M_OFFSET = 2000;\nconst ISO_WKB_ZM_OFFSET = 3000;\nconst ISO_WKB_MAX_BASE_TYPE = 7;\n\nexport type WKBHeader = {\n view: DataView;\n isLE: boolean;\n geomType: number;\n offset: number;\n coordBytes: number;\n};\n\nexport type WKBPolygonCoordinateVisitor = {\n onRingStart: () => void;\n onCoordinate: (x: number, y: number) => void;\n};\n\n// Reads the shared WKB/EWKB prefix like byte order, geometry type, optional SRID\n// and bytes per coordinate. Point/polygon readers use this to find their data.\nexport function parseWKBHeader(\n buf: ArrayBuffer,\n startOffset = 0,\n): WKBHeader | null {\n if (buf.byteLength < startOffset + WKB_HEADER_BYTES) return null;\n const view = new DataView(buf);\n const isLE = view.getUint8(startOffset) === 1;\n const rawType = view.getUint32(startOffset + WKB_GEOMETRY_TYPE_OFFSET, isLE);\n const isoType = rawType & ISO_WKB_TYPE_MASK;\n const isoZ = hasIsoWKBTypeOffset(isoType, ISO_WKB_Z_OFFSET);\n const isoM = hasIsoWKBTypeOffset(isoType, ISO_WKB_M_OFFSET);\n const isoZM = hasIsoWKBTypeOffset(isoType, ISO_WKB_ZM_OFFSET);\n\n const hasZ = (rawType & EWKB_Z_FLAG) !== 0 || isoZ || isoZM;\n const hasM = (rawType & EWKB_M_FLAG) !== 0 || isoM || isoZM;\n const hasSRID = (rawType & EWKB_SRID_FLAG) !== 0;\n\n let base = isoType;\n if (isoZM) base -= ISO_WKB_ZM_OFFSET;\n else if (isoM) base -= ISO_WKB_M_OFFSET;\n else if (isoZ) base -= ISO_WKB_Z_OFFSET;\n\n let offset = startOffset + WKB_HEADER_BYTES;\n if (hasSRID) offset += WKB_SRID_BYTES;\n\n const coordBytes =\n XY_COORDINATE_BYTES +\n (hasZ ? OPTIONAL_COORDINATE_DIMENSION_BYTES : 0) +\n (hasM ? OPTIONAL_COORDINATE_DIMENSION_BYTES : 0);\n return {view, isLE, geomType: base, offset, coordBytes};\n}\n\nexport function readWKBPointXY(header: WKBHeader): [number, number] | null {\n if (header.geomType !== WKB_POINT) return null;\n if (!hasBytes(header.view.buffer, header.offset, header.coordBytes)) {\n return null;\n }\n return [\n header.view.getFloat64(header.offset, header.isLE),\n header.view.getFloat64(\n header.offset + Y_COORDINATE_OFFSET_BYTES,\n header.isLE,\n ),\n ];\n}\n\n/**\n * Reads a WKB LineString and returns an array of [x, y] coordinate pairs.\n */\nexport function readWKBLineStringXY(\n buf: ArrayBuffer,\n header: WKBHeader,\n): Array<[number, number]> | null {\n if (header.geomType !== WKB_LINESTRING) return null;\n\n const {view, isLE, offset: headerOffset, coordBytes} = header;\n let offset = headerOffset;\n if (!hasBytes(buf, offset, WKB_UINT32_BYTES)) return null;\n const numPoints = view.getUint32(offset, isLE);\n offset += WKB_UINT32_BYTES;\n\n const coords: Array<[number, number]> = [];\n for (let i = 0; i < numPoints; i++) {\n if (!hasBytes(buf, offset, coordBytes)) return null;\n const x = view.getFloat64(offset, isLE);\n const y = view.getFloat64(offset + Y_COORDINATE_OFFSET_BYTES, isLE);\n coords.push([x, y]);\n offset += coordBytes;\n }\n return coords;\n}\n\n/**\n * Reads a WKB MultiLineString with a single part as one coordinate sequence\n * for PathLayer. Multi-part MultiLineStrings are rejected — flattening would\n * draw artificial segments between disjoint parts.\n */\nexport function readWKBMultiLineStringXY(\n buf: ArrayBuffer,\n header: WKBHeader,\n): Array<[number, number]> | null {\n if (header.geomType !== WKB_MULTILINESTRING) return null;\n\n let offset = header.offset;\n if (!hasBytes(buf, offset, WKB_UINT32_BYTES)) return null;\n const numLines = header.view.getUint32(offset, header.isLE);\n offset += WKB_UINT32_BYTES;\n if (numLines !== 1) return null;\n\n const lineHeader = parseWKBHeader(buf, offset);\n if (!lineHeader || lineHeader.geomType !== WKB_LINESTRING) return null;\n return readWKBLineStringXY(buf, lineHeader);\n}\n\nexport function visitWKBPolygonCoordinates(\n buf: ArrayBuffer,\n header: WKBHeader,\n visitor: WKBPolygonCoordinateVisitor,\n): number | null {\n if (header.geomType !== WKB_POLYGON) return null;\n\n const {view, isLE, offset: headerOffset, coordBytes} = header;\n let offset = headerOffset;\n if (!hasBytes(buf, offset, WKB_UINT32_BYTES)) return null;\n const numRings = view.getUint32(offset, isLE);\n offset += WKB_UINT32_BYTES;\n\n for (let ringIndex = 0; ringIndex < numRings; ringIndex++) {\n visitor.onRingStart();\n if (!hasBytes(buf, offset, WKB_UINT32_BYTES)) return null;\n const numPoints = view.getUint32(offset, isLE);\n offset += WKB_UINT32_BYTES;\n for (let pointIndex = 0; pointIndex < numPoints; pointIndex++) {\n if (!hasBytes(buf, offset, coordBytes)) return null;\n visitor.onCoordinate(\n view.getFloat64(offset, isLE),\n view.getFloat64(offset + Y_COORDINATE_OFFSET_BYTES, isLE),\n );\n offset += coordBytes;\n }\n }\n\n return offset <= buf.byteLength ? offset : null;\n}\n\nexport function visitWKBMultiPolygonCoordinates(\n buf: ArrayBuffer,\n header: WKBHeader,\n visitor: WKBPolygonCoordinateVisitor,\n): boolean {\n if (header.geomType !== WKB_MULTIPOLYGON) return false;\n\n let offset = header.offset;\n if (!hasBytes(buf, offset, WKB_UINT32_BYTES)) return false;\n const numPolygons = header.view.getUint32(offset, header.isLE);\n offset += WKB_UINT32_BYTES;\n\n for (let polygonIndex = 0; polygonIndex < numPolygons; polygonIndex++) {\n const polygonHeader = parseWKBHeader(buf, offset);\n if (!polygonHeader || polygonHeader.geomType !== WKB_POLYGON) return false;\n const nextOffset = visitWKBPolygonCoordinates(buf, polygonHeader, visitor);\n if (nextOffset == null) return false;\n offset = nextOffset;\n }\n\n return offset <= buf.byteLength;\n}\n\nfunction hasIsoWKBTypeOffset(isoType: number, offset: number): boolean {\n return isoType >= offset && isoType <= offset + ISO_WKB_MAX_BASE_TYPE;\n}\n\nfunction hasBytes(\n buf: {byteLength: number},\n offset: number,\n byteLength: number,\n) {\n return offset >= 0 && offset + byteLength <= buf.byteLength;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectStarAsWkbCollision.d.ts","sourceRoot":"","sources":["../src/selectStarAsWkbCollision.ts"],"names":[],"mappings":"AA8BA,8EAA8E;AAC9E,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CA0ChE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects `SELECT *, ST_AsWKB(...) AS col` same-list collisions (DuckDB renames
|
|
3
|
+
* the WKB alias). Detection only — no rewrite. Does not flag sampling wrappers
|
|
4
|
+
* like `SELECT * FROM (… ST_AsWKB …)`.
|
|
5
|
+
*/
|
|
6
|
+
function findTopLevelFromIndex(sql, selectStarEnd) {
|
|
7
|
+
let depth = 0;
|
|
8
|
+
for (let i = selectStarEnd; i < sql.length; i++) {
|
|
9
|
+
const ch = sql[i];
|
|
10
|
+
if (ch === '(') {
|
|
11
|
+
depth += 1;
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
if (ch === ')') {
|
|
15
|
+
if (depth === 0)
|
|
16
|
+
return -1;
|
|
17
|
+
depth -= 1;
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (depth !== 0)
|
|
21
|
+
continue;
|
|
22
|
+
if ((sql[i] === 'F' || sql[i] === 'f') &&
|
|
23
|
+
/^FROM\b/i.test(sql.slice(i)) &&
|
|
24
|
+
(i === 0 || !/[A-Za-z0-9_]/.test(sql[i - 1]))) {
|
|
25
|
+
return i;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return -1;
|
|
29
|
+
}
|
|
30
|
+
/** True when SELECT * mixes with `ST_AsWKB(...) AS` reusing an inner name. */
|
|
31
|
+
export function hasSelectStarAsWkbCollision(sql) {
|
|
32
|
+
const re = /\bSELECT\s+(?:[A-Za-z_][\w$]*\.)?\*/gi;
|
|
33
|
+
let match;
|
|
34
|
+
while ((match = re.exec(sql)) !== null) {
|
|
35
|
+
const afterStar = sql.slice(match.index + match[0].length);
|
|
36
|
+
if (/^\s*(EXCLUDE|REPLACE)\b/i.test(afterStar))
|
|
37
|
+
continue;
|
|
38
|
+
// `SELECT * FROM ...` has no sibling projections — not a collision.
|
|
39
|
+
if (!/^\s*,/.test(afterStar))
|
|
40
|
+
continue;
|
|
41
|
+
const fromAt = findTopLevelFromIndex(sql, match.index + match[0].length);
|
|
42
|
+
if (fromAt < 0)
|
|
43
|
+
continue;
|
|
44
|
+
const selectList = sql.slice(match.index, fromAt);
|
|
45
|
+
const asWkbRe = /\bST_AsWKB\s*\(/gi;
|
|
46
|
+
let asWkb;
|
|
47
|
+
while ((asWkb = asWkbRe.exec(selectList)) !== null) {
|
|
48
|
+
let depth = 1;
|
|
49
|
+
let i = asWkb.index + asWkb[0].length;
|
|
50
|
+
const exprStart = i;
|
|
51
|
+
while (i < selectList.length && depth > 0) {
|
|
52
|
+
const ch = selectList[i];
|
|
53
|
+
if (ch === '(')
|
|
54
|
+
depth += 1;
|
|
55
|
+
else if (ch === ')')
|
|
56
|
+
depth -= 1;
|
|
57
|
+
i += 1;
|
|
58
|
+
}
|
|
59
|
+
if (depth !== 0)
|
|
60
|
+
continue;
|
|
61
|
+
const exprBody = selectList.slice(exprStart, i - 1);
|
|
62
|
+
const asMatch = selectList
|
|
63
|
+
.slice(i)
|
|
64
|
+
.match(/^\s+AS\s+("([^"]+)"|([A-Za-z_][\w$]*))/i);
|
|
65
|
+
if (!asMatch)
|
|
66
|
+
continue;
|
|
67
|
+
const col = asMatch[2] ?? asMatch[3];
|
|
68
|
+
if (!col)
|
|
69
|
+
continue;
|
|
70
|
+
// Alias reuse inside ST_AsWKB only (`AS geom` collision); new aliases are fine.
|
|
71
|
+
const aliasRe = new RegExp(`(^|[^A-Za-z0-9_])${col.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}([^A-Za-z0-9_]|$)`, 'i');
|
|
72
|
+
if (aliasRe.test(exprBody))
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=selectStarAsWkbCollision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectStarAsWkbCollision.js","sourceRoot":"","sources":["../src/selectStarAsWkbCollision.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Detects `SELECT *, ST_AsWKB(...) AS col` same-list collisions (DuckDB renames\n * the WKB alias). Detection only — no rewrite. Does not flag sampling wrappers\n * like `SELECT * FROM (… ST_AsWKB …)`.\n */\nfunction findTopLevelFromIndex(sql: string, selectStarEnd: number): number {\n let depth = 0;\n for (let i = selectStarEnd; i < sql.length; i++) {\n const ch = sql[i];\n if (ch === '(') {\n depth += 1;\n continue;\n }\n if (ch === ')') {\n if (depth === 0) return -1;\n depth -= 1;\n continue;\n }\n if (depth !== 0) continue;\n if (\n (sql[i] === 'F' || sql[i] === 'f') &&\n /^FROM\\b/i.test(sql.slice(i)) &&\n (i === 0 || !/[A-Za-z0-9_]/.test(sql[i - 1]!))\n ) {\n return i;\n }\n }\n return -1;\n}\n\n/** True when SELECT * mixes with `ST_AsWKB(...) AS` reusing an inner name. */\nexport function hasSelectStarAsWkbCollision(sql: string): boolean {\n const re = /\\bSELECT\\s+(?:[A-Za-z_][\\w$]*\\.)?\\*/gi;\n let match: RegExpExecArray | null;\n while ((match = re.exec(sql)) !== null) {\n const afterStar = sql.slice(match.index + match[0].length);\n if (/^\\s*(EXCLUDE|REPLACE)\\b/i.test(afterStar)) continue;\n // `SELECT * FROM ...` has no sibling projections — not a collision.\n if (!/^\\s*,/.test(afterStar)) continue;\n\n const fromAt = findTopLevelFromIndex(sql, match.index + match[0].length);\n if (fromAt < 0) continue;\n const selectList = sql.slice(match.index, fromAt);\n\n const asWkbRe = /\\bST_AsWKB\\s*\\(/gi;\n let asWkb: RegExpExecArray | null;\n while ((asWkb = asWkbRe.exec(selectList)) !== null) {\n let depth = 1;\n let i = asWkb.index + asWkb[0].length;\n const exprStart = i;\n while (i < selectList.length && depth > 0) {\n const ch = selectList[i];\n if (ch === '(') depth += 1;\n else if (ch === ')') depth -= 1;\n i += 1;\n }\n if (depth !== 0) continue;\n const exprBody = selectList.slice(exprStart, i - 1);\n const asMatch = selectList\n .slice(i)\n .match(/^\\s+AS\\s+(\"([^\"]+)\"|([A-Za-z_][\\w$]*))/i);\n if (!asMatch) continue;\n const col = asMatch[2] ?? asMatch[3];\n if (!col) continue;\n // Alias reuse inside ST_AsWKB only (`AS geom` collision); new aliases are fine.\n const aliasRe = new RegExp(\n `(^|[^A-Za-z0-9_])${col.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}([^A-Za-z0-9_]|$)`,\n 'i',\n );\n if (aliasRe.test(exprBody)) return true;\n }\n }\n return false;\n}\n"]}
|
package/dist/types.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ type DeckDatasetBase = {
|
|
|
9
9
|
geometryColumn?: string;
|
|
10
10
|
geometryEncodingHint?: GeometryEncodingHint;
|
|
11
11
|
};
|
|
12
|
-
export type DeckAutoLayerType = 'GeoJsonLayer' | 'GeoArrowScatterplotLayer' | 'GeoArrowHeatmapLayer' | 'GeoArrowColumnLayer' | 'GeoArrowPathLayer' | 'GeoArrowPolygonLayer' | 'GeoArrowArcLayer' | 'GeoArrowTripsLayer' | 'GeoArrowH3HexagonLayer';
|
|
12
|
+
export type DeckAutoLayerType = 'GeoJsonLayer' | 'GeoArrowScatterplotLayer' | 'GeoArrowHeatmapLayer' | 'GeoArrowColumnLayer' | 'GeoArrowPathLayer' | 'GeoArrowPolygonLayer' | 'GeoArrowSolidPolygonLayer' | 'GeoArrowArcLayer' | 'GeoArrowTripsLayer' | 'GeoArrowH3HexagonLayer';
|
|
13
13
|
export type DeckSqlDatasetInput = DeckDatasetBase & {
|
|
14
14
|
/**
|
|
15
15
|
* Literal SQL query used as the full dataset source.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,cAAc,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AAEpD,KAAK,SAAS,GAAG,cAAc,CAAC,OAAO,WAAW,CAAC,CAAC;AACpD,OAAO,KAAK,EAAC,oBAAoB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAE/E,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,KAAK,eAAe,GAAG;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,0BAA0B,GAC1B,sBAAsB,GACtB,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,GACtB,2BAA2B,GAC3B,kBAAkB,GAClB,oBAAoB,GACpB,wBAAwB,CAAC;AAE7B,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD;;;;;;OAMG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;AAEpC,MAAM,MAAM,0BAA0B,GAAG,eAAe,GAAG;IACzD,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,qBAAqB,GACrB,0BAA0B,CAAC;AAE/B,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAChC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAC,GACnB;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAA;CAAC,GAChD;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,CAAC;AAEpC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,KAAK,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,qBAAqB,CAAC,EAAE,CACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,KAC7C,IAAI,CAAC;IACV,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC3C,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,GACtB,KAAK,IAAI,mBAAmB,CAE9B;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,gBAAgB,GACtB,KAAK,IAAI,qBAAqB,CAEhC;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,gBAAgB,GACtB,KAAK,IAAI,0BAA0B,CAErC"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAqHA,MAAM,UAAU,iBAAiB,CAC/B,KAAuB;IAEvB,OAAO,UAAU,IAAI,KAAK,CAAC;AAC7B,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CACjC,KAAuB;IAEvB,OAAO,WAAW,IAAI,KAAK,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAuB;IAEvB,OAAO,YAAY,IAAI,KAAK,CAAC;AAC/B,CAAC","sourcesContent":["import type * as arrow from 'apache-arrow';\nimport type {ComponentProps, ReactNode} from 'react';\nimport type DeckGLReact from '@deck.gl/react';\nimport type {MapProps} from 'react-map-gl/maplibre';\n\ntype DeckProps = ComponentProps<typeof DeckGLReact>;\nimport type {GeometryEncodingHint, PreparedDeckDataset} from './prepare/types';\n\nexport type {\n ColorScaleFunction,\n DeckJsonMapLayerSpec,\n DeckJsonMapSpec,\n LayerBindingConfig,\n LayerBindingProps,\n} from './DeckJsonMapSpec';\n\ntype DeckDatasetBase = {\n geometryColumn?: string;\n geometryEncodingHint?: GeometryEncodingHint;\n};\n\nexport type DeckAutoLayerType =\n | 'GeoJsonLayer'\n | 'GeoArrowScatterplotLayer'\n | 'GeoArrowHeatmapLayer'\n | 'GeoArrowColumnLayer'\n | 'GeoArrowPathLayer'\n | 'GeoArrowPolygonLayer'\n | 'GeoArrowSolidPolygonLayer'\n | 'GeoArrowArcLayer'\n | 'GeoArrowTripsLayer'\n | 'GeoArrowH3HexagonLayer';\n\nexport type DeckSqlDatasetInput = DeckDatasetBase & {\n /**\n * Literal SQL query used as the full dataset source.\n *\n * SQLRooms does not rewrite this query when dashboard selected tables change.\n * Use `DeckTableDatasetInput` when a dataset should follow a structured\n * table source.\n */\n sqlQuery: string;\n};\n\n/**\n * Structured table-backed dataset source.\n *\n * `tableName` identifies the source relation. When `transformSql` is present,\n * it must be a complete SELECT query that reads from the reserved\n * `__sqlrooms_source` relation supplied by SQLRooms at execution time.\n */\nexport type DeckTableDatasetInput = DeckDatasetBase & {\n tableName: string;\n transformSql?: string;\n};\n\nexport type DeckTable = arrow.Table;\n\nexport type DeckArrowTableDatasetInput = DeckDatasetBase & {\n arrowTable: DeckTable | undefined;\n};\nexport type DeckDatasetInput =\n | DeckSqlDatasetInput\n | DeckTableDatasetInput\n | DeckArrowTableDatasetInput;\n\nexport type DeckJsonSpecDatasetHint = {\n prefer?: 'heatmap';\n type?: DeckAutoLayerType;\n sourceGeometryColumn?: string;\n targetGeometryColumn?: string;\n timestampColumn?: string;\n hexagonColumn?: string;\n};\n\nexport type CreateDeckJsonSpecFromDatasetsOptions = {\n datasets: Record<string, DeckDatasetInput>;\n hints?: Record<string, DeckJsonSpecDatasetHint>;\n};\n\nexport type PreparedDeckDatasetState =\n | {status: 'loading'}\n | {status: 'ready'; prepared: PreparedDeckDataset}\n | {status: 'error'; error: Error};\n\nexport type DeckJsonMapHandle = {\n jumpTo: (opts: {\n longitude: number;\n latitude: number;\n zoom: number;\n bearing?: number;\n pitch?: number;\n }) => void;\n};\n\nexport type DeckJsonMapProps = {\n spec: string | Record<string, unknown>;\n datasets: Record<string, DeckDatasetInput>;\n mapStyle?: string;\n /**\n * When true, deck.gl renders into the map's own WebGL context rather than\n * creating a separate overlay canvas. This halves the number of WebGL\n * contexts per map panel (from 2 to 1), which matters because browsers\n * limit active contexts to ~8–16 per page. Defaults to true.\n */\n interleaved?: boolean;\n deckProps?: Partial<DeckProps>;\n mapProps?: Partial<MapProps>;\n showLegends?: boolean;\n className?: string;\n children?: ReactNode;\n onDatasetStatesChange?: (\n states: Record<string, PreparedDeckDatasetState>,\n ) => void;\n onRenderingError?: (error: Error) => void;\n};\n\nexport function isSqlDatasetInput(\n input: DeckDatasetInput,\n): input is DeckSqlDatasetInput {\n return 'sqlQuery' in input;\n}\n\n/** Returns true when the dataset input describes a structured table source. */\nexport function isTableDatasetInput(\n input: DeckDatasetInput,\n): input is DeckTableDatasetInput {\n return 'tableName' in input;\n}\n\nexport function isArrowTableDatasetInput(\n input: DeckDatasetInput,\n): input is DeckArrowTableDatasetInput {\n return 'arrowTable' in input;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDeckMapFitToBounds.d.ts","sourceRoot":"","sources":["../src/useDeckMapFitToBounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA+B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useDeckMapFitToBounds.d.ts","sourceRoot":"","sources":["../src/useDeckMapFitToBounds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAA+B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAMnE,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAC;AAE/C,OAAO,EAAC,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAIlD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,QAI7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,wBAAwB,CAAC;IACpC,KAAK,EAAE,8BAA8B,CAAC;IACtC,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CACjD;;EAiDA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { asDeckJsonMapConfig, resolveDeckMapDashboardDatasetSource, } from './dashboardConfig';
|
|
3
|
-
import { resolveDeckMapFitToData, useDeckMapFitController
|
|
3
|
+
import { resolveDeckMapFitToData, useDeckMapFitController } from './mapFit';
|
|
4
4
|
export { createDeckMapBoundsQuery } from './mapFit';
|
|
5
5
|
const deckMapDashboardFitRequestTarget = new EventTarget();
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDeckMapFitToBounds.js","sourceRoot":"","sources":["../src/useDeckMapFitToBounds.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAiB,MAAM,OAAO,CAAC;AACnE,OAAO,EACL,mBAAmB,EACnB,oCAAoC,GACrC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,
|
|
1
|
+
{"version":3,"file":"useDeckMapFitToBounds.js","sourceRoot":"","sources":["../src/useDeckMapFitToBounds.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAiB,MAAM,OAAO,CAAC;AACnE,OAAO,EACL,mBAAmB,EACnB,oCAAoC,GACrC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,uBAAuB,EAAE,uBAAuB,EAAC,MAAM,UAAU,CAAC;AAG1E,OAAO,EAAC,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAElD,MAAM,gCAAgC,GAAG,IAAI,WAAW,EAAE,CAAC;AAE3D;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAAe;IAC5D,gCAAgC,CAAC,aAAa,CAC5C,IAAI,WAAW,CAAC,UAAU,EAAE,EAAC,MAAM,EAAE,EAAC,OAAO,EAAC,EAAC,CAAC,CACjD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAMrC;IACC,MAAM,EAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAC,GAAG,OAAO,CAAC;IACnE,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,uBAAuB,CAAC,SAAS,CAAC,EACxC,CAAC,SAAS,CAAC,CACZ,CAAC;IACF,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CACH,SAAS;QACP,CAAC,CAAC,CAAC,oCAAoC,CAAC;YACpC,SAAS;YACT,KAAK;YACL,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;SAChD,CAAC,IAAI,IAAI,CAAC;QACb,CAAC,CAAC,IAAI,EACV,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CACnD,CAAC;IACF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,gBAAgB,GAAG,CAAC,KAAY,EAAE,EAAE;YACxC,MAAM,MAAM,GAAI,KAAyC,CAAC,MAAM,CAAC;YACjE,IAAI,MAAM,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;gBAChC,iBAAiB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC;QACF,gCAAgC,CAAC,gBAAgB,CAC/C,UAAU,EACV,gBAAgB,CACjB,CAAC;QACF,OAAO,GAAG,EAAE,CACV,gCAAgC,CAAC,mBAAmB,CAClD,UAAU,EACV,gBAAgB,CACjB,CAAC;IACN,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,uBAAuB,CAAC;QACtB,OAAO,EAAE,OAAO;QAChB,SAAS;QACT,MAAM;QACN,SAAS;QACT,UAAU;QACV,cAAc;QACd,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,OAAO,EAAC,SAAS,EAAC,CAAC;AACrB,CAAC","sourcesContent":["import type {\n MosaicDashboardEntryType,\n MosaicDashboardPanelConfigType,\n} from '@sqlrooms/mosaic';\nimport {useEffect, useMemo, useState, type RefObject} from 'react';\nimport {\n asDeckJsonMapConfig,\n resolveDeckMapDashboardDatasetSource,\n} from './dashboardConfig';\nimport {resolveDeckMapFitToData, useDeckMapFitController} from './mapFit';\nimport type {DeckJsonMapHandle} from './types';\n\nexport {createDeckMapBoundsQuery} from './mapFit';\n\nconst deckMapDashboardFitRequestTarget = new EventTarget();\n\n/**\n * Requests a manual fit-to-data operation for a Mosaic dashboard map panel.\n *\n * @param panelId - Dashboard panel whose map view should be fitted.\n */\nexport function emitDeckMapDashboardFitRequest(panelId: string) {\n deckMapDashboardFitRequestTarget.dispatchEvent(\n new CustomEvent('fit-view', {detail: {panelId}}),\n );\n}\n\n/**\n * Adapts Mosaic dashboard state and panel fit events to the shared Deck fit\n * controller.\n *\n * This adapter resolves dashboard-selected table semantics while keeping all\n * query execution, viewport calculation, and request state in the host-neutral\n * fit engine.\n *\n * @param options - Mosaic dashboard/panel state and rendered map/container refs.\n * @returns The normalized fit configuration used by dashboard dataset clients.\n */\nexport function useDeckMapFitToBounds(options: {\n panelId: string;\n dashboard: MosaicDashboardEntryType;\n panel: MosaicDashboardPanelConfigType;\n container: HTMLElement | null;\n deckMapRef: RefObject<DeckJsonMapHandle | null>;\n}) {\n const {panelId, dashboard, panel, container, deckMapRef} = options;\n const mapConfig = asDeckJsonMapConfig(panel.config);\n const fitToData = useMemo(\n () => resolveDeckMapFitToData(mapConfig),\n [mapConfig],\n );\n const source = useMemo(\n () =>\n fitToData\n ? (resolveDeckMapDashboardDatasetSource({\n dashboard,\n panel,\n dataset: mapConfig?.datasets[fitToData.dataset],\n }) ?? null)\n : null,\n [dashboard, fitToData, mapConfig?.datasets, panel],\n );\n const [requestVersion, setRequestVersion] = useState(0);\n\n useEffect(() => {\n const handleFitRequest = (event: Event) => {\n const detail = (event as CustomEvent<{panelId?: string}>).detail;\n if (detail?.panelId === panelId) {\n setRequestVersion((version) => version + 1);\n }\n };\n deckMapDashboardFitRequestTarget.addEventListener(\n 'fit-view',\n handleFitRequest,\n );\n return () =>\n deckMapDashboardFitRequestTarget.removeEventListener(\n 'fit-view',\n handleFitRequest,\n );\n }, [panelId]);\n\n useDeckMapFitController({\n scopeId: panelId,\n fitToData,\n source,\n container,\n deckMapRef,\n requestVersion,\n autoFit: true,\n });\n\n return {fitToData};\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sqlrooms/deck",
|
|
3
|
-
"version": "0.29.0-rc.
|
|
3
|
+
"version": "0.29.0-rc.11",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/sqlrooms/sqlrooms.git"
|
|
@@ -38,22 +38,22 @@
|
|
|
38
38
|
"typedoc": "typedoc"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@deck.gl/core": "
|
|
42
|
-
"@deck.gl/geo-layers": "
|
|
43
|
-
"@deck.gl/json": "
|
|
44
|
-
"@deck.gl/layers": "
|
|
45
|
-
"@deck.gl/mapbox": "
|
|
46
|
-
"@deck.gl/react": "
|
|
41
|
+
"@deck.gl/core": "9.3.2",
|
|
42
|
+
"@deck.gl/geo-layers": "9.3.2",
|
|
43
|
+
"@deck.gl/json": "9.3.2",
|
|
44
|
+
"@deck.gl/layers": "9.3.2",
|
|
45
|
+
"@deck.gl/mapbox": "9.3.2",
|
|
46
|
+
"@deck.gl/react": "9.3.2",
|
|
47
47
|
"@geoarrow/deck.gl-geoarrow": "^0.4.1",
|
|
48
48
|
"@loaders.gl/geoarrow": "^4.4.1",
|
|
49
49
|
"@loaders.gl/gis": "^4.4.1",
|
|
50
50
|
"@loaders.gl/wkt": "^4.4.1",
|
|
51
51
|
"@paralleldrive/cuid2": "^3.0.0",
|
|
52
|
-
"@sqlrooms/color-scales": "0.29.0-rc.
|
|
53
|
-
"@sqlrooms/documents": "0.29.0-rc.
|
|
54
|
-
"@sqlrooms/duckdb": "0.29.0-rc.
|
|
55
|
-
"@sqlrooms/room-store": "0.29.0-rc.
|
|
56
|
-
"@sqlrooms/ui": "0.29.0-rc.
|
|
52
|
+
"@sqlrooms/color-scales": "0.29.0-rc.11",
|
|
53
|
+
"@sqlrooms/documents": "0.29.0-rc.11",
|
|
54
|
+
"@sqlrooms/duckdb": "0.29.0-rc.11",
|
|
55
|
+
"@sqlrooms/room-store": "0.29.0-rc.11",
|
|
56
|
+
"@sqlrooms/ui": "0.29.0-rc.11",
|
|
57
57
|
"ai": "^6.0.177",
|
|
58
58
|
"immer": "^11.0.1",
|
|
59
59
|
"lucide-react": "^0.555.0",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"@jest/globals": "^30.3.0",
|
|
67
|
-
"@sqlrooms/mosaic": "0.29.0-rc.
|
|
67
|
+
"@sqlrooms/mosaic": "0.29.0-rc.11",
|
|
68
68
|
"@types/geojson": "^7946.0.16",
|
|
69
69
|
"@types/jest": "^30.0.0",
|
|
70
70
|
"@uwdata/mosaic-core": "^0.21.0",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"ts-jest": "^29.4.4"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
|
-
"@sqlrooms/mosaic": "0.29.0-rc.
|
|
76
|
+
"@sqlrooms/mosaic": "0.29.0-rc.11",
|
|
77
77
|
"@uwdata/mosaic-core": "^0.21.0",
|
|
78
78
|
"@uwdata/mosaic-sql": "^0.21.0",
|
|
79
79
|
"apache-arrow": "17.0.0",
|
|
@@ -94,5 +94,5 @@
|
|
|
94
94
|
"publishConfig": {
|
|
95
95
|
"access": "public"
|
|
96
96
|
},
|
|
97
|
-
"gitHead": "
|
|
97
|
+
"gitHead": "e451e434c67f59d16a45493689f092af134b207c"
|
|
98
98
|
}
|