@navaramap/core 0.2.0 → 0.3.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/dist/index.d.ts +116 -91
- package/dist/index.js +273 -483
- package/dist/index.umd.cjs +1 -1
- package/package.json +1 -1
- package/src/color/ColorMap.test.ts +15 -0
- package/src/color/ColorMap.ts +7 -6
- package/src/event/JobDispatcher.test.ts +484 -0
- package/src/event/JobDispatcher.ts +387 -0
- package/src/event/index.ts +1 -2
- package/src/event/mock.ts +2 -2
- package/src/globe/Globe.ts +3 -26
- package/src/utils/ReturnedConstructedTerrainMeshLike.ts +5 -0
- package/src/utils/polyline/ConstructedPolylineGeometryLike.ts +23 -16
- package/src/event/EventManager.test.ts +0 -635
- package/src/event/EventManager.ts +0 -438
- package/src/event/TransactionManager.test.ts +0 -126
- package/src/event/TransactionManager.ts +0 -78
package/dist/index.d.ts
CHANGED
|
@@ -89,8 +89,8 @@ export declare class ColorMap<T extends ColorMapType = ColorMapType> {
|
|
|
89
89
|
createImage(): HTMLCanvasElement;
|
|
90
90
|
/**
|
|
91
91
|
* Flatten the color map LUT into a Float32Array for WASM/GPU usage.
|
|
92
|
-
* Each color tuple [r, g, b]
|
|
93
|
-
* @returns A Float32Array with length = lut.length *
|
|
92
|
+
* Each color tuple [r, g, b] becomes [r, g, b, 1] (RGBA, fully opaque).
|
|
93
|
+
* @returns A Float32Array with length = lut.length * 4
|
|
94
94
|
*/
|
|
95
95
|
flatten(): Float32Array;
|
|
96
96
|
}
|
|
@@ -152,17 +152,19 @@ export declare class ConstructedPolylineGeometryLike {
|
|
|
152
152
|
end_high_size: number | undefined;
|
|
153
153
|
end_low: Float32Array | undefined;
|
|
154
154
|
end_low_size: number | undefined;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
155
|
+
start_normal_and_length_high: Float32Array | undefined;
|
|
156
|
+
start_normal_and_length_high_size: number | undefined;
|
|
157
|
+
end_normal_and_segment_length: Float32Array | undefined;
|
|
158
|
+
end_normal_and_segment_length_size: number | undefined;
|
|
159
|
+
right_normal_and_line_length: Float32Array;
|
|
160
|
+
right_normal_and_line_length_size: number;
|
|
161
161
|
batch_id: Float32Array | undefined;
|
|
162
162
|
batch_id_size: number | undefined;
|
|
163
163
|
batch_index: Uint32Array | undefined;
|
|
164
164
|
batch_index_size: number | undefined;
|
|
165
165
|
indices: Uint32Array;
|
|
166
|
+
line_segments: Float32Array | undefined;
|
|
167
|
+
line_distance_and_ends: Float32Array | undefined;
|
|
166
168
|
constructor(t: ConstructedPolylineGeometry);
|
|
167
169
|
}
|
|
168
170
|
|
|
@@ -196,33 +198,6 @@ export declare class EventHandler<T extends BaseEventMap = BaseEventMap, K exten
|
|
|
196
198
|
emit<E extends K>(k: E, ...args: Parameters<T[E]>): void;
|
|
197
199
|
}
|
|
198
200
|
|
|
199
|
-
export declare class EventManager {
|
|
200
|
-
stacks: EventsStacks;
|
|
201
|
-
addedEventIds: Map<string, Set<unknown>>;
|
|
202
|
-
private sortedLengths;
|
|
203
|
-
private transactionManager;
|
|
204
|
-
needsUpdate(): boolean;
|
|
205
|
-
pushEvents(events: Events | undefined): void;
|
|
206
|
-
forEachStack<Key extends JsEventsKey>(key: Key, cb: (value: GetJsEventValue<Key>) => void, max?: number): void;
|
|
207
|
-
/** Order the stack for dispatch. Pushes only append, so only the events
|
|
208
|
-
* added since the last pass are sorted and merged into the already sorted
|
|
209
|
-
* prefix (the prefix wins ties, keeping equal keys FIFO). */
|
|
210
|
-
private sortPending;
|
|
211
|
-
private removeAt;
|
|
212
|
-
forEachStackAsync<Key extends JsEventsKey>(key: Key, cb: (value: GetJsEventValue<Key>) => Promise<void>, max?: number, shouldProcess?: (value: GetJsEventValue<Key>) => boolean, order?: (a: GetJsEventValue<Key>, b: GetJsEventValue<Key>) => number): Promise<void>;
|
|
213
|
-
removeDuplicatedTransactionEvents<AddKey extends JsEventsKey, RemoveKey extends JsEventsKey, ChangeKey extends JsEventsKey>(options: TransactionProcessOption<AddKey, RemoveKey, ChangeKey>): void;
|
|
214
|
-
removeStacksByIndices(key: JsEventsKey, removedIndices: Set<number>): void;
|
|
215
|
-
processTransactionEvents<AddKey extends JsEventsKey, RemoveKey extends JsEventsKey, ChangeKey extends JsEventsKey>(transactionKey: string, options: TransactionProcessOption<AddKey, RemoveKey, ChangeKey>, cb: (ev: TransactionCallbackParams<AddKey, RemoveKey, ChangeKey>) => Promise<void>, handlers?: {
|
|
216
|
-
shouldProcess?: (ev: TransactionCallbackParams<AddKey, RemoveKey, ChangeKey>) => boolean;
|
|
217
|
-
generateEventId?: (ev: TransactionCallbackParams<AddKey, RemoveKey, ChangeKey>) => string;
|
|
218
|
-
onAbort?: (ev: GetJsEventValue<RemoveKey>) => void | Promise<void>;
|
|
219
|
-
}): void;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
declare type EventsStacks = {
|
|
223
|
-
[K in JsEventsKey]-?: JsEvents[K] extends unknown[] ? JsEvents[K] : JsEvents[K][];
|
|
224
|
-
};
|
|
225
|
-
|
|
226
201
|
export declare class ExtentRadianF32Like implements RemoveFreeRecursively<ExtentRadianF32> {
|
|
227
202
|
east: number;
|
|
228
203
|
north: number;
|
|
@@ -244,17 +219,14 @@ export declare function generate_id_from_entity(entity: EntityEvent): string;
|
|
|
244
219
|
* instead of an `EntityEvent` instance. */
|
|
245
220
|
export declare function generate_id_from_ind_gen(ind: number, gen: number): string;
|
|
246
221
|
|
|
247
|
-
declare type GetJsEventValue<K extends JsEventsKey> = EventsStacks[K] extends unknown[] ? EventsStacks[K][number] : EventsStacks[K];
|
|
248
|
-
|
|
249
222
|
/**
|
|
250
223
|
* Globe configuration manager.
|
|
251
224
|
*
|
|
252
225
|
* Provides an interface for accessing and modifying globe properties
|
|
253
226
|
* that are shared across different material types (VectorTile, RasterTile, RasterTerrain).
|
|
254
227
|
*/
|
|
255
|
-
export declare class Globe implements Omit<RemoveFreeRecursively<Globe_2>, "
|
|
228
|
+
export declare class Globe implements Omit<RemoveFreeRecursively<Globe_2>, "color" | "isGeographicTiling"> {
|
|
256
229
|
private handler;
|
|
257
|
-
private _elevationColormap?;
|
|
258
230
|
constructor(handler: GlobeHandler, options?: GlobeOptions);
|
|
259
231
|
setOptions(options?: GlobeOptions): void;
|
|
260
232
|
get maxSse(): number;
|
|
@@ -273,8 +245,6 @@ export declare class Globe implements Omit<RemoveFreeRecursively<Globe_2>, "elev
|
|
|
273
245
|
set opacity(value: number);
|
|
274
246
|
get wireframe(): boolean;
|
|
275
247
|
set wireframe(value: boolean);
|
|
276
|
-
get elevationColormap(): ColorMap | undefined;
|
|
277
|
-
set elevationColormap(value: ColorMap);
|
|
278
248
|
}
|
|
279
249
|
|
|
280
250
|
/**
|
|
@@ -290,7 +260,6 @@ export declare type GlobeHandler = {
|
|
|
290
260
|
getUseNormal: () => boolean | undefined;
|
|
291
261
|
getOpacity: () => number | undefined;
|
|
292
262
|
getWireframe: () => boolean | undefined;
|
|
293
|
-
getElevationColormap: () => Float32Array | undefined;
|
|
294
263
|
setTransparent: (value: boolean) => void;
|
|
295
264
|
setMaxSse: (value: number) => void;
|
|
296
265
|
setSegments: (value: number) => void;
|
|
@@ -299,11 +268,9 @@ export declare type GlobeHandler = {
|
|
|
299
268
|
setUseNormal: (value: boolean) => void;
|
|
300
269
|
setOpacity: (value: number) => void;
|
|
301
270
|
setWireframe: (value: boolean) => void;
|
|
302
|
-
setElevationColormap: (value: ColorMap) => void;
|
|
303
271
|
};
|
|
304
272
|
|
|
305
|
-
export declare type GlobeOptions = Partial<Omit<Globe_2, "constructor" | "free" | "
|
|
306
|
-
elevationColormap?: ColorMap;
|
|
273
|
+
export declare type GlobeOptions = Partial<Omit<Globe_2, "constructor" | "free" | "color" | "isGeographicTiling">> & {
|
|
307
274
|
color?: Color;
|
|
308
275
|
};
|
|
309
276
|
|
|
@@ -317,12 +284,108 @@ export declare function isNotNullish<T>(value: T | null | undefined): value is T
|
|
|
317
284
|
|
|
318
285
|
export declare function isNotUndefined<T>(value: T | undefined): value is T;
|
|
319
286
|
|
|
287
|
+
/**
|
|
288
|
+
* Consumes the per-frame engine events and dispatches them to the registered
|
|
289
|
+
* handlers with no queueing: every `requested` starts its job in the same
|
|
290
|
+
* tick (admission and priority are the engine's job), every `removed` aborts
|
|
291
|
+
* or tears down, every `changed` applies or waits for the in-flight `start`.
|
|
292
|
+
* Taken WASM event objects are freed here, once the handler that received
|
|
293
|
+
* them has settled, so handlers never call `free()` on an event.
|
|
294
|
+
*/
|
|
295
|
+
export declare class JobDispatcher {
|
|
296
|
+
private readonly sync;
|
|
297
|
+
private readonly registered;
|
|
298
|
+
private readonly onSettled?;
|
|
299
|
+
private disposed;
|
|
300
|
+
private inFlightJobs;
|
|
301
|
+
constructor(options?: JobDispatcherOptions);
|
|
302
|
+
register<Req, Chg, Rem, Product>(handler: JobHandler<Req, Chg, Rem, Product>): RegisteredJobKind;
|
|
303
|
+
/** A synchronous, stateless handler; events are freed right after it. */
|
|
304
|
+
registerSync<K extends JsEventsKey>(key: K, handle: (ev: JsEventValue<K>) => void): void;
|
|
305
|
+
/** Jobs whose `start` or `change` has not settled yet. */
|
|
306
|
+
inFlight(): number;
|
|
307
|
+
tick(events: Events | undefined): void;
|
|
308
|
+
/** Aborts every in-flight job and forgets the table. Live products are the
|
|
309
|
+
* owner's to dispose (they are indexed outside the dispatcher). */
|
|
310
|
+
dispose(): void;
|
|
311
|
+
private start;
|
|
312
|
+
private settleStart;
|
|
313
|
+
private remove;
|
|
314
|
+
private change;
|
|
315
|
+
private applyChange;
|
|
316
|
+
/**
|
|
317
|
+
* The async call on `job` settled. Runs the deferred teardown when a
|
|
318
|
+
* `removed` arrived (or the dispatcher was disposed) meanwhile, otherwise
|
|
319
|
+
* applies the change that waited; returns whether the job is gone.
|
|
320
|
+
*/
|
|
321
|
+
private finish;
|
|
322
|
+
private teardown;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export declare type JobDispatcherOptions = {
|
|
326
|
+
/** Called whenever a job's `start` settles with a product, i.e. something
|
|
327
|
+
* new is on screen. */
|
|
328
|
+
onSettled?: () => void;
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* One kind of frontend job: the engine emits `requested` when it wants the
|
|
333
|
+
* frontend to run async work for an entity (fetch, worker task, mesh build),
|
|
334
|
+
* `changed` while the entity is alive, and `removed` when the entity is
|
|
335
|
+
* despawned — unconditionally, including while the job is still in flight.
|
|
336
|
+
*
|
|
337
|
+
* The dispatcher turns these into calls on this handler and owns the job
|
|
338
|
+
* table; the handler never sees ordering, dedupe or abort bookkeeping.
|
|
339
|
+
*/
|
|
340
|
+
export declare type JobHandler<Req, Chg, Rem, Product> = {
|
|
341
|
+
/** Used in error logs only. */
|
|
342
|
+
name: string;
|
|
343
|
+
events: {
|
|
344
|
+
requested: JsEventsKey;
|
|
345
|
+
changed?: JsEventsKey;
|
|
346
|
+
removed: JsEventsKey;
|
|
347
|
+
};
|
|
348
|
+
/**
|
|
349
|
+
* Called right away for every admitted `requested` event. After each
|
|
350
|
+
* `await`, check `abort.signal.aborted` before touching shared state or
|
|
351
|
+
* reporting to the engine: a removed job must not report. Resolving
|
|
352
|
+
* `undefined` means "done, no product" (an empty geometry, a fetch whose
|
|
353
|
+
* result went straight into the buffer store, ...); the job is then
|
|
354
|
+
* forgotten, like one whose `start` failed.
|
|
355
|
+
*/
|
|
356
|
+
start(ev: Req, abort: AbortController): Promise<Product | undefined>;
|
|
357
|
+
/**
|
|
358
|
+
* Applies a `changed` snapshot to a live product. Calls on one job never
|
|
359
|
+
* overlap: a change arriving while `start` or a previous change is in
|
|
360
|
+
* flight waits, and only the latest waiting one is applied.
|
|
361
|
+
*/
|
|
362
|
+
change?(product: Product, ev: Chg): void | Promise<void>;
|
|
363
|
+
/**
|
|
364
|
+
* Called exactly once per `removed` event, when nothing is in flight for
|
|
365
|
+
* the job any more: immediately for a live or unknown job (`product` is
|
|
366
|
+
* `undefined` for an unknown one or one whose `start` failed), or once the
|
|
367
|
+
* aborted `start` / `change` settles. The job's abort signal has fired by
|
|
368
|
+
* then, so continuations still running after `start` see the removal.
|
|
369
|
+
* `ev` is `undefined` only when the dispatcher itself is disposed while
|
|
370
|
+
* the job is in flight.
|
|
371
|
+
*/
|
|
372
|
+
teardown(product: Product | undefined, ev: Rem | undefined): void;
|
|
373
|
+
/** Reports a rejected / thrown `start` to the engine (kind specific); a
|
|
374
|
+
* kind without it gets the error logged instead. Not called once the job
|
|
375
|
+
* was removed or the dispatcher disposed; an abort the handler fires on
|
|
376
|
+
* its own still reports. */
|
|
377
|
+
failed?(ev: Req, error: unknown): void;
|
|
378
|
+
};
|
|
379
|
+
|
|
320
380
|
export declare type JsEvents = {
|
|
321
381
|
[K in keyof Events as K extends `take_${infer P}` ? P : never]: Events[K] extends (...args: never[]) => infer R ? R : never;
|
|
322
382
|
};
|
|
323
383
|
|
|
324
384
|
export declare type JsEventsKey = keyof JsEvents;
|
|
325
385
|
|
|
386
|
+
/** One element of a stack (the value itself for the `Option` stacks). */
|
|
387
|
+
export declare type JsEventValue<K extends JsEventsKey> = JsEvents[K] extends unknown[] ? JsEvents[K][number] : JsEvents[K];
|
|
388
|
+
|
|
326
389
|
/** Geodetic position: `lat`/`lng` in **degrees**. */
|
|
327
390
|
export declare type LatLng = Omit<LatLngHeight, "height">;
|
|
328
391
|
|
|
@@ -416,6 +479,12 @@ export declare class PolylineMaterialLike {
|
|
|
416
479
|
|
|
417
480
|
export declare type Ray = Required<NormalizeWASMClass<Ray_2>>;
|
|
418
481
|
|
|
482
|
+
/** A registered kind, as returned by {@link JobDispatcher.register}. */
|
|
483
|
+
export declare type RegisteredJobKind = {
|
|
484
|
+
/** Jobs of this kind whose `start` or `change` has not settled yet. */
|
|
485
|
+
inFlight(): number;
|
|
486
|
+
};
|
|
487
|
+
|
|
419
488
|
export declare type RemoveFreeRecursively<T> = T extends {
|
|
420
489
|
free: unknown;
|
|
421
490
|
} ? {
|
|
@@ -435,6 +504,7 @@ export declare class ReturnedConstructedTerrainMeshLike implements RemoveFreeRec
|
|
|
435
504
|
skirt_uvs: Float32Array | undefined;
|
|
436
505
|
skirt_indices: Uint32Array | undefined;
|
|
437
506
|
skirt_normals: Float32Array | undefined;
|
|
507
|
+
skirt_heights: Float32Array | undefined;
|
|
438
508
|
watermask: Uint8Array | undefined;
|
|
439
509
|
constructor(t: ReturnedConstructedTerrainMesh);
|
|
440
510
|
transferVertices(): Float32Array;
|
|
@@ -446,6 +516,7 @@ export declare class ReturnedConstructedTerrainMeshLike implements RemoveFreeRec
|
|
|
446
516
|
transferSkirtUvs(): Float32Array | undefined;
|
|
447
517
|
transferSkirtIndices(): Uint32Array | undefined;
|
|
448
518
|
transferSkirtNormals(): Float32Array | undefined;
|
|
519
|
+
transferSkirtHeights(): Float32Array | undefined;
|
|
449
520
|
transferWatermask(): Uint8Array | undefined;
|
|
450
521
|
hasSkirt(): boolean;
|
|
451
522
|
hasNormals(): boolean;
|
|
@@ -463,52 +534,6 @@ export declare class TileXYZLike implements RemoveFreeRecursively<TileXYZ> {
|
|
|
463
534
|
constructor(t: TileXYZ);
|
|
464
535
|
}
|
|
465
536
|
|
|
466
|
-
export declare class Transaction {
|
|
467
|
-
id: string;
|
|
468
|
-
continuable: boolean;
|
|
469
|
-
currentPending?: Promise<void>;
|
|
470
|
-
next?: Transaction;
|
|
471
|
-
parent?: Transaction;
|
|
472
|
-
constructor(id: string, continuable?: boolean);
|
|
473
|
-
then(cb: () => Promise<void>): Transaction;
|
|
474
|
-
end(): void;
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
declare type TransactionCallbackParams<AddKey extends JsEventsKey, RemoveKey extends JsEventsKey, ChangeKey extends JsEventsKey> = {
|
|
478
|
-
type: "add";
|
|
479
|
-
event: GetJsEventValue<AddKey>;
|
|
480
|
-
} | {
|
|
481
|
-
type: "remove";
|
|
482
|
-
event: GetJsEventValue<RemoveKey>;
|
|
483
|
-
} | {
|
|
484
|
-
type: "change";
|
|
485
|
-
event: GetJsEventValue<ChangeKey>;
|
|
486
|
-
};
|
|
487
|
-
|
|
488
|
-
export declare class TransactionManager {
|
|
489
|
-
private record;
|
|
490
|
-
getOrInsert(id: string): Transaction;
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
declare type TransactionProcessOption<AddKey extends JsEventsKey, RemoveKey extends JsEventsKey, ChangeKey extends JsEventsKey> = {
|
|
494
|
-
add: {
|
|
495
|
-
key: AddKey;
|
|
496
|
-
max?: number;
|
|
497
|
-
/** Dispatch order for the pending stack. Events a `shouldProcess` gate
|
|
498
|
-
* leaves behind are re-sorted against newer ones every pass, so this turns
|
|
499
|
-
* the FIFO stack into a priority queue (stable: equal keys stay FIFO). */
|
|
500
|
-
order?: (a: GetJsEventValue<AddKey>, b: GetJsEventValue<AddKey>) => number;
|
|
501
|
-
};
|
|
502
|
-
remove: {
|
|
503
|
-
key: RemoveKey;
|
|
504
|
-
max?: number;
|
|
505
|
-
};
|
|
506
|
-
change?: {
|
|
507
|
-
key: ChangeKey;
|
|
508
|
-
max?: number;
|
|
509
|
-
};
|
|
510
|
-
};
|
|
511
|
-
|
|
512
537
|
export declare class TransferableMartiniLike implements RemoveFreeRecursively<TransferableMartini> {
|
|
513
538
|
coords: Uint32Array;
|
|
514
539
|
size: number;
|