@mailwoman/resolver-wof-sqlite 2.1.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 (158) hide show
  1. package/README.md +250 -0
  2. package/out/address-point-interpolation.d.ts +48 -0
  3. package/out/address-point-interpolation.d.ts.map +1 -0
  4. package/out/address-point-interpolation.js +164 -0
  5. package/out/address-point-interpolation.js.map +1 -0
  6. package/out/address-point-schema.d.ts +58 -0
  7. package/out/address-point-schema.d.ts.map +1 -0
  8. package/out/address-point-schema.js +67 -0
  9. package/out/address-point-schema.js.map +1 -0
  10. package/out/address-point.d.ts +29 -0
  11. package/out/address-point.d.ts.map +1 -0
  12. package/out/address-point.js +62 -0
  13. package/out/address-point.js.map +1 -0
  14. package/out/ancestry.d.ts +40 -0
  15. package/out/ancestry.d.ts.map +1 -0
  16. package/out/ancestry.js +53 -0
  17. package/out/ancestry.js.map +1 -0
  18. package/out/build-candidate-cli.d.ts +16 -0
  19. package/out/build-candidate-cli.d.ts.map +1 -0
  20. package/out/build-candidate-cli.js +80 -0
  21. package/out/build-candidate-cli.js.map +1 -0
  22. package/out/build-candidate.d.ts +54 -0
  23. package/out/build-candidate.d.ts.map +1 -0
  24. package/out/build-candidate.js +230 -0
  25. package/out/build-candidate.js.map +1 -0
  26. package/out/build-coincident-roles-cli.d.ts +16 -0
  27. package/out/build-coincident-roles-cli.d.ts.map +1 -0
  28. package/out/build-coincident-roles-cli.js +94 -0
  29. package/out/build-coincident-roles-cli.js.map +1 -0
  30. package/out/build-fts-cli.d.ts +23 -0
  31. package/out/build-fts-cli.d.ts.map +1 -0
  32. package/out/build-fts-cli.js +117 -0
  33. package/out/build-fts-cli.js.map +1 -0
  34. package/out/build-slim-cli.d.ts +14 -0
  35. package/out/build-slim-cli.d.ts.map +1 -0
  36. package/out/build-slim-cli.js +130 -0
  37. package/out/build-slim-cli.js.map +1 -0
  38. package/out/build-slim.d.ts +71 -0
  39. package/out/build-slim.d.ts.map +1 -0
  40. package/out/build-slim.js +267 -0
  41. package/out/build-slim.js.map +1 -0
  42. package/out/candidate-lookup.d.ts +43 -0
  43. package/out/candidate-lookup.d.ts.map +1 -0
  44. package/out/candidate-lookup.js +191 -0
  45. package/out/candidate-lookup.js.map +1 -0
  46. package/out/candidate-schema.d.ts +86 -0
  47. package/out/candidate-schema.d.ts.map +1 -0
  48. package/out/candidate-schema.js +109 -0
  49. package/out/candidate-schema.js.map +1 -0
  50. package/out/coincident-roles.d.ts +86 -0
  51. package/out/coincident-roles.d.ts.map +1 -0
  52. package/out/coincident-roles.js +160 -0
  53. package/out/coincident-roles.js.map +1 -0
  54. package/out/convention.d.ts +109 -0
  55. package/out/convention.d.ts.map +1 -0
  56. package/out/convention.js +94 -0
  57. package/out/convention.js.map +1 -0
  58. package/out/fst-autocomplete.d.ts +49 -0
  59. package/out/fst-autocomplete.d.ts.map +1 -0
  60. package/out/fst-autocomplete.js +124 -0
  61. package/out/fst-autocomplete.js.map +1 -0
  62. package/out/fst-builder.d.ts +20 -0
  63. package/out/fst-builder.d.ts.map +1 -0
  64. package/out/fst-builder.js +219 -0
  65. package/out/fst-builder.js.map +1 -0
  66. package/out/fst-deserialize-web.d.ts +16 -0
  67. package/out/fst-deserialize-web.d.ts.map +1 -0
  68. package/out/fst-deserialize-web.js +133 -0
  69. package/out/fst-deserialize-web.js.map +1 -0
  70. package/out/fst-matcher.d.ts +33 -0
  71. package/out/fst-matcher.d.ts.map +1 -0
  72. package/out/fst-matcher.js +117 -0
  73. package/out/fst-matcher.js.map +1 -0
  74. package/out/fst-serialize.d.ts +30 -0
  75. package/out/fst-serialize.d.ts.map +1 -0
  76. package/out/fst-serialize.js +261 -0
  77. package/out/fst-serialize.js.map +1 -0
  78. package/out/fst-types.d.ts +60 -0
  79. package/out/fst-types.d.ts.map +1 -0
  80. package/out/fst-types.js +11 -0
  81. package/out/fst-types.js.map +1 -0
  82. package/out/fts.d.ts +158 -0
  83. package/out/fts.d.ts.map +1 -0
  84. package/out/fts.js +261 -0
  85. package/out/fts.js.map +1 -0
  86. package/out/geo.d.ts +74 -0
  87. package/out/geo.d.ts.map +1 -0
  88. package/out/geo.js +88 -0
  89. package/out/geo.js.map +1 -0
  90. package/out/index.d.ts +27 -0
  91. package/out/index.d.ts.map +1 -0
  92. package/out/index.js +22 -0
  93. package/out/index.js.map +1 -0
  94. package/out/interpolation.d.ts +84 -0
  95. package/out/interpolation.d.ts.map +1 -0
  96. package/out/interpolation.js +150 -0
  97. package/out/interpolation.js.map +1 -0
  98. package/out/lookup.d.ts +156 -0
  99. package/out/lookup.d.ts.map +1 -0
  100. package/out/lookup.js +876 -0
  101. package/out/lookup.js.map +1 -0
  102. package/out/postal-city-alias-lookup.d.ts +50 -0
  103. package/out/postal-city-alias-lookup.d.ts.map +1 -0
  104. package/out/postal-city-alias-lookup.js +66 -0
  105. package/out/postal-city-alias-lookup.js.map +1 -0
  106. package/out/postal-city-alias-schema.d.ts +51 -0
  107. package/out/postal-city-alias-schema.d.ts.map +1 -0
  108. package/out/postal-city-alias-schema.js +47 -0
  109. package/out/postal-city-alias-schema.js.map +1 -0
  110. package/out/postal-city-candidate-schema.d.ts +58 -0
  111. package/out/postal-city-candidate-schema.d.ts.map +1 -0
  112. package/out/postal-city-candidate-schema.js +56 -0
  113. package/out/postal-city-candidate-schema.js.map +1 -0
  114. package/out/postcode-point-lookup.d.ts +38 -0
  115. package/out/postcode-point-lookup.d.ts.map +1 -0
  116. package/out/postcode-point-lookup.js +46 -0
  117. package/out/postcode-point-lookup.js.map +1 -0
  118. package/out/reverse.d.ts +99 -0
  119. package/out/reverse.d.ts.map +1 -0
  120. package/out/reverse.js +290 -0
  121. package/out/reverse.js.map +1 -0
  122. package/out/schema.d.ts +163 -0
  123. package/out/schema.d.ts.map +1 -0
  124. package/out/schema.js +18 -0
  125. package/out/schema.js.map +1 -0
  126. package/out/sharding.d.ts +96 -0
  127. package/out/sharding.d.ts.map +1 -0
  128. package/out/sharding.js +129 -0
  129. package/out/sharding.js.map +1 -0
  130. package/out/sqlite-convention-source.d.ts +29 -0
  131. package/out/sqlite-convention-source.d.ts.map +1 -0
  132. package/out/sqlite-convention-source.js +53 -0
  133. package/out/sqlite-convention-source.js.map +1 -0
  134. package/out/sqlite-utils.d.ts +17 -0
  135. package/out/sqlite-utils.d.ts.map +1 -0
  136. package/out/sqlite-utils.js +24 -0
  137. package/out/sqlite-utils.js.map +1 -0
  138. package/out/street-morphology-fst-builder.d.ts +59 -0
  139. package/out/street-morphology-fst-builder.d.ts.map +1 -0
  140. package/out/street-morphology-fst-builder.js +174 -0
  141. package/out/street-morphology-fst-builder.js.map +1 -0
  142. package/out/street-normalize.d.ts +66 -0
  143. package/out/street-normalize.d.ts.map +1 -0
  144. package/out/street-normalize.js +176 -0
  145. package/out/street-normalize.js.map +1 -0
  146. package/out/street-segment-schema.d.ts +61 -0
  147. package/out/street-segment-schema.d.ts.map +1 -0
  148. package/out/street-segment-schema.js +64 -0
  149. package/out/street-segment-schema.js.map +1 -0
  150. package/out/types.d.ts +137 -0
  151. package/out/types.d.ts.map +1 -0
  152. package/out/types.js +13 -0
  153. package/out/types.js.map +1 -0
  154. package/out/unified-schema.d.ts +25 -0
  155. package/out/unified-schema.d.ts.map +1 -0
  156. package/out/unified-schema.js +142 -0
  157. package/out/unified-schema.js.map +1 -0
  158. package/package.json +54 -0
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * In-memory FST matcher. Built by `fst-builder.ts`, queried at runtime for emission priors and CLI
7
+ * introspection. The structure is a deterministic trie over normalized tokens with PlaceEntry
8
+ * arrays at accepting states.
9
+ */
10
+ export class FstMatcher {
11
+ nodes;
12
+ constructor(nodes) {
13
+ this.nodes = nodes;
14
+ }
15
+ get stateCount() {
16
+ return this.nodes.length;
17
+ }
18
+ get placeCount() {
19
+ let count = 0;
20
+ for (const n of this.nodes)
21
+ count += n.places.length;
22
+ return count;
23
+ }
24
+ walk(tokens) {
25
+ let stateId = 0;
26
+ for (let i = 0; i < tokens.length; i++) {
27
+ const node = this.nodes[stateId];
28
+ if (!node)
29
+ return null;
30
+ const next = node.edges.get(tokens[i]);
31
+ if (next === undefined)
32
+ return null;
33
+ stateId = next;
34
+ }
35
+ const node = this.nodes[stateId];
36
+ return { stateId, accepted: node.places.length > 0, depth: tokens.length };
37
+ }
38
+ walkFrom(prev, token) {
39
+ const node = this.nodes[prev.stateId];
40
+ if (!node)
41
+ return null;
42
+ const next = node.edges.get(token);
43
+ if (next === undefined)
44
+ return null;
45
+ const target = this.nodes[next];
46
+ return { stateId: next, accepted: target.places.length > 0, depth: prev.depth + 1 };
47
+ }
48
+ accepting(stateId) {
49
+ return this.nodes[stateId]?.places ?? [];
50
+ }
51
+ continuations(stateId) {
52
+ const node = this.nodes[stateId];
53
+ if (!node)
54
+ return [];
55
+ const result = [];
56
+ for (const [token, targetId] of node.edges) {
57
+ const target = this.nodes[targetId];
58
+ result.push({
59
+ token,
60
+ targetState: targetId,
61
+ acceptingCount: target.places.length,
62
+ });
63
+ }
64
+ return result;
65
+ }
66
+ query(text) {
67
+ const tokens = normalizeTokens(text);
68
+ const match = this.walk(tokens);
69
+ if (!match) {
70
+ // Walk as far as possible to find where we fall off
71
+ let stateId = 0;
72
+ let depth = 0;
73
+ for (const t of tokens) {
74
+ const node = this.nodes[stateId];
75
+ if (!node)
76
+ break;
77
+ const next = node.edges.get(t);
78
+ if (next === undefined)
79
+ break;
80
+ stateId = next;
81
+ depth++;
82
+ }
83
+ return {
84
+ path: tokens.slice(0, depth),
85
+ stateId,
86
+ accepting: this.accepting(stateId),
87
+ continuations: this.continuations(stateId),
88
+ };
89
+ }
90
+ return {
91
+ path: tokens,
92
+ stateId: match.stateId,
93
+ accepting: this.accepting(match.stateId),
94
+ continuations: this.continuations(match.stateId),
95
+ };
96
+ }
97
+ get nodeCount() {
98
+ return this.nodes.length;
99
+ }
100
+ /** Expose the internal node array for serialization. */
101
+ toNodes() {
102
+ return this.nodes;
103
+ }
104
+ static fromNodes(nodes) {
105
+ return new FstMatcher(nodes);
106
+ }
107
+ }
108
+ /** Normalize text into FST tokens: lowercase, NFKC, strip punctuation, split on whitespace. */
109
+ export function normalizeTokens(text) {
110
+ return text
111
+ .normalize("NFKC")
112
+ .toLowerCase()
113
+ .replace(/[\p{P}\p{S}]/gu, "")
114
+ .split(/\s+/)
115
+ .filter((t) => t.length > 0);
116
+ }
117
+ //# sourceMappingURL=fst-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fst-matcher.js","sourceRoot":"","sources":["../fst-matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Binary serialization for the FST gazetteer. Format:
7
+ *
8
+ * HEADER (32 bytes) magic [u8; 4] "FST\0" version u16 1 flags u16 0 (reserved) stateCount u32
9
+ * edgeCount u32 total edges across all states placeCount u32 total place entries across all
10
+ * states stringCount u32 unique strings in string table stringBytes u32 total bytes of string
11
+ * data _reserved u32
12
+ *
13
+ * STRING TABLE offsets [u32; stringCount + 1] byte offset into data (last = sentinel) data [u8;
14
+ * stringBytes] concatenated UTF-8
15
+ *
16
+ * STATE TABLE [stateCount × 12 bytes] edgeStart u32 index into edge table placeStart u32 index into
17
+ * place table edgeCount u16 placeCount u16
18
+ *
19
+ * EDGE TABLE [edgeCount × 8 bytes] stringIdx u32 index into string table targetState u32
20
+ *
21
+ * PLACE TABLE [placeCount × 56 bytes] wofID u32 placetypeIdx u8 index into PLACETYPE_ORDER chainLen
22
+ * u8 0..8 _pad u16 nameIdx u32 index into string table importance f32 Wikipedia importance [0,1]
23
+ * (V2); was population u32 (V1) lat f32 lon f32 chain [u32; 8] parent chain (unused slots = 0)
24
+ */
25
+ import { FstMatcher } from "./fst-matcher.js";
26
+ import type { FstProvenance } from "./fst-types.js";
27
+ export declare function serializeFst(matcher: FstMatcher, provenance?: FstProvenance): Buffer;
28
+ export declare function deserializeFst(buf: Buffer): FstMatcher;
29
+ export declare function readFstProvenance(buf: Buffer): FstProvenance | undefined;
30
+ //# sourceMappingURL=fst-serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fst-serialize.d.ts","sourceRoot":"","sources":["../fst-serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,gBAAgB,CAAA;AA6B5E,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,MAAM,CAmIpF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAgFtD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAcxE"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Binary serialization for the FST gazetteer. Format:
7
+ *
8
+ * HEADER (32 bytes) magic [u8; 4] "FST\0" version u16 1 flags u16 0 (reserved) stateCount u32
9
+ * edgeCount u32 total edges across all states placeCount u32 total place entries across all
10
+ * states stringCount u32 unique strings in string table stringBytes u32 total bytes of string
11
+ * data _reserved u32
12
+ *
13
+ * STRING TABLE offsets [u32; stringCount + 1] byte offset into data (last = sentinel) data [u8;
14
+ * stringBytes] concatenated UTF-8
15
+ *
16
+ * STATE TABLE [stateCount × 12 bytes] edgeStart u32 index into edge table placeStart u32 index into
17
+ * place table edgeCount u16 placeCount u16
18
+ *
19
+ * EDGE TABLE [edgeCount × 8 bytes] stringIdx u32 index into string table targetState u32
20
+ *
21
+ * PLACE TABLE [placeCount × 56 bytes] wofID u32 placetypeIdx u8 index into PLACETYPE_ORDER chainLen
22
+ * u8 0..8 _pad u16 nameIdx u32 index into string table importance f32 Wikipedia importance [0,1]
23
+ * (V2); was population u32 (V1) lat f32 lon f32 chain [u32; 8] parent chain (unused slots = 0)
24
+ */
25
+ import { FstMatcher } from "./fst-matcher.js";
26
+ const MAGIC = Buffer.from("FST\0", "ascii");
27
+ const VERSION = 4;
28
+ const HEADER_SIZE = 32;
29
+ const STATE_ENTRY_SIZE = 16;
30
+ const EDGE_ENTRY_SIZE = 8;
31
+ const PLACE_ENTRY_SIZE = 56;
32
+ const MAX_CHAIN_LEN = 8;
33
+ const PLACETYPE_ORDER = [
34
+ "country",
35
+ "region",
36
+ "county",
37
+ "locality",
38
+ "localadmin",
39
+ "borough",
40
+ "neighbourhood",
41
+ "postalcode",
42
+ "campus",
43
+ "dependency",
44
+ "street_affix",
45
+ ];
46
+ const placetypeToIdx = new Map();
47
+ for (let i = 0; i < PLACETYPE_ORDER.length; i++) {
48
+ placetypeToIdx.set(PLACETYPE_ORDER[i], i);
49
+ }
50
+ export function serializeFst(matcher, provenance) {
51
+ const nodes = matcher.toNodes();
52
+ // --- String interning ---
53
+ const stringMap = new Map();
54
+ const strings = [];
55
+ function intern(s) {
56
+ let idx = stringMap.get(s);
57
+ if (idx === undefined) {
58
+ idx = strings.length;
59
+ strings.push(s);
60
+ stringMap.set(s, idx);
61
+ }
62
+ return idx;
63
+ }
64
+ for (const node of nodes) {
65
+ for (const token of node.edges.keys())
66
+ intern(token);
67
+ for (const place of node.places)
68
+ intern(place.name);
69
+ }
70
+ const encodedStrings = strings.map((s) => Buffer.from(s, "utf8"));
71
+ const stringBytes = encodedStrings.reduce((sum, b) => sum + b.length, 0);
72
+ // --- Counts ---
73
+ let totalEdges = 0;
74
+ let totalPlaces = 0;
75
+ for (const node of nodes) {
76
+ totalEdges += node.edges.size;
77
+ totalPlaces += node.places.length;
78
+ }
79
+ // --- Allocate ---
80
+ const stringTableSize = (strings.length + 1) * 4 + stringBytes;
81
+ const stateTableSize = nodes.length * STATE_ENTRY_SIZE;
82
+ const edgeTableSize = totalEdges * EDGE_ENTRY_SIZE;
83
+ const placeTableSize = totalPlaces * PLACE_ENTRY_SIZE;
84
+ const provenanceJson = provenance ? Buffer.from(JSON.stringify(provenance), "utf8") : null;
85
+ const provenanceSize = provenanceJson ? 4 + provenanceJson.length : 0;
86
+ const binarySize = HEADER_SIZE + stringTableSize + stateTableSize + edgeTableSize + placeTableSize;
87
+ const totalSize = binarySize + provenanceSize;
88
+ const buf = Buffer.alloc(totalSize);
89
+ let pos = 0;
90
+ // --- Header ---
91
+ MAGIC.copy(buf, pos);
92
+ pos += 4;
93
+ buf.writeUInt16LE(VERSION, pos);
94
+ pos += 2;
95
+ buf.writeUInt16LE(0, pos);
96
+ pos += 2;
97
+ buf.writeUInt32LE(nodes.length, pos);
98
+ pos += 4;
99
+ buf.writeUInt32LE(totalEdges, pos);
100
+ pos += 4;
101
+ buf.writeUInt32LE(totalPlaces, pos);
102
+ pos += 4;
103
+ buf.writeUInt32LE(strings.length, pos);
104
+ pos += 4;
105
+ buf.writeUInt32LE(stringBytes, pos);
106
+ pos += 4;
107
+ buf.writeUInt32LE(provenanceJson ? binarySize : 0, pos);
108
+ pos += 4;
109
+ // --- String table ---
110
+ let strOffset = 0;
111
+ for (let i = 0; i < encodedStrings.length; i++) {
112
+ buf.writeUInt32LE(strOffset, pos);
113
+ pos += 4;
114
+ strOffset += encodedStrings[i].length;
115
+ }
116
+ buf.writeUInt32LE(strOffset, pos);
117
+ pos += 4; // sentinel
118
+ for (const encoded of encodedStrings) {
119
+ encoded.copy(buf, pos);
120
+ pos += encoded.length;
121
+ }
122
+ // --- State, edge, and place tables ---
123
+ const stateTableStart = pos;
124
+ const edgeTableStart = stateTableStart + stateTableSize;
125
+ const placeTableStart = edgeTableStart + edgeTableSize;
126
+ let edgeIdx = 0;
127
+ let placeIdx = 0;
128
+ for (let si = 0; si < nodes.length; si++) {
129
+ const node = nodes[si];
130
+ const sp = stateTableStart + si * STATE_ENTRY_SIZE;
131
+ buf.writeUInt32LE(edgeIdx, sp);
132
+ buf.writeUInt32LE(placeIdx, sp + 4);
133
+ buf.writeUInt32LE(node.edges.size, sp + 8);
134
+ buf.writeUInt32LE(node.places.length, sp + 12);
135
+ for (const [token, target] of node.edges) {
136
+ const ep = edgeTableStart + edgeIdx * EDGE_ENTRY_SIZE;
137
+ buf.writeUInt32LE(intern(token), ep);
138
+ buf.writeUInt32LE(target, ep + 4);
139
+ edgeIdx++;
140
+ }
141
+ for (const place of node.places) {
142
+ const pp = placeTableStart + placeIdx * PLACE_ENTRY_SIZE;
143
+ // Filter out WOF sentinel parent IDs (negative values like -1, -4).
144
+ const validChain = place.parentChain.filter((id) => id > 0);
145
+ const chainLen = Math.min(validChain.length, MAX_CHAIN_LEN);
146
+ buf.writeUInt32LE(place.wofID, pp);
147
+ buf.writeUInt8(placetypeToIdx.get(place.placetype) ?? 0, pp + 4);
148
+ buf.writeUInt8(chainLen, pp + 5);
149
+ buf.writeUInt16LE(0, pp + 6); // pad
150
+ buf.writeUInt32LE(intern(place.name), pp + 8);
151
+ buf.writeFloatLE(place.importance, pp + 12);
152
+ buf.writeFloatLE(place.lat, pp + 16);
153
+ buf.writeFloatLE(place.lon, pp + 20);
154
+ for (let ci = 0; ci < MAX_CHAIN_LEN; ci++) {
155
+ buf.writeUInt32LE(ci < chainLen ? validChain[ci] : 0, pp + 24 + ci * 4);
156
+ }
157
+ placeIdx++;
158
+ }
159
+ }
160
+ if (provenanceJson) {
161
+ const trailerStart = binarySize;
162
+ buf.writeUInt32LE(provenanceJson.length, trailerStart);
163
+ provenanceJson.copy(buf, trailerStart + 4);
164
+ }
165
+ return buf;
166
+ }
167
+ export function deserializeFst(buf) {
168
+ // --- Header ---
169
+ if (buf.length < HEADER_SIZE)
170
+ throw new Error("FST buffer too small for header");
171
+ if (!buf.subarray(0, 4).equals(MAGIC))
172
+ throw new Error("FST magic mismatch");
173
+ const version = buf.readUInt16LE(4);
174
+ if (version < 1 || version > VERSION)
175
+ throw new Error(`FST version ${version} unsupported (expected 1..${VERSION})`);
176
+ const isV2 = version >= 2;
177
+ const stateCount = buf.readUInt32LE(8);
178
+ const edgeCount = buf.readUInt32LE(12);
179
+ const _placeCount = buf.readUInt32LE(16);
180
+ const stringCount = buf.readUInt32LE(20);
181
+ const stringBytes = buf.readUInt32LE(24);
182
+ let pos = HEADER_SIZE;
183
+ // --- String table ---
184
+ const strOffsets = new Uint32Array(stringCount + 1);
185
+ for (let i = 0; i <= stringCount; i++) {
186
+ strOffsets[i] = buf.readUInt32LE(pos);
187
+ pos += 4;
188
+ }
189
+ const strDataStart = pos;
190
+ const strings = new Array(stringCount);
191
+ for (let i = 0; i < stringCount; i++) {
192
+ const start = strDataStart + strOffsets[i];
193
+ const end = strDataStart + strOffsets[i + 1];
194
+ strings[i] = buf.toString("utf8", start, end);
195
+ }
196
+ pos += stringBytes;
197
+ // --- State table ---
198
+ const stateEntrySize = version >= 4 ? 16 : 12;
199
+ const stateTableStart = pos;
200
+ const edgeTableStart = stateTableStart + stateCount * stateEntrySize;
201
+ const placeTableStart = edgeTableStart + edgeCount * EDGE_ENTRY_SIZE;
202
+ const nodes = new Array(stateCount);
203
+ for (let si = 0; si < stateCount; si++) {
204
+ const sp = stateTableStart + si * stateEntrySize;
205
+ const edgeStart = buf.readUInt32LE(sp);
206
+ const placeStart = buf.readUInt32LE(sp + 4);
207
+ const edgeCountForState = version >= 4 ? buf.readUInt32LE(sp + 8) : buf.readUInt16LE(sp + 8);
208
+ const placeCountForState = version >= 4 ? buf.readUInt32LE(sp + 12) : buf.readUInt16LE(sp + 10);
209
+ const edges = new Map();
210
+ for (let ei = 0; ei < edgeCountForState; ei++) {
211
+ const ep = edgeTableStart + (edgeStart + ei) * EDGE_ENTRY_SIZE;
212
+ const stringIdx = buf.readUInt32LE(ep);
213
+ const target = buf.readUInt32LE(ep + 4);
214
+ edges.set(strings[stringIdx], target);
215
+ }
216
+ const places = new Array(placeCountForState);
217
+ for (let pi = 0; pi < placeCountForState; pi++) {
218
+ const pp = placeTableStart + (placeStart + pi) * PLACE_ENTRY_SIZE;
219
+ const chainLen = buf.readUInt8(pp + 5);
220
+ const parentChain = [];
221
+ for (let ci = 0; ci < chainLen; ci++) {
222
+ parentChain.push(buf.readUInt32LE(pp + 24 + ci * 4));
223
+ }
224
+ const rawImportance = isV2
225
+ ? buf.readFloatLE(pp + 12)
226
+ : Math.min(1.0, Math.log2(1 + buf.readUInt32LE(pp + 12) / 1000) / 14);
227
+ places[pi] = {
228
+ wofID: buf.readUInt32LE(pp),
229
+ placetype: PLACETYPE_ORDER[buf.readUInt8(pp + 4)] ?? "locality",
230
+ name: strings[buf.readUInt32LE(pp + 8)],
231
+ importance: rawImportance,
232
+ lat: buf.readFloatLE(pp + 16),
233
+ lon: buf.readFloatLE(pp + 20),
234
+ parentChain,
235
+ };
236
+ }
237
+ nodes[si] = { edges, places };
238
+ }
239
+ return FstMatcher.fromNodes(nodes);
240
+ }
241
+ export function readFstProvenance(buf) {
242
+ if (buf.length < HEADER_SIZE)
243
+ return undefined;
244
+ if (!buf.subarray(0, 4).equals(MAGIC))
245
+ return undefined;
246
+ const version = buf.readUInt16LE(4);
247
+ if (version < 3)
248
+ return undefined;
249
+ const provenanceOffset = buf.readUInt32LE(28);
250
+ if (provenanceOffset === 0 || provenanceOffset >= buf.length)
251
+ return undefined;
252
+ try {
253
+ const jsonLen = buf.readUInt32LE(provenanceOffset);
254
+ const jsonStr = buf.toString("utf8", provenanceOffset + 4, provenanceOffset + 4 + jsonLen);
255
+ return JSON.parse(jsonStr);
256
+ }
257
+ catch {
258
+ return undefined;
259
+ }
260
+ }
261
+ //# sourceMappingURL=fst-serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fst-serialize.js","sourceRoot":"","sources":["../fst-serialize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Types for the FST gazetteer language model. The FST maps token sequences (place names) to
7
+ * (placetype, wof_id, parent_chain) entries — pre-computing the valid interpretations for each
8
+ * prefix of every place name in the gazetteer.
9
+ */
10
+ export interface PlaceEntry {
11
+ wofID: number;
12
+ placetype: PlacetypeId;
13
+ name: string;
14
+ parentChain: number[];
15
+ importance: number;
16
+ lat: number;
17
+ lon: number;
18
+ }
19
+ export type PlacetypeId = "country" | "region" | "county" | "locality" | "localadmin" | "borough" | "neighbourhood" | "postalcode" | "campus" | "dependency" | "street_affix";
20
+ export interface FstMatchResult {
21
+ stateId: number;
22
+ accepted: boolean;
23
+ depth: number;
24
+ }
25
+ export interface FstContinuation {
26
+ token: string;
27
+ targetState: number;
28
+ acceptingCount: number;
29
+ }
30
+ export interface FstQueryResult {
31
+ path: string[];
32
+ stateId: number;
33
+ accepting: PlaceEntry[];
34
+ continuations: FstContinuation[];
35
+ }
36
+ export interface FstProvenance {
37
+ builtAt: string;
38
+ countries: string[];
39
+ stateCount: number;
40
+ placeCount: number;
41
+ edgeCount: number;
42
+ nameInsertions: number;
43
+ importanceMatches: number;
44
+ sourceDb?: string;
45
+ modelCardVersion?: string;
46
+ }
47
+ export interface BuildFstOpts {
48
+ dbPath: string;
49
+ countries?: string[];
50
+ placetypes?: PlacetypeId[];
51
+ languages?: string[];
52
+ onProgress?: (phase: string, detail?: string) => void;
53
+ }
54
+ export interface BuildFstResult {
55
+ stateCount: number;
56
+ placeCount: number;
57
+ edgeCount: number;
58
+ tokenCount: number;
59
+ }
60
+ //# sourceMappingURL=fst-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fst-types.d.ts","sourceRoot":"","sources":["../fst-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,WAAW,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACX;AAED,MAAM,MAAM,WAAW,GACpB,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,SAAS,GACT,eAAe,GACf,YAAY,GACZ,QAAQ,GACR,YAAY,GACZ,cAAc,CAAA;AAEjB,MAAM,WAAW,cAAc;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,UAAU,EAAE,CAAA;IACvB,aAAa,EAAE,eAAe,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,UAAU,CAAC,EAAE,WAAW,EAAE,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,cAAc;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;CAClB"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @copyright Sister Software
3
+ * @license AGPL-3.0
4
+ * @author Teffen Ellis, et al.
5
+ *
6
+ * Types for the FST gazetteer language model. The FST maps token sequences (place names) to
7
+ * (placetype, wof_id, parent_chain) entries — pre-computing the valid interpretations for each
8
+ * prefix of every place name in the gazetteer.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=fst-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fst-types.js","sourceRoot":"","sources":["../fst-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}