@osmix/core 0.0.2 → 0.1.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.
Files changed (104) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +118 -107
  3. package/dist/src/entities.d.ts +103 -9
  4. package/dist/src/entities.d.ts.map +1 -1
  5. package/dist/src/entities.js +101 -11
  6. package/dist/src/entities.js.map +1 -1
  7. package/dist/src/ids.d.ts +82 -13
  8. package/dist/src/ids.d.ts.map +1 -1
  9. package/dist/src/ids.js +103 -31
  10. package/dist/src/ids.js.map +1 -1
  11. package/dist/src/index.d.ts +31 -5
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/index.js +33 -5
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/nodes.d.ts +91 -21
  16. package/dist/src/nodes.d.ts.map +1 -1
  17. package/dist/src/nodes.js +191 -44
  18. package/dist/src/nodes.js.map +1 -1
  19. package/dist/src/osm.d.ts +99 -0
  20. package/dist/src/osm.d.ts.map +1 -0
  21. package/dist/src/osm.js +165 -0
  22. package/dist/src/osm.js.map +1 -0
  23. package/dist/src/relations.d.ts +112 -20
  24. package/dist/src/relations.d.ts.map +1 -1
  25. package/dist/src/relations.js +298 -35
  26. package/dist/src/relations.js.map +1 -1
  27. package/dist/src/stringtable.d.ts +78 -14
  28. package/dist/src/stringtable.d.ts.map +1 -1
  29. package/dist/src/stringtable.js +105 -26
  30. package/dist/src/stringtable.js.map +1 -1
  31. package/dist/src/tags.d.ts +117 -18
  32. package/dist/src/tags.d.ts.map +1 -1
  33. package/dist/src/tags.js +177 -30
  34. package/dist/src/tags.js.map +1 -1
  35. package/dist/src/typed-arrays.d.ts +85 -11
  36. package/dist/src/typed-arrays.d.ts.map +1 -1
  37. package/dist/src/typed-arrays.js +88 -9
  38. package/dist/src/typed-arrays.js.map +1 -1
  39. package/dist/src/utils.d.ts +35 -1
  40. package/dist/src/utils.d.ts.map +1 -1
  41. package/dist/src/utils.js +69 -10
  42. package/dist/src/utils.js.map +1 -1
  43. package/dist/src/ways.d.ts +91 -27
  44. package/dist/src/ways.d.ts.map +1 -1
  45. package/dist/src/ways.js +229 -69
  46. package/dist/src/ways.js.map +1 -1
  47. package/dist/test/memory.test.d.ts +7 -0
  48. package/dist/test/memory.test.d.ts.map +1 -0
  49. package/dist/test/memory.test.js +29 -0
  50. package/dist/test/memory.test.js.map +1 -0
  51. package/dist/test/mock-osm.d.ts +3 -3
  52. package/dist/test/mock-osm.d.ts.map +1 -1
  53. package/dist/test/mock-osm.js +3 -3
  54. package/dist/test/mock-osm.js.map +1 -1
  55. package/dist/test/tags-search.test.d.ts +2 -0
  56. package/dist/test/tags-search.test.d.ts.map +1 -0
  57. package/dist/test/tags-search.test.js +56 -0
  58. package/dist/test/tags-search.test.js.map +1 -0
  59. package/dist/test/typed-arrays.test.js +19 -17
  60. package/dist/test/typed-arrays.test.js.map +1 -1
  61. package/package.json +11 -13
  62. package/src/entities.ts +147 -22
  63. package/src/ids.ts +126 -45
  64. package/src/index.ts +34 -5
  65. package/src/nodes.ts +248 -58
  66. package/src/osm.ts +222 -0
  67. package/src/relations.ts +396 -54
  68. package/src/stringtable.ts +123 -36
  69. package/src/tags.ts +220 -46
  70. package/src/typed-arrays.ts +97 -10
  71. package/src/types/geoflatbush.d.ts +37 -0
  72. package/src/types/geokdbush.d.ts +37 -0
  73. package/src/types/kdbush.d.ts +24 -6
  74. package/src/utils.ts +80 -14
  75. package/src/ways.ts +260 -84
  76. package/test/memory.test.ts +38 -0
  77. package/test/mock-osm.ts +8 -8
  78. package/test/tags-search.test.ts +60 -0
  79. package/test/typed-arrays.test.ts +5 -6
  80. package/dist/src/osmix.d.ts +0 -88
  81. package/dist/src/osmix.d.ts.map +0 -1
  82. package/dist/src/osmix.js +0 -438
  83. package/dist/src/osmix.js.map +0 -1
  84. package/dist/test/extract.bench.d.ts +0 -2
  85. package/dist/test/extract.bench.d.ts.map +0 -1
  86. package/dist/test/extract.bench.js +0 -23
  87. package/dist/test/extract.bench.js.map +0 -1
  88. package/dist/test/extract.test.d.ts +0 -2
  89. package/dist/test/extract.test.d.ts.map +0 -1
  90. package/dist/test/extract.test.js +0 -127
  91. package/dist/test/extract.test.js.map +0 -1
  92. package/dist/test/read.test.d.ts +0 -2
  93. package/dist/test/read.test.d.ts.map +0 -1
  94. package/dist/test/read.test.js +0 -17
  95. package/dist/test/read.test.js.map +0 -1
  96. package/dist/test/write.test.d.ts +0 -2
  97. package/dist/test/write.test.d.ts.map +0 -1
  98. package/dist/test/write.test.js +0 -55
  99. package/dist/test/write.test.js.map +0 -1
  100. package/src/osmix.ts +0 -556
  101. package/test/extract.bench.ts +0 -29
  102. package/test/extract.test.ts +0 -161
  103. package/test/read.test.ts +0 -22
  104. package/test/write.test.ts +0 -69
