@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
@@ -1,37 +1,101 @@
1
- import type { OsmPbfBlock, OsmPbfStringTable } from "@osmix/pbf";
2
- import { type BufferType } from "./typed-arrays";
3
- export interface StringTableTransferables {
4
- bytes: BufferType;
5
- start: BufferType;
6
- count: BufferType;
1
+ /**
2
+ * Deduplicated UTF-8 string storage.
3
+ *
4
+ * Strings are stored in a flat buffer and referenced by index.
5
+ * Supports fast deduplication (string→index) and lazy reconstruction (index→string).
6
+ *
7
+ * @module
8
+ */
9
+ import type { OsmPbfStringTable } from "@osmix/pbf";
10
+ import { type BufferType, ResizeableTypedArray as RTA } from "./typed-arrays";
11
+ import type { ContentHasher } from "./utils";
12
+ /**
13
+ * Serializable state for worker transfer.
14
+ */
15
+ export interface StringTableTransferables<T extends BufferType = BufferType> {
16
+ /** Concatenated UTF-8 bytes. */
17
+ bytes: T;
18
+ /** Maps string index → byte offset. */
19
+ start: T;
20
+ /** Maps string index → byte length. */
21
+ count: T;
7
22
  }
8
23
  /**
9
- * StringTable that can be used to store and retrieve strings as bytes.
24
+ * Append-only deduplicated string table.
25
+ *
26
+ * Limits: Max string length 65,535 bytes.
27
+ * Rebuilds reverse index lazily after transfer.
10
28
  */
11
29
  export default class StringTable {
30
+ /** UTF-8 encoder for string→bytes conversion */
12
31
  private enc;
32
+ /** UTF-8 decoder for bytes→string conversion */
13
33
  private dec;
14
- private bytes;
15
- private start;
16
- private count;
34
+ /** Concatenated UTF-8 bytes of all strings */
35
+ bytes: RTA<Uint8Array>;
36
+ /** Maps string index → byte offset in bytes array */
37
+ start: RTA<Uint32Array>;
38
+ /** Maps string index → byte length */
39
+ count: RTA<Uint16Array>;
40
+ /** Forward lookup: string → index (populated during add) */
17
41
  private stringToIndex;
42
+ /** Whether the reverse index has been built (lazy after transfer) */
43
+ private reverseIndexBuilt;
44
+ /** Cache of decoded strings to avoid repeated UTF-8 decoding */
18
45
  private indexToString;
19
- static from({ bytes, start, count }: StringTableTransferables): StringTable;
20
- constructor();
46
+ /**
47
+ * Create a new StringTable.
48
+ */
49
+ constructor(opts?: StringTableTransferables);
50
+ /**
51
+ * Get transferable objects for passing to another thread.
52
+ */
21
53
  transferables(): StringTableTransferables;
54
+ /**
55
+ * Add a string to the table and return its index.
56
+ */
22
57
  add(str: string): number;
23
58
  /**
24
59
  * Decode all the strings in a primitive block and add them to the string table.
25
60
  * Return a mapping of block index -> string table index
26
61
  */
27
- createBlockIndexMap(block: OsmPbfBlock): Map<number, number>;
62
+ createBlockIndexMap(blockStringtable: OsmPbfStringTable): Uint32Array<ArrayBuffer>;
28
63
  /**
29
- * TextDecoder.decode() does not support SharedArrayBuffer, so we need to first copy to a normal ArrayBuffer before decoding.
64
+ * Get a string by its index.
65
+ * Caches results to avoid repeated UTF-8 decoding.
30
66
  */
31
67
  get(index: number): string;
68
+ /**
69
+ * Get the raw UTF-8 bytes of a string.
70
+ * Returns a subarray view (not a copy).
71
+ */
32
72
  getBytes(index: number): Uint8Array;
73
+ /** Number of strings in the table. */
33
74
  get length(): number;
75
+ /**
76
+ * Finalize the string table by compacting internal arrays.
77
+ *
78
+ * This releases unused buffer capacity and marks the reverse index as built
79
+ * (since all strings were added before this call).
80
+ */
34
81
  buildIndex(): void;
82
+ /**
83
+ * Convert the string table to an OSM PBF string table.
84
+ */
35
85
  toOsmPbfStringTable(): OsmPbfStringTable;
86
+ /**
87
+ * Lazily build the reverse index (string → index).
88
+ * Decodes all strings once to populate the lookup map.
89
+ */
90
+ private ensureReverseIndex;
91
+ /**
92
+ * Find the index of a string.
93
+ */
94
+ find(str: string): number;
95
+ /**
96
+ * Update a ContentHasher with the string table's data.
97
+ * Hashes the bytes, start offsets, and counts.
98
+ */
99
+ updateHash(hasher: ContentHasher): ContentHasher;
36
100
  }
37
101
  //# sourceMappingURL=stringtable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stringtable.d.ts","sourceRoot":"","sources":["../../src/stringtable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,EAAE,KAAK,UAAU,EAAwB,MAAM,gBAAgB,CAAA;AAEtE,MAAM,WAAW,wBAAwB;IACxC,KAAK,EAAE,UAAU,CAAA;IACjB,KAAK,EAAE,UAAU,CAAA;IACjB,KAAK,EAAE,UAAU,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC/B,OAAO,CAAC,GAAG,CAAoB;IAC/B,OAAO,CAAC,GAAG,CAAoB;IAG/B,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,KAAK,CAAmC;IAGhD,OAAO,CAAC,aAAa,CAA4B;IAGjD,OAAO,CAAC,aAAa,CAA4B;IAEjD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,wBAAwB,GAAG,WAAW;;IAc3E,aAAa,IAAI,wBAAwB;IAQzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAYxB;;;OAGG;IACH,mBAAmB,CAAC,KAAK,EAAE,WAAW;IAWtC;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAY1B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IASnC,IAAI,MAAM,WAET;IAED,UAAU;IAQV,mBAAmB,IAAI,iBAAiB;CAOxC"}
1
+ {"version":3,"file":"stringtable.d.ts","sourceRoot":"","sources":["../../src/stringtable.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,KAAK,UAAU,EAAE,oBAAoB,IAAI,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IAC1E,gCAAgC;IAChC,KAAK,EAAE,CAAC,CAAA;IACR,uCAAuC;IACvC,KAAK,EAAE,CAAC,CAAA;IACR,uCAAuC;IACvC,KAAK,EAAE,CAAC,CAAA;CACR;AAED;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC/B,gDAAgD;IAChD,OAAO,CAAC,GAAG,CAAoB;IAC/B,gDAAgD;IAChD,OAAO,CAAC,GAAG,CAAoB;IAG/B,8CAA8C;IAC9C,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;IACtB,qDAAqD;IACrD,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;IACvB,sCAAsC;IACtC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAA;IAGvB,4DAA4D;IAC5D,OAAO,CAAC,aAAa,CAA4B;IAEjD,qEAAqE;IACrE,OAAO,CAAC,iBAAiB,CAAQ;IAGjC,gEAAgE;IAChE,OAAO,CAAC,aAAa,CAA4B;IAEjD;;OAEG;gBACS,IAAI,CAAC,EAAE,wBAAwB;IAY3C;;OAEG;IACH,aAAa,IAAI,wBAAwB;IAQzC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAYxB;;;OAGG;IACH,mBAAmB,CAAC,gBAAgB,EAAE,iBAAiB;IAevD;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAY1B;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAQnC,sCAAsC;IACtC,IAAI,MAAM,WAET;IAED;;;;;OAKG;IACH,UAAU;IAOV;;OAEG;IACH,mBAAmB,IAAI,iBAAiB;IAQxC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAOzB;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;CAMhD"}
@@ -1,30 +1,55 @@
1
- import { ResizeableTypedArray } from "./typed-arrays";
2
1
  /**
3
- * StringTable that can be used to store and retrieve strings as bytes.
2
+ * Deduplicated UTF-8 string storage.
3
+ *
4
+ * Strings are stored in a flat buffer and referenced by index.
5
+ * Supports fast deduplication (string→index) and lazy reconstruction (index→string).
6
+ *
7
+ * @module
8
+ */
9
+ import { ResizeableTypedArray as RTA } from "./typed-arrays";
10
+ /**
11
+ * Append-only deduplicated string table.
12
+ *
13
+ * Limits: Max string length 65,535 bytes.
14
+ * Rebuilds reverse index lazily after transfer.
4
15
  */
5
16
  export default class StringTable {
17
+ /** UTF-8 encoder for string→bytes conversion */
6
18
  enc = new TextEncoder();
19
+ /** UTF-8 decoder for bytes→string conversion */
7
20
  dec = new TextDecoder(); // UTF-8
8
- // Serializable state
21
+ // ─── Serializable State ────────────────────────────────────────────────────
22
+ /** Concatenated UTF-8 bytes of all strings */
9
23
  bytes;
24
+ /** Maps string index → byte offset in bytes array */
10
25
  start;
26
+ /** Maps string index → byte length */
11
27
  count;
12
- // Builder state
28
+ // ─── Builder State (string → index) ────────────────────────────────────────
29
+ /** Forward lookup: string → index (populated during add) */
13
30
  stringToIndex = new Map();
14
- // Retrieval state
31
+ /** Whether the reverse index has been built (lazy after transfer) */
32
+ reverseIndexBuilt = false;
33
+ // ─── Retrieval Cache (index → string) ──────────────────────────────────────
34
+ /** Cache of decoded strings to avoid repeated UTF-8 decoding */
15
35
  indexToString = new Map();
16
- static from({ bytes, start, count }) {
17
- const builder = new StringTable();
18
- builder.bytes = ResizeableTypedArray.from(Uint8Array, bytes);
19
- builder.start = ResizeableTypedArray.from(Uint32Array, start);
20
- builder.count = ResizeableTypedArray.from(Uint16Array, count);
21
- return builder;
22
- }
23
- constructor() {
24
- this.bytes = new ResizeableTypedArray(Uint8Array);
25
- this.start = new ResizeableTypedArray(Uint32Array);
26
- this.count = new ResizeableTypedArray(Uint16Array);
36
+ /**
37
+ * Create a new StringTable.
38
+ */
39
+ constructor(opts) {
40
+ this.bytes = opts?.bytes
41
+ ? RTA.from(Uint8Array, opts.bytes)
42
+ : new RTA(Uint8Array);
43
+ this.start = opts?.start
44
+ ? RTA.from(Uint32Array, opts.start)
45
+ : new RTA(Uint32Array);
46
+ this.count = opts?.count
47
+ ? RTA.from(Uint16Array, opts.count)
48
+ : new RTA(Uint16Array);
27
49
  }
50
+ /**
51
+ * Get transferable objects for passing to another thread.
52
+ */
28
53
  transferables() {
29
54
  return {
30
55
  bytes: this.bytes.array.buffer,
@@ -32,6 +57,9 @@ export default class StringTable {
32
57
  count: this.count.array.buffer,
33
58
  };
34
59
  }
60
+ /**
61
+ * Add a string to the table and return its index.
62
+ */
35
63
  add(str) {
36
64
  const existingIndex = this.stringToIndex.get(str);
37
65
  if (existingIndex !== undefined)
@@ -48,18 +76,23 @@ export default class StringTable {
48
76
  * Decode all the strings in a primitive block and add them to the string table.
49
77
  * Return a mapping of block index -> string table index
50
78
  */
51
- createBlockIndexMap(block) {
52
- const map = new Map();
53
- for (let i = 0; i < block.stringtable.length; i++) {
54
- const bytesString = block.stringtable[i];
79
+ createBlockIndexMap(blockStringtable) {
80
+ const index = new Uint32Array(blockStringtable.length);
81
+ for (let i = 0; i < blockStringtable.length; i++) {
82
+ const bytesString = blockStringtable[i];
55
83
  const str = this.dec.decode(bytesString);
56
- const index = this.add(str);
57
- map.set(i, index);
84
+ const existingIndex = this.stringToIndex.get(str);
85
+ if (existingIndex !== undefined) {
86
+ index[i] = existingIndex;
87
+ continue;
88
+ }
89
+ index[i] = this.add(str);
58
90
  }
59
- return map;
91
+ return index;
60
92
  }
61
93
  /**
62
- * TextDecoder.decode() does not support SharedArrayBuffer, so we need to first copy to a normal ArrayBuffer before decoding.
94
+ * Get a string by its index.
95
+ * Caches results to avoid repeated UTF-8 decoding.
63
96
  */
64
97
  get(index) {
65
98
  const string = this.indexToString.get(index);
@@ -73,23 +106,36 @@ export default class StringTable {
73
106
  this.indexToString.set(index, decoded);
74
107
  return decoded;
75
108
  }
109
+ /**
110
+ * Get the raw UTF-8 bytes of a string.
111
+ * Returns a subarray view (not a copy).
112
+ */
76
113
  getBytes(index) {
77
114
  if (index < 0 || index >= this.length)
78
115
  throw Error(`String index out of range: ${index}`);
79
116
  const start = this.start.at(index);
80
117
  const count = this.count.at(index);
81
- // Important: subarray creates a *view*, not a copy; TextDecoder cannot read from it directly.
82
118
  return this.bytes.array.subarray(start, start + count);
83
119
  }
120
+ /** Number of strings in the table. */
84
121
  get length() {
85
122
  return this.start.length;
86
123
  }
124
+ /**
125
+ * Finalize the string table by compacting internal arrays.
126
+ *
127
+ * This releases unused buffer capacity and marks the reverse index as built
128
+ * (since all strings were added before this call).
129
+ */
87
130
  buildIndex() {
88
131
  this.bytes.compact();
89
132
  this.start.compact();
90
133
  this.count.compact();
91
- this.stringToIndex.clear();
134
+ this.reverseIndexBuilt = true;
92
135
  }
136
+ /**
137
+ * Convert the string table to an OSM PBF string table.
138
+ */
93
139
  toOsmPbfStringTable() {
94
140
  const stringTable = [];
95
141
  for (let i = 0; i < this.length; i++) {
@@ -97,5 +143,38 @@ export default class StringTable {
97
143
  }
98
144
  return stringTable;
99
145
  }
146
+ /**
147
+ * Lazily build the reverse index (string → index).
148
+ * Decodes all strings once to populate the lookup map.
149
+ */
150
+ ensureReverseIndex() {
151
+ if (this.reverseIndexBuilt)
152
+ return;
153
+ // Decode all strings and populate the forward lookup map
154
+ for (let i = 0; i < this.length; i++) {
155
+ this.stringToIndex.set(this.get(i), i);
156
+ }
157
+ this.reverseIndexBuilt = true;
158
+ }
159
+ /**
160
+ * Find the index of a string.
161
+ */
162
+ find(str) {
163
+ const existing = this.stringToIndex.get(str);
164
+ if (existing !== undefined)
165
+ return existing;
166
+ this.ensureReverseIndex();
167
+ return this.stringToIndex.get(str) ?? -1;
168
+ }
169
+ /**
170
+ * Update a ContentHasher with the string table's data.
171
+ * Hashes the bytes, start offsets, and counts.
172
+ */
173
+ updateHash(hasher) {
174
+ return hasher
175
+ .update(this.bytes.array)
176
+ .update(this.start.array)
177
+ .update(this.count.array);
178
+ }
100
179
  }
101
180
  //# sourceMappingURL=stringtable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stringtable.js","sourceRoot":"","sources":["../../src/stringtable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stringtable.js","sourceRoot":"","sources":["../../src/stringtable.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,132 @@
1
- import type { OsmTags } from "@osmix/json";
2
- import type StringTable from "./stringtable";
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 type { OsmTags } from "@osmix/shared/types";
11
+ import StringTable from "./stringtable";
3
12
  import { type BufferType } from "./typed-arrays";
4
- export interface TagsTransferables {
5
- tagStart: BufferType;
6
- tagCount: BufferType;
7
- tagKeys: BufferType;
8
- tagVals: BufferType;
13
+ import type { ContentHasher } from "./utils";
14
+ /**
15
+ * Serializable state for worker transfer.
16
+ */
17
+ export interface TagsTransferables<T extends BufferType = BufferType> {
18
+ /** Maps entity index → start position in tagKeys/tagVals. */
19
+ tagStart: T;
20
+ /** Maps entity index → number of tags. */
21
+ tagCount: T;
22
+ /** Flattened tag key indices. */
23
+ tagKeys: T;
24
+ /** Flattened tag value indices. */
25
+ tagVals: T;
26
+ /** Flattened entity indices for reverse key lookup. */
27
+ keyEntities: T;
28
+ /** Maps key index → start position in keyEntities. */
29
+ keyIndexStart: T;
30
+ /** Maps key index → count of entities with that key. */
31
+ keyIndexCount: T;
9
32
  }
33
+ /**
34
+ * Bidirectional tag storage.
35
+ *
36
+ * Limits: Max 255 tags per entity.
37
+ * Note: String indices reference a shared `StringTable`.
38
+ */
10
39
  export declare class Tags {
40
+ /** Reference to the shared string table for key/value storage */
11
41
  private stringTable;
42
+ /** Maps entity index → start position in tagKeys/tagVals */
12
43
  private tagStart;
44
+ /** Maps entity index → number of tags (max 255) */
13
45
  private tagCount;
46
+ /** All tag key string indices, concatenated */
14
47
  private tagKeys;
48
+ /** All tag value string indices, concatenated (parallel to tagKeys) */
15
49
  private tagVals;
50
+ /**
51
+ * Flattened array of entity indices that have each tag key.
52
+ * Indexed via keyIndexStart and keyIndexCount.
53
+ */
54
+ private keyEntities;
55
+ /** Maps key string index → start position in keyEntities */
56
+ private keyIndexStart;
57
+ /** Maps key string index → count of entities with that key */
58
+ private keyIndexCount;
59
+ /**
60
+ * Temporary map used during ingestion to collect entity indices per key.
61
+ * Converted to flat arrays during buildIndex() and then cleared.
62
+ */
63
+ private keyEntityIndexBuilder;
64
+ /** Whether buildIndex() has been called */
16
65
  private indexBuilt;
17
- static from(stringTable: StringTable, { tagStart, tagCount, tagKeys, tagVals }: TagsTransferables): Tags;
18
- constructor(stringTable: StringTable);
19
- transferables(): {
20
- tagStart: ArrayBufferLike;
21
- tagCount: ArrayBufferLike;
22
- tagKeys: ArrayBufferLike;
23
- tagVals: ArrayBufferLike;
24
- };
25
- addTags(tags?: OsmTags): void;
26
- addTagKeysAndValues(keys: number[], values: number[]): void;
66
+ /**
67
+ * Create a new Tags index.
68
+ */
69
+ constructor(stringTable: StringTable, transferables?: TagsTransferables);
70
+ /**
71
+ * Add tags to an entity.
72
+ */
73
+ addTags(index: number, tags?: OsmTags): [number[], number[]];
74
+ /**
75
+ * Add tags to an entity using key and value indexes.
76
+ */
77
+ addTagKeysAndValues(index: number, keys: number[], values: number[]): void;
78
+ /**
79
+ * Finalize the tag index.
80
+ *
81
+ * Compacts arrays and builds the reverse key→entity index.
82
+ * Must be called before `hasKey()`.
83
+ */
27
84
  buildIndex(): void;
28
- get isReady(): boolean;
85
+ /**
86
+ * Check if the index is built and ready for use.
87
+ */
88
+ isReady(): boolean;
89
+ /**
90
+ * Get the number of tags for an entity.
91
+ */
29
92
  cardinality(index: number): number;
93
+ /**
94
+ * Get the tags for an entity.
95
+ */
30
96
  getTags(index: number): OsmTags | undefined;
97
+ /**
98
+ * Get tags from key and value indexes.
99
+ */
31
100
  getTagsFromIndices(keys: number[], values: number[]): OsmTags;
101
+ /**
102
+ * Find the index of a tag key.
103
+ */
104
+ find(key: string): number;
105
+ /**
106
+ * Get all entity indexes that have a specific tag key.
107
+ */
108
+ hasKey(keyIndex: number): number[];
109
+ /**
110
+ * Create a unique composite index for a key=value pair.
111
+ * Uses row-major indexing: `key * width + val`.
112
+ */
113
+ kvToIndex(key: number, val: number): number;
114
+ /**
115
+ * Get transferable objects for passing to another thread.
116
+ */
117
+ transferables(): TagsTransferables;
118
+ /**
119
+ * Get the approximate memory requirements for a given number of tags in bytes.
120
+ */
121
+ static getBytesRequired(count: number): number;
122
+ /**
123
+ * Reconstruct a Tags index from transferable objects.
124
+ */
125
+ static fromTransferables(stringTable: StringTable, transferables: TagsTransferables): Tags;
126
+ /**
127
+ * Update a ContentHasher with the tags data.
128
+ * Hashes tag keys and values for each entity.
129
+ */
130
+ updateHash(hasher: ContentHasher): ContentHasher;
32
131
  }
33
132
  //# sourceMappingURL=tags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/tags.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,WAAW,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,KAAK,UAAU,EAAwB,MAAM,gBAAgB,CAAA;AAEtE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,UAAU,CAAA;IACpB,QAAQ,EAAE,UAAU,CAAA;IACpB,OAAO,EAAE,UAAU,CAAA;IACnB,OAAO,EAAE,UAAU,CAAA;CACnB;AAED,qBAAa,IAAI;IAChB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,OAAO,CAAmC;IAElD,OAAO,CAAC,UAAU,CAAQ;IAE1B,MAAM,CAAC,IAAI,CACV,WAAW,EAAE,WAAW,EACxB,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,iBAAiB;gBAWhD,WAAW,EAAE,WAAW;IAQpC,aAAa;;;;;;IASb,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO;IActB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;IAOpD,UAAU;IAQV,IAAI,OAAO,YAEV;IAED,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAuB3C,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO;CAW7D"}
1
+ {"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/tags.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,KAAK,UAAU,EAA+B,MAAM,gBAAgB,CAAA;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IACnE,6DAA6D;IAC7D,QAAQ,EAAE,CAAC,CAAA;IACX,0CAA0C;IAC1C,QAAQ,EAAE,CAAC,CAAA;IACX,iCAAiC;IACjC,OAAO,EAAE,CAAC,CAAA;IACV,mCAAmC;IACnC,OAAO,EAAE,CAAC,CAAA;IAEV,uDAAuD;IACvD,WAAW,EAAE,CAAC,CAAA;IACd,sDAAsD;IACtD,aAAa,EAAE,CAAC,CAAA;IAChB,wDAAwD;IACxD,aAAa,EAAE,CAAC,CAAA;CAChB;AAED;;;;;GAKG;AACH,qBAAa,IAAI;IAChB,iEAAiE;IACjE,OAAO,CAAC,WAAW,CAAiC;IAGpD,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAkB;IAClC,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAiB;IACjC,+CAA+C;IAC/C,OAAO,CAAC,OAAO,CAAkB;IACjC,uEAAuE;IACvE,OAAO,CAAC,OAAO,CAAkB;IAGjC;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAkB;IAErC,4DAA4D;IAC5D,OAAO,CAAC,aAAa,CAAkB;IACvC,8DAA8D;IAC9D,OAAO,CAAC,aAAa,CAAkB;IAEvC;;;OAGG;IACH,OAAO,CAAC,qBAAqB,CAA8B;IAE3D,2CAA2C;IAC3C,OAAO,CAAC,UAAU,CAAQ;IAE1B;;OAEG;gBACS,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,iBAAiB;IAsBvE;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC;IAgB5D;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;IAgBnE;;;;;OAKG;IACH,UAAU;IAoBV;;OAEG;IACH,OAAO;IAIP;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAuB3C;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO;IAY7D;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIzB;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAOlC;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAKlC;;OAEG;IACH,aAAa,IAAI,iBAAiB;IAYlC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAOrC;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACvB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,iBAAiB;IAOjC;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa;CAOhD"}