diff --git a/examples/point/package.json b/examples/point/package.json index d7d23ea..ad90e52 100644 --- a/examples/point/package.json +++ b/examples/point/package.json @@ -8,7 +8,7 @@ "build": "vite build" }, "dependencies": { - "@geoarrow/deck.gl-layers": "*", + "@geoarrow/deck.gl-layers": "workspace:^", "@loaders.gl/compression": "^4.1.4", "@loaders.gl/crypto": "^4.1.4", "apache-arrow": ">=14", diff --git a/package.json b/package.json index 2091353..322a142 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "prepublishOnly": "pnpm clean && pnpm build", "test": "vitest run", "typecheck": "tsc --build", - "watch": "tsc --watch" + "watch": "tsc --build --watch" }, "files": [ "dist/", diff --git a/packages/deck.gl-layers/package.json b/packages/deck.gl-layers/package.json index 19c8cf5..7ece694 100644 --- a/packages/deck.gl-layers/package.json +++ b/packages/deck.gl-layers/package.json @@ -19,7 +19,7 @@ }, "scripts": { "build:rollup": "rollup -c rollup.config.js", - "build:tsc": "tsc", + "build:tsc": "tsc --project tsconfig.build.json", "build": "npm run build:tsc && npm run build:rollup", "clean": "rimraf dist", "docs:build": "typedoc", @@ -28,7 +28,7 @@ "fmt": "prettier './src/**/*.ts' --write", "prepublishOnly": "npm run clean && npm run build", "test": "vitest run", - "watch": "tsc --watch" + "watch": "tsc --project tsconfig.build.json --watch" }, "files": [ "dist/", diff --git a/packages/deck.gl-layers/rollup.config.js b/packages/deck.gl-layers/rollup.config.js index 777dd67..931b7d0 100644 --- a/packages/deck.gl-layers/rollup.config.js +++ b/packages/deck.gl-layers/rollup.config.js @@ -24,7 +24,17 @@ export default [ format: "es", sourcemap, }, - plugins: [nodeResolve(), commonjs(), typescript()], + plugins: [ + nodeResolve(), + commonjs(), + typescript({ + compilerOptions: { + composite: false, + declaration: false, + declarationMap: false, + }, + }), + ], external, }, { @@ -33,7 +43,7 @@ export default [ file: "dist/index.d.ts", format: "es", }, - plugins: [dts()], + plugins: [dts({ compilerOptions: { composite: false } })], external, }, { @@ -43,7 +53,17 @@ export default [ format: "cjs", sourcemap, }, - plugins: [nodeResolve(), commonjs(), typescript()], + plugins: [ + nodeResolve(), + commonjs(), + typescript({ + compilerOptions: { + composite: false, + declaration: false, + declarationMap: false, + }, + }), + ], external, }, { @@ -62,7 +82,16 @@ export default [ "apache-arrow": "Arrow", }, }, - plugins: [typescript(), terser()], + plugins: [ + typescript({ + compilerOptions: { + composite: false, + declaration: false, + declarationMap: false, + }, + }), + terser(), + ], external, }, ]; diff --git a/packages/deck.gl-layers/src/layers/a5-layer.ts b/packages/deck.gl-layers/src/layers/a5-layer.ts index 45ab1e6..90c085a 100644 --- a/packages/deck.gl-layers/src/layers/a5-layer.ts +++ b/packages/deck.gl-layers/src/layers/a5-layer.ts @@ -101,10 +101,10 @@ const defaultProps: DefaultProps = { export class GeoArrowA5Layer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowA5Layer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowA5Layer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/arc-layer.ts b/packages/deck.gl-layers/src/layers/arc-layer.ts index 2e41403..e904773 100644 --- a/packages/deck.gl-layers/src/layers/arc-layer.ts +++ b/packages/deck.gl-layers/src/layers/arc-layer.ts @@ -118,10 +118,10 @@ const defaultProps: DefaultProps = { export class GeoArrowArcLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowArcLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowArcLayer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/column-layer.ts b/packages/deck.gl-layers/src/layers/column-layer.ts index c8f70f4..4912970 100644 --- a/packages/deck.gl-layers/src/layers/column-layer.ts +++ b/packages/deck.gl-layers/src/layers/column-layer.ts @@ -112,10 +112,10 @@ const defaultProps: DefaultProps = { export class GeoArrowColumnLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowColumnLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowColumnLayer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/geohash-layer.ts b/packages/deck.gl-layers/src/layers/geohash-layer.ts index b6d973e..8c0a6ee 100644 --- a/packages/deck.gl-layers/src/layers/geohash-layer.ts +++ b/packages/deck.gl-layers/src/layers/geohash-layer.ts @@ -97,10 +97,10 @@ const defaultProps: DefaultProps = { export class GeoArrowGeohashLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowGeohashLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowGeohashLayer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/h3-hexagon-layer.ts b/packages/deck.gl-layers/src/layers/h3-hexagon-layer.ts index 5191fd0..a27a372 100644 --- a/packages/deck.gl-layers/src/layers/h3-hexagon-layer.ts +++ b/packages/deck.gl-layers/src/layers/h3-hexagon-layer.ts @@ -101,10 +101,10 @@ const defaultProps: DefaultProps = { export class GeoArrowH3HexagonLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowH3HexagonLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowH3HexagonLayer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/heatmap-layer.ts b/packages/deck.gl-layers/src/layers/heatmap-layer.ts index 27882c8..3b5ca1e 100644 --- a/packages/deck.gl-layers/src/layers/heatmap-layer.ts +++ b/packages/deck.gl-layers/src/layers/heatmap-layer.ts @@ -78,8 +78,8 @@ const defaultProps: DefaultProps = { export class GeoArrowHeatmapLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowHeatmapLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowHeatmapLayer"; renderLayers(): Layer | LayersList | null { const { data: batch } = this.props; diff --git a/packages/deck.gl-layers/src/layers/path-layer.ts b/packages/deck.gl-layers/src/layers/path-layer.ts index 71b07a7..fd3c8c5 100644 --- a/packages/deck.gl-layers/src/layers/path-layer.ts +++ b/packages/deck.gl-layers/src/layers/path-layer.ts @@ -96,10 +96,10 @@ export const defaultProps: DefaultProps = { export class GeoArrowPathLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowPathLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowPathLayer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/point-cloud-layer.ts b/packages/deck.gl-layers/src/layers/point-cloud-layer.ts index ca4e25c..5ecff7e 100644 --- a/packages/deck.gl-layers/src/layers/point-cloud-layer.ts +++ b/packages/deck.gl-layers/src/layers/point-cloud-layer.ts @@ -91,10 +91,10 @@ const defaultProps: DefaultProps = { export class GeoArrowPointCloudLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowPointCloudLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowPointCloudLayer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/polygon-layer.ts b/packages/deck.gl-layers/src/layers/polygon-layer.ts index a8eba29..a052978 100644 --- a/packages/deck.gl-layers/src/layers/polygon-layer.ts +++ b/packages/deck.gl-layers/src/layers/polygon-layer.ts @@ -212,10 +212,10 @@ const defaultLineColor: [number, number, number, number] = [0, 0, 0, 255]; export class GeoArrowPolygonLayer< ExtraProps extends object = Record, > extends CompositeLayer & ExtraProps> { - static defaultProps = defaultProps; - static layerName = "GeoArrowPolygonLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowPolygonLayer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, @@ -281,7 +281,6 @@ export class GeoArrowPolygonLayer< // Layer composition props const { data, - _dataDiff, stroked, filled, extruded, diff --git a/packages/deck.gl-layers/src/layers/s2-layer.ts b/packages/deck.gl-layers/src/layers/s2-layer.ts index 8a143fe..fd3201a 100644 --- a/packages/deck.gl-layers/src/layers/s2-layer.ts +++ b/packages/deck.gl-layers/src/layers/s2-layer.ts @@ -97,10 +97,10 @@ const defaultProps: DefaultProps = { export class GeoArrowS2Layer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowS2Layer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowS2Layer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/scatterplot-layer.ts b/packages/deck.gl-layers/src/layers/scatterplot-layer.ts index 6eeedd2..8408f10 100644 --- a/packages/deck.gl-layers/src/layers/scatterplot-layer.ts +++ b/packages/deck.gl-layers/src/layers/scatterplot-layer.ts @@ -103,10 +103,10 @@ const defaultProps: DefaultProps = { export class GeoArrowScatterplotLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowScatterplotLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowScatterplotLayer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/solid-polygon-layer.ts b/packages/deck.gl-layers/src/layers/solid-polygon-layer.ts index dc4600e..dcab4f1 100644 --- a/packages/deck.gl-layers/src/layers/solid-polygon-layer.ts +++ b/packages/deck.gl-layers/src/layers/solid-polygon-layer.ts @@ -191,8 +191,8 @@ const defaultProps: DefaultProps = { export class GeoArrowSolidPolygonLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowSolidPolygonLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowSolidPolygonLayer"; declare state: CompositeLayer["state"] & { batch: arrow.RecordBatch | null; @@ -201,7 +201,7 @@ export class GeoArrowSolidPolygonLayer< earcutWorkerRequest: Promise | null; }; - initializeState(_context: LayerContext): void { + override initializeState(_context: LayerContext): void { this.state = { batch: null, triangles: null, @@ -249,7 +249,7 @@ export class GeoArrowSolidPolygonLayer< } } - async finalizeState(_context: LayerContext): Promise { + override async finalizeState(_context: LayerContext): Promise { await this.state?.earcutWorkerPool?.terminate(); console.log("terminated"); } @@ -319,7 +319,7 @@ export class GeoArrowSolidPolygonLayer< polygonData, true, ); - pool.queue(async (earcutWorker) => { + pool.queue(async (earcutWorker: FunctionThread<[unknown], Uint32Array>) => { const earcutTriangles = await earcutWorker( Transfer(preparedPolygonData, arrayBuffers), ); @@ -372,7 +372,7 @@ export class GeoArrowSolidPolygonLayer< polygonData, true, ); - pool.queue(async (earcutWorker) => { + pool.queue(async (earcutWorker: FunctionThread<[unknown], Uint32Array>) => { const earcutTriangles = await earcutWorker( Transfer(preparedPolygonData, arrayBuffers), ); @@ -401,13 +401,13 @@ export class GeoArrowSolidPolygonLayer< return ga.algorithm.earcut(polygonData); } - updateState({ changeFlags }: UpdateParameters): void { + override updateState({ changeFlags }: UpdateParameters): void { if (changeFlags.dataChanged) { this.updateData(); } } - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, @@ -625,28 +625,3 @@ export class GeoArrowSolidPolygonLayer< return new SolidPolygonLayer(finalProps); } } - -function _encodePickingColors( - geomToCoordOffsets: Int32Array, - encodePickingColor: (id: number, result: number[]) => void, -): Uint8ClampedArray { - const largestOffset = geomToCoordOffsets[geomToCoordOffsets.length - 1]; - const pickingColors = new Uint8ClampedArray(largestOffset); - - const pickingColor: number[] = []; - for (let arrayIdx = 0; arrayIdx < geomToCoordOffsets.length - 1; arrayIdx++) { - const thisOffset = geomToCoordOffsets[arrayIdx]; - const nextOffset = geomToCoordOffsets[arrayIdx + 1]; - - // Note: we encode the picking color once per _feature_, but then assign it - // to the color array once per _vertex_ - encodePickingColor(arrayIdx, pickingColor); - for (let offset = thisOffset; offset < nextOffset; offset++) { - pickingColors[offset * 3] = pickingColor[0]; - pickingColors[offset * 3 + 1] = pickingColor[1]; - pickingColors[offset * 3 + 2] = pickingColor[2]; - } - } - - return pickingColors; -} diff --git a/packages/deck.gl-layers/src/layers/text-layer.ts b/packages/deck.gl-layers/src/layers/text-layer.ts index 5afcca2..ec472bb 100644 --- a/packages/deck.gl-layers/src/layers/text-layer.ts +++ b/packages/deck.gl-layers/src/layers/text-layer.ts @@ -150,10 +150,10 @@ const defaultProps: DefaultProps = { export class GeoArrowTextLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowTextLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowTextLayer"; - getPickingInfo( + override getPickingInfo( params: GetPickingInfoParams & { sourceLayer: { props: GeoArrowExtraPickingProps }; }, diff --git a/packages/deck.gl-layers/src/layers/trips-layer.ts b/packages/deck.gl-layers/src/layers/trips-layer.ts index e4a0d42..a1d99fa 100644 --- a/packages/deck.gl-layers/src/layers/trips-layer.ts +++ b/packages/deck.gl-layers/src/layers/trips-layer.ts @@ -91,8 +91,8 @@ const defaultProps: DefaultProps = { export class GeoArrowTripsLayer< ExtraProps extends object = Record, > extends CompositeLayer { - static defaultProps = defaultProps; - static layerName = "GeoArrowTripsLayer"; + static override defaultProps = defaultProps; + static override layerName = "GeoArrowTripsLayer"; renderLayers(): Layer | LayersList | null { const { data: batch, getTimestamps } = this.props; diff --git a/packages/deck.gl-layers/src/types.ts b/packages/deck.gl-layers/src/types.ts index 2a0ea10..fb2b75a 100644 --- a/packages/deck.gl-layers/src/types.ts +++ b/packages/deck.gl-layers/src/types.ts @@ -3,17 +3,27 @@ // Copyright (c) vis.gl contributors import type { BinaryAttribute, Color, PickingInfo } from "@deck.gl/core"; -import type { TypedArray } from "@deck.gl/core/dist/types/types"; import type * as arrow from "apache-arrow"; import type { Data } from "apache-arrow"; +type TypedArray = + | Int8Array + | Uint8Array + | Uint8ClampedArray + | Int16Array + | Uint16Array + | Int32Array + | Uint32Array + | Float32Array + | Float64Array; + /** * An individual layer's data */ export type GeoArrowLayerData = { data: T; length: number; - attributes?: Record; + attributes?: Record; }; /** diff --git a/packages/deck.gl-layers/tsconfig.build.json b/packages/deck.gl-layers/tsconfig.build.json new file mode 100644 index 0000000..581fd59 --- /dev/null +++ b/packages/deck.gl-layers/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "noEmit": false, + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "tests"] +} diff --git a/packages/deck.gl-layers/tsconfig.json b/packages/deck.gl-layers/tsconfig.json index 012c3b2..1897c44 100644 --- a/packages/deck.gl-layers/tsconfig.json +++ b/packages/deck.gl-layers/tsconfig.json @@ -1,21 +1,17 @@ { - "$comment": "Ideally we wouldn't have a tsconfig both in this dir and at the root, but this is needed to get tsc to output files to the right place", - "include": ["src"], + "extends": "../../tsconfig.json", "compilerOptions": { - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "allowJs": true, - "declaration": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true, - "noEmitOnError": false, - "outDir": "dist", - "strict": true, - "strictNullChecks": true - // "lib": [ - // "es2019.array", "es6", "dom" - // ] - } + "baseUrl": ".", + "composite": true, + "outDir": "./dist", + "paths": { + "threads": ["./node_modules/threads/dist/index.d.ts"], + "threads/worker": ["./node_modules/threads/worker.d.ts"], + "threads/dist/master/pool": [ + "./node_modules/threads/dist/master/pool.d.ts" + ] + } + }, + "include": ["src/**/*", "tests/**/*"], + "exclude": ["node_modules", "dist"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b34dbed..f2ebdfc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -172,8 +172,8 @@ importers: examples/point: dependencies: '@geoarrow/deck.gl-layers': - specifier: '*' - version: 0.3.2(f6af68d0f0ac31d08fe01a1ddceacc68) + specifier: workspace:^ + version: link:../../packages/deck.gl-layers '@loaders.gl/compression': specifier: ^4.1.4 version: 4.4.1(@loaders.gl/core@4.4.1) diff --git a/tsconfig.json b/tsconfig.json index f52dad0..45b6620 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,20 +1,30 @@ { - "include": ["packages/deck.gl-layers/src"], "compilerOptions": { - "target": "esnext", - "module": "esnext", - "moduleResolution": "node", - "allowJs": true, + "target": "ES2022", + "module": "ESNext", + "lib": ["ES2022", "DOM"], + "moduleResolution": "bundler", + "resolveJsonModule": true, + "allowJs": false, + "checkJs": false, "declaration": true, + "declarationMap": true, + "sourceMap": true, + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + // TODO: enable + // "noUncheckedIndexedAccess": true, + "noImplicitReturns": true, + "noImplicitOverride": true, + "allowSyntheticDefaultImports": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "skipLibCheck": true, - "noEmitOnError": false, - "outDir": "dist", - "strict": true, - "strictNullChecks": true - // "lib": [ - // "es2019.array", "es6", "dom" - // ] - } + "isolatedModules": true + }, + "exclude": ["node_modules"], + "files": [], + "references": [{ "path": "packages/deck.gl-layers/tsconfig.build.json" }] }