@wiscale/velesdb-wasm 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -246,6 +246,82 @@ Ultra-fast serialization thanks to contiguous memory layout:
246
246
  - **Electron/Tauri apps** - Desktop AI without a server
247
247
  - **PWA applications** - Full offline support with service workers
248
248
 
249
+ ## ⚠️ Limitations vs REST Backend
250
+
251
+ The WASM build is optimized for client-side use cases but has some limitations compared to the full REST server.
252
+
253
+ ### Feature Comparison
254
+
255
+ | Feature | WASM | REST Server |
256
+ |---------|------|-------------|
257
+ | Vector search (NEAR) | ✅ | ✅ |
258
+ | Metadata filtering | ✅ | ✅ |
259
+ | Full VelesQL queries | ❌ | ✅ |
260
+ | Hybrid search (vector + BM25) | ❌ | ✅ |
261
+ | Knowledge Graph operations | ❌ | ✅ |
262
+ | MATCH clause (full-text) | ❌ | ✅ |
263
+ | NEAR_FUSED (multi-query fusion) | ❌ | ✅ |
264
+ | JOIN operations | ❌ | ✅ |
265
+ | Aggregations (GROUP BY) | ❌ | ✅ |
266
+ | Persistence | IndexedDB | Disk (mmap) |
267
+ | Max vectors | ~100K (browser RAM) | Millions |
268
+
269
+ ### Unsupported Operations
270
+
271
+ When you try to use unsupported features, you'll get clear error messages:
272
+
273
+ ```javascript
274
+ // ❌ VelesQL string queries not supported in WASM
275
+ // Use the native API instead:
276
+
277
+ // Instead of: store.query("SELECT * FROM docs WHERE vector NEAR $v")
278
+ // Use:
279
+ const results = store.search(queryVector, 10);
280
+
281
+ // Instead of: store.query("SELECT * FROM docs WHERE category = 'tech'")
282
+ // Use:
283
+ const results = store.search_with_filter(queryVector, 10, {
284
+ condition: { type: "eq", field: "category", value: "tech" }
285
+ });
286
+ ```
287
+
288
+ ### When to Use REST Backend
289
+
290
+ Consider using the [REST server](https://github.com/cyberlife-coder/VelesDB) if you need:
291
+
292
+ - **Full VelesQL support** - Complex SQL-like queries
293
+ - **Hybrid search** - Combine semantic + keyword search
294
+ - **Knowledge Graph** - Entity relationships and graph traversal
295
+ - **Large datasets** - More than 100K vectors
296
+ - **Server-side processing** - Centralized vector database
297
+
298
+ ### Migration from WASM to REST
299
+
300
+ ```javascript
301
+ // WASM (client-side)
302
+ import { VectorStore } from '@wiscale/velesdb-wasm';
303
+ const store = new VectorStore(768, 'cosine');
304
+ const results = store.search(query, 10);
305
+
306
+ // REST (server-side) - using fetch
307
+ const response = await fetch('http://localhost:8080/v1/collections/docs/search', {
308
+ method: 'POST',
309
+ headers: { 'Content-Type': 'application/json' },
310
+ body: JSON.stringify({ vector: query, limit: 10 })
311
+ });
312
+ const results = await response.json();
313
+
314
+ // REST with VelesQL
315
+ const response = await fetch('http://localhost:8080/v1/query', {
316
+ method: 'POST',
317
+ headers: { 'Content-Type': 'application/json' },
318
+ body: JSON.stringify({
319
+ query: "SELECT * FROM docs WHERE vector NEAR $v AND category = 'tech' LIMIT 10",
320
+ params: { v: query }
321
+ })
322
+ });
323
+ ```
324
+
249
325
  ## Building from Source
250
326
 
251
327
  ```bash
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "Julien Lange <contact@wiscale.fr>"
6
6
  ],
7
7
  "description": "VelesDB for WebAssembly - Vector search in the browser",
8
- "version": "1.3.0",
8
+ "version": "1.4.1",
9
9
  "license": "SEE LICENSE IN ../../LICENSE",
10
10
  "repository": {
11
11
  "type": "git",
package/velesdb_wasm.d.ts CHANGED
@@ -91,6 +91,43 @@ export class GraphNode {
91
91
  readonly label: string;
92
92
  }
93
93
 
94
+ export class GraphPersistence {
95
+ free(): void;
96
+ [Symbol.dispose](): void;
97
+ /**
98
+ * Lists all saved graph names.
99
+ */
100
+ list_graphs(): Promise<Array<any>>;
101
+ /**
102
+ * Deletes a saved graph by name.
103
+ *
104
+ * BUG-7 FIX: Also deletes all nodes and edges with the graph prefix.
105
+ */
106
+ delete_graph(graph_name: string): Promise<void>;
107
+ /**
108
+ * Gets metadata for a saved graph.
109
+ */
110
+ get_metadata(graph_name: string): Promise<any>;
111
+ /**
112
+ * Creates a new `GraphPersistence` instance (call `init()` to open database).
113
+ */
114
+ constructor();
115
+ /**
116
+ * Initializes the database connection. Must be called before save/load.
117
+ */
118
+ init(): Promise<void>;
119
+ /**
120
+ * Loads a graph from `IndexedDB` by name.
121
+ *
122
+ * BUG-6 FIX: Only loads nodes/edges with keys prefixed by `{graph_name}:`
123
+ */
124
+ load(graph_name: string): Promise<GraphStore>;
125
+ /**
126
+ * Saves a graph to `IndexedDB` with the given name.
127
+ */
128
+ save(graph_name: string, store: GraphStore): Promise<void>;
129
+ }
130
+
94
131
  export class GraphStore {
95
132
  free(): void;
96
133
  [Symbol.dispose](): void;
@@ -230,6 +267,188 @@ export class GraphStore {
230
267
  readonly node_count: number;
231
268
  }
232
269
 
270
+ export class GraphWorkerConfig {
271
+ free(): void;
272
+ [Symbol.dispose](): void;
273
+ /**
274
+ * Creates a configuration optimized for large graphs.
275
+ */
276
+ static for_large_graphs(): GraphWorkerConfig;
277
+ /**
278
+ * Creates a configuration optimized for responsive UI.
279
+ */
280
+ static for_responsive_ui(): GraphWorkerConfig;
281
+ /**
282
+ * Creates a new configuration with default values.
283
+ */
284
+ constructor();
285
+ /**
286
+ * Minimum node count to trigger worker offload.
287
+ */
288
+ node_threshold: number;
289
+ /**
290
+ * Minimum depth to trigger worker offload.
291
+ */
292
+ depth_threshold: number;
293
+ /**
294
+ * Progress callback interval in milliseconds.
295
+ */
296
+ progress_interval_ms: number;
297
+ /**
298
+ * Whether to use `SharedArrayBuffer` for result transfer (if available).
299
+ */
300
+ use_shared_buffer: boolean;
301
+ }
302
+
303
+ export class ParsedQuery {
304
+ private constructor();
305
+ free(): void;
306
+ [Symbol.dispose](): void;
307
+ /**
308
+ * Check if the query uses FUSION (hybrid search).
309
+ */
310
+ readonly hasFusion: boolean;
311
+ /**
312
+ * Get the number of JOIN clauses.
313
+ */
314
+ readonly joinCount: number;
315
+ /**
316
+ * Get the table name from the FROM clause.
317
+ */
318
+ readonly tableName: string | undefined;
319
+ /**
320
+ * Get the LIMIT from the MATCH RETURN clause.
321
+ */
322
+ readonly matchLimit: bigint | undefined;
323
+ /**
324
+ * Check if DISTINCT modifier is present.
325
+ */
326
+ readonly hasDistinct: boolean;
327
+ /**
328
+ * Check if the query has a GROUP BY clause.
329
+ */
330
+ readonly hasGroupBy: boolean;
331
+ /**
332
+ * Check if the query has an ORDER BY clause.
333
+ */
334
+ readonly hasOrderBy: boolean;
335
+ /**
336
+ * Check if the MATCH clause has a WHERE condition.
337
+ */
338
+ readonly matchHasWhere: boolean;
339
+ /**
340
+ * Check if the query has a WHERE clause.
341
+ */
342
+ readonly hasWhereClause: boolean;
343
+ /**
344
+ * Get the number of node patterns in the MATCH clause.
345
+ */
346
+ readonly matchNodeCount: number;
347
+ /**
348
+ * Check if the query contains vector search (NEAR clause).
349
+ */
350
+ readonly hasVectorSearch: boolean;
351
+ /**
352
+ * Get node labels from the MATCH clause as JSON array of arrays.
353
+ * Each inner array contains the labels for one node pattern.
354
+ */
355
+ readonly matchNodeLabels: any;
356
+ /**
357
+ * Get RETURN items from the MATCH clause as JSON array.
358
+ */
359
+ readonly matchReturnItems: any;
360
+ /**
361
+ * Get the number of relationship patterns in the MATCH clause.
362
+ */
363
+ readonly matchRelationshipCount: number;
364
+ /**
365
+ * Get relationship types from the MATCH clause as JSON array of arrays.
366
+ * Each inner array contains the types for one relationship pattern.
367
+ */
368
+ readonly matchRelationshipTypes: any;
369
+ /**
370
+ * Get the LIMIT value if present.
371
+ */
372
+ readonly limit: bigint | undefined;
373
+ /**
374
+ * Get the OFFSET value if present.
375
+ */
376
+ readonly offset: bigint | undefined;
377
+ /**
378
+ * Get the list of selected columns as JSON array.
379
+ */
380
+ readonly columns: any;
381
+ /**
382
+ * Get the GROUP BY columns as JSON array.
383
+ */
384
+ readonly groupBy: any;
385
+ /**
386
+ * Check if this is a MATCH (graph) query.
387
+ */
388
+ readonly isMatch: boolean;
389
+ /**
390
+ * Check if the query is valid (always true for successfully parsed queries).
391
+ */
392
+ readonly isValid: boolean;
393
+ /**
394
+ * Get the ORDER BY columns and directions as JSON array.
395
+ */
396
+ readonly orderBy: any;
397
+ /**
398
+ * Check if the query has JOINs.
399
+ */
400
+ readonly hasJoins: boolean;
401
+ /**
402
+ * Check if this is a SELECT query.
403
+ */
404
+ readonly isSelect: boolean;
405
+ }
406
+
407
+ export class SemanticMemory {
408
+ free(): void;
409
+ [Symbol.dispose](): void;
410
+ /**
411
+ * Returns the number of stored knowledge facts.
412
+ */
413
+ len(): number;
414
+ /**
415
+ * Creates a new `SemanticMemory` with the given embedding dimension.
416
+ */
417
+ constructor(dimension: number);
418
+ /**
419
+ * Clears all knowledge facts.
420
+ */
421
+ clear(): void;
422
+ /**
423
+ * Queries semantic memory by similarity search.
424
+ *
425
+ * Returns a JSON array of {id, score, content} objects.
426
+ */
427
+ query(embedding: Float32Array, top_k: number): any;
428
+ /**
429
+ * Stores a knowledge fact with its embedding vector.
430
+ *
431
+ * # Arguments
432
+ *
433
+ * * `id` - Unique identifier for this fact
434
+ * * `content` - Text content of the knowledge
435
+ * * `embedding` - Vector representation (`Float32Array`)
436
+ */
437
+ store(id: bigint, content: string, embedding: Float32Array): void;
438
+ /**
439
+ * Removes a knowledge fact by ID.
440
+ */
441
+ remove(id: bigint): boolean;
442
+ /**
443
+ * Returns true if no knowledge facts are stored.
444
+ */
445
+ is_empty(): boolean;
446
+ /**
447
+ * Returns the embedding dimension.
448
+ */
449
+ dimension(): number;
450
+ }
451
+
233
452
  /**
234
453
  * Storage mode for vector quantization.
235
454
  */
@@ -248,6 +467,43 @@ export enum StorageMode {
248
467
  Binary = 2,
249
468
  }
250
469
 
470
+ export class TraversalProgress {
471
+ free(): void;
472
+ [Symbol.dispose](): void;
473
+ /**
474
+ * Creates a new progress report.
475
+ */
476
+ constructor(visited: number, estimated: number, depth: number);
477
+ /**
478
+ * Converts to JSON for postMessage.
479
+ */
480
+ to_json(): any;
481
+ /**
482
+ * Returns the completion percentage (0-100).
483
+ */
484
+ readonly percentage: number;
485
+ /**
486
+ * Number of nodes visited so far.
487
+ */
488
+ visited_count: number;
489
+ /**
490
+ * Estimated total nodes to visit (heuristic).
491
+ */
492
+ estimated_total: number;
493
+ /**
494
+ * Current traversal depth.
495
+ */
496
+ current_depth: number;
497
+ /**
498
+ * Whether the traversal is complete.
499
+ */
500
+ is_complete: boolean;
501
+ /**
502
+ * Whether the traversal was cancelled.
503
+ */
504
+ is_cancelled: boolean;
505
+ }
506
+
251
507
  export class VectorStore {
252
508
  free(): void;
253
509
  [Symbol.dispose](): void;
@@ -331,6 +587,20 @@ export class VectorStore {
331
587
  * Clears all vectors from the store.
332
588
  */
333
589
  clear(): void;
590
+ /**
591
+ * VelesQL-style query returning multi-model results (EPIC-031 US-009).
592
+ *
593
+ * Returns results in `HybridResult` format with `node_id`, `vector_score`,
594
+ * `graph_score`, `fused_score`, `bindings`, and `column_data`.
595
+ *
596
+ * # Arguments
597
+ * * `query_vector` - Query vector for similarity search
598
+ * * `k` - Number of results to return
599
+ *
600
+ * # Returns
601
+ * Array of `{nodeId, vectorScore, graphScore, fusedScore, bindings, columnData}`
602
+ */
603
+ query(query_vector: Float32Array, k: number): any;
334
604
  /**
335
605
  * Inserts a vector with the given ID.
336
606
  */
@@ -369,14 +639,69 @@ export class VectorStore {
369
639
  readonly dimension: number;
370
640
  }
371
641
 
642
+ export class VelesQL {
643
+ private constructor();
644
+ free(): void;
645
+ [Symbol.dispose](): void;
646
+ /**
647
+ * Parse a `VelesQL` query string.
648
+ *
649
+ * Returns a `ParsedQuery` object with query introspection methods.
650
+ * Throws an error if the query has syntax errors.
651
+ */
652
+ static parse(query: string): ParsedQuery;
653
+ /**
654
+ * Validate a `VelesQL` query without full parsing.
655
+ *
656
+ * This is faster than `parse()` when you only need to check validity.
657
+ */
658
+ static isValid(query: string): boolean;
659
+ }
660
+
661
+ /**
662
+ * Estimates the number of nodes that will be visited during traversal.
663
+ *
664
+ * Uses a heuristic based on graph density and max depth.
665
+ */
666
+ export function estimate_traversal_size(node_count: number, edge_count: number, max_depth: number): number;
667
+
668
+ /**
669
+ * Determines whether a traversal should be offloaded to a Web Worker.
670
+ *
671
+ * # Arguments
672
+ * * `node_count` - Total nodes in the graph
673
+ * * `max_depth` - Maximum traversal depth requested
674
+ * * `config` - Optional configuration (uses defaults if None)
675
+ *
676
+ * # Returns
677
+ * `true` if the operation should use a Web Worker
678
+ */
679
+ export function should_use_worker(node_count: number, max_depth: number, config?: GraphWorkerConfig | null): boolean;
680
+
372
681
  export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
373
682
 
374
683
  export interface InitOutput {
375
684
  readonly memory: WebAssembly.Memory;
685
+ readonly __wbg_get_graphworkerconfig_depth_threshold: (a: number) => number;
686
+ readonly __wbg_get_graphworkerconfig_node_threshold: (a: number) => number;
687
+ readonly __wbg_get_graphworkerconfig_progress_interval_ms: (a: number) => number;
688
+ readonly __wbg_get_graphworkerconfig_use_shared_buffer: (a: number) => number;
689
+ readonly __wbg_get_traversalprogress_is_cancelled: (a: number) => number;
376
690
  readonly __wbg_graphedge_free: (a: number, b: number) => void;
377
691
  readonly __wbg_graphnode_free: (a: number, b: number) => void;
692
+ readonly __wbg_graphpersistence_free: (a: number, b: number) => void;
378
693
  readonly __wbg_graphstore_free: (a: number, b: number) => void;
694
+ readonly __wbg_graphworkerconfig_free: (a: number, b: number) => void;
695
+ readonly __wbg_parsedquery_free: (a: number, b: number) => void;
696
+ readonly __wbg_semanticmemory_free: (a: number, b: number) => void;
697
+ readonly __wbg_set_graphworkerconfig_depth_threshold: (a: number, b: number) => void;
698
+ readonly __wbg_set_graphworkerconfig_node_threshold: (a: number, b: number) => void;
699
+ readonly __wbg_set_graphworkerconfig_progress_interval_ms: (a: number, b: number) => void;
700
+ readonly __wbg_set_graphworkerconfig_use_shared_buffer: (a: number, b: number) => void;
701
+ readonly __wbg_set_traversalprogress_is_cancelled: (a: number, b: number) => void;
379
702
  readonly __wbg_vectorstore_free: (a: number, b: number) => void;
703
+ readonly __wbg_velesql_free: (a: number, b: number) => void;
704
+ readonly estimate_traversal_size: (a: number, b: number, c: number) => number;
380
705
  readonly graphedge_id: (a: number) => bigint;
381
706
  readonly graphedge_label: (a: number, b: number) => void;
382
707
  readonly graphedge_new: (a: number, b: bigint, c: bigint, d: bigint, e: number, f: number) => void;
@@ -393,6 +718,13 @@ export interface InitOutput {
393
718
  readonly graphnode_set_string_property: (a: number, b: number, c: number, d: number, e: number) => void;
394
719
  readonly graphnode_set_vector: (a: number, b: number, c: number) => void;
395
720
  readonly graphnode_to_json: (a: number, b: number) => void;
721
+ readonly graphpersistence_delete_graph: (a: number, b: number, c: number) => number;
722
+ readonly graphpersistence_get_metadata: (a: number, b: number, c: number) => number;
723
+ readonly graphpersistence_init: (a: number) => number;
724
+ readonly graphpersistence_list_graphs: (a: number) => number;
725
+ readonly graphpersistence_load: (a: number, b: number, c: number) => number;
726
+ readonly graphpersistence_new: () => number;
727
+ readonly graphpersistence_save: (a: number, b: number, c: number, d: number) => number;
396
728
  readonly graphstore_add_edge: (a: number, b: number, c: number) => void;
397
729
  readonly graphstore_add_node: (a: number, b: number) => void;
398
730
  readonly graphstore_bfs_traverse: (a: number, b: number, c: bigint, d: number, e: number) => void;
@@ -417,6 +749,44 @@ export interface InitOutput {
417
749
  readonly graphstore_out_degree: (a: number, b: bigint) => number;
418
750
  readonly graphstore_remove_edge: (a: number, b: bigint) => void;
419
751
  readonly graphstore_remove_node: (a: number, b: bigint) => void;
752
+ readonly graphworkerconfig_for_large_graphs: () => number;
753
+ readonly graphworkerconfig_for_responsive_ui: () => number;
754
+ readonly graphworkerconfig_new: () => number;
755
+ readonly parsedquery_columns: (a: number) => number;
756
+ readonly parsedquery_groupBy: (a: number) => number;
757
+ readonly parsedquery_hasDistinct: (a: number) => number;
758
+ readonly parsedquery_hasFusion: (a: number) => number;
759
+ readonly parsedquery_hasGroupBy: (a: number) => number;
760
+ readonly parsedquery_hasJoins: (a: number) => number;
761
+ readonly parsedquery_hasOrderBy: (a: number) => number;
762
+ readonly parsedquery_hasVectorSearch: (a: number) => number;
763
+ readonly parsedquery_hasWhereClause: (a: number) => number;
764
+ readonly parsedquery_isMatch: (a: number) => number;
765
+ readonly parsedquery_isSelect: (a: number) => number;
766
+ readonly parsedquery_isValid: (a: number) => number;
767
+ readonly parsedquery_joinCount: (a: number) => number;
768
+ readonly parsedquery_limit: (a: number, b: number) => void;
769
+ readonly parsedquery_matchHasWhere: (a: number) => number;
770
+ readonly parsedquery_matchLimit: (a: number, b: number) => void;
771
+ readonly parsedquery_matchNodeCount: (a: number) => number;
772
+ readonly parsedquery_matchNodeLabels: (a: number) => number;
773
+ readonly parsedquery_matchRelationshipCount: (a: number) => number;
774
+ readonly parsedquery_matchRelationshipTypes: (a: number) => number;
775
+ readonly parsedquery_matchReturnItems: (a: number) => number;
776
+ readonly parsedquery_offset: (a: number, b: number) => void;
777
+ readonly parsedquery_orderBy: (a: number) => number;
778
+ readonly parsedquery_tableName: (a: number, b: number) => void;
779
+ readonly semanticmemory_clear: (a: number) => void;
780
+ readonly semanticmemory_dimension: (a: number) => number;
781
+ readonly semanticmemory_is_empty: (a: number) => number;
782
+ readonly semanticmemory_new: (a: number, b: number) => void;
783
+ readonly semanticmemory_query: (a: number, b: number, c: number, d: number, e: number) => void;
784
+ readonly semanticmemory_remove: (a: number, b: bigint) => number;
785
+ readonly semanticmemory_store: (a: number, b: number, c: bigint, d: number, e: number, f: number, g: number) => void;
786
+ readonly should_use_worker: (a: number, b: number, c: number) => number;
787
+ readonly traversalprogress_new: (a: number, b: number, c: number) => number;
788
+ readonly traversalprogress_percentage: (a: number) => number;
789
+ readonly traversalprogress_to_json: (a: number, b: number) => void;
420
790
  readonly vectorstore_batch_search: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
421
791
  readonly vectorstore_clear: (a: number) => void;
422
792
  readonly vectorstore_delete_database: (a: number, b: number) => number;
@@ -437,6 +807,7 @@ export interface InitOutput {
437
807
  readonly vectorstore_new: (a: number, b: number, c: number, d: number) => void;
438
808
  readonly vectorstore_new_metadata_only: () => number;
439
809
  readonly vectorstore_new_with_mode: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
810
+ readonly vectorstore_query: (a: number, b: number, c: number, d: number, e: number) => void;
440
811
  readonly vectorstore_remove: (a: number, b: bigint) => number;
441
812
  readonly vectorstore_reserve: (a: number, b: number) => void;
442
813
  readonly vectorstore_save: (a: number, b: number, c: number) => number;
@@ -446,12 +817,24 @@ export interface InitOutput {
446
817
  readonly vectorstore_storage_mode: (a: number, b: number) => void;
447
818
  readonly vectorstore_text_search: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
448
819
  readonly vectorstore_with_capacity: (a: number, b: number, c: number, d: number, e: number) => void;
820
+ readonly velesql_isValid: (a: number, b: number) => number;
821
+ readonly velesql_parse: (a: number, b: number, c: number) => void;
822
+ readonly __wbg_set_traversalprogress_is_complete: (a: number, b: number) => void;
823
+ readonly __wbg_set_traversalprogress_current_depth: (a: number, b: number) => void;
824
+ readonly __wbg_set_traversalprogress_estimated_total: (a: number, b: number) => void;
825
+ readonly __wbg_set_traversalprogress_visited_count: (a: number, b: number) => void;
826
+ readonly __wbg_get_traversalprogress_is_complete: (a: number) => number;
827
+ readonly __wbg_get_traversalprogress_current_depth: (a: number) => number;
828
+ readonly __wbg_get_traversalprogress_estimated_total: (a: number) => number;
829
+ readonly __wbg_get_traversalprogress_visited_count: (a: number) => number;
449
830
  readonly graphnode_id: (a: number) => bigint;
450
- readonly __wasm_bindgen_func_elem_198: (a: number, b: number, c: number) => void;
451
- readonly __wasm_bindgen_func_elem_197: (a: number, b: number) => void;
452
- readonly __wasm_bindgen_func_elem_640: (a: number, b: number, c: number) => void;
453
- readonly __wasm_bindgen_func_elem_639: (a: number, b: number) => void;
454
- readonly __wasm_bindgen_func_elem_689: (a: number, b: number, c: number, d: number) => void;
831
+ readonly semanticmemory_len: (a: number) => number;
832
+ readonly __wbg_traversalprogress_free: (a: number, b: number) => void;
833
+ readonly __wasm_bindgen_func_elem_265: (a: number, b: number, c: number) => void;
834
+ readonly __wasm_bindgen_func_elem_264: (a: number, b: number) => void;
835
+ readonly __wasm_bindgen_func_elem_1176: (a: number, b: number, c: number) => void;
836
+ readonly __wasm_bindgen_func_elem_1175: (a: number, b: number) => void;
837
+ readonly __wasm_bindgen_func_elem_1217: (a: number, b: number, c: number, d: number) => void;
455
838
  readonly __wbindgen_export: (a: number, b: number) => number;
456
839
  readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
457
840
  readonly __wbindgen_export3: (a: number) => void;