package/dist/src/tags.js CHANGED
@@ -1,36 +1,78 @@
1
- import { ResizeableTypedArray } from "./typed-arrays";
1
+ /**
2
+ * Tag storage and lookup.
3
+ *
4
+ * Stores key=value pairs using string table indices. Supports:
5
+ * 1. **Entity → Tags**: Retrieve tags for a given entity.
6
+ * 2. **Key → Entities**: Find entities with a specific tag key.
7
+ *
8
+ * @module
9
+ */
10
+ import StringTable from "./stringtable";
11
+ import { ResizeableTypedArray as RTA } from "./typed-arrays";
12
+ /**
13
+ * Bidirectional tag storage.
14
+ *
15
+ * Limits: Max 255 tags per entity.
16
+ * Note: String indices reference a shared `StringTable`.
17
+ */
2
18
  export class Tags {
3
- stringTable;
19
+ /** Reference to the shared string table for key/value storage */
20
+ stringTable = new StringTable();
21
+ // ─── Entity → Tag Lookup ───────────────────────────────────────────────────
22
+ /** Maps entity index → start position in tagKeys/tagVals */
4
23
  tagStart;
24
+ /** Maps entity index → number of tags (max 255) */
5
25
  tagCount;
26
+ /** All tag key string indices, concatenated */
6
27
  tagKeys;
28
+ /** All tag value string indices, concatenated (parallel to tagKeys) */
7
29
  tagVals;
30
+ // ─── Key → Entity Reverse Lookup ───────────────────────────────────────────
31
+ /**
32
+ * Flattened array of entity indices that have each tag key.
33
+ * Indexed via keyIndexStart and keyIndexCount.
34
+ */
35
+ keyEntities;
36
+ /** Maps key string index → start position in keyEntities */
37
+ keyIndexStart;
38
+ /** Maps key string index → count of entities with that key */
39
+ keyIndexCount;
40
+ /**
41
+ * Temporary map used during ingestion to collect entity indices per key.
42
+ * Converted to flat arrays during buildIndex() and then cleared.
43
+ */
44
+ keyEntityIndexBuilder = new Map();
45
+ /** Whether buildIndex() has been called */
8
46
  indexBuilt = false;
9
- static from(stringTable, { tagStart, tagCount, tagKeys, tagVals }) {
10
- const tagIndex = new Tags(stringTable);
11
- tagIndex.tagStart = ResizeableTypedArray.from(Uint32Array, tagStart);
12
- tagIndex.tagCount = ResizeableTypedArray.from(Uint8Array, tagCount);
13
- tagIndex.tagKeys = ResizeableTypedArray.from(Uint32Array, tagKeys);
14
- tagIndex.tagVals = ResizeableTypedArray.from(Uint32Array, tagVals);
15
- tagIndex.indexBuilt = true;
16
- return tagIndex;
17
- }
18
- constructor(stringTable) {
47
+ /**
48
+ * Create a new Tags index.
49
+ */
50
+ constructor(stringTable, transferables) {
19
51
  this.stringTable = stringTable;
20
- this.tagStart = new ResizeableTypedArray(Uint32Array);
21
- this.tagCount = new ResizeableTypedArray(Uint8Array);
22
- this.tagKeys = new ResizeableTypedArray(Uint32Array);
23
- this.tagVals = new ResizeableTypedArray(Uint32Array);
24
- }
25
- transferables() {
26
- return {
27
- tagStart: this.tagStart.array.buffer,
28
- tagCount: this.tagCount.array.buffer,
29
- tagKeys: this.tagKeys.array.buffer,
30
- tagVals: this.tagVals.array.buffer,
31
- };
52
+ if (transferables) {
53
+ this.tagStart = RTA.from(Uint32Array, transferables.tagStart);
54
+ this.tagCount = RTA.from(Uint8Array, transferables.tagCount);
55
+ this.tagKeys = RTA.from(Uint32Array, transferables.tagKeys);
56
+ this.tagVals = RTA.from(Uint32Array, transferables.tagVals);
57
+ this.keyEntities = RTA.from(Uint32Array, transferables.keyEntities);
58
+ this.keyIndexStart = RTA.from(Uint32Array, transferables.keyIndexStart);
59
+ this.keyIndexCount = RTA.from(Uint32Array, transferables.keyIndexCount);
60
+ this.indexBuilt = true;
61
+ }
62
+ else {
63
+ this.tagStart = new RTA(Uint32Array);
64
+ this.tagCount = new RTA(Uint8Array);
65
+ this.tagKeys = new RTA(Uint32Array);
66
+ this.tagVals = new RTA(Uint32Array);
67
+ this.keyEntities = new RTA(Uint32Array);
68
+ this.keyIndexStart = new RTA(Uint32Array);
69
+ this.keyIndexCount = new RTA(Uint32Array);
70
+ }
32
71
  }
33
- addTags(tags) {
72
+ /**
73
+ * Add tags to an entity.
74
+ */
75
+ addTags(index, tags) {
34
76
  const tagKeys = [];
35
77
  const tagValues = [];
36
78
  if (tags) {
@@ -39,27 +81,64 @@ export class Tags {
39
81
  tagValues.push(this.stringTable.add(String(value)));
40
82
  }
41
83
  }
42
- this.addTagKeysAndValues(tagKeys, tagValues);
84
+ this.addTagKeysAndValues(index, tagKeys, tagValues);
85
+ return [tagKeys, tagValues];
43
86
  }
44
- addTagKeysAndValues(keys, values) {
45
- this.tagStart.push(this.tagKeys.length);
46
- this.tagCount.push(keys.length);
87
+ /**
88
+ * Add tags to an entity using key and value indexes.
89
+ */
90
+ addTagKeysAndValues(index, keys, values) {
91
+ this.tagStart.set(index, this.tagKeys.length);
92
+ this.tagCount.set(index, keys.length);
47
93
  this.tagKeys.pushMany(keys);
48
94
  this.tagVals.pushMany(values);
95
+ keys.forEach((key) => {
96
+ const keyEntities = this.keyEntityIndexBuilder.get(key);
97
+ if (keyEntities) {
98
+ keyEntities.push(index);
99
+ }
100
+ else {
101
+ this.keyEntityIndexBuilder.set(key, [index]);
102
+ }
103
+ });
49
104
  }
105
+ /**
106
+ * Finalize the tag index.
107
+ *
108
+ * Compacts arrays and builds the reverse key→entity index.
109
+ * Must be called before `hasKey()`.
110
+ */
50
111
  buildIndex() {
51
112
  this.tagStart.compact();
52
113
  this.tagCount.compact();
53
114
  this.tagKeys.compact();
54
115
  this.tagVals.compact();
116
+ // Convert the builder map to flat arrays for the reverse index
117
+ for (const [keyIndex, entityIndexes] of this.keyEntityIndexBuilder) {
118
+ this.keyIndexStart.set(keyIndex, this.keyEntities.length);
119
+ this.keyIndexCount.set(keyIndex, entityIndexes.length);
120
+ this.keyEntities.pushMany(entityIndexes);
121
+ }
122
+ this.keyIndexStart.compact();
123
+ this.keyIndexCount.compact();
124
+ this.keyEntityIndexBuilder.clear();
55
125
  this.indexBuilt = true;
56
126
  }
57
- get isReady() {
127
+ /**
128
+ * Check if the index is built and ready for use.
129
+ */
130
+ isReady() {
58
131
  return this.indexBuilt;
59
132
  }
133
+ /**
134
+ * Get the number of tags for an entity.
135
+ */
60
136
  cardinality(index) {
61
137
  return this.tagCount.at(index) ?? 0;
62
138
  }
139
+ /**
140
+ * Get the tags for an entity.
141
+ */
63
142
  getTags(index) {
64
143
  const tagCount = this.tagCount.at(index) ?? 0;
65
144
  if (tagCount === 0)
@@ -77,6 +156,9 @@ export class Tags {
77
156
  }
78
157
  return tags;
79
158
  }
159
+ /**
160
+ * Get tags from key and value indexes.
161
+ */
80
162
  getTagsFromIndices(keys, values) {
81
163
  const tags = {};
82
164
  for (let i = 0; i < keys.length; i++) {
@@ -88,5 +170,70 @@ export class Tags {
88
170
  }
89
171
  return tags;
90
172
  }
173
+ /**
174
+ * Find the index of a tag key.
175
+ */
176
+ find(key) {
177
+ return this.stringTable.find(key);
178
+ }
179
+ /**
180
+ * Get all entity indexes that have a specific tag key.
181
+ */
182
+ hasKey(keyIndex) {
183
+ if (keyIndex < 0)
184
+ return [];
185
+ const start = this.keyIndexStart.at(keyIndex) ?? 0;
186
+ const count = this.keyIndexCount.at(keyIndex) ?? 0;
187
+ return Array.from(this.keyEntities.array.subarray(start, start + count));
188
+ }
189
+ /**
190
+ * Create a unique composite index for a key=value pair.
191
+ * Uses row-major indexing: `key * width + val`.
192
+ */
193
+ kvToIndex(key, val) {
194
+ const width = this.stringTable.length;
195
+ return key * width + val;
196
+ }
197
+ /**
198
+ * Get transferable objects for passing to another thread.
199
+ */
200
+ transferables() {
201
+ return {
202
+ tagStart: this.tagStart.array.buffer,
203
+ tagCount: this.tagCount.array.buffer,
204
+ tagKeys: this.tagKeys.array.buffer,
205
+ tagVals: this.tagVals.array.buffer,
206
+ keyEntities: this.keyEntities.array.buffer,
207
+ keyIndexStart: this.keyIndexStart.array.buffer,
208
+ keyIndexCount: this.keyIndexCount.array.buffer,
209
+ };
210
+ }
211
+ /**
212
+ * Get the approximate memory requirements for a given number of tags in bytes.
213
+ */
214
+ static getBytesRequired(count) {
215
+ return (count * Uint32Array.BYTES_PER_ELEMENT + // tagStart
216
+ count * Uint8Array.BYTES_PER_ELEMENT // tagCount
217
+ );
218
+ }
219
+ /**
220
+ * Reconstruct a Tags index from transferable objects.
221
+ */
222
+ static fromTransferables(stringTable, transferables) {
223
+ const tagIndex = new Tags(stringTable, transferables);
224
+ tagIndex.indexBuilt = true;
225
+ return tagIndex;
226
+ }
227
+ /**
228
+ * Update a ContentHasher with the tags data.
229
+ * Hashes tag keys and values for each entity.
230
+ */
231
+ updateHash(hasher) {
232
+ return hasher
233
+ .update(this.tagStart.array)
234
+ .update(this.tagCount.array)
235
+ .update(this.tagKeys.array)
236
+ .update(this.tagVals.array);
237
+ }
91
238
  }
92
239
  //# sourceMappingURL=tags.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tags.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/tags.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,124 @@
1
+ /**
2
+ * Resizable typed array utilities.
3
+ *
4
+ * Wraps typed arrays with automatic buffer expansion (ArrayList semantics).
5
+ * Uses SharedArrayBuffer (if available) for zero-copy worker transfer.
6
+ *
7
+ * @module
8
+ */
1
9
  /**
2
10
  * Use SharedArrayBuffer if the runtime supports it, otherwise fall back to ArrayBuffer.
11
+ * SharedArrayBuffer enables zero-copy transfer between workers.
3
12
  */
4
- export declare const BufferConstructor: ArrayBufferConstructor | SharedArrayBufferConstructor;
13
+ export declare const BufferConstructor: SharedArrayBufferConstructor | ArrayBufferConstructor;
14
+ /** The buffer type used by this runtime (SharedArrayBuffer or ArrayBuffer). */
5
15
  export type BufferType = InstanceType<typeof BufferConstructor>;
16
+ /**
17
+ * Union of all standard typed array types.
18
+ * Generic over buffer type to preserve SharedArrayBuffer compatibility.
19
+ */
6
20
  export type TypedArray<B extends BufferType = BufferType> = Int8Array<B> | Uint8Array<B> | Uint8ClampedArray<B> | Int16Array<B> | Uint16Array<B> | Int32Array<B> | Uint32Array<B> | Float32Array<B> | Float64Array<B>;
21
+ /**
22
+ * Constructor interface for typed arrays.
23
+ */
7
24
  export interface TypedArrayConstructor<T extends TypedArray<BufferType> = TypedArray<BufferType>> {
8
25
  new (buffer: BufferType): T;
9
26
  readonly BYTES_PER_ELEMENT: number;
10
27
  }
11
28
  /**
12
- * OSM IDs can be stored as 64-bit floating point numbers.
29
+ * Float64Array for storing OSM IDs.
30
+ *
31
+ * OSM IDs are 64-bit integers. JavaScript's number type (IEEE 754 double)
32
+ * can exactly represent integers up to 2^53, which covers all current OSM IDs.
33
+ * Float64Array allows typed array operations while maintaining precision.
13
34
  */
14
35
  export declare const IdArrayType: Float64ArrayConstructor;
15
36
  /**
16
- * When we are storing coordinates, we need to be able to store 64-bit floating point numbers.
17
- * However, for benchmarking it is handy to test 32-bit floating point numbers.
18
- */
19
- export declare const CoordinateArrayType: Float64ArrayConstructor;
20
- /**
21
- * When we are storing indexes into other arrays, we never need an index to exceed 2^32.
37
+ * Uint32Array for storing array indices.
38
+ *
39
+ * Internal indices into typed arrays never exceed 2^32 elements,
40
+ * so Uint32Array provides the best balance of range and memory efficiency.
22
41
  */
23
42
  export declare const IndexArrayType: Uint32ArrayConstructor;
24
43
  /**
25
- * Default buffer size.
44
+ * Initial buffer size for ResizeableTypedArray.
45
+ * 1 MiB provides reasonable initial capacity while avoiding excessive memory allocation.
26
46
  */
27
47
  export declare const DEFAULT_BUFFER_SIZE: number;
48
+ /**
49
+ * Auto-expanding typed array wrapper.
50
+ *
51
+ * - `push()` appends elements, doubling buffer size as needed.
52
+ * - `compact()` shrinks buffer to fit data.
53
+ * - Supports growable SharedArrayBuffer and resizable ArrayBuffer.
54
+ */
28
55
  export declare class ResizeableTypedArray<TA extends TypedArray> {
56
+ /** The typed array constructor for this instance */
29
57
  ArrayType: TypedArrayConstructor<TA>;
58
+ /** The current typed array view into the buffer */
30
59
  array: TA;
60
+ /** Number of items actually stored (may be less than array.length) */
31
61
  items: number;
62
+ /** The underlying ArrayBuffer or SharedArrayBuffer */
32
63
  buffer: BufferType;
64
+ /** Current buffer size in bytes */
33
65
  bufferSize: number;
66
+ /** Maximum byte length for growable buffers */
34
67
  maxByteLength: number;
68
+ /** Buffer constructor (SharedArrayBuffer or ArrayBuffer) */
35
69
  BC: SharedArrayBufferConstructor | ArrayBufferConstructor;
70
+ /**
71
+ * Reconstruct a ResizeableTypedArray from an existing buffer.
72
+ *
73
+ * Used after transferring buffers between workers. The resulting array
74
+ * is considered "compacted" with items = array.length.
75
+ *
76
+ * @param ArrayType - The typed array constructor.
77
+ * @param buffer - The existing buffer to wrap.
78
+ * @returns A new ResizeableTypedArray wrapping the buffer.
79
+ */
36
80
  static from<TA extends TypedArray>(ArrayType: TypedArrayConstructor<TA>, buffer: BufferType): ResizeableTypedArray<TA>;
81
+ /**
82
+ * Create a new ResizeableTypedArray with an empty buffer.
83
+ *
84
+ * @param ArrayType - The typed array constructor (e.g., Float64Array).
85
+ * @param BC - Buffer constructor to use (defaults to SharedArrayBuffer if available).
86
+ */
37
87
  constructor(ArrayType: TypedArrayConstructor<TA>, BC?: SharedArrayBufferConstructor | ArrayBufferConstructor);
88
+ /**
89
+ * Iterate over the array values.
90
+ */
38
91
  [Symbol.iterator](): ArrayIterator<number>;
92
+ /**
93
+ * Double the buffer capacity.
94
+ * Uses in-place grow/resize if supported, otherwise allocates new buffer and copies.
95
+ */
39
96
  expandArray(): void;
40
97
  /**
41
- * Handles negative numbers
98
+ * Get the value at an index. Handles negative indices.
42
99
  */
43
100
  at(index: number): number;
44
- slice(start: number, end: number): Uint8Array<ArrayBuffer> | Int8Array<ArrayBuffer> | Uint8ClampedArray<ArrayBuffer> | Int16Array<ArrayBuffer> | Uint16Array<ArrayBuffer> | Int32Array<ArrayBuffer> | Uint32Array<ArrayBuffer> | Float32Array<ArrayBuffer> | Float64Array<ArrayBuffer>;
101
+ /**
102
+ * Get a slice of the array.
103
+ */
104
+ slice(start: number, end: number): Int8Array<ArrayBuffer> | Uint8Array<ArrayBuffer> | Uint8ClampedArray<ArrayBuffer> | Int16Array<ArrayBuffer> | Uint16Array<ArrayBuffer> | Int32Array<ArrayBuffer> | Uint32Array<ArrayBuffer> | Float32Array<ArrayBuffer> | Float64Array<ArrayBuffer>;
45
105
  get length(): number;
106
+ /**
107
+ * Push a value to the end of the array.
108
+ */
46
109
  push(value: number): number;
110
+ /**
111
+ * Set a value at a specific index. Expands array if needed.
112
+ */
113
+ set(index: number, value: number): void;
114
+ /**
115
+ * Push multiple values to the end of the array.
116
+ */
47
117
  pushMany(values: number[] | TypedArray): void;
118
+ /**
119
+ * Shrink the buffer to exactly fit stored items.
120
+ * Buffer becomes fixed-length after compacting.
121
+ */
48
122
  compact(): TA;
49
123
  }
50
124
  //# sourceMappingURL=typed-arrays.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"typed-arrays.d.ts","sourceRoot":"","sources":["../../src/typed-arrays.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,iBAAiB,uDAGa,CAAA;AAC3C,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE/D,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IACrD,SAAS,CAAC,CAAC,CAAC,GACZ,UAAU,CAAC,CAAC,CAAC,GACb,iBAAiB,CAAC,CAAC,CAAC,GACpB,UAAU,CAAC,CAAC,CAAC,GACb,WAAW,CAAC,CAAC,CAAC,GACd,UAAU,CAAC,CAAC,CAAC,GACb,WAAW,CAAC,CAAC,CAAC,GACd,YAAY,CAAC,CAAC,CAAC,GACf,YAAY,CAAC,CAAC,CAAC,CAAA;AAElB,MAAM,WAAW,qBAAqB,CACrC,CAAC,SAAS,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC;IAEzD,KAAK,MAAM,EAAE,UAAU,GAAG,CAAC,CAAA;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;CAClC;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,yBAAe,CAAA;AAEvC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,yBAAe,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,cAAc,wBAAc,CAAA;AAEzC;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAU,CAAA;AAE1C,qBAAa,oBAAoB,CAAC,EAAE,SAAS,UAAU;IACtD,SAAS,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAA;IACpC,KAAK,EAAE,EAAE,CAAA;IACT,KAAK,SAAI;IAET,MAAM,EAAE,UAAU,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IAErB,EAAE,EAAE,4BAA4B,GAAG,sBAAsB,CAAA;IAEzD,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,UAAU,EAChC,SAAS,EAAE,qBAAqB,CAAC,EAAE,CAAC,EACpC,MAAM,EAAE,UAAU;gBAalB,SAAS,EAAE,qBAAqB,CAAC,EAAE,CAAC,EACpC,EAAE,GACC,4BAA4B,GAC5B,sBAA0C;IAY9C,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;IAI1C,WAAW;IAsBX;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASzB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAIhC,IAAI,MAAM,WAET;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ3B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU;IAMtC,OAAO;CAcP"}
1
+ {"version":3,"file":"typed-arrays.d.ts","sourceRoot":"","sources":["../../src/typed-arrays.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB,uDAGa,CAAA;AAE3C,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE/D;;;GAGG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IACrD,SAAS,CAAC,CAAC,CAAC,GACZ,UAAU,CAAC,CAAC,CAAC,GACb,iBAAiB,CAAC,CAAC,CAAC,GACpB,UAAU,CAAC,CAAC,CAAC,GACb,WAAW,CAAC,CAAC,CAAC,GACd,UAAU,CAAC,CAAC,CAAC,GACb,WAAW,CAAC,CAAC,CAAC,GACd,YAAY,CAAC,CAAC,CAAC,GACf,YAAY,CAAC,CAAC,CAAC,CAAA;AAElB;;GAEG;AACH,MAAM,WAAW,qBAAqB,CACrC,CAAC,SAAS,UAAU,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC;IAEzD,KAAK,MAAM,EAAE,UAAU,GAAG,CAAC,CAAA;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;CAClC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,yBAAe,CAAA;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,wBAAc,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAU,CAAA;AAE1C;;;;;;GAMG;AACH,qBAAa,oBAAoB,CAAC,EAAE,SAAS,UAAU;IACtD,oDAAoD;IACpD,SAAS,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAA;IACpC,mDAAmD;IACnD,KAAK,EAAE,EAAE,CAAA;IACT,sEAAsE;IACtE,KAAK,SAAI;IAET,sDAAsD;IACtD,MAAM,EAAE,UAAU,CAAA;IAClB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAA;IAErB,4DAA4D;IAC5D,EAAE,EAAE,4BAA4B,GAAG,sBAAsB,CAAA;IAEzD;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,UAAU,EAChC,SAAS,EAAE,qBAAqB,CAAC,EAAE,CAAC,EACpC,MAAM,EAAE,UAAU;IAYnB;;;;;OAKG;gBAEF,SAAS,EAAE,qBAAqB,CAAC,EAAE,CAAC,EACpC,EAAE,GACC,4BAA4B,GAC5B,sBAA0C;IAY9C;;OAEG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;IAI1C;;;OAGG;IACH,WAAW;IAwBX;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASzB;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAIhC,IAAI,MAAM,WAET;IAED;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ3B;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAShC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU;IAMtC;;;OAGG;IACH,OAAO;CAgBP"}
@@ -1,34 +1,70 @@
1
+ /**
2
+ * Resizable typed array utilities.
3
+ *
4
+ * Wraps typed arrays with automatic buffer expansion (ArrayList semantics).
5
+ * Uses SharedArrayBuffer (if available) for zero-copy worker transfer.
6
+ *
7
+ * @module
8
+ */
1
9
  /**
2
10
  * Use SharedArrayBuffer if the runtime supports it, otherwise fall back to ArrayBuffer.
11
+ * SharedArrayBuffer enables zero-copy transfer between workers.
3
12
  */
4
13
  export const BufferConstructor = typeof SharedArrayBuffer !== "undefined"
5
14
  ? SharedArrayBuffer
6
15
  : ArrayBuffer;
7
16
  /**
8
- * OSM IDs can be stored as 64-bit floating point numbers.
17
+ * Float64Array for storing OSM IDs.
18
+ *
19
+ * OSM IDs are 64-bit integers. JavaScript's number type (IEEE 754 double)
20
+ * can exactly represent integers up to 2^53, which covers all current OSM IDs.
21
+ * Float64Array allows typed array operations while maintaining precision.
9
22
  */
10
23
  export const IdArrayType = Float64Array;
11
24
  /**
12
- * When we are storing coordinates, we need to be able to store 64-bit floating point numbers.
13
- * However, for benchmarking it is handy to test 32-bit floating point numbers.
14
- */
15
- export const CoordinateArrayType = Float64Array;
16
- /**
17
- * When we are storing indexes into other arrays, we never need an index to exceed 2^32.
25
+ * Uint32Array for storing array indices.
26
+ *
27
+ * Internal indices into typed arrays never exceed 2^32 elements,
28
+ * so Uint32Array provides the best balance of range and memory efficiency.
18
29
  */
19
30
  export const IndexArrayType = Uint32Array;
20
31
  /**
21
- * Default buffer size.
32
+ * Initial buffer size for ResizeableTypedArray.
33
+ * 1 MiB provides reasonable initial capacity while avoiding excessive memory allocation.
22
34
  */
23
35
  export const DEFAULT_BUFFER_SIZE = 2 ** 20; // 1 MiB
36
+ /**
37
+ * Auto-expanding typed array wrapper.
38
+ *
39
+ * - `push()` appends elements, doubling buffer size as needed.
40
+ * - `compact()` shrinks buffer to fit data.
41
+ * - Supports growable SharedArrayBuffer and resizable ArrayBuffer.
42
+ */
24
43
  export class ResizeableTypedArray {
44
+ /** The typed array constructor for this instance */
25
45
  ArrayType;
46
+ /** The current typed array view into the buffer */
26
47
  array;
48
+ /** Number of items actually stored (may be less than array.length) */
27
49
  items = 0;
50
+ /** The underlying ArrayBuffer or SharedArrayBuffer */
28
51
  buffer;
52
+ /** Current buffer size in bytes */
29
53
  bufferSize;
54
+ /** Maximum byte length for growable buffers */
30
55
  maxByteLength;
56
+ /** Buffer constructor (SharedArrayBuffer or ArrayBuffer) */
31
57
  BC;
58
+ /**
59
+ * Reconstruct a ResizeableTypedArray from an existing buffer.
60
+ *
61
+ * Used after transferring buffers between workers. The resulting array
62
+ * is considered "compacted" with items = array.length.
63
+ *
64
+ * @param ArrayType - The typed array constructor.
65
+ * @param buffer - The existing buffer to wrap.
66
+ * @returns A new ResizeableTypedArray wrapping the buffer.
67
+ */
32
68
  static from(ArrayType, buffer) {
33
69
  const rta = new ResizeableTypedArray(ArrayType, buffer instanceof SharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer);
34
70
  rta.buffer = buffer;
@@ -36,6 +72,12 @@ export class ResizeableTypedArray {
36
72
  rta.items = rta.array.length;
37
73
  return rta;
38
74
  }
75
+ /**
76
+ * Create a new ResizeableTypedArray with an empty buffer.
77
+ *
78
+ * @param ArrayType - The typed array constructor (e.g., Float64Array).
79
+ * @param BC - Buffer constructor to use (defaults to SharedArrayBuffer if available).
80
+ */
39
81
  constructor(ArrayType, BC = BufferConstructor) {
40
82
  this.ArrayType = ArrayType;
41
83
  this.bufferSize = DEFAULT_BUFFER_SIZE;
@@ -46,12 +88,20 @@ export class ResizeableTypedArray {
46
88
  });
47
89
  this.array = new this.ArrayType(this.buffer);
48
90
  }
91
+ /**
92
+ * Iterate over the array values.
93
+ */
49
94
  [Symbol.iterator]() {
50
95
  return this.array[Symbol.iterator]();
51
96
  }
97
+ /**
98
+ * Double the buffer capacity.
99
+ * Uses in-place grow/resize if supported, otherwise allocates new buffer and copies.
100
+ */
52
101
  expandArray() {
53
102
  this.bufferSize *= 2;
54
103
  if (this.bufferSize > this.buffer.maxByteLength) {
104
+ // Need a completely new buffer with larger maxByteLength
55
105
  this.maxByteLength *= 2;
56
106
  const newBuffer = new this.BC(this.bufferSize, {
57
107
  maxByteLength: this.maxByteLength,
@@ -62,6 +112,7 @@ export class ResizeableTypedArray {
62
112
  this.array = newArray;
63
113
  }
64
114
  else {
115
+ // Can grow/resize the existing buffer in place
65
116
  if (this.buffer instanceof SharedArrayBuffer && this.buffer.growable) {
66
117
  this.buffer.grow(this.bufferSize);
67
118
  }
@@ -74,7 +125,7 @@ export class ResizeableTypedArray {
74
125
  }
75
126
  }
76
127
  /**
77
- * Handles negative numbers
128
+ * Get the value at an index. Handles negative indices.
78
129
  */
79
130
  at(index) {
80
131
  if (index < -this.length || index >= this.length)
@@ -86,12 +137,18 @@ export class ResizeableTypedArray {
86
137
  throw Error(`No value at index: ${index}`);
87
138
  return result;
88
139
  }
140
+ /**
141
+ * Get a slice of the array.
142
+ */
89
143
  slice(start, end) {
90
144
  return this.array.slice(start, end);
91
145
  }
92
146
  get length() {
93
147
  return this.items;
94
148
  }
149
+ /**
150
+ * Push a value to the end of the array.
151
+ */
95
152
  push(value) {
96
153
  if (this.length >= this.array.length) {
97
154
  this.expandArray();
@@ -99,17 +156,39 @@ export class ResizeableTypedArray {
99
156
  this.array[this.items++] = value;
100
157
  return this.length - 1;
101
158
  }
159
+ /**
160
+ * Set a value at a specific index. Expands array if needed.
161
+ */
162
+ set(index, value) {
163
+ if (index < 0)
164
+ throw Error("Index out of bounds");
165
+ if (index >= this.length) {
166
+ while (index >= this.array.length)
167
+ this.expandArray();
168
+ this.items = index + 1;
169
+ }
170
+ this.array[index] = value;
171
+ }
172
+ /**
173
+ * Push multiple values to the end of the array.
174
+ */
102
175
  pushMany(values) {
103
176
  while (this.length + values.length > this.array.length)
104
177
  this.expandArray();
105
178
  this.array.set(values, this.length);
106
179
  this.items += values.length;
107
180
  }
181
+ /**
182
+ * Shrink the buffer to exactly fit stored items.
183
+ * Buffer becomes fixed-length after compacting.
184
+ */
108
185
  compact() {
109
186
  if (this.buffer instanceof SharedArrayBuffer) {
187
+ // SharedArrayBuffer uses slice() to create a new fixed-size buffer
110
188
  this.buffer = this.buffer.slice(0, this.length * this.ArrayType.BYTES_PER_ELEMENT);
111
189
  }
112
190
  else {
191
+ // ArrayBuffer uses transferToFixedLength() to detach and resize
113
192
  this.buffer = this.buffer.transferToFixedLength(this.length * this.ArrayType.BYTES_PER_ELEMENT);
114
193
  }
115
194
  this.array = new this.ArrayType(this.buffer);
@@ -1 +1 @@
1
- {"version":3,"file":"typed-arrays.js","sourceRoot":"","sources":["../../src/typed-arrays.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"typed-arrays.js","sourceRoot":"","sources":["../../src/typed-arrays.ts"],"names":[],"mappings":"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"}