@osmix/core 0.1.10 → 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.
Files changed (97) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/LICENSE +21 -0
  3. package/README.md +136 -72
  4. package/dist/contracts.d.ts +27 -0
  5. package/dist/contracts.d.ts.map +1 -0
  6. package/dist/contracts.js +1 -0
  7. package/dist/contracts.js.map +1 -0
  8. package/dist/entities.d.ts +22 -2
  9. package/dist/entities.d.ts.map +1 -1
  10. package/dist/entities.js +54 -10
  11. package/dist/entities.js.map +1 -1
  12. package/dist/ids.d.ts +20 -5
  13. package/dist/ids.d.ts.map +1 -1
  14. package/dist/ids.js +87 -29
  15. package/dist/ids.js.map +1 -1
  16. package/dist/index.d.ts +7 -4
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6 -4
  19. package/dist/index.js.map +1 -1
  20. package/dist/indirect-kd-index.d.ts +28 -0
  21. package/dist/indirect-kd-index.d.ts.map +1 -0
  22. package/dist/indirect-kd-index.js +163 -0
  23. package/dist/indirect-kd-index.js.map +1 -0
  24. package/dist/limits.d.ts +30 -0
  25. package/dist/limits.d.ts.map +1 -0
  26. package/dist/limits.js +51 -0
  27. package/dist/limits.js.map +1 -0
  28. package/dist/mocks.d.ts.map +1 -1
  29. package/dist/mocks.js.map +1 -1
  30. package/dist/nodes.d.ts +36 -15
  31. package/dist/nodes.d.ts.map +1 -1
  32. package/dist/nodes.js +185 -62
  33. package/dist/nodes.js.map +1 -1
  34. package/dist/osm.d.ts +60 -4
  35. package/dist/osm.d.ts.map +1 -1
  36. package/dist/osm.js +32 -6
  37. package/dist/osm.js.map +1 -1
  38. package/dist/relations.d.ts +11 -4
  39. package/dist/relations.d.ts.map +1 -1
  40. package/dist/relations.js +73 -29
  41. package/dist/relations.js.map +1 -1
  42. package/dist/renumber.d.ts +23 -0
  43. package/dist/renumber.d.ts.map +1 -0
  44. package/dist/renumber.js +64 -0
  45. package/dist/renumber.js.map +1 -0
  46. package/dist/stringtable.d.ts +2 -1
  47. package/dist/stringtable.d.ts.map +1 -1
  48. package/dist/stringtable.js +9 -14
  49. package/dist/stringtable.js.map +1 -1
  50. package/dist/tags.d.ts +45 -12
  51. package/dist/tags.d.ts.map +1 -1
  52. package/dist/tags.js +153 -27
  53. package/dist/tags.js.map +1 -1
  54. package/dist/typed-arrays.d.ts +63 -48
  55. package/dist/typed-arrays.d.ts.map +1 -1
  56. package/dist/typed-arrays.js +184 -107
  57. package/dist/typed-arrays.js.map +1 -1
  58. package/dist/ways.d.ts +52 -3
  59. package/dist/ways.d.ts.map +1 -1
  60. package/dist/ways.js +223 -46
  61. package/dist/ways.js.map +1 -1
  62. package/package.json +45 -31
  63. package/src/contracts.ts +29 -0
  64. package/src/entities.ts +242 -194
  65. package/src/ids.ts +278 -235
  66. package/src/index.ts +22 -13
  67. package/src/indirect-kd-index.ts +212 -0
  68. package/src/limits.ts +73 -0
  69. package/src/mocks.ts +114 -113
  70. package/src/nodes.ts +538 -397
  71. package/src/osm.ts +282 -207
  72. package/src/relations.ts +580 -558
  73. package/src/renumber.ts +80 -0
  74. package/src/stringtable.ts +189 -184
  75. package/src/tags.ts +406 -272
  76. package/src/typed-arrays.ts +307 -205
  77. package/src/types/geoflatbush.d.ts +28 -33
  78. package/src/ways.ts +577 -406
  79. package/test/entity-index-errors.test.ts +41 -0
  80. package/test/ids.bench.ts +33 -0
  81. package/test/ids.test.ts +122 -0
  82. package/test/limits.test.ts +83 -0
  83. package/test/memory.test.ts +29 -30
  84. package/test/no-shared-array-buffer.test.ts +41 -0
  85. package/test/nodes-spatial-index.test.ts +261 -0
  86. package/test/osm-bbox.test.ts +30 -0
  87. package/test/relations.bench.ts +32 -0
  88. package/test/relations.test.ts +124 -0
  89. package/test/renumber.test.ts +54 -0
  90. package/test/spatial-index-rebuild.test.ts +33 -0
  91. package/test/storage-compaction.test.ts +269 -0
  92. package/test/tags-search.test.ts +89 -56
  93. package/test/typed-arrays.test.ts +252 -132
  94. package/tsconfig.build.json +6 -6
  95. package/tsconfig.json +7 -7
  96. package/src/types/geokdbush.d.ts +0 -37
  97. package/src/types/kdbush.d.ts +0 -47
