@latlng/wasm 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 +343 -0
- package/dist/assets/engine.worker-CkKJqc5H.js +2 -0
- package/dist/assets/engine.worker-CkKJqc5H.js.map +1 -0
- package/dist/client.d.ts +95 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/engine.worker.d.ts +2 -0
- package/dist/engine.worker.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +576 -0
- package/dist/index.js.map +1 -0
- package/dist/messages.d.ts +32 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/types.d.ts +388 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/vite-plugin/index.d.ts +37 -0
- package/dist/vite-plugin/index.d.ts.map +1 -0
- package/dist/vite-plugin/index.js +25 -0
- package/dist/vite-plugin/index.js.map +1 -0
- package/dist/wasm/latlng_core_bg.wasm +0 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["#worker","#target","#pending","#ready","#handleMessage","#handleError","#request","#closed","#nextId","#resolveResponse"],"sources":["../src/types.ts","../src/client.ts"],"sourcesContent":["/** JSON value accepted by GeoJSON payloads and field values. */\nexport type JsonValue =\n | null\n | boolean\n | number\n | string\n | JsonValue[]\n | { [key: string]: JsonValue };\n\n/** Geographic bounding box expressed as min/max latitude and longitude. */\nexport interface BoundingBox {\n /** Southern latitude bound. */\n min_lat: number;\n /** Western longitude bound. */\n min_lon: number;\n /** Northern latitude bound. */\n max_lat: number;\n /** Eastern longitude bound. */\n max_lon: number;\n}\n\n/** Stored field value. */\nexport type FieldValue =\n | { type: \"number\"; value: number }\n | { type: \"text\"; value: string }\n | { type: \"json\"; value: JsonValue };\n\n/** Named field assignment. */\nexport interface FieldEntry {\n /** Field name. */\n name: string;\n /** Field value. */\n value: FieldValue;\n}\n\n/** Field map keyed by field name. */\nexport type FieldMap = Record<string, FieldValue>;\n\n/** Geographic object payload accepted by `setObject`. */\nexport type GeoObject =\n | { type: \"point\"; lat: number; lon: number; z?: number | null }\n | { type: \"bounds\"; bounds: BoundingBox }\n | { type: \"hash\"; value: string }\n | { type: \"geojson\"; value: JsonValue }\n | { type: \"string\"; value: string };\n\n/** Stored object returned by read and query operations. */\nexport interface LatLngObject {\n /** Object identifier. */\n id: string;\n /** Stored object payload. */\n geo: GeoObject;\n /** Stored field values. */\n fields: FieldMap;\n /** Expiration timestamp in milliseconds since epoch, or `null`. */\n expires_at: number | null;\n}\n\n/** Area definition used by spatial queries and geofence definitions. */\nexport type Area =\n | { type: \"circle\"; lat: number; lon: number; meters: number }\n | { type: \"bounds\"; bounds: BoundingBox }\n | { type: \"hash\"; value: string }\n | { type: \"geojson\"; value: JsonValue }\n | { type: \"tile\"; x: number; y: number; z: number }\n | { type: \"quadkey\"; value: string }\n | {\n type: \"sector\";\n lat: number;\n lon: number;\n meters: number;\n bearing1: number;\n bearing2: number;\n }\n | { type: \"reference\"; collection: string; id: string };\n\n/** Sort direction for query results. */\nexport type SortOrder = \"asc\" | \"desc\";\n\n/** Query output format. */\nexport type OutputFormat =\n | \"objects\"\n | \"points\"\n | \"bounds\"\n | \"ids\"\n | \"count\"\n | { hashes: { precision: number } };\n\n/** Numeric or textual field comparison. */\nexport type WhereComparison =\n | { type: \"range\"; min: number; max: number }\n | { type: \"equalsText\"; value: string }\n | { type: \"regex\"; value: string };\n\n/** Field-level filter used by search queries. */\nexport interface WhereFilter {\n /** Field name to inspect. */\n field: string;\n /** Comparison to apply. */\n comparison: WhereComparison;\n}\n\n/** Inclusion filter used by search queries. */\nexport interface WhereInFilter {\n /** Field name to inspect. */\n field: string;\n /** Accepted string values. */\n values: string[];\n}\n\n/** Expression filter used by search queries. */\nexport interface WhereExprFilter {\n /** Server-side expression string. */\n expression: string;\n}\n\n/** Shared options accepted by scan/search/spatial query methods. */\nexport interface SearchOptions {\n /** Cursor to resume a paginated query. */\n cursor?: number;\n /** Maximum number of results to return. */\n limit?: number;\n /** Omit fields from result items when true. */\n nofields?: boolean;\n /** Match pattern applied to object IDs. */\n matchPattern?: string;\n /** Result sort direction. */\n sort?: SortOrder;\n /** Numeric/text filters. */\n whereFilters?: WhereFilter[];\n /** Inclusion filters. */\n whereInFilters?: WhereInFilter[];\n /** Expression filters. */\n whereExprFilters?: WhereExprFilter[];\n /** Clip geometries to the query area when supported. */\n clip?: boolean;\n /** Output format for result items. */\n output?: OutputFormat;\n}\n\n/** Nearby query request. */\nexport interface NearbyQuery {\n /** Center latitude. */\n lat: number;\n /** Center longitude. */\n lon: number;\n /** Search radius in meters. */\n meters: number;\n /** Optional query controls. */\n options?: SearchOptions;\n}\n\n/** Area-based query request shared by `within` and `intersects`. */\nexport interface AreaQuery {\n /** Area to test. */\n area: Area;\n /** Optional query controls. */\n options?: SearchOptions;\n}\n\n/** Query result item. */\nexport interface SearchItem {\n /** Object identifier. */\n id: string;\n /** Object payload when requested by output options. */\n object?: GeoObject;\n /** Field map unless omitted by query options. */\n fields?: FieldMap;\n /** Distance from query center for nearby queries. */\n distance_meters: number | null;\n}\n\n/** Query results returned by scan/search/spatial queries. */\nexport interface SearchResults {\n /** Result objects. */\n results: SearchItem[];\n /** Cursor for the next page. */\n cursor: number;\n /** Number of returned items. */\n count: number;\n}\n\n/** Collection statistics. */\nexport interface CollectionStats {\n /** Collection name. */\n name: string;\n /** Number of live objects. */\n object_count: number;\n /** Number of point objects. */\n point_count: number;\n /** Number of string objects. */\n string_count: number;\n /** Number of objects with expiration metadata. */\n expires_count: number;\n}\n\n/** Collection metadata returned by `collectionInfo`. */\nexport interface CollectionInfo {\n /** Collection name. */\n name: string;\n /** Spatial bounds, if the collection contains spatial objects. */\n bounds: BoundingBox | null;\n /** Collection statistics. */\n stats: CollectionStats;\n}\n\n/** Engine metadata returned by `serverInfo`. */\nexport interface ServerInfo {\n /** Product version. */\n version: string;\n /** Public API version. */\n api_version: string;\n /** Protocol version used by native transports. */\n protocol_version: string;\n /** Storage format version. */\n storage_format_version: string;\n /** Number of collections. */\n num_collections: number;\n /** Number of live objects. */\n num_objects: number;\n /** Number of live point objects. */\n num_points: number;\n /** Approximate heap usage in bytes. */\n heap_bytes: number;\n /** Whether writes are disabled. */\n read_only: boolean;\n /** Whether the engine is acting as leader. */\n leader: boolean;\n /** Current storage sequence. */\n last_sequence: number;\n}\n\n/** Object upsert options. */\nexport interface SetObjectOptions {\n /** Field values to store alongside the object. */\n fields?: FieldMap | FieldEntry[];\n /** Optional object TTL in seconds. */\n expireSeconds?: number;\n /** Conditional write mode. */\n condition?: \"always\" | \"nx\" | \"xx\";\n}\n\n/** Mutation command names used by geofence definitions and events. */\nexport type MutationCommand = \"set\" | \"del\" | \"drop\" | \"fset\";\n\n/** Geofence detection mode. */\nexport type DetectType =\n | \"inside\"\n | \"outside\"\n | \"enter\"\n | \"exit\"\n | \"cross\"\n | \"roam\";\n\n/** Geofence query definition. */\nexport type GeofenceQuery =\n | { type: \"nearby\"; lat: number; lon: number; meters: number; options?: SearchOptions }\n | { type: \"within\"; area: Area; options?: SearchOptions }\n | { type: \"intersects\"; area: Area; options?: SearchOptions }\n | {\n type: \"roam\";\n targetCollection: string;\n targetPattern: string;\n meters: number;\n options?: SearchOptions;\n nodwell?: boolean;\n };\n\n/** Geofence hook definition. */\nexport interface GeofenceDef {\n /** Target collection evaluated by the hook. */\n collection: string;\n /** Query used by the hook. */\n query: GeofenceQuery;\n /** Detection modes emitted by the hook. */\n detect: DetectType[];\n /** Mutation commands that trigger the hook. */\n commands: MutationCommand[];\n}\n\n/** Hook summary. */\nexport interface HookInfo {\n /** Hook name. */\n name: string;\n /** Internal browser event endpoint. */\n endpoint: string;\n /** Target collection. */\n collection: string;\n}\n\n/** Full hook definition. */\nexport interface HookDef {\n /** Hook name. */\n name: string;\n /** Internal browser event endpoint. */\n endpoint: string;\n /** Geofence definition. */\n def: GeofenceDef;\n}\n\n/** Roaming metadata attached to roam events. */\nexport interface RoamingInfo {\n /** Target collection. */\n collection: string;\n /** Target object ID. */\n id: string;\n /** Roam distance in meters. */\n meters: number;\n}\n\n/** Geofence event emitted by browser hooks. */\nexport interface GeofenceEvent {\n /** Mutation command that triggered the event. */\n command: MutationCommand;\n /** Detection mode that matched. */\n detect: DetectType;\n /** Collection containing the changed object. */\n collection: string;\n /** Object ID. */\n id: string;\n /** Object payload at event time. */\n object: GeoObject;\n /** Field map at event time. */\n fields: FieldMap;\n /** Event timestamp in nanoseconds. */\n timestamp_ns: number;\n /** Stable opaque event identifier when available. */\n event_id?: string | null;\n /** Browser hook name when available. */\n hook?: string | null;\n /** Roaming group when available. */\n group?: string | null;\n /** Roaming metadata when available. */\n nearby?: RoamingInfo | null;\n}\n\n/** Client event emitted for object and collection mutations. */\nexport interface MutationEvent {\n /** Event type. */\n type:\n | \"collection:create\"\n | \"collection:drop\"\n | \"object:set\"\n | \"object:delete\"\n | \"object:expire\"\n | \"object:persist\"\n | \"hook:set\"\n | \"hook:delete\";\n /** Collection name, when applicable. */\n collection?: string;\n /** Object ID, when applicable. */\n id?: string;\n /** Hook name, when applicable. */\n hook?: string;\n /** Whether the mutation changed state. */\n changed?: boolean;\n}\n\n/** Event map used by `LatLngWasmClient.addEventListener`. */\nexport interface LatLngWasmEventMap {\n /** Any object, collection, or hook mutation. */\n mutation: CustomEvent<MutationEvent>;\n /** Any browser geofence hook event. */\n geofence: CustomEvent<GeofenceEvent>;\n /** Inside geofence event. */\n \"geofence:inside\": CustomEvent<GeofenceEvent>;\n /** Outside geofence event. */\n \"geofence:outside\": CustomEvent<GeofenceEvent>;\n /** Enter geofence event. */\n \"geofence:enter\": CustomEvent<GeofenceEvent>;\n /** Exit geofence event. */\n \"geofence:exit\": CustomEvent<GeofenceEvent>;\n /** Cross geofence event. */\n \"geofence:cross\": CustomEvent<GeofenceEvent>;\n /** Roam geofence event. */\n \"geofence:roam\": CustomEvent<GeofenceEvent>;\n}\n\nexport function toWireSetObjectRequest(\n object: GeoObject,\n options: SetObjectOptions | undefined,\n): unknown {\n return {\n object: toWireGeoObject(object),\n fields: toWireFieldEntries(options?.fields),\n expire_seconds: options?.expireSeconds ?? null,\n condition: toWireSetCondition(options?.condition),\n };\n}\n\nexport function toWireNearbyQuery(query: NearbyQuery): unknown {\n return {\n lat: query.lat,\n lon: query.lon,\n meters: query.meters,\n options: toWireSearchOptions(query.options),\n };\n}\n\nexport function toWireAreaQuery(query: AreaQuery): unknown {\n return {\n area: toWireArea(query.area),\n options: toWireSearchOptions(query.options),\n };\n}\n\nexport function toWireSearchOptions(options: SearchOptions | undefined): unknown {\n const value = options ?? {};\n return {\n cursor: value.cursor ?? 0,\n limit: value.limit ?? 100,\n nofields: value.nofields ?? false,\n match_pattern: value.matchPattern ?? null,\n sort: value.sort === \"desc\" ? \"Desc\" : \"Asc\",\n where_filters: (value.whereFilters ?? []).map((filter) => ({\n field: filter.field,\n comparison: toWireWhereComparison(filter.comparison),\n })),\n where_in_filters: value.whereInFilters ?? [],\n where_expr_filters: value.whereExprFilters ?? [],\n clip: value.clip ?? false,\n output: toWireOutputFormat(value.output),\n };\n}\n\nexport function toWireGeofenceDef(value: GeofenceDef): unknown {\n return {\n collection: value.collection,\n query: toWireGeofenceQuery(value.query),\n detect: value.detect.map(toWireDetectType),\n commands: value.commands.map(toWireMutationCommand),\n };\n}\n\nexport function fromWireObject(value: unknown): LatLngObject | null {\n if (value === null || value === undefined) {\n return null;\n }\n assertRecord(value, \"object response\");\n return {\n id: expectString(value.id, \"object id\"),\n geo: fromWireGeoObject(value.geo),\n fields: fromWireFieldMap(value.fields),\n expires_at: typeof value.expires_at === \"number\" ? value.expires_at : null,\n };\n}\n\nexport function fromWireSearchResults(value: unknown): SearchResults {\n assertRecord(value, \"search results\");\n if (!Array.isArray(value.results)) {\n throw new Error(\"search results must include results array\");\n }\n return {\n results: value.results.map((entry) => {\n assertRecord(entry, \"search result item\");\n return {\n id: expectString(entry.id, \"result id\"),\n object:\n entry.object === null || entry.object === undefined\n ? undefined\n : fromWireGeoObject(entry.object),\n fields:\n entry.fields === null || entry.fields === undefined\n ? undefined\n : fromWireFieldMap(entry.fields),\n distance_meters:\n typeof entry.distance_meters === \"number\" ? entry.distance_meters : null,\n };\n }),\n cursor: Number(value.cursor ?? 0),\n count: Number(value.count ?? 0),\n };\n}\n\nexport function fromWireGeofenceEvent(value: unknown): GeofenceEvent {\n assertRecord(value, \"geofence event\");\n return {\n command: fromWireMutationCommand(value.command),\n detect: fromWireDetectType(value.detect),\n collection: expectString(value.collection, \"event collection\"),\n id: expectString(value.id, \"event id\"),\n object: fromWireGeoObject(value.object),\n fields: fromWireFieldMap(value.fields),\n timestamp_ns:\n typeof value.timestamp_ns === \"number\"\n ? value.timestamp_ns\n : Number(value.timestamp_ns ?? 0),\n event_id: typeof value.event_id === \"string\" ? value.event_id : null,\n hook: typeof value.hook === \"string\" ? value.hook : null,\n group: typeof value.group === \"string\" ? value.group : null,\n nearby:\n isRecord(value.nearby) &&\n typeof value.nearby.collection === \"string\" &&\n typeof value.nearby.id === \"string\" &&\n typeof value.nearby.meters === \"number\"\n ? {\n collection: value.nearby.collection,\n id: value.nearby.id,\n meters: value.nearby.meters,\n }\n : null,\n };\n}\n\nexport function fromWireHookDef(value: unknown): HookDef | null {\n if (value === null || value === undefined) {\n return null;\n }\n assertRecord(value, \"hook definition\");\n return {\n name: expectString(value.name, \"hook name\"),\n endpoint: expectString(value.endpoint, \"hook endpoint\"),\n def: fromWireGeofenceDef(value.def),\n };\n}\n\nfunction toWireFieldEntries(fields: FieldMap | FieldEntry[] | undefined): unknown[] {\n if (!fields) {\n return [];\n }\n const entries = Array.isArray(fields)\n ? fields\n : Object.entries(fields).map(([name, value]) => ({ name, value }));\n return entries.map((entry) => ({\n name: entry.name,\n value: toWireFieldValue(entry.value),\n }));\n}\n\nfunction toWireFieldValue(value: FieldValue): unknown {\n switch (value.type) {\n case \"number\":\n return { type: \"number\", value: value.value };\n case \"text\":\n return { type: \"text\", value: value.value };\n case \"json\":\n return { type: \"json\", value: JSON.stringify(value.value) };\n }\n}\n\nfunction fromWireFieldValue(value: unknown): FieldValue {\n assertRecord(value, \"field value\");\n if (value.type === \"number\") {\n return { type: \"number\", value: Number(value.value) };\n }\n if (value.type === \"text\") {\n return { type: \"text\", value: String(value.value) };\n }\n if (value.type === \"json\") {\n const raw = String(value.value);\n try {\n return { type: \"json\", value: JSON.parse(raw) as JsonValue };\n } catch {\n return { type: \"json\", value: raw };\n }\n }\n throw new Error(\"unknown field value shape\");\n}\n\nfunction fromWireFieldMap(value: unknown): FieldMap {\n if (!isRecord(value) || !isRecord(value.values)) {\n return {};\n }\n return Object.fromEntries(\n Object.entries(value.values).map(([name, fieldValue]) => [\n name,\n fromWireFieldValue(fieldValue),\n ]),\n );\n}\n\nfunction toWireGeoObject(value: GeoObject): unknown {\n switch (value.type) {\n case \"point\":\n return { Point: { lat: value.lat, lon: value.lon, z: value.z ?? null } };\n case \"bounds\":\n return { Bounds: value.bounds };\n case \"hash\":\n return { Hash: value.value };\n case \"geojson\":\n return { GeoJson: value.value };\n case \"string\":\n return { String: value.value };\n }\n}\n\nfunction fromWireGeoObject(value: unknown): GeoObject {\n assertRecord(value, \"geo object\");\n if (\"Point\" in value) {\n const point = value.Point;\n assertRecord(point, \"point\");\n return {\n type: \"point\",\n lat: Number(point.lat),\n lon: Number(point.lon),\n z: typeof point.z === \"number\" || point.z === null ? point.z : undefined,\n };\n }\n if (\"Bounds\" in value) {\n return { type: \"bounds\", bounds: value.Bounds as BoundingBox };\n }\n if (\"Hash\" in value) {\n return { type: \"hash\", value: String(value.Hash) };\n }\n if (\"GeoJson\" in value) {\n return { type: \"geojson\", value: value.GeoJson as JsonValue };\n }\n if (\"String\" in value) {\n return { type: \"string\", value: String(value.String) };\n }\n throw new Error(\"unknown geo object shape\");\n}\n\nfunction toWireArea(area: Area): unknown {\n switch (area.type) {\n case \"circle\":\n return { Circle: { lat: area.lat, lon: area.lon, meters: area.meters } };\n case \"bounds\":\n return { Bounds: area.bounds };\n case \"hash\":\n return { Hash: area.value };\n case \"geojson\":\n return { GeoJson: area.value };\n case \"tile\":\n return { Tile: { x: area.x, y: area.y, z: area.z } };\n case \"quadkey\":\n return { Quadkey: area.value };\n case \"sector\":\n return {\n Sector: {\n lat: area.lat,\n lon: area.lon,\n meters: area.meters,\n bearing1: area.bearing1,\n bearing2: area.bearing2,\n },\n };\n case \"reference\":\n return { Reference: { collection: area.collection, id: area.id } };\n }\n}\n\nfunction toWireOutputFormat(value: OutputFormat | undefined): unknown {\n if (!value || value === \"objects\") {\n return \"Objects\";\n }\n if (value === \"points\") {\n return \"Points\";\n }\n if (value === \"bounds\") {\n return \"Bounds\";\n }\n if (value === \"ids\") {\n return \"Ids\";\n }\n if (value === \"count\") {\n return \"Count\";\n }\n return { Hashes: { precision: value.hashes.precision } };\n}\n\nfunction toWireWhereComparison(value: WhereComparison): unknown {\n switch (value.type) {\n case \"range\":\n return { Range: { min: value.min, max: value.max } };\n case \"equalsText\":\n return { EqualsText: value.value };\n case \"regex\":\n return { Regex: value.value };\n }\n}\n\nfunction toWireGeofenceQuery(value: GeofenceQuery): unknown {\n switch (value.type) {\n case \"nearby\":\n return {\n Nearby: {\n lat: value.lat,\n lon: value.lon,\n meters: value.meters,\n options: toWireSearchOptions(value.options),\n },\n };\n case \"within\":\n return { Within: { area: toWireArea(value.area), options: toWireSearchOptions(value.options) } };\n case \"intersects\":\n return {\n Intersects: {\n area: toWireArea(value.area),\n options: toWireSearchOptions(value.options),\n },\n };\n case \"roam\":\n return {\n Roam: {\n target_collection: value.targetCollection,\n target_pattern: value.targetPattern,\n meters: value.meters,\n options: toWireSearchOptions(value.options),\n nodwell: value.nodwell ?? false,\n },\n };\n }\n}\n\nfunction fromWireGeofenceDef(value: unknown): GeofenceDef {\n assertRecord(value, \"geofence definition\");\n const detect = value.detect;\n const commands = value.commands;\n if (!Array.isArray(detect) || !Array.isArray(commands)) {\n throw new Error(\"geofence detect and commands must be arrays\");\n }\n return {\n collection: expectString(value.collection, \"geofence collection\"),\n query: fromWireGeofenceQuery(value.query),\n detect: detect.map(fromWireDetectType),\n commands: commands.map(fromWireMutationCommand),\n };\n}\n\nfunction fromWireGeofenceQuery(value: unknown): GeofenceQuery {\n assertRecord(value, \"geofence query\");\n if (\"Nearby\" in value) {\n const nearby = value.Nearby;\n assertRecord(nearby, \"nearby query\");\n return {\n type: \"nearby\",\n lat: Number(nearby.lat),\n lon: Number(nearby.lon),\n meters: Number(nearby.meters),\n options: fromWireSearchOptions(nearby.options),\n };\n }\n if (\"Within\" in value) {\n const within = value.Within;\n assertRecord(within, \"within query\");\n return {\n type: \"within\",\n area: fromWireArea(within.area),\n options: fromWireSearchOptions(within.options),\n };\n }\n if (\"Intersects\" in value) {\n const intersects = value.Intersects;\n assertRecord(intersects, \"intersects query\");\n return {\n type: \"intersects\",\n area: fromWireArea(intersects.area),\n options: fromWireSearchOptions(intersects.options),\n };\n }\n if (\"Roam\" in value) {\n const roam = value.Roam;\n assertRecord(roam, \"roam query\");\n return {\n type: \"roam\",\n targetCollection: expectString(roam.target_collection, \"roam target collection\"),\n targetPattern: expectString(roam.target_pattern, \"roam target pattern\"),\n meters: Number(roam.meters),\n options: fromWireSearchOptions(roam.options),\n nodwell: typeof roam.nodwell === \"boolean\" ? roam.nodwell : undefined,\n };\n }\n throw new Error(\"unknown geofence query shape\");\n}\n\nfunction fromWireArea(value: unknown): Area {\n assertRecord(value, \"area\");\n if (\"Circle\" in value) {\n const circle = value.Circle;\n assertRecord(circle, \"circle area\");\n return {\n type: \"circle\",\n lat: Number(circle.lat),\n lon: Number(circle.lon),\n meters: Number(circle.meters),\n };\n }\n if (\"Bounds\" in value) {\n return { type: \"bounds\", bounds: value.Bounds as BoundingBox };\n }\n if (\"Hash\" in value) {\n return { type: \"hash\", value: String(value.Hash) };\n }\n if (\"GeoJson\" in value) {\n return { type: \"geojson\", value: value.GeoJson as JsonValue };\n }\n if (\"Tile\" in value) {\n const tile = value.Tile;\n assertRecord(tile, \"tile area\");\n return { type: \"tile\", x: Number(tile.x), y: Number(tile.y), z: Number(tile.z) };\n }\n if (\"Quadkey\" in value) {\n return { type: \"quadkey\", value: String(value.Quadkey) };\n }\n if (\"Sector\" in value) {\n const sector = value.Sector;\n assertRecord(sector, \"sector area\");\n return {\n type: \"sector\",\n lat: Number(sector.lat),\n lon: Number(sector.lon),\n meters: Number(sector.meters),\n bearing1: Number(sector.bearing1),\n bearing2: Number(sector.bearing2),\n };\n }\n if (\"Reference\" in value) {\n const reference = value.Reference;\n assertRecord(reference, \"reference area\");\n return {\n type: \"reference\",\n collection: expectString(reference.collection, \"reference collection\"),\n id: expectString(reference.id, \"reference id\"),\n };\n }\n throw new Error(\"unknown area shape\");\n}\n\nfunction fromWireSearchOptions(value: unknown): SearchOptions | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n return {\n cursor: typeof value.cursor === \"number\" ? value.cursor : undefined,\n limit: typeof value.limit === \"number\" ? value.limit : undefined,\n nofields: typeof value.nofields === \"boolean\" ? value.nofields : undefined,\n matchPattern:\n typeof value.match_pattern === \"string\" ? value.match_pattern : undefined,\n sort: value.sort === \"Desc\" ? \"desc\" : value.sort === \"Asc\" ? \"asc\" : undefined,\n clip: typeof value.clip === \"boolean\" ? value.clip : undefined,\n };\n}\n\nfunction toWireSetCondition(value: SetObjectOptions[\"condition\"] | undefined): unknown {\n switch (value) {\n case \"nx\":\n return \"Nx\";\n case \"xx\":\n return \"Xx\";\n case \"always\":\n case undefined:\n return \"Always\";\n }\n}\n\nfunction toWireMutationCommand(value: MutationCommand): string {\n switch (value) {\n case \"set\":\n return \"Set\";\n case \"del\":\n return \"Del\";\n case \"drop\":\n return \"Drop\";\n case \"fset\":\n return \"Fset\";\n }\n}\n\nfunction fromWireMutationCommand(value: unknown): MutationCommand {\n switch (value) {\n case \"Set\":\n case \"set\":\n return \"set\";\n case \"Del\":\n case \"del\":\n return \"del\";\n case \"Drop\":\n case \"drop\":\n return \"drop\";\n case \"Fset\":\n case \"fset\":\n return \"fset\";\n default:\n throw new Error(`unknown mutation command: ${String(value)}`);\n }\n}\n\nfunction toWireDetectType(value: DetectType): string {\n switch (value) {\n case \"inside\":\n return \"Inside\";\n case \"outside\":\n return \"Outside\";\n case \"enter\":\n return \"Enter\";\n case \"exit\":\n return \"Exit\";\n case \"cross\":\n return \"Cross\";\n case \"roam\":\n return \"Roam\";\n }\n}\n\nfunction fromWireDetectType(value: unknown): DetectType {\n switch (value) {\n case \"Inside\":\n case \"inside\":\n return \"inside\";\n case \"Outside\":\n case \"outside\":\n return \"outside\";\n case \"Enter\":\n case \"enter\":\n return \"enter\";\n case \"Exit\":\n case \"exit\":\n return \"exit\";\n case \"Cross\":\n case \"cross\":\n return \"cross\";\n case \"Roam\":\n case \"roam\":\n return \"roam\";\n default:\n throw new Error(`unknown detect type: ${String(value)}`);\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction assertRecord(value: unknown, label: string): asserts value is Record<string, unknown> {\n if (!isRecord(value)) {\n throw new Error(`${label} must be an object`);\n }\n}\n\nfunction expectString(value: unknown, label: string): string {\n if (typeof value !== \"string\") {\n throw new Error(`${label} must be a string`);\n }\n return value;\n}\n","import BrowserWorker from \"./engine.worker.ts?worker\";\nimport type {\n WorkerMethod,\n WorkerOutboundMessage,\n WorkerRequest,\n WorkerResponse,\n} from \"./messages.js\";\nimport {\n fromWireObject,\n fromWireHookDef,\n fromWireSearchResults,\n toWireAreaQuery,\n toWireGeofenceDef,\n toWireNearbyQuery,\n toWireSearchOptions,\n toWireSetObjectRequest,\n type AreaQuery,\n type BoundingBox,\n type CollectionInfo,\n type CollectionStats,\n type GeofenceDef,\n type GeofenceEvent,\n type HookDef,\n type HookInfo,\n type LatLngObject,\n type LatLngWasmEventMap,\n type NearbyQuery,\n type SearchOptions,\n type SearchResults,\n type ServerInfo,\n type SetObjectOptions,\n type GeoObject,\n} from \"./types.js\";\n\n/** Configuration for `createLatLng`. */\nexport interface CreateLatLngOptions {\n /**\n * Explicit URL for `latlng_core_bg.wasm`.\n *\n * Use this when your bundler or CDN serves the wasm file from a custom\n * location. If omitted, the bundled worker resolves `../wasm/latlng_core_bg.wasm`\n * relative to its own emitted worker URL.\n */\n wasmUrl?: string | URL;\n /**\n * Custom worker factory for tests or advanced bundlers.\n *\n * Normal browser applications should omit this and let the package create its\n * bundled module worker.\n */\n workerFactory?: () => Worker;\n}\n\ntype PendingRequest = {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n};\n\n/**\n * Browser-only latlng client backed by a dedicated Web Worker and WebAssembly engine.\n *\n * Every API method is asynchronous because requests are sent to the worker with\n * `postMessage`. The main thread never owns or calls the wasm engine directly.\n */\nexport class LatLngWasmClient {\n readonly #worker: Worker;\n readonly #target = new EventTarget();\n readonly #pending = new Map<number, PendingRequest>();\n readonly #ready: Promise<void>;\n #nextId = 1;\n #closed = false;\n\n /** Creates a client around a Web Worker. Prefer `createLatLng()` in application code. */\n public constructor(worker: Worker, options: Pick<CreateLatLngOptions, \"wasmUrl\"> = {}) {\n this.#worker = worker;\n this.#worker.addEventListener(\"message\", this.#handleMessage);\n this.#worker.addEventListener(\"error\", this.#handleError);\n this.#ready = this.#request(\n \"init\",\n options.wasmUrl ? String(options.wasmUrl) : null,\n ).then(() => undefined);\n }\n\n /** Resolves when the worker has loaded and initialized the wasm engine. */\n public ready(): Promise<void> {\n return this.#ready;\n }\n\n /** Creates a collection explicitly. Object writes still create missing collections implicitly. */\n public async createCollection(collection: string): Promise<boolean> {\n return Boolean(await this.#request(\"createCollection\", collection));\n }\n\n /** Drops a collection and all objects stored in it. */\n public async dropCollection(collection: string): Promise<boolean> {\n return Boolean(await this.#request(\"dropCollection\", collection));\n }\n\n /** Lists collection names matching a glob pattern. Defaults to all collections. */\n public async collections(pattern = \"*\"): Promise<string[]> {\n return (await this.#request(\"collections\", pattern)) as string[];\n }\n\n /** Returns collection bounds and statistics, or `null` if the collection does not exist. */\n public async collectionInfo(collection: string): Promise<CollectionInfo | null> {\n return (await this.#request(\"collectionInfo\", collection)) as CollectionInfo | null;\n }\n\n /** Stores or updates an object. */\n public async setObject(\n collection: string,\n id: string,\n object: GeoObject,\n options?: SetObjectOptions,\n ): Promise<boolean> {\n return Boolean(\n await this.#request(\n \"setObject\",\n collection,\n id,\n toWireSetObjectRequest(object, options),\n ),\n );\n }\n\n /** Stores or updates a point object. */\n public async setPoint(\n collection: string,\n id: string,\n coordinates: { lat: number; lon: number; z?: number | null },\n options?: SetObjectOptions,\n ): Promise<boolean> {\n return this.setObject(\n collection,\n id,\n { type: \"point\", lat: coordinates.lat, lon: coordinates.lon, z: coordinates.z },\n options,\n );\n }\n\n /** Returns an object by ID, or `null` when it does not exist. */\n public async getObject(\n collection: string,\n id: string,\n options: { withFields?: boolean } = {},\n ): Promise<LatLngObject | null> {\n return fromWireObject(\n await this.#request(\"getObject\", collection, id, options.withFields ?? true),\n );\n }\n\n /** Deletes an object by ID. */\n public async deleteObject(collection: string, id: string): Promise<boolean> {\n return Boolean(await this.#request(\"deleteObject\", collection, id));\n }\n\n /** Sets a TTL in seconds for an existing object. */\n public async expire(collection: string, id: string, seconds: number): Promise<boolean> {\n return Boolean(await this.#request(\"expire\", collection, id, seconds));\n }\n\n /** Removes TTL metadata from an existing object. */\n public async persist(collection: string, id: string): Promise<boolean> {\n return Boolean(await this.#request(\"persist\", collection, id));\n }\n\n /** Returns the remaining TTL in seconds, or `null` when no TTL is set or the object is missing. */\n public async ttl(collection: string, id: string): Promise<number | null> {\n const value = await this.#request(\"ttl\", collection, id);\n return typeof value === \"number\" ? value : null;\n }\n\n /** Creates or replaces a browser geofence hook. Matching events are emitted as JS events. */\n public async setHook(name: string, def: GeofenceDef): Promise<boolean> {\n return Boolean(await this.#request(\"setHook\", name, { def: toWireGeofenceDef(def) }));\n }\n\n /** Deletes a browser geofence hook. */\n public async deleteHook(name: string): Promise<boolean> {\n return Boolean(await this.#request(\"deleteHook\", name));\n }\n\n /** Lists browser geofence hooks matching a glob pattern. */\n public async hooks(pattern = \"*\"): Promise<HookInfo[]> {\n return (await this.#request(\"hooks\", pattern)) as HookInfo[];\n }\n\n /** Returns a full browser geofence hook definition, or `null` when it does not exist. */\n public async getHook(name: string): Promise<HookDef | null> {\n return fromWireHookDef(await this.#request(\"getHook\", name));\n }\n\n /** Runs a nearby spatial query. */\n public async nearby(collection: string, query: NearbyQuery): Promise<SearchResults> {\n return fromWireSearchResults(\n await this.#request(\"nearby\", collection, toWireNearbyQuery(query)),\n );\n }\n\n /** Runs a within spatial query. */\n public async within(collection: string, query: AreaQuery): Promise<SearchResults> {\n return fromWireSearchResults(\n await this.#request(\"within\", collection, toWireAreaQuery(query)),\n );\n }\n\n /** Runs an intersects spatial query. */\n public async intersects(collection: string, query: AreaQuery): Promise<SearchResults> {\n return fromWireSearchResults(\n await this.#request(\"intersects\", collection, toWireAreaQuery(query)),\n );\n }\n\n /** Scans a collection. */\n public async scan(collection: string, options?: SearchOptions): Promise<SearchResults> {\n return fromWireSearchResults(\n await this.#request(\"scan\", collection, toWireSearchOptions(options)),\n );\n }\n\n /** Scans string objects in a collection. */\n public async search(collection: string, options?: SearchOptions): Promise<SearchResults> {\n return fromWireSearchResults(\n await this.#request(\"search\", collection, toWireSearchOptions(options)),\n );\n }\n\n /** Returns collection bounds, or `null` when the collection does not exist. */\n public async bounds(collection: string): Promise<BoundingBox | null> {\n return (await this.#request(\"bounds\", collection)) as BoundingBox | null;\n }\n\n /** Returns statistics for existing collections. */\n public async stats(collections: string[]): Promise<CollectionStats[]> {\n return (await this.#request(\"stats\", collections)) as CollectionStats[];\n }\n\n /** Returns engine metadata for the in-browser wasm engine. */\n public async serverInfo(): Promise<ServerInfo> {\n return (await this.#request(\"serverInfo\")) as ServerInfo;\n }\n\n /** Registers a typed event listener for mutation or geofence events. */\n public addEventListener<K extends keyof LatLngWasmEventMap>(\n type: K,\n listener: (event: LatLngWasmEventMap[K]) => void,\n options?: AddEventListenerOptions,\n ): void {\n this.#target.addEventListener(type, listener as EventListener, options);\n }\n\n /** Removes a previously registered typed event listener. */\n public removeEventListener<K extends keyof LatLngWasmEventMap>(\n type: K,\n listener: (event: LatLngWasmEventMap[K]) => void,\n options?: EventListenerOptions,\n ): void {\n this.#target.removeEventListener(type, listener as EventListener, options);\n }\n\n /** Convenience alias for `addEventListener`. */\n public on<K extends keyof LatLngWasmEventMap>(\n type: K,\n listener: (event: LatLngWasmEventMap[K]) => void,\n ): () => void {\n this.addEventListener(type, listener);\n return () => this.removeEventListener(type, listener);\n }\n\n /** Terminates the worker and rejects pending requests. The client cannot be reused afterward. */\n public close(): void {\n if (this.#closed) {\n return;\n }\n this.#closed = true;\n this.#worker.removeEventListener(\"message\", this.#handleMessage);\n this.#worker.removeEventListener(\"error\", this.#handleError);\n this.#worker.terminate();\n for (const pending of this.#pending.values()) {\n pending.reject(new Error(\"latlng wasm client is closed\"));\n }\n this.#pending.clear();\n }\n\n #request(method: WorkerMethod, ...params: unknown[]): Promise<unknown> {\n if (this.#closed) {\n return Promise.reject(new Error(\"latlng wasm client is closed\"));\n }\n const id = this.#nextId++;\n const request: WorkerRequest = { id, method, params };\n return new Promise((resolve, reject) => {\n this.#pending.set(id, { resolve, reject });\n this.#worker.postMessage(request);\n });\n }\n\n #handleMessage = (message: MessageEvent<WorkerOutboundMessage>): void => {\n const data = message.data;\n if (\"type\" in data && data.type === \"event\") {\n if (data.eventType === \"mutation\") {\n this.#target.dispatchEvent(new CustomEvent(\"mutation\", { detail: data.event }));\n return;\n }\n this.#target.dispatchEvent(new CustomEvent(\"geofence\", { detail: data.event }));\n this.#target.dispatchEvent(\n new CustomEvent(`geofence:${data.event.detect}`, { detail: data.event }),\n );\n return;\n }\n\n this.#resolveResponse(data as WorkerResponse);\n };\n\n #handleError = (event: ErrorEvent): void => {\n const error = new Error(event.message || \"latlng wasm worker failed\");\n for (const pending of this.#pending.values()) {\n pending.reject(error);\n }\n this.#pending.clear();\n };\n\n #resolveResponse(response: WorkerResponse): void {\n const pending = this.#pending.get(response.id);\n if (!pending) {\n return;\n }\n this.#pending.delete(response.id);\n if (response.ok) {\n pending.resolve(response.result);\n } else {\n pending.reject(new Error(response.error));\n }\n }\n}\n\n/** Creates a worker-backed in-browser latlng engine. */\nexport async function createLatLng(\n options: CreateLatLngOptions = {},\n): Promise<LatLngWasmClient> {\n const worker = options.workerFactory?.() ?? new BrowserWorker();\n const client = new LatLngWasmClient(worker, { wasmUrl: options.wasmUrl });\n await client.ready();\n return client;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { GeofenceEvent, MutationEvent } from "./types.js";
|
|
2
|
+
export type WorkerMethod = "init" | "createCollection" | "dropCollection" | "collections" | "collectionInfo" | "setObject" | "getObject" | "deleteObject" | "expire" | "persist" | "ttl" | "setHook" | "deleteHook" | "hooks" | "getHook" | "nearby" | "within" | "intersects" | "scan" | "search" | "bounds" | "stats" | "serverInfo";
|
|
3
|
+
export interface WorkerRequest {
|
|
4
|
+
id: number;
|
|
5
|
+
method: WorkerMethod;
|
|
6
|
+
params: unknown[];
|
|
7
|
+
}
|
|
8
|
+
export type WorkerResponse = {
|
|
9
|
+
id: number;
|
|
10
|
+
ok: true;
|
|
11
|
+
result: unknown;
|
|
12
|
+
} | {
|
|
13
|
+
id: number;
|
|
14
|
+
ok: false;
|
|
15
|
+
error: string;
|
|
16
|
+
};
|
|
17
|
+
export type WorkerEventMessage = {
|
|
18
|
+
type: "event";
|
|
19
|
+
eventType: "mutation";
|
|
20
|
+
event: MutationEvent;
|
|
21
|
+
} | {
|
|
22
|
+
type: "event";
|
|
23
|
+
eventType: "geofence";
|
|
24
|
+
event: GeofenceEvent;
|
|
25
|
+
};
|
|
26
|
+
export type WorkerOutboundMessage = WorkerResponse | WorkerEventMessage;
|
|
27
|
+
export interface WasmMutationResponse<T = unknown> {
|
|
28
|
+
ok: boolean;
|
|
29
|
+
result: T;
|
|
30
|
+
events: unknown[];
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,kBAAkB,GAClB,gBAAgB,GAChB,aAAa,GACb,gBAAgB,GAChB,WAAW,GACX,WAAW,GACX,cAAc,GACd,QAAQ,GACR,SAAS,GACT,KAAK,GACL,SAAS,GACT,YAAY,GACZ,OAAO,GACP,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,YAAY,GACZ,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,YAAY,CAAC;AAEjB,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACzC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAExE,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,OAAO;IAC/C,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
/** JSON value accepted by GeoJSON payloads and field values. */
|
|
2
|
+
export type JsonValue = null | boolean | number | string | JsonValue[] | {
|
|
3
|
+
[key: string]: JsonValue;
|
|
4
|
+
};
|
|
5
|
+
/** Geographic bounding box expressed as min/max latitude and longitude. */
|
|
6
|
+
export interface BoundingBox {
|
|
7
|
+
/** Southern latitude bound. */
|
|
8
|
+
min_lat: number;
|
|
9
|
+
/** Western longitude bound. */
|
|
10
|
+
min_lon: number;
|
|
11
|
+
/** Northern latitude bound. */
|
|
12
|
+
max_lat: number;
|
|
13
|
+
/** Eastern longitude bound. */
|
|
14
|
+
max_lon: number;
|
|
15
|
+
}
|
|
16
|
+
/** Stored field value. */
|
|
17
|
+
export type FieldValue = {
|
|
18
|
+
type: "number";
|
|
19
|
+
value: number;
|
|
20
|
+
} | {
|
|
21
|
+
type: "text";
|
|
22
|
+
value: string;
|
|
23
|
+
} | {
|
|
24
|
+
type: "json";
|
|
25
|
+
value: JsonValue;
|
|
26
|
+
};
|
|
27
|
+
/** Named field assignment. */
|
|
28
|
+
export interface FieldEntry {
|
|
29
|
+
/** Field name. */
|
|
30
|
+
name: string;
|
|
31
|
+
/** Field value. */
|
|
32
|
+
value: FieldValue;
|
|
33
|
+
}
|
|
34
|
+
/** Field map keyed by field name. */
|
|
35
|
+
export type FieldMap = Record<string, FieldValue>;
|
|
36
|
+
/** Geographic object payload accepted by `setObject`. */
|
|
37
|
+
export type GeoObject = {
|
|
38
|
+
type: "point";
|
|
39
|
+
lat: number;
|
|
40
|
+
lon: number;
|
|
41
|
+
z?: number | null;
|
|
42
|
+
} | {
|
|
43
|
+
type: "bounds";
|
|
44
|
+
bounds: BoundingBox;
|
|
45
|
+
} | {
|
|
46
|
+
type: "hash";
|
|
47
|
+
value: string;
|
|
48
|
+
} | {
|
|
49
|
+
type: "geojson";
|
|
50
|
+
value: JsonValue;
|
|
51
|
+
} | {
|
|
52
|
+
type: "string";
|
|
53
|
+
value: string;
|
|
54
|
+
};
|
|
55
|
+
/** Stored object returned by read and query operations. */
|
|
56
|
+
export interface LatLngObject {
|
|
57
|
+
/** Object identifier. */
|
|
58
|
+
id: string;
|
|
59
|
+
/** Stored object payload. */
|
|
60
|
+
geo: GeoObject;
|
|
61
|
+
/** Stored field values. */
|
|
62
|
+
fields: FieldMap;
|
|
63
|
+
/** Expiration timestamp in milliseconds since epoch, or `null`. */
|
|
64
|
+
expires_at: number | null;
|
|
65
|
+
}
|
|
66
|
+
/** Area definition used by spatial queries and geofence definitions. */
|
|
67
|
+
export type Area = {
|
|
68
|
+
type: "circle";
|
|
69
|
+
lat: number;
|
|
70
|
+
lon: number;
|
|
71
|
+
meters: number;
|
|
72
|
+
} | {
|
|
73
|
+
type: "bounds";
|
|
74
|
+
bounds: BoundingBox;
|
|
75
|
+
} | {
|
|
76
|
+
type: "hash";
|
|
77
|
+
value: string;
|
|
78
|
+
} | {
|
|
79
|
+
type: "geojson";
|
|
80
|
+
value: JsonValue;
|
|
81
|
+
} | {
|
|
82
|
+
type: "tile";
|
|
83
|
+
x: number;
|
|
84
|
+
y: number;
|
|
85
|
+
z: number;
|
|
86
|
+
} | {
|
|
87
|
+
type: "quadkey";
|
|
88
|
+
value: string;
|
|
89
|
+
} | {
|
|
90
|
+
type: "sector";
|
|
91
|
+
lat: number;
|
|
92
|
+
lon: number;
|
|
93
|
+
meters: number;
|
|
94
|
+
bearing1: number;
|
|
95
|
+
bearing2: number;
|
|
96
|
+
} | {
|
|
97
|
+
type: "reference";
|
|
98
|
+
collection: string;
|
|
99
|
+
id: string;
|
|
100
|
+
};
|
|
101
|
+
/** Sort direction for query results. */
|
|
102
|
+
export type SortOrder = "asc" | "desc";
|
|
103
|
+
/** Query output format. */
|
|
104
|
+
export type OutputFormat = "objects" | "points" | "bounds" | "ids" | "count" | {
|
|
105
|
+
hashes: {
|
|
106
|
+
precision: number;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
/** Numeric or textual field comparison. */
|
|
110
|
+
export type WhereComparison = {
|
|
111
|
+
type: "range";
|
|
112
|
+
min: number;
|
|
113
|
+
max: number;
|
|
114
|
+
} | {
|
|
115
|
+
type: "equalsText";
|
|
116
|
+
value: string;
|
|
117
|
+
} | {
|
|
118
|
+
type: "regex";
|
|
119
|
+
value: string;
|
|
120
|
+
};
|
|
121
|
+
/** Field-level filter used by search queries. */
|
|
122
|
+
export interface WhereFilter {
|
|
123
|
+
/** Field name to inspect. */
|
|
124
|
+
field: string;
|
|
125
|
+
/** Comparison to apply. */
|
|
126
|
+
comparison: WhereComparison;
|
|
127
|
+
}
|
|
128
|
+
/** Inclusion filter used by search queries. */
|
|
129
|
+
export interface WhereInFilter {
|
|
130
|
+
/** Field name to inspect. */
|
|
131
|
+
field: string;
|
|
132
|
+
/** Accepted string values. */
|
|
133
|
+
values: string[];
|
|
134
|
+
}
|
|
135
|
+
/** Expression filter used by search queries. */
|
|
136
|
+
export interface WhereExprFilter {
|
|
137
|
+
/** Server-side expression string. */
|
|
138
|
+
expression: string;
|
|
139
|
+
}
|
|
140
|
+
/** Shared options accepted by scan/search/spatial query methods. */
|
|
141
|
+
export interface SearchOptions {
|
|
142
|
+
/** Cursor to resume a paginated query. */
|
|
143
|
+
cursor?: number;
|
|
144
|
+
/** Maximum number of results to return. */
|
|
145
|
+
limit?: number;
|
|
146
|
+
/** Omit fields from result items when true. */
|
|
147
|
+
nofields?: boolean;
|
|
148
|
+
/** Match pattern applied to object IDs. */
|
|
149
|
+
matchPattern?: string;
|
|
150
|
+
/** Result sort direction. */
|
|
151
|
+
sort?: SortOrder;
|
|
152
|
+
/** Numeric/text filters. */
|
|
153
|
+
whereFilters?: WhereFilter[];
|
|
154
|
+
/** Inclusion filters. */
|
|
155
|
+
whereInFilters?: WhereInFilter[];
|
|
156
|
+
/** Expression filters. */
|
|
157
|
+
whereExprFilters?: WhereExprFilter[];
|
|
158
|
+
/** Clip geometries to the query area when supported. */
|
|
159
|
+
clip?: boolean;
|
|
160
|
+
/** Output format for result items. */
|
|
161
|
+
output?: OutputFormat;
|
|
162
|
+
}
|
|
163
|
+
/** Nearby query request. */
|
|
164
|
+
export interface NearbyQuery {
|
|
165
|
+
/** Center latitude. */
|
|
166
|
+
lat: number;
|
|
167
|
+
/** Center longitude. */
|
|
168
|
+
lon: number;
|
|
169
|
+
/** Search radius in meters. */
|
|
170
|
+
meters: number;
|
|
171
|
+
/** Optional query controls. */
|
|
172
|
+
options?: SearchOptions;
|
|
173
|
+
}
|
|
174
|
+
/** Area-based query request shared by `within` and `intersects`. */
|
|
175
|
+
export interface AreaQuery {
|
|
176
|
+
/** Area to test. */
|
|
177
|
+
area: Area;
|
|
178
|
+
/** Optional query controls. */
|
|
179
|
+
options?: SearchOptions;
|
|
180
|
+
}
|
|
181
|
+
/** Query result item. */
|
|
182
|
+
export interface SearchItem {
|
|
183
|
+
/** Object identifier. */
|
|
184
|
+
id: string;
|
|
185
|
+
/** Object payload when requested by output options. */
|
|
186
|
+
object?: GeoObject;
|
|
187
|
+
/** Field map unless omitted by query options. */
|
|
188
|
+
fields?: FieldMap;
|
|
189
|
+
/** Distance from query center for nearby queries. */
|
|
190
|
+
distance_meters: number | null;
|
|
191
|
+
}
|
|
192
|
+
/** Query results returned by scan/search/spatial queries. */
|
|
193
|
+
export interface SearchResults {
|
|
194
|
+
/** Result objects. */
|
|
195
|
+
results: SearchItem[];
|
|
196
|
+
/** Cursor for the next page. */
|
|
197
|
+
cursor: number;
|
|
198
|
+
/** Number of returned items. */
|
|
199
|
+
count: number;
|
|
200
|
+
}
|
|
201
|
+
/** Collection statistics. */
|
|
202
|
+
export interface CollectionStats {
|
|
203
|
+
/** Collection name. */
|
|
204
|
+
name: string;
|
|
205
|
+
/** Number of live objects. */
|
|
206
|
+
object_count: number;
|
|
207
|
+
/** Number of point objects. */
|
|
208
|
+
point_count: number;
|
|
209
|
+
/** Number of string objects. */
|
|
210
|
+
string_count: number;
|
|
211
|
+
/** Number of objects with expiration metadata. */
|
|
212
|
+
expires_count: number;
|
|
213
|
+
}
|
|
214
|
+
/** Collection metadata returned by `collectionInfo`. */
|
|
215
|
+
export interface CollectionInfo {
|
|
216
|
+
/** Collection name. */
|
|
217
|
+
name: string;
|
|
218
|
+
/** Spatial bounds, if the collection contains spatial objects. */
|
|
219
|
+
bounds: BoundingBox | null;
|
|
220
|
+
/** Collection statistics. */
|
|
221
|
+
stats: CollectionStats;
|
|
222
|
+
}
|
|
223
|
+
/** Engine metadata returned by `serverInfo`. */
|
|
224
|
+
export interface ServerInfo {
|
|
225
|
+
/** Product version. */
|
|
226
|
+
version: string;
|
|
227
|
+
/** Public API version. */
|
|
228
|
+
api_version: string;
|
|
229
|
+
/** Protocol version used by native transports. */
|
|
230
|
+
protocol_version: string;
|
|
231
|
+
/** Storage format version. */
|
|
232
|
+
storage_format_version: string;
|
|
233
|
+
/** Number of collections. */
|
|
234
|
+
num_collections: number;
|
|
235
|
+
/** Number of live objects. */
|
|
236
|
+
num_objects: number;
|
|
237
|
+
/** Number of live point objects. */
|
|
238
|
+
num_points: number;
|
|
239
|
+
/** Approximate heap usage in bytes. */
|
|
240
|
+
heap_bytes: number;
|
|
241
|
+
/** Whether writes are disabled. */
|
|
242
|
+
read_only: boolean;
|
|
243
|
+
/** Whether the engine is acting as leader. */
|
|
244
|
+
leader: boolean;
|
|
245
|
+
/** Current storage sequence. */
|
|
246
|
+
last_sequence: number;
|
|
247
|
+
}
|
|
248
|
+
/** Object upsert options. */
|
|
249
|
+
export interface SetObjectOptions {
|
|
250
|
+
/** Field values to store alongside the object. */
|
|
251
|
+
fields?: FieldMap | FieldEntry[];
|
|
252
|
+
/** Optional object TTL in seconds. */
|
|
253
|
+
expireSeconds?: number;
|
|
254
|
+
/** Conditional write mode. */
|
|
255
|
+
condition?: "always" | "nx" | "xx";
|
|
256
|
+
}
|
|
257
|
+
/** Mutation command names used by geofence definitions and events. */
|
|
258
|
+
export type MutationCommand = "set" | "del" | "drop" | "fset";
|
|
259
|
+
/** Geofence detection mode. */
|
|
260
|
+
export type DetectType = "inside" | "outside" | "enter" | "exit" | "cross" | "roam";
|
|
261
|
+
/** Geofence query definition. */
|
|
262
|
+
export type GeofenceQuery = {
|
|
263
|
+
type: "nearby";
|
|
264
|
+
lat: number;
|
|
265
|
+
lon: number;
|
|
266
|
+
meters: number;
|
|
267
|
+
options?: SearchOptions;
|
|
268
|
+
} | {
|
|
269
|
+
type: "within";
|
|
270
|
+
area: Area;
|
|
271
|
+
options?: SearchOptions;
|
|
272
|
+
} | {
|
|
273
|
+
type: "intersects";
|
|
274
|
+
area: Area;
|
|
275
|
+
options?: SearchOptions;
|
|
276
|
+
} | {
|
|
277
|
+
type: "roam";
|
|
278
|
+
targetCollection: string;
|
|
279
|
+
targetPattern: string;
|
|
280
|
+
meters: number;
|
|
281
|
+
options?: SearchOptions;
|
|
282
|
+
nodwell?: boolean;
|
|
283
|
+
};
|
|
284
|
+
/** Geofence hook definition. */
|
|
285
|
+
export interface GeofenceDef {
|
|
286
|
+
/** Target collection evaluated by the hook. */
|
|
287
|
+
collection: string;
|
|
288
|
+
/** Query used by the hook. */
|
|
289
|
+
query: GeofenceQuery;
|
|
290
|
+
/** Detection modes emitted by the hook. */
|
|
291
|
+
detect: DetectType[];
|
|
292
|
+
/** Mutation commands that trigger the hook. */
|
|
293
|
+
commands: MutationCommand[];
|
|
294
|
+
}
|
|
295
|
+
/** Hook summary. */
|
|
296
|
+
export interface HookInfo {
|
|
297
|
+
/** Hook name. */
|
|
298
|
+
name: string;
|
|
299
|
+
/** Internal browser event endpoint. */
|
|
300
|
+
endpoint: string;
|
|
301
|
+
/** Target collection. */
|
|
302
|
+
collection: string;
|
|
303
|
+
}
|
|
304
|
+
/** Full hook definition. */
|
|
305
|
+
export interface HookDef {
|
|
306
|
+
/** Hook name. */
|
|
307
|
+
name: string;
|
|
308
|
+
/** Internal browser event endpoint. */
|
|
309
|
+
endpoint: string;
|
|
310
|
+
/** Geofence definition. */
|
|
311
|
+
def: GeofenceDef;
|
|
312
|
+
}
|
|
313
|
+
/** Roaming metadata attached to roam events. */
|
|
314
|
+
export interface RoamingInfo {
|
|
315
|
+
/** Target collection. */
|
|
316
|
+
collection: string;
|
|
317
|
+
/** Target object ID. */
|
|
318
|
+
id: string;
|
|
319
|
+
/** Roam distance in meters. */
|
|
320
|
+
meters: number;
|
|
321
|
+
}
|
|
322
|
+
/** Geofence event emitted by browser hooks. */
|
|
323
|
+
export interface GeofenceEvent {
|
|
324
|
+
/** Mutation command that triggered the event. */
|
|
325
|
+
command: MutationCommand;
|
|
326
|
+
/** Detection mode that matched. */
|
|
327
|
+
detect: DetectType;
|
|
328
|
+
/** Collection containing the changed object. */
|
|
329
|
+
collection: string;
|
|
330
|
+
/** Object ID. */
|
|
331
|
+
id: string;
|
|
332
|
+
/** Object payload at event time. */
|
|
333
|
+
object: GeoObject;
|
|
334
|
+
/** Field map at event time. */
|
|
335
|
+
fields: FieldMap;
|
|
336
|
+
/** Event timestamp in nanoseconds. */
|
|
337
|
+
timestamp_ns: number;
|
|
338
|
+
/** Stable opaque event identifier when available. */
|
|
339
|
+
event_id?: string | null;
|
|
340
|
+
/** Browser hook name when available. */
|
|
341
|
+
hook?: string | null;
|
|
342
|
+
/** Roaming group when available. */
|
|
343
|
+
group?: string | null;
|
|
344
|
+
/** Roaming metadata when available. */
|
|
345
|
+
nearby?: RoamingInfo | null;
|
|
346
|
+
}
|
|
347
|
+
/** Client event emitted for object and collection mutations. */
|
|
348
|
+
export interface MutationEvent {
|
|
349
|
+
/** Event type. */
|
|
350
|
+
type: "collection:create" | "collection:drop" | "object:set" | "object:delete" | "object:expire" | "object:persist" | "hook:set" | "hook:delete";
|
|
351
|
+
/** Collection name, when applicable. */
|
|
352
|
+
collection?: string;
|
|
353
|
+
/** Object ID, when applicable. */
|
|
354
|
+
id?: string;
|
|
355
|
+
/** Hook name, when applicable. */
|
|
356
|
+
hook?: string;
|
|
357
|
+
/** Whether the mutation changed state. */
|
|
358
|
+
changed?: boolean;
|
|
359
|
+
}
|
|
360
|
+
/** Event map used by `LatLngWasmClient.addEventListener`. */
|
|
361
|
+
export interface LatLngWasmEventMap {
|
|
362
|
+
/** Any object, collection, or hook mutation. */
|
|
363
|
+
mutation: CustomEvent<MutationEvent>;
|
|
364
|
+
/** Any browser geofence hook event. */
|
|
365
|
+
geofence: CustomEvent<GeofenceEvent>;
|
|
366
|
+
/** Inside geofence event. */
|
|
367
|
+
"geofence:inside": CustomEvent<GeofenceEvent>;
|
|
368
|
+
/** Outside geofence event. */
|
|
369
|
+
"geofence:outside": CustomEvent<GeofenceEvent>;
|
|
370
|
+
/** Enter geofence event. */
|
|
371
|
+
"geofence:enter": CustomEvent<GeofenceEvent>;
|
|
372
|
+
/** Exit geofence event. */
|
|
373
|
+
"geofence:exit": CustomEvent<GeofenceEvent>;
|
|
374
|
+
/** Cross geofence event. */
|
|
375
|
+
"geofence:cross": CustomEvent<GeofenceEvent>;
|
|
376
|
+
/** Roam geofence event. */
|
|
377
|
+
"geofence:roam": CustomEvent<GeofenceEvent>;
|
|
378
|
+
}
|
|
379
|
+
export declare function toWireSetObjectRequest(object: GeoObject, options: SetObjectOptions | undefined): unknown;
|
|
380
|
+
export declare function toWireNearbyQuery(query: NearbyQuery): unknown;
|
|
381
|
+
export declare function toWireAreaQuery(query: AreaQuery): unknown;
|
|
382
|
+
export declare function toWireSearchOptions(options: SearchOptions | undefined): unknown;
|
|
383
|
+
export declare function toWireGeofenceDef(value: GeofenceDef): unknown;
|
|
384
|
+
export declare function fromWireObject(value: unknown): LatLngObject | null;
|
|
385
|
+
export declare function fromWireSearchResults(value: unknown): SearchResults;
|
|
386
|
+
export declare function fromWireGeofenceEvent(value: unknown): GeofenceEvent;
|
|
387
|
+
export declare function fromWireHookDef(value: unknown): HookDef | null;
|
|
388
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,EAAE,GACX;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjC,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,0BAA0B;AAC1B,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEvC,8BAA8B;AAC9B,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,qCAAqC;AACrC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAElD,yDAAyD;AACzD,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,2DAA2D;AAC3D,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,6BAA6B;IAC7B,GAAG,EAAE,SAAS,CAAC;IACf,2BAA2B;IAC3B,MAAM,EAAE,QAAQ,CAAC;IACjB,mEAAmE;IACnE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wEAAwE;AACxE,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,wCAAwC;AACxC,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC,2BAA2B;AAC3B,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,KAAK,GACL,OAAO,GACP;IAAE,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEtC,2CAA2C;AAC3C,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,iDAAiD;AACjD,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,yBAAyB;IACzB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,0BAA0B;IAC1B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,wDAAwD;IACxD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,4BAA4B;AAC5B,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,oBAAoB;IACpB,IAAI,EAAE,IAAI,CAAC;IACX,+BAA+B;IAC/B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,yBAAyB;AACzB,MAAM,WAAW,UAAU;IACzB,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,uDAAuD;IACvD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,iDAAiD;IACjD,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,qDAAqD;IACrD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,6BAA6B;AAC7B,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,6BAA6B;IAC7B,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,CAAC;IACzB,8BAA8B;IAC9B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,6BAA6B;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,gCAAgC;IAChC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,6BAA6B;AAC7B,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,MAAM,CAAC,EAAE,QAAQ,GAAG,UAAU,EAAE,CAAC;IACjC,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;CACpC;AAED,sEAAsE;AACtE,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAE9D,+BAA+B;AAC/B,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,GACP,MAAM,CAAC;AAEX,iCAAiC;AACjC,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,GACrF;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,GAC3D;IACE,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEN,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,2CAA2C;IAC3C,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,+CAA+C;IAC/C,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,oBAAoB;AACpB,MAAM,WAAW,QAAQ;IACvB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,4BAA4B;AAC5B,MAAM,WAAW,OAAO;IACtB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,gDAAgD;AAChD,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,OAAO,EAAE,eAAe,CAAC;IACzB,mCAAmC;IACnC,MAAM,EAAE,UAAU,CAAC;IACnB,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,MAAM,EAAE,SAAS,CAAC;IAClB,+BAA+B;IAC/B,MAAM,EAAE,QAAQ,CAAC;IACjB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uCAAuC;IACvC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,kBAAkB;IAClB,IAAI,EACA,mBAAmB,GACnB,iBAAiB,GACjB,YAAY,GACZ,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,UAAU,GACV,aAAa,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IACrC,uCAAuC;IACvC,QAAQ,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IACrC,6BAA6B;IAC7B,iBAAiB,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC9C,8BAA8B;IAC9B,kBAAkB,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC/C,4BAA4B;IAC5B,gBAAgB,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC7C,2BAA2B;IAC3B,eAAe,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC5C,4BAA4B;IAC5B,gBAAgB,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;IAC7C,2BAA2B;IAC3B,eAAe,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC;CAC7C;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,gBAAgB,GAAG,SAAS,GACpC,OAAO,CAOT;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAO7D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAKzD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAiB/E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAO7D;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAWlE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAyBnE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CA4BnE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAU9D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vite plugin for @latlng/wasm browser builds.
|
|
3
|
+
*
|
|
4
|
+
* The package worker resolves the wasm file at `../wasm/latlng_core_bg.wasm`
|
|
5
|
+
* relative to the emitted worker asset. This plugin copies the packaged wasm
|
|
6
|
+
* file into that location for Vite app builds.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import type { Plugin } from "vite";
|
|
11
|
+
/** Options for `latlngWasmPlugin`. */
|
|
12
|
+
export interface LatLngWasmPluginOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Source wasm file path.
|
|
15
|
+
*
|
|
16
|
+
* Defaults to the wasm file bundled with `@latlng/wasm`.
|
|
17
|
+
*/
|
|
18
|
+
wasmPath?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Directory inside Vite's output directory where the wasm file is copied.
|
|
21
|
+
*
|
|
22
|
+
* @default "wasm"
|
|
23
|
+
*/
|
|
24
|
+
wasmDirName?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Output wasm file name.
|
|
27
|
+
*
|
|
28
|
+
* @default "latlng_core_bg.wasm"
|
|
29
|
+
*/
|
|
30
|
+
wasmFileName?: string;
|
|
31
|
+
}
|
|
32
|
+
/** Returns the absolute path to the wasm file bundled with `@latlng/wasm`. */
|
|
33
|
+
export declare function getLatLngWasmPath(): string;
|
|
34
|
+
/** Copies `latlng_core_bg.wasm` into Vite's build output for worker runtime loading. */
|
|
35
|
+
export declare function latlngWasmPlugin(options?: LatLngWasmPluginOptions): Plugin;
|
|
36
|
+
export default latlngWasmPlugin;
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite-plugin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,MAAM,CAAC;AAEnD,sCAAsC;AACtC,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,MAAM,CA2B9E;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { copyFileSync as e, existsSync as t, mkdirSync as n } from "node:fs";
|
|
2
|
+
import { dirname as r, resolve as i } from "node:path";
|
|
3
|
+
import { fileURLToPath as a } from "node:url";
|
|
4
|
+
//#region src/vite-plugin/index.ts
|
|
5
|
+
function o() {
|
|
6
|
+
return i(r(a(import.meta.url)), "..", "wasm", "latlng_core_bg.wasm");
|
|
7
|
+
}
|
|
8
|
+
function s(r = {}) {
|
|
9
|
+
let { wasmPath: a = o(), wasmDirName: s = "wasm", wasmFileName: c = "latlng_core_bg.wasm" } = r, l;
|
|
10
|
+
return {
|
|
11
|
+
name: "latlng-wasm-plugin",
|
|
12
|
+
apply: "build",
|
|
13
|
+
configResolved(e) {
|
|
14
|
+
l = e;
|
|
15
|
+
},
|
|
16
|
+
writeBundle(r) {
|
|
17
|
+
let o = i(r.dir ?? i(l.root, l.build.outDir), s), u = i(o, c);
|
|
18
|
+
t(a) || this.error(`latlng wasm file not found: ${a}`), n(o, { recursive: !0 }), e(a, u);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { s as default, s as latlngWasmPlugin, o as getLatLngWasmPath };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/vite-plugin/index.ts"],"sourcesContent":["/**\n * Vite plugin for @latlng/wasm browser builds.\n *\n * The package worker resolves the wasm file at `../wasm/latlng_core_bg.wasm`\n * relative to the emitted worker asset. This plugin copies the packaged wasm\n * file into that location for Vite app builds.\n *\n * @packageDocumentation\n */\n\nimport { copyFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { Plugin, ResolvedConfig } from \"vite\";\n\n/** Options for `latlngWasmPlugin`. */\nexport interface LatLngWasmPluginOptions {\n /**\n * Source wasm file path.\n *\n * Defaults to the wasm file bundled with `@latlng/wasm`.\n */\n wasmPath?: string;\n /**\n * Directory inside Vite's output directory where the wasm file is copied.\n *\n * @default \"wasm\"\n */\n wasmDirName?: string;\n /**\n * Output wasm file name.\n *\n * @default \"latlng_core_bg.wasm\"\n */\n wasmFileName?: string;\n}\n\n/** Returns the absolute path to the wasm file bundled with `@latlng/wasm`. */\nexport function getLatLngWasmPath(): string {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n return resolve(currentDir, \"..\", \"wasm\", \"latlng_core_bg.wasm\");\n}\n\n/** Copies `latlng_core_bg.wasm` into Vite's build output for worker runtime loading. */\nexport function latlngWasmPlugin(options: LatLngWasmPluginOptions = {}): Plugin {\n const {\n wasmPath = getLatLngWasmPath(),\n wasmDirName = \"wasm\",\n wasmFileName = \"latlng_core_bg.wasm\",\n } = options;\n let config: ResolvedConfig;\n\n return {\n name: \"latlng-wasm-plugin\",\n apply: \"build\",\n configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n writeBundle(outputOptions) {\n const outDir = outputOptions.dir ?? resolve(config.root, config.build.outDir);\n const targetDir = resolve(outDir, wasmDirName);\n const targetPath = resolve(targetDir, wasmFileName);\n\n if (!existsSync(wasmPath)) {\n this.error(`latlng wasm file not found: ${wasmPath}`);\n }\n\n mkdirSync(targetDir, { recursive: true });\n copyFileSync(wasmPath, targetPath);\n },\n };\n}\n\nexport default latlngWasmPlugin;\n"],"mappings":";;;;AAsCA,SAAgB,IAA4B;CAE1C,OAAO,EADY,EAAQ,EAAc,OAAO,KAAK,IAAI,CAC1C,EAAY,MAAM,QAAQ,sBAAsB;;AAIjE,SAAgB,EAAiB,IAAmC,EAAE,EAAU;CAC9E,IAAM,EACJ,cAAW,GAAmB,EAC9B,iBAAc,QACd,kBAAe,0BACb,GACA;CAEJ,OAAO;EACL,MAAM;EACN,OAAO;EACP,eAAe,GAAgB;GAC7B,IAAS;;EAEX,YAAY,GAAe;GAEzB,IAAM,IAAY,EADH,EAAc,OAAO,EAAQ,EAAO,MAAM,EAAO,MAAM,OAAO,EAC3C,EAAY,EACxC,IAAa,EAAQ,GAAW,EAAa;GAOnD,AALK,EAAW,EAAS,IACvB,KAAK,MAAM,+BAA+B,IAAW,EAGvD,EAAU,GAAW,EAAE,WAAW,IAAM,CAAC,EACzC,EAAa,GAAU,EAAW;;EAErC"}
|
|
Binary file
|