Skip to content

Commit

Permalink
[ts] Overloaded types for serialize() (#341)
Browse files Browse the repository at this point in the history
  • Loading branch information
ibgreen committed Jan 22, 2024
1 parent 7a5f153 commit 4b38099
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 11 deletions.
45 changes: 38 additions & 7 deletions src/ts/generic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,53 @@ import { Rect } from './packedrtree.js';
import { IFeature } from './generic/feature.js';
import HeaderMeta from './header-meta.js';

export { GeometryType } from './flat-geobuf/geometry-type.js';
export { ColumnType } from './flat-geobuf/column-type.js';

/** Callback function for receiving header metadata */
export type HeaderMetaFn = (headerMeta: HeaderMeta) => void;

/**
* Deserialize FlatGeobuf into generic features
* @param input Input byte array, stream or string
* @param fromFeature Callback that recieves generic features
* Deserialize FlatGeobuf from a URL into generic features
* @note Supports spatial filtering
* @param input Input string
* @param fromFeature Callback that receives generic features
* @param rect Filter rectangle
*/
export function deserialize(
url: string,
fromFeature: FromFeatureFn,
rect?: Rect,
): AsyncGenerator<IFeature, any, unknown>;

/**
* Deserialize FlatGeobuf from a typed array into generic features
* @note Does not support spatial filtering
* @param typedArray Input byte array
* @param fromFeature Callback that receives generic features
*/
export function deserialize(
typedArray: Uint8Array,
fromFeature: FromFeatureFn,
): IFeature[];

/**
* Deserialize FlatGeobuf from a stream into generic features
* @note Does not support spatial filtering
* @param stream stream
* @param fromFeature Callback that receives generic features
*/
export function deserialize(
input: ReadableStream,
fromFeature: FromFeatureFn,
): AsyncGenerator<IFeature>;

/** Implementation */
export function deserialize(
input: Uint8Array | ReadableStream | string,
fromFeature: FromFeatureFn,
rect?: Rect,
): any[] | AsyncGenerator<IFeature> {
): IFeature[] | AsyncGenerator<IFeature> {
if (input instanceof Uint8Array)
return deserializeArray(input, fromFeature);
else if (input instanceof ReadableStream)
Expand All @@ -30,6 +64,3 @@ export function deserialize(
}

export { serialize } from './generic/featurecollection.js';

export { GeometryType } from './flat-geobuf/geometry-type.js';
export { ColumnType } from './flat-geobuf/column-type.js';
41 changes: 37 additions & 4 deletions src/ts/geojson.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,44 @@ export function serialize(geojson: GeoJsonFeatureCollection): Uint8Array {
}

/**
* Deserialize FlatGeobuf into GeoJSON
* @param input Input byte array, stream or string
* Deserialize FlatGeobuf into GeoJSON features
* @param url Input string
* @param rect Filter rectangle - NOT USED
* @param headerMetaFn Callback that will receive header metadata when available
*/
export function deserialize(
url: string,
rect?: Rect,
headerMetaFn?: HeaderMetaFn,
): AsyncGenerator<IGeoJsonFeature, any, unknown>;

/**
* Deserialize FlatGeobuf from a typed array into GeoJSON features
* @note Does not support spatial filtering
* @param typedArray Input byte array
* @param rect Filter rectangle - NOT USED
* @param headerMetaFn Callback that will receive header metadata when available
*/
export function deserialize(
typedArray: Uint8Array,
rect?: Rect,
headerMetaFn?: HeaderMetaFn,
): GeoJsonFeatureCollection;

/**
* Deserialize FlatGeobuf from a stream into GeoJSON features
* @note Does not support spatial filtering
* @param stream stream
* @param rect Filter rectangle
* @param headerMetaFn Callback that will recieve header metadata when available
* @param headerMetaFn Callback that will receive header metadata when available
*/
export function deserialize(
stream: ReadableStream,
rect?: Rect,
headerMetaFn?: HeaderMetaFn,
): AsyncGenerator<IGeoJsonFeature>;

/** Implementation */
export function deserialize(
input: Uint8Array | ReadableStream | string,
rect?: Rect,
Expand All @@ -34,5 +67,5 @@ export function deserialize(
if (input instanceof Uint8Array) return fcDeserialize(input, headerMetaFn);
else if (input instanceof ReadableStream)
return fcDeserializeStream(input, headerMetaFn);
else return fcDeserializeFiltered(input, rect as Rect, headerMetaFn);
else return fcDeserializeFiltered(input, rect!, headerMetaFn);
}

0 comments on commit 4b38099

Please sign in to comment.