package/dist/ways.js CHANGED
@@ -1,21 +1,48 @@
1
1
  import Flatbush from "flatbush";
2
2
  import { around as geoAround } from "geoflatbush";
3
- import { Entities } from "./entities.js";
3
+ import { Entities, isValidSpatialBbox } from "./entities.js";
4
4
  import { Ids } from "./ids.js";
5
+ import { MAX_UINT32_OFFSET, MAX_WAY_REFS, assertCapacity } from "./limits.js";
5
6
  import { Tags } from "./tags.js";
6
- import { BufferConstructor, IdArrayType, ResizeableTypedArray as RTA, } from "./typed-arrays.js";
7
+ import { BufferConstructor, ResizeableTypedArray as RTA } from "./typed-arrays.js";
8
+ /**
9
+ * Node-index sentinel stored for way refs whose node is not present in the dataset.
10
+ * Returned by {@link Ways.getRefIndexes} in place of a node index.
11
+ */
12
+ export const MISSING_NODE_INDEX = 0xffffffff;
13
+ const HASH_REF_CHUNK_SIZE = 8192;
7
14
  export class Ways extends Entities {
8
15
  spatialIndex = new Flatbush(1);
9
16
  // Track if spatial index was properly built (vs default empty)
10
17
  spatialIndexBuilt = false;
11
18
  refStart;
12
- refCount; // Maximum 2,000 nodes per way
13
- // Node IDs
19
+ refCount; // Maximum MAX_WAY_REFS (65,535) nodes per way
20
+ // Node indexes. Missing node IDs are preserved in sparse parallel arrays.
14
21
  refs;
22
+ missingRefPositions;
23
+ missingRefIds;
24
+ // Temporary OSM node IDs used when nodes are not indexed during ingestion.
25
+ pendingRefIds;
15
26
  // Bounding box of the way in geographic coordinates
16
27
  bbox;
17
28
  // Node reference index
18
29
  nodes;
30
+ getNodeLonLat(refPosition) {
31
+ const coordinate = this.tryGetNodeLonLat(refPosition);
32
+ if (!coordinate) {
33
+ throw Error(`Node ${this.getMissingRefId(refPosition)} not found for way geometry`);
34
+ }
35
+ return coordinate;
36
+ }
37
+ /** Resolve a reference position to coordinates, or null when the node is absent. */
38
+ tryGetNodeLonLat(refPosition) {
39
+ const nodeIndex = this.refs.at(refPosition);
40
+ if (nodeIndex !== MISSING_NODE_INDEX) {
41
+ return this.nodes.getNodeLonLat({ index: nodeIndex });
42
+ }
43
+ // A missing ref may still resolve if the node was added after finalization.
44
+ return this.nodes.getNodeLonLat({ id: this.getMissingRefId(refPosition) });
45
+ }
19
46
  /**
20
47
  * Create a new Ways index.
21
48
  */
@@ -24,7 +51,10 @@ export class Ways extends Entities {
24
51
  super("way", new Ids(transferables), new Tags(stringTable, transferables));
25
52
  this.refStart = RTA.from(Uint32Array, transferables.refStart);
26
53
  this.refCount = RTA.from(Uint16Array, transferables.refCount);
27
- this.refs = RTA.from(IdArrayType, transferables.refs);
54
+ this.refs = RTA.from(Uint32Array, transferables.refs);
55
+ this.missingRefPositions = RTA.from(Uint32Array, transferables.missingRefPositions);
56
+ this.missingRefIds = RTA.from(Float64Array, transferables.missingRefIds);
57
+ this.pendingRefIds = null;
28
58
  this.bbox = RTA.from(Float64Array, transferables.bbox);
29
59
  // Only load spatial index if provided (not stored in IndexedDB)
30
60
  if (transferables.spatialIndex?.byteLength) {
@@ -37,7 +67,10 @@ export class Ways extends Entities {
37
67
  super("way", new Ids(), new Tags(stringTable));
38
68
  this.refStart = new RTA(Uint32Array);
39
69
  this.refCount = new RTA(Uint16Array);
40
- this.refs = new RTA(IdArrayType);
70
+ this.refs = new RTA(Uint32Array);
71
+ this.missingRefPositions = new RTA(Uint32Array);
72
+ this.missingRefIds = new RTA(Float64Array);
73
+ this.pendingRefIds = new RTA(Float64Array);
41
74
  this.bbox = new RTA(Float64Array);
42
75
  }
43
76
  this.nodes = nodes;
@@ -46,17 +79,17 @@ export class Ways extends Entities {
46
79
  * Add a single way to the index.
47
80
  */
48
81
  addWay(way) {
82
+ this.assertRefCapacity(way.id, way.refs.length);
49
83
  const wayIndex = this.addEntity(way.id, way.tags ?? {});
50
- this.refStart.push(this.refs.length);
84
+ this.refStart.push(this.refLength);
51
85
  this.refCount.push(way.refs.length);
52
- for (const ref of way.refs)
53
- this.refs.push(ref);
86
+ this.appendRefIds(way.refs);
54
87
  return wayIndex;
55
88
  }
56
89
  /**
57
90
  * Bulk add ways directly from a PBF PrimitiveBlock.
58
91
  */
59
- addWays(ways, blockStringIndexMap, filter) {
92
+ addWays(ways, blockStringIndexMap, filter, nodeIdToIndex) {
60
93
  let added = 0;
61
94
  for (const way of ways) {
62
95
  let prevRefId = 0;
@@ -64,15 +97,6 @@ export class Ways extends Entities {
64
97
  prevRefId += refId;
65
98
  return prevRefId;
66
99
  });
67
- const filteredWay = filter
68
- ? filter({
69
- id: way.id,
70
- refs,
71
- tags: this.tags.getTagsFromIndices(way.keys, way.vals),
72
- })
73
- : null;
74
- if (filter && filteredWay === null)
75
- continue;
76
100
  const tagKeys = way.keys.map((key) => {
77
101
  const index = blockStringIndexMap[key];
78
102
  if (index === undefined)
@@ -85,31 +109,71 @@ export class Ways extends Entities {
85
109
  throw Error("Tag value not found");
86
110
  return index;
87
111
  });
112
+ const filteredWay = filter
113
+ ? filter({
114
+ id: way.id,
115
+ refs,
116
+ tags: this.tags.getTagsFromIndices(tagKeys, tagValues),
117
+ })
118
+ : null;
119
+ if (filter && filteredWay === null)
120
+ continue;
121
+ const addedRefs = filteredWay?.refs ?? refs;
122
+ this.assertRefCapacity(way.id, addedRefs.length);
88
123
  this.addEntity(way.id, tagKeys, tagValues);
89
- this.refStart.push(this.refs.length);
90
- this.refCount.push(filteredWay?.refs.length ?? refs.length);
91
- this.refs.pushMany(filteredWay?.refs ?? refs);
124
+ this.refStart.push(this.refLength);
125
+ this.refCount.push(addedRefs.length);
126
+ this.appendRefIds(addedRefs, nodeIdToIndex);
92
127
  added++;
93
128
  }
94
129
  return added;
95
130
  }
96
131
  /**
97
132
  * Compact the internal arrays to free up memory.
133
+ *
134
+ * Must run after the node ID index is built (`Osm.buildIndexes()` orders
135
+ * nodes before ways) so pending OSM node IDs resolve to compact `Uint32`
136
+ * node indexes. If the node index is not ready, every pending ref degrades
137
+ * to the larger missing-ref representation (sentinel + sorted ID lookup).
98
138
  */
99
139
  buildEntityIndex() {
100
140
  this.refStart.compact();
101
141
  this.refCount.compact();
142
+ if (this.pendingRefIds && this.pendingRefIds.length > 0) {
143
+ if (this.refs.length > 0)
144
+ throw Error("Mixed pending and indexed way references.");
145
+ const refsBuffer = new BufferConstructor(this.pendingRefIds.length * Uint32Array.BYTES_PER_ELEMENT);
146
+ this.refs = RTA.from(Uint32Array, refsBuffer);
147
+ const canResolveNodes = this.nodes.ids.isReady();
148
+ if (!canResolveNodes) {
149
+ console.warn("Ways.buildEntityIndex ran before the node index was ready; all way references will use the missing-ref representation.");
150
+ }
151
+ for (let i = 0; i < this.pendingRefIds.length; i++) {
152
+ const refId = this.pendingRefIds.at(i);
153
+ const nodeIndex = canResolveNodes ? this.nodes.ids.getIndexFromId(refId) : -1;
154
+ this.setIndexedRef(i, refId, nodeIndex);
155
+ }
156
+ }
157
+ this.pendingRefIds = null;
102
158
  this.refs.compact();
159
+ this.missingRefPositions.compact();
160
+ this.missingRefIds.compact();
103
161
  }
104
162
  /**
105
163
  * Build the spatial index for ways.
106
164
  * If bbox data already exists (e.g., loaded from storage), reuses it.
165
+ * Returns the existing index when it is already built.
107
166
  */
108
167
  buildSpatialIndex() {
109
168
  if (!this.nodes.isReady())
110
169
  throw Error("Node index is not ready.");
111
- if (this.size === 0)
170
+ if (this.spatialIndexBuilt)
112
171
  return this.spatialIndex;
172
+ if (this.size === 0) {
173
+ this.spatialIndex = new Flatbush(1, 128, Float64Array, BufferConstructor);
174
+ this.spatialIndexBuilt = true;
175
+ return this.spatialIndex;
176
+ }
113
177
  this.spatialIndex = new Flatbush(this.size, 128, Float64Array, BufferConstructor);
114
178
  // If bbox already has data (loaded from storage), use it directly
115
179
  const hasBboxData = this.bbox.length >= this.size * 4;
@@ -126,7 +190,9 @@ export class Ways extends Entities {
126
190
  maxY = this.bbox.at(i * 4 + 3);
127
191
  }
128
192
  else {
129
- // Calculate bbox from node coordinates
193
+ // Calculate bbox from resolvable node coordinates. Missing refs are
194
+ // preserved losslessly in storage but contribute no geometry; a way
195
+ // with no resolvable refs keeps an inverted bbox that never matches.
130
196
  minX = Number.POSITIVE_INFINITY;
131
197
  minY = Number.POSITIVE_INFINITY;
132
198
  maxX = Number.NEGATIVE_INFINITY;
@@ -134,8 +200,10 @@ export class Ways extends Entities {
134
200
  const start = this.refStart.at(i);
135
201
  const count = this.refCount.at(i);
136
202
  for (let j = start; j < start + count; j++) {
137
- const refId = this.refs.at(j);
138
- const [lon, lat] = this.nodes.getNodeLonLat({ id: refId });
203
+ const coordinate = this.tryGetNodeLonLat(j);
204
+ if (!coordinate)
205
+ continue;
206
+ const [lon, lat] = coordinate;
139
207
  if (lon < minX)
140
208
  minX = lon;
141
209
  if (lon > maxX)
@@ -182,7 +250,22 @@ export class Ways extends Entities {
182
250
  getRefIds(index) {
183
251
  const start = this.refStart.at(index);
184
252
  const count = this.refCount.at(index);
185
- return Array.from(this.refs.slice(start, start + count));
253
+ const refs = Array.from({ length: count });
254
+ for (let i = 0; i < count; i++)
255
+ refs[i] = this.getRefId(start + i);
256
+ return refs;
257
+ }
258
+ /**
259
+ * Get the node indexes referenced by a way without allocating.
260
+ *
261
+ * Returns a view into internal storage; do not mutate it or hold it across writes. Refs to
262
+ * nodes absent from the dataset are {@link MISSING_NODE_INDEX}. Requires `buildEntityIndex()`.
263
+ */
264
+ getRefIndexes(index) {
265
+ if (this.pendingRefIds !== null)
266
+ throw Error("Way index is not built.");
267
+ const start = this.refStart.at(index);
268
+ return this.refs.array.subarray(start, start + this.refCount.at(index));
186
269
  }
187
270
  /**
188
271
  * Get the bounding box of a way.
@@ -204,8 +287,7 @@ export class Ways extends Entities {
204
287
  const start = this.refStart.at(index);
205
288
  const line = new Float64Array(count * 2);
206
289
  for (let i = 0; i < count; i++) {
207
- const ref = this.refs.at(start + i);
208
- const [lon, lat] = this.nodes.getNodeLonLat({ id: ref });
290
+ const [lon, lat] = this.getNodeLonLat(start + i);
209
291
  line[i * 2] = lon;
210
292
  line[i * 2 + 1] = lat;
211
293
  }
@@ -213,20 +295,31 @@ export class Ways extends Entities {
213
295
  }
214
296
  /**
215
297
  * Get the coordinates of a way as an array of [lon, lat] pairs.
298
+ * Throws when a referenced node cannot be resolved; use
299
+ * `getResolvedCoordinates()` for tolerant consumers such as bbox building.
216
300
  */
217
301
  getCoordinates(index) {
218
302
  const count = this.refCount.at(index);
219
303
  const start = this.refStart.at(index);
220
304
  const coords = [];
221
305
  for (let refIndex = start; refIndex < start + count; refIndex++) {
222
- const ref = this.refs.at(refIndex);
223
- const coord = this.nodes.getNodeLonLat({ id: ref });
224
- if (coord === undefined ||
225
- coord[0] === undefined ||
226
- coord[1] === undefined) {
227
- throw Error(`Invalid coordinate for way id ${this.ids.at(index)}, index ${index}, node ref ${ref}, ref index ${refIndex}`);
228
- }
229
- coords.push(coord);
306
+ coords.push(this.getNodeLonLat(refIndex));
307
+ }
308
+ return coords;
309
+ }
310
+ /**
311
+ * Get the resolvable coordinates of a way, skipping missing node refs.
312
+ * Preferred over `getCoordinates()` when partial geometry is acceptable,
313
+ * e.g. computing bounding boxes over referentially incomplete extracts.
314
+ */
315
+ getResolvedCoordinates(index) {
316
+ const count = this.refCount.at(index);
317
+ const start = this.refStart.at(index);
318
+ const coords = [];
319
+ for (let refIndex = start; refIndex < start + count; refIndex++) {
320
+ const coordinate = this.tryGetNodeLonLat(refIndex);
321
+ if (coordinate)
322
+ coords.push(coordinate);
230
323
  }
231
324
  return coords;
232
325
  }
@@ -236,7 +329,14 @@ export class Ways extends Entities {
236
329
  intersects(bbox, filterFn) {
237
330
  if (this.size === 0)
238
331
  return [];
239
- return this.spatialIndex.search(bbox[0], bbox[1], bbox[2], bbox[3], filterFn);
332
+ // A way with no resolvable refs stores an inverted bbox. Flatbush's
333
+ // contained-node fast path skips per-leaf intersection tests, so filter
334
+ // inverted boxes out explicitly.
335
+ return this.spatialIndex.search(bbox[0], bbox[1], bbox[2], bbox[3], (index, x0, y0, x1, y1) => {
336
+ if (!isValidSpatialBbox(x0, y0, x1, y1))
337
+ return false;
338
+ return filterFn ? filterFn(index) : true;
339
+ });
240
340
  }
241
341
  /**
242
342
  * Find way indexes near a point using great-circle distance.
@@ -250,7 +350,10 @@ export class Ways extends Entities {
250
350
  if (this.size === 0)
251
351
  return [];
252
352
  // Use geoflatbush for proper geographic distance calculations
253
- return geoAround(this.spatialIndex, lon, lat, maxResults, maxDistanceKm);
353
+ return geoAround(this.spatialIndex, lon, lat, maxResults, maxDistanceKm, (index) => {
354
+ const offset = index * 4;
355
+ return isValidSpatialBbox(this.bbox.at(offset), this.bbox.at(offset + 1), this.bbox.at(offset + 2), this.bbox.at(offset + 3));
356
+ });
254
357
  }
255
358
  /**
256
359
  * Get ways within a bounding box.
@@ -294,6 +397,8 @@ export class Ways extends Entities {
294
397
  refStart: this.refStart.array.buffer,
295
398
  refCount: this.refCount.array.buffer,
296
399
  refs: this.refs.array.buffer,
400
+ missingRefPositions: this.missingRefPositions.array.buffer,
401
+ missingRefIds: this.missingRefIds.array.buffer,
297
402
  bbox: this.bbox.array.buffer,
298
403
  };
299
404
  // Only include spatial index if it was built
@@ -305,7 +410,7 @@ export class Ways extends Entities {
305
410
  /**
306
411
  * Get the approximate memory requirements for a given number of ways in bytes.
307
412
  */
308
- static getBytesRequired(count) {
413
+ static getBytesRequired(count, refCount = 0, missingRefCount = 0, tagCount = 0) {
309
414
  if (count === 0)
310
415
  return 0;
311
416
  // Approximate nodes per way
@@ -319,9 +424,11 @@ export class Ways extends Entities {
319
424
  const boxesBytes = numNodes * 4 * Float64Array.BYTES_PER_ELEMENT;
320
425
  const spatialIndexBytes = 8 + indexBytes + boxesBytes;
321
426
  return (Ids.getBytesRequired(count) +
322
- Tags.getBytesRequired(count) +
427
+ Tags.getBytesRequired(count, count, tagCount) +
323
428
  count * Uint32Array.BYTES_PER_ELEMENT + // refStart
324
429
  count * Uint16Array.BYTES_PER_ELEMENT + // refCount
430
+ refCount * Uint32Array.BYTES_PER_ELEMENT + // node indexes
431
+ missingRefCount * (Uint32Array.BYTES_PER_ELEMENT + Float64Array.BYTES_PER_ELEMENT) + // missing refs
325
432
  count * 4 * Float64Array.BYTES_PER_ELEMENT + // bbox
326
433
  spatialIndexBytes);
327
434
  }
@@ -329,11 +436,81 @@ export class Ways extends Entities {
329
436
  * Update a ContentHasher with way-specific data (node references).
330
437
  */
331
438
  updateHash(hasher) {
332
- return super
333
- .updateHash(hasher)
334
- .update(this.refStart.array)
335
- .update(this.refCount.array)
336
- .update(this.refs.array);
439
+ super.updateHash(hasher).update(this.refCount.array);
440
+ const chunk = new Float64Array(Math.min(HASH_REF_CHUNK_SIZE, this.refs.length));
441
+ let chunkLength = 0;
442
+ for (let i = 0; i < this.refs.length; i++) {
443
+ chunk[chunkLength++] = this.getRefId(i);
444
+ if (chunkLength === chunk.length) {
445
+ hasher.update(chunk);
446
+ chunkLength = 0;
447
+ }
448
+ }
449
+ if (chunkLength > 0)
450
+ hasher.update(chunk.subarray(0, chunkLength));
451
+ return hasher;
452
+ }
453
+ /** Logical reference length during either pending-ID or indexed ingestion. */
454
+ /** Reject a way whose ref count would wrap `refCount` or the `refStart` offsets. */
455
+ assertRefCapacity(wayId, refCount) {
456
+ assertCapacity("way-refs", refCount, MAX_WAY_REFS, () => `Way ${wayId}`);
457
+ assertCapacity("total-way-refs", this.refLength + refCount, MAX_UINT32_OFFSET, () => `The dataset (at way ${wayId})`);
458
+ }
459
+ get refLength() {
460
+ return this.pendingRefIds?.length ?? this.refs.length;
461
+ }
462
+ /** Append OSM node IDs, optionally resolving them directly to node indexes. */
463
+ appendRefIds(refIds, nodeIdToIndex) {
464
+ if (nodeIdToIndex) {
465
+ if ((this.pendingRefIds?.length ?? 0) > 0) {
466
+ throw Error("Cannot mix unresolved and directly indexed way references.");
467
+ }
468
+ this.pendingRefIds = null;
469
+ for (const refId of refIds) {
470
+ this.setIndexedRef(this.refs.length, refId, nodeIdToIndex(refId));
471
+ }
472
+ return;
473
+ }
474
+ if (!this.pendingRefIds) {
475
+ throw Error("Directly indexed way references require a node ID resolver.");
476
+ }
477
+ this.pendingRefIds.pushMany(refIds);
478
+ }
479
+ /** Store one resolved or losslessly preserved missing reference. */
480
+ setIndexedRef(position, refId, nodeIndex) {
481
+ if (nodeIndex < 0) {
482
+ this.refs.set(position, MISSING_NODE_INDEX);
483
+ this.missingRefPositions.push(position);
484
+ this.missingRefIds.push(refId);
485
+ return;
486
+ }
487
+ if (!Number.isInteger(nodeIndex) || nodeIndex >= MISSING_NODE_INDEX) {
488
+ throw Error(`Invalid node index ${nodeIndex} for reference ${refId}`);
489
+ }
490
+ this.refs.set(position, nodeIndex);
491
+ }
492
+ /** Reconstruct the public OSM node ID for one internal reference position. */
493
+ getRefId(position) {
494
+ const nodeIndex = this.refs.at(position);
495
+ return nodeIndex === MISSING_NODE_INDEX
496
+ ? this.getMissingRefId(position)
497
+ : this.nodes.ids.at(nodeIndex);
498
+ }
499
+ /** Find the OSM node ID for a sentinel reference position. */
500
+ getMissingRefId(position) {
501
+ let low = 0;
502
+ let high = this.missingRefPositions.length - 1;
503
+ while (low <= high) {
504
+ const middle = (low + high) >>> 1;
505
+ const candidate = this.missingRefPositions.at(middle);
506
+ if (candidate === position)
507
+ return this.missingRefIds.at(middle);
508
+ if (candidate < position)
509
+ low = middle + 1;
510
+ else
511
+ high = middle - 1;
512
+ }
513
+ throw Error(`Missing node ID not found for way reference position ${position}`);
337
514
  }
338
515
  }
339
516
  //# sourceMappingURL=ways.js.map
package/dist/ways.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ways.js","sourceRoot":"","sources":["../src/ways.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ways.js","sourceRoot":"","sources":["../src/ways.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,32 +1,46 @@
1
1
  {
2
- "$schema": "https://json.schemastore.org/package.json",
3
- "name": "@osmix/core",
4
- "type": "module",
5
- "version": "0.1.10",
6
- "description": "An OSM PBF reader, writer, and merge tool written in TypeScript",
7
- "license": "MIT",
8
- "repository": {
9
- "type": "git",
10
- "url": "git+https://github.com/conveyal/osmix.git"
11
- },
12
- "main": "./dist/index.js",
13
- "scripts": {
14
- "build": "tsc -p tsconfig.build.json",
15
- "bench": "bun test --bench",
16
- "test": "bun test",
17
- "typecheck": "tsc --noEmit"
18
- },
19
- "devDependencies": {
20
- "@osmix/pbf": "0.0.9",
21
- "@types/bun": "^1.3.14",
22
- "typescript": "npm:typescript@rc"
23
- },
24
- "dependencies": {
25
- "@osmix/shared": "0.0.13",
26
- "flatbush": "^4.6.2",
27
- "geoflatbush": "^2.2.1",
28
- "geokdbush": "^2.1.0",
29
- "kdbush": "^4.1.0"
30
- },
31
- "types": "./dist/index.d.ts"
32
- }
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "name": "@osmix/core",
4
+ "version": "0.3.0",
5
+ "description": "An OSM PBF reader, writer, and merge tool written in TypeScript",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/conveyal/osmix.git"
10
+ },
11
+ "type": "module",
12
+ "main": "./dist/index.js",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "default": "./dist/index.js"
17
+ },
18
+ "./contracts": {
19
+ "types": "./dist/contracts.d.ts",
20
+ "default": "./dist/contracts.js"
21
+ },
22
+ "./mocks": {
23
+ "types": "./dist/mocks.d.ts",
24
+ "default": "./dist/mocks.js"
25
+ }
26
+ },
27
+ "dependencies": {
28
+ "@osmix/geo": "0.1.1",
29
+ "@osmix/shared": "0.2.0",
30
+ "@osmix/types": "0.2.0",
31
+ "flatbush": "^4.6.2",
32
+ "geoflatbush": "^2.2.1"
33
+ },
34
+ "devDependencies": {
35
+ "@osmix/pbf": "0.0.10",
36
+ "typescript": "^7.0.2"
37
+ },
38
+ "engines": {
39
+ "node": ">=24"
40
+ },
41
+ "types": "./dist/index.d.ts",
42
+ "scripts": {
43
+ "build": "tsc -p tsconfig.build.json",
44
+ "bench": "vitest bench"
45
+ }
46
+ }
@@ -0,0 +1,29 @@
1
+ import type { GeoBbox2D } from "@osmix/types";
2
+
3
+ import type { Nodes } from "./nodes.ts";
4
+ import type { Relations } from "./relations.ts";
5
+ import type { Ways } from "./ways.ts";
6
+
7
+ /**
8
+ * Read-only contract for tile encoders, exporters, and spatial queries.
9
+ *
10
+ * Encoders only need entity accessors and spatial indexes; they do not mutate
11
+ * the underlying dataset. The concrete {@link Osm} class satisfies this interface.
12
+ */
13
+ export interface OsmReader {
14
+ readonly id: string;
15
+ readonly nodes: Nodes;
16
+ readonly ways: Ways;
17
+ readonly relations: Relations;
18
+ /** Bounding box of all nodes, or `null` when the dataset has no nodes. */
19
+ bbox(): GeoBbox2D | null;
20
+ }
21
+
22
+ /**
23
+ * Write contract for format importers that populate an in-memory index.
24
+ */
25
+ export interface OsmWriter extends OsmReader {
26
+ buildIndexes(): void;
27
+ buildSpatialIndexes(): void;
28
+ isReady(): boolean;
29
+ }