@mailwoman/resolver-wof-sqlite 9.0.0 → 9.2.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.
- package/README.md +28 -9
- package/address-point-interpolation.ts +18 -8
- package/address-point-schema.ts +18 -6
- package/address-point.ts +111 -18
- package/ancestry.ts +9 -6
- package/build-candidate.ts +287 -157
- package/build-slim.ts +3 -3
- package/candidate/alias-bags.ts +54 -0
- package/candidate/ancestors-sidecar.ts +206 -0
- package/candidate/country-display-names.ts +79 -0
- package/candidate/name-roles.ts +237 -0
- package/candidate/own-name.ts +146 -0
- package/candidate/place-attrs.ts +44 -0
- package/candidate/shard-fold.ts +137 -0
- package/candidate-ancestors-schema.ts +195 -0
- package/candidate-fts.ts +4 -2
- package/candidate-importance.ts +228 -0
- package/candidate-lookup.ts +564 -174
- package/candidate-schema.ts +60 -3
- package/candidate-scoring.ts +268 -0
- package/capital-schema.ts +90 -0
- package/capitals.ts +148 -0
- package/coincident-roles.ts +69 -10
- package/convention-schema.ts +72 -0
- package/convention.ts +2 -2
- package/coverage-manifest-schema.ts +7 -7
- package/currency-backfill.ts +249 -0
- package/exact-match.ts +104 -0
- package/fst-autocomplete.ts +105 -122
- package/fst-builder.ts +39 -47
- package/fst-deserialize-web.ts +43 -7
- package/fst-freshness.ts +2 -2
- package/fst-serialize.ts +68 -12
- package/fst-types.ts +35 -1
- package/fts-query.ts +1 -1
- package/fts.ts +16 -4
- package/geonames-postal.ts +2 -2
- package/index.ts +26 -14
- package/interpolation.ts +113 -19
- package/lookup.ts +118 -560
- package/name-score.ts +6 -4
- package/out/address-point-interpolation.d.ts.map +1 -1
- package/out/address-point-interpolation.js +13 -7
- package/out/address-point-interpolation.js.map +1 -1
- package/out/address-point-schema.d.ts +16 -6
- package/out/address-point-schema.d.ts.map +1 -1
- package/out/address-point-schema.js.map +1 -1
- package/out/address-point.d.ts.map +1 -1
- package/out/address-point.js +70 -14
- package/out/address-point.js.map +1 -1
- package/out/ancestry.d.ts +2 -2
- package/out/ancestry.d.ts.map +1 -1
- package/out/ancestry.js +5 -6
- package/out/ancestry.js.map +1 -1
- package/out/build-candidate.d.ts +108 -0
- package/out/build-candidate.d.ts.map +1 -1
- package/out/build-candidate.js +151 -120
- package/out/build-candidate.js.map +1 -1
- package/out/build-slim.d.ts +1 -1
- package/out/build-slim.js +3 -3
- package/out/build-slim.js.map +1 -1
- package/out/candidate/alias-bags.d.ts +17 -0
- package/out/candidate/alias-bags.d.ts.map +1 -0
- package/out/candidate/alias-bags.js +39 -0
- package/out/candidate/alias-bags.js.map +1 -0
- package/out/candidate/ancestors-sidecar.d.ts +33 -0
- package/out/candidate/ancestors-sidecar.d.ts.map +1 -0
- package/out/candidate/ancestors-sidecar.js +140 -0
- package/out/candidate/ancestors-sidecar.js.map +1 -0
- package/out/candidate/country-display-names.d.ts +35 -0
- package/out/candidate/country-display-names.d.ts.map +1 -0
- package/out/candidate/country-display-names.js +59 -0
- package/out/candidate/country-display-names.js.map +1 -0
- package/out/candidate/name-roles.d.ts +55 -0
- package/out/candidate/name-roles.d.ts.map +1 -0
- package/out/candidate/name-roles.js +165 -0
- package/out/candidate/name-roles.js.map +1 -0
- package/out/candidate/own-name.d.ts +50 -0
- package/out/candidate/own-name.d.ts.map +1 -0
- package/out/candidate/own-name.js +132 -0
- package/out/candidate/own-name.js.map +1 -0
- package/out/candidate/place-attrs.d.ts +43 -0
- package/out/candidate/place-attrs.d.ts.map +1 -0
- package/out/candidate/place-attrs.js +15 -0
- package/out/candidate/place-attrs.js.map +1 -0
- package/out/candidate/shard-fold.d.ts +31 -0
- package/out/candidate/shard-fold.d.ts.map +1 -0
- package/out/candidate/shard-fold.js +104 -0
- package/out/candidate/shard-fold.js.map +1 -0
- package/out/candidate-ancestors-schema.d.ts +150 -0
- package/out/candidate-ancestors-schema.d.ts.map +1 -0
- package/out/candidate-ancestors-schema.js +123 -0
- package/out/candidate-ancestors-schema.js.map +1 -0
- package/out/candidate-fts.d.ts +4 -2
- package/out/candidate-fts.d.ts.map +1 -1
- package/out/candidate-fts.js +4 -2
- package/out/candidate-fts.js.map +1 -1
- package/out/candidate-importance.d.ts +132 -0
- package/out/candidate-importance.d.ts.map +1 -0
- package/out/candidate-importance.js +174 -0
- package/out/candidate-importance.js.map +1 -0
- package/out/candidate-lookup.d.ts +22 -37
- package/out/candidate-lookup.d.ts.map +1 -1
- package/out/candidate-lookup.js +446 -132
- package/out/candidate-lookup.js.map +1 -1
- package/out/candidate-schema.d.ts +52 -4
- package/out/candidate-schema.d.ts.map +1 -1
- package/out/candidate-schema.js +8 -0
- package/out/candidate-schema.js.map +1 -1
- package/out/candidate-scoring.d.ts +34 -0
- package/out/candidate-scoring.d.ts.map +1 -0
- package/out/candidate-scoring.js +200 -0
- package/out/candidate-scoring.js.map +1 -0
- package/out/capital-schema.d.ts +51 -0
- package/out/capital-schema.d.ts.map +1 -0
- package/out/capital-schema.js +63 -0
- package/out/capital-schema.js.map +1 -0
- package/out/capitals.d.ts +69 -0
- package/out/capitals.d.ts.map +1 -0
- package/out/capitals.js +98 -0
- package/out/capitals.js.map +1 -0
- package/out/coincident-roles.d.ts +7 -0
- package/out/coincident-roles.d.ts.map +1 -1
- package/out/coincident-roles.js +42 -8
- package/out/coincident-roles.js.map +1 -1
- package/out/convention-schema.d.ts +51 -0
- package/out/convention-schema.d.ts.map +1 -0
- package/out/convention-schema.js +34 -0
- package/out/convention-schema.js.map +1 -0
- package/out/convention.d.ts +1 -1
- package/out/convention.js +2 -2
- package/out/coverage-manifest-schema.js +3 -7
- package/out/coverage-manifest-schema.js.map +1 -1
- package/out/currency-backfill.d.ts +46 -0
- package/out/currency-backfill.d.ts.map +1 -0
- package/out/currency-backfill.js +180 -0
- package/out/currency-backfill.js.map +1 -0
- package/out/exact-match.d.ts +25 -0
- package/out/exact-match.d.ts.map +1 -0
- package/out/exact-match.js +89 -0
- package/out/exact-match.js.map +1 -0
- package/out/fst-autocomplete.d.ts +24 -14
- package/out/fst-autocomplete.d.ts.map +1 -1
- package/out/fst-autocomplete.js +84 -100
- package/out/fst-autocomplete.js.map +1 -1
- package/out/fst-builder.d.ts.map +1 -1
- package/out/fst-builder.js +32 -40
- package/out/fst-builder.js.map +1 -1
- package/out/fst-deserialize-web.d.ts.map +1 -1
- package/out/fst-deserialize-web.js +36 -7
- package/out/fst-deserialize-web.js.map +1 -1
- package/out/fst-freshness.d.ts +2 -2
- package/out/fst-freshness.js +2 -2
- package/out/fst-serialize.d.ts +14 -4
- package/out/fst-serialize.d.ts.map +1 -1
- package/out/fst-serialize.js +60 -12
- package/out/fst-serialize.js.map +1 -1
- package/out/fst-types.d.ts +35 -1
- package/out/fst-types.d.ts.map +1 -1
- package/out/fts-query.js +1 -1
- package/out/fts-query.js.map +1 -1
- package/out/fts.d.ts +15 -4
- package/out/fts.d.ts.map +1 -1
- package/out/fts.js +15 -4
- package/out/fts.js.map +1 -1
- package/out/geonames-postal.d.ts +2 -2
- package/out/geonames-postal.js +2 -2
- package/out/index.d.ts +4 -2
- package/out/index.d.ts.map +1 -1
- package/out/index.js +3 -2
- package/out/index.js.map +1 -1
- package/out/interpolation.d.ts +8 -0
- package/out/interpolation.d.ts.map +1 -1
- package/out/interpolation.js +91 -19
- package/out/interpolation.js.map +1 -1
- package/out/lookup.d.ts +4 -5
- package/out/lookup.d.ts.map +1 -1
- package/out/lookup.js +102 -444
- package/out/lookup.js.map +1 -1
- package/out/name-score.d.ts +0 -10
- package/out/name-score.d.ts.map +1 -1
- package/out/name-score.js +6 -4
- package/out/name-score.js.map +1 -1
- package/out/place-importance-schema.d.ts +226 -0
- package/out/place-importance-schema.d.ts.map +1 -0
- package/out/place-importance-schema.js +288 -0
- package/out/place-importance-schema.js.map +1 -0
- package/out/poi-lookup.d.ts +1 -1
- package/out/poi-lookup.d.ts.map +1 -1
- package/out/poi-lookup.js +12 -13
- package/out/poi-lookup.js.map +1 -1
- package/out/poi-schema.d.ts +7 -3
- package/out/poi-schema.d.ts.map +1 -1
- package/out/poi-schema.js.map +1 -1
- package/out/polygon-schema.d.ts +37 -0
- package/out/polygon-schema.d.ts.map +1 -0
- package/out/polygon-schema.js +23 -0
- package/out/polygon-schema.js.map +1 -0
- package/out/postal-city-alias-lookup.d.ts +1 -1
- package/out/postal-city-alias-lookup.js +1 -1
- package/out/postal-city-candidate-schema.d.ts +2 -1
- package/out/postal-city-candidate-schema.d.ts.map +1 -1
- package/out/postal-city-candidate-schema.js.map +1 -1
- package/out/postcode-point-lookup.d.ts +1 -1
- package/out/postcode-point-lookup.js +1 -1
- package/out/primary-preference.d.ts +125 -0
- package/out/primary-preference.d.ts.map +1 -0
- package/out/primary-preference.js +138 -0
- package/out/primary-preference.js.map +1 -0
- package/out/proximity-rerank.d.ts +77 -0
- package/out/proximity-rerank.d.ts.map +1 -0
- package/out/proximity-rerank.js +86 -0
- package/out/proximity-rerank.js.map +1 -0
- package/out/region-keys.d.ts +47 -0
- package/out/region-keys.d.ts.map +1 -0
- package/out/region-keys.js +121 -0
- package/out/region-keys.js.map +1 -0
- package/out/reverse.d.ts.map +1 -1
- package/out/reverse.js +6 -9
- package/out/reverse.js.map +1 -1
- package/out/schema.d.ts +1 -1
- package/out/search-fetch.d.ts +57 -0
- package/out/search-fetch.d.ts.map +1 -0
- package/out/search-fetch.js +183 -0
- package/out/search-fetch.js.map +1 -0
- package/out/sharding.d.ts +3 -3
- package/out/sharding.js +1 -1
- package/out/sqlite-convention-source.d.ts +1 -1
- package/out/sqlite-convention-source.js +1 -1
- package/out/sqlite-utils.d.ts +31 -1
- package/out/sqlite-utils.d.ts.map +1 -1
- package/out/sqlite-utils.js +38 -0
- package/out/sqlite-utils.js.map +1 -1
- package/out/street-centroid-schema.d.ts +7 -2
- package/out/street-centroid-schema.d.ts.map +1 -1
- package/out/street-centroid-schema.js.map +1 -1
- package/out/street-centroid.d.ts.map +1 -1
- package/out/street-centroid.js +7 -7
- package/out/street-centroid.js.map +1 -1
- package/out/street-morphology-fst-builder.d.ts.map +1 -1
- package/out/street-morphology-fst-builder.js +5 -4
- package/out/street-morphology-fst-builder.js.map +1 -1
- package/out/street-normalize.d.ts +83 -9
- package/out/street-normalize.d.ts.map +1 -1
- package/out/street-normalize.js +177 -10
- package/out/street-normalize.js.map +1 -1
- package/out/street-segment-schema.d.ts +6 -2
- package/out/street-segment-schema.d.ts.map +1 -1
- package/out/street-segment-schema.js.map +1 -1
- package/out/types.d.ts +74 -1
- package/out/types.d.ts.map +1 -1
- package/out/unified-schema.d.ts +1 -1
- package/out/unified-schema.js +1 -1
- package/out/uprn-lookup.d.ts +85 -0
- package/out/uprn-lookup.d.ts.map +1 -0
- package/out/uprn-lookup.js +152 -0
- package/out/uprn-lookup.js.map +1 -0
- package/out/uprn-schema.d.ts +93 -0
- package/out/uprn-schema.d.ts.map +1 -0
- package/out/uprn-schema.js +78 -0
- package/out/uprn-schema.js.map +1 -0
- package/out/weights-overlay-linker.d.ts +141 -0
- package/out/weights-overlay-linker.d.ts.map +1 -0
- package/out/weights-overlay-linker.js +259 -0
- package/out/weights-overlay-linker.js.map +1 -0
- package/package.json +296 -16
- package/place-importance-schema.ts +402 -0
- package/poi-lookup.ts +12 -13
- package/poi-schema.ts +8 -3
- package/polygon-schema.ts +47 -0
- package/postal-city-alias-lookup.ts +1 -1
- package/postal-city-candidate-schema.ts +3 -1
- package/postcode-point-lookup.ts +1 -1
- package/primary-preference.ts +207 -0
- package/proximity-rerank.ts +120 -0
- package/region-keys.ts +144 -0
- package/reverse.ts +17 -16
- package/schema.ts +1 -1
- package/search-fetch.ts +256 -0
- package/sharding.ts +3 -3
- package/sqlite-convention-source.ts +1 -1
- package/sqlite-utils.ts +63 -1
- package/street-centroid-schema.ts +8 -2
- package/street-centroid.ts +13 -8
- package/street-morphology-fst-builder.ts +5 -4
- package/street-normalize.ts +254 -24
- package/street-segment-schema.ts +7 -2
- package/types.ts +74 -1
- package/unified-schema.ts +1 -1
- package/uprn-lookup.ts +210 -0
- package/uprn-schema.ts +124 -0
- package/weights-overlay-linker.ts +377 -0
- package/geo.ts +0 -121
- package/out/geo.d.ts +0 -74
- package/out/geo.d.ts.map +0 -1
- package/out/geo.js +0 -71
- package/out/geo.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fst-autocomplete.js","sourceRoot":"","sources":["../fst-autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"fst-autocomplete.js","sourceRoot":"","sources":["../fst-autocomplete.ts"],"names":[],"mappings":"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"}
|
package/out/fst-builder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fst-builder.d.ts","sourceRoot":"","sources":["../fst-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAA2B,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"fst-builder.d.ts","sourceRoot":"","sources":["../fst-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAA2B,MAAM,gBAAgB,CAAA;AAsC1G,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG;IACpD,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,aAAa,CAAA;IACzB,MAAM,EAAE,cAAc,CAAA;CACtB,CA0TA"}
|
package/out/fst-builder.js
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
import { DatabaseSync } from "node:sqlite";
|
|
14
14
|
import { readWOFSourceIdentity } from "./fst-freshness.js";
|
|
15
15
|
import { FSTMatcher, normalizeTokens } from "./fst-matcher.js";
|
|
16
|
+
import { loadImportanceSplit } from "./place-importance-schema.js";
|
|
17
|
+
import { allRows, getRow } from "./sqlite-utils.js";
|
|
16
18
|
const DEFAULT_PLACETYPES = [
|
|
17
19
|
"country",
|
|
18
20
|
"region",
|
|
@@ -44,7 +46,7 @@ export function buildFSTFromWOF(opts) {
|
|
|
44
46
|
WHERE is_current = 1
|
|
45
47
|
AND country IN (${placeholders(countries)})
|
|
46
48
|
AND placetype IN (${placeholders(placetypes)})`);
|
|
47
|
-
const sprRows = sprStmt
|
|
49
|
+
const sprRows = allRows(sprStmt, ...countries, ...placetypes);
|
|
48
50
|
progress("spr", `Loaded ${sprRows.length} places`);
|
|
49
51
|
// Phase 2: Build a lookup for parent chain resolution.
|
|
50
52
|
const sprByID = new Map();
|
|
@@ -62,15 +64,13 @@ export function buildFSTFromWOF(opts) {
|
|
|
62
64
|
const orphanIDs = sprRows.filter((row) => row.parent_id <= 0).map((row) => row.id);
|
|
63
65
|
for (let i = 0; i < orphanIDs.length; i += ANCESTOR_CHUNK) {
|
|
64
66
|
const chunk = orphanIDs.slice(i, i + ANCESTOR_CHUNK);
|
|
65
|
-
const rows = db
|
|
66
|
-
.prepare(`SELECT DISTINCT id, ancestor_id FROM ancestors
|
|
67
|
+
const rows = allRows(db.prepare(`SELECT DISTINCT id, ancestor_id FROM ancestors
|
|
67
68
|
WHERE id IN (${chunk.map(() => "?").join(",")}) AND ancestor_placetype IN ('country', 'region', 'county')
|
|
68
69
|
ORDER BY id, CASE ancestor_placetype
|
|
69
70
|
WHEN 'county' THEN 1
|
|
70
71
|
WHEN 'region' THEN 2
|
|
71
72
|
WHEN 'country' THEN 3
|
|
72
|
-
END`)
|
|
73
|
-
.all(...chunk);
|
|
73
|
+
END`), ...chunk);
|
|
74
74
|
for (const row of rows) {
|
|
75
75
|
let chain = ancestorsByID.get(row.id);
|
|
76
76
|
if (!chain) {
|
|
@@ -100,7 +100,7 @@ export function buildFSTFromWOF(opts) {
|
|
|
100
100
|
chain.push(current);
|
|
101
101
|
let parentRow = sprByID.get(current);
|
|
102
102
|
if (!parentRow) {
|
|
103
|
-
const fetched = parentStmt
|
|
103
|
+
const fetched = getRow(parentStmt, current);
|
|
104
104
|
if (!fetched)
|
|
105
105
|
break;
|
|
106
106
|
parentRow = fetched;
|
|
@@ -115,46 +115,32 @@ export function buildFSTFromWOF(opts) {
|
|
|
115
115
|
}
|
|
116
116
|
return chain;
|
|
117
117
|
}
|
|
118
|
-
// Phase 3: Load
|
|
119
|
-
//
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
catch {
|
|
131
|
-
progress("importance", "No place_importance table — falling back to population");
|
|
132
|
-
try {
|
|
133
|
-
const popStmt = db.prepare("SELECT id, population FROM place_population");
|
|
134
|
-
const popRows = popStmt.all();
|
|
135
|
-
for (const row of popRows) {
|
|
136
|
-
const normalized = row.population > 0 ? Math.min(1, Math.log2(1 + row.population / 1000) / 14) : 0;
|
|
137
|
-
importanceMap.set(row.id, normalized);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
progress("importance", "No place_population either — using 0 for all");
|
|
142
|
-
}
|
|
143
|
-
}
|
|
118
|
+
// Phase 3: Load BOTH scores (ROAD_TO_V9 §2 R1, the two-score split).
|
|
119
|
+
//
|
|
120
|
+
// Referential is ALWAYS population-anchored and never read out of a legacy `place_importance`
|
|
121
|
+
// column, because a legacy row that got a Wikipedia score overwrote whatever population would have
|
|
122
|
+
// said and the two are indistinguishable afterwards. Encyclopedic rides along for consumers and is
|
|
123
|
+
// never handed to the decoder. `loadImportanceSplit` handles all four schema generations; the
|
|
124
|
+
// source it reports is stamped into provenance so an artifact says which one it read.
|
|
125
|
+
progress("importance", "Loading referential + encyclopedic scores");
|
|
126
|
+
const split = loadImportanceSplit(db);
|
|
127
|
+
progress("importance", `${split.referential.size} referential, ${split.encyclopedic.size} encyclopedic (source: ${split.source}` +
|
|
128
|
+
(split.legacyFallbackRows ? `, ${split.legacyFallbackRows} legacy rows attributed to the population pass` : "") +
|
|
129
|
+
")");
|
|
144
130
|
// Phase 4: Load names for matching places.
|
|
145
131
|
progress("names", "Loading name variants");
|
|
146
|
-
const
|
|
132
|
+
const placeIDs = sprRows.map((r) => r.id);
|
|
147
133
|
const namesByPlace = new Map();
|
|
148
134
|
const allLanguages = languages.includes("*");
|
|
149
|
-
for (let i = 0; i <
|
|
150
|
-
const chunk =
|
|
135
|
+
for (let i = 0; i < placeIDs.length; i += 500) {
|
|
136
|
+
const chunk = placeIDs.slice(i, i + 500);
|
|
151
137
|
const idPlaceholders = chunk.map(() => "?").join(",");
|
|
152
138
|
const nameStmt = allLanguages
|
|
153
139
|
? db.prepare(`SELECT id, name, language, privateuse FROM names WHERE id IN (${idPlaceholders})`)
|
|
154
140
|
: db.prepare(`SELECT id, name, language, privateuse FROM names WHERE id IN (${idPlaceholders}) AND language IN (${languages.map(() => "?").join(",")})`);
|
|
155
|
-
const nameRows =
|
|
156
|
-
? nameStmt
|
|
157
|
-
: nameStmt
|
|
141
|
+
const nameRows = allLanguages
|
|
142
|
+
? allRows(nameStmt, ...chunk)
|
|
143
|
+
: allRows(nameStmt, ...chunk, ...languages);
|
|
158
144
|
for (const row of nameRows) {
|
|
159
145
|
const existing = namesByPlace.get(row.id) ?? [];
|
|
160
146
|
if (!existing.includes(row.name)) {
|
|
@@ -219,12 +205,16 @@ export function buildFSTFromWOF(opts) {
|
|
|
219
205
|
let insertCount = 0;
|
|
220
206
|
for (const row of sprRows) {
|
|
221
207
|
const parentChain = resolveParentChain(row.id);
|
|
208
|
+
const encyclopedic = split.encyclopedic.get(row.id);
|
|
222
209
|
const entry = {
|
|
223
210
|
wofID: row.id,
|
|
224
211
|
placetype: row.placetype,
|
|
225
212
|
name: row.name,
|
|
226
213
|
parentChain,
|
|
227
|
-
|
|
214
|
+
referential: split.referential.get(row.id) ?? 0,
|
|
215
|
+
// Spread rather than assigned: a place with no Wikipedia article must carry NO field, not a
|
|
216
|
+
// zero. The serializer's per-place presence bit reads `!== undefined`.
|
|
217
|
+
...(encyclopedic === undefined ? {} : { encyclopedic }),
|
|
228
218
|
lat: row.latitude,
|
|
229
219
|
lon: row.longitude,
|
|
230
220
|
};
|
|
@@ -264,7 +254,9 @@ export function buildFSTFromWOF(opts) {
|
|
|
264
254
|
placeCount: sprRows.length,
|
|
265
255
|
edgeCount,
|
|
266
256
|
nameInsertions: insertCount,
|
|
267
|
-
importanceMatches:
|
|
257
|
+
importanceMatches: split.referential.size,
|
|
258
|
+
encyclopedicMatches: split.encyclopedic.size,
|
|
259
|
+
importanceSource: split.source,
|
|
268
260
|
sourceDB: opts.dbPath,
|
|
269
261
|
sourceDBMD5: source.md5,
|
|
270
262
|
sourceDBBytes: source.bytes,
|
package/out/fst-builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fst-builder.js","sourceRoot":"","sources":["../fst-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fst-builder.js","sourceRoot":"","sources":["../fst-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fst-deserialize-web.d.ts","sourceRoot":"","sources":["../fst-deserialize-web.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"fst-deserialize-web.d.ts","sourceRoot":"","sources":["../fst-deserialize-web.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,gBAAgB,CAAA;AA8E5E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,UAAU,CAyH7E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAqB/F"}
|
|
@@ -30,17 +30,39 @@ const NARROW_STATE_ENTRY_SIZE = 12;
|
|
|
30
30
|
const VERSION_WITH_METADATA = 3;
|
|
31
31
|
const HEADER_SIZE = 32;
|
|
32
32
|
const EDGE_ENTRY_SIZE = 8;
|
|
33
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Format version that split the single `importance` float into `referential` + `encyclopedic` (ROAD_TO_V9 §2 R1),
|
|
35
|
+
* growing the place entry from 56 to 60 bytes. Mirrors `fst-serialize.ts`'s constant of the same name.
|
|
36
|
+
*/
|
|
37
|
+
const VERSION_TWO_SCORE_SPLIT = 5;
|
|
38
|
+
/**
|
|
39
|
+
* Place-entry size in bytes at or above {@link VERSION_TWO_SCORE_SPLIT}.
|
|
40
|
+
*/
|
|
41
|
+
const SPLIT_PLACE_ENTRY_SIZE = 60;
|
|
42
|
+
/**
|
|
43
|
+
* Place-entry size in bytes below {@link VERSION_TWO_SCORE_SPLIT}.
|
|
44
|
+
*/
|
|
45
|
+
const LEGACY_PLACE_ENTRY_SIZE = 56;
|
|
46
|
+
/**
|
|
47
|
+
* Byte offset of the encyclopedic float inside a v5 place entry — immediately after the 8-slot parent chain.
|
|
48
|
+
*/
|
|
49
|
+
const ENCYCLOPEDIC_OFFSET = 56;
|
|
50
|
+
/**
|
|
51
|
+
* `placeFlags` bit 0 (byte `pp+7`, v5+): this place carries an encyclopedic score. Per-place because absence is the
|
|
52
|
+
* common case; see `fst-serialize.ts`.
|
|
53
|
+
*/
|
|
54
|
+
const PLACE_FLAG_HAS_ENCYCLOPEDIC = 1;
|
|
34
55
|
/**
|
|
35
56
|
* "FST\0".
|
|
36
57
|
*/
|
|
37
58
|
const MAGIC_BYTES = [0x46, 0x53, 0x54, 0x00];
|
|
38
59
|
/**
|
|
39
|
-
* Must track the serializer's VERSION (fst-serialize.ts, currently
|
|
60
|
+
* Must track the serializer's VERSION (fst-serialize.ts, currently 5). The v3 provenance + v4 16-byte-state/u32-count
|
|
40
61
|
* layout logic below already matches the Node deserializer; only this gate was left stale at 2, so the browser FST
|
|
41
|
-
* loader rejected every real (v4) artifact.
|
|
62
|
+
* loader rejected every real (v4) artifact. It was left stale again at 4 by the v5 two-score split until this line
|
|
63
|
+
* moved with it — the gate is a SEPARATE number from the layout branches, which is exactly why it keeps drifting.
|
|
42
64
|
*/
|
|
43
|
-
const MAX_VERSION =
|
|
65
|
+
const MAX_VERSION = 5;
|
|
44
66
|
const PLACETYPE_ORDER = [
|
|
45
67
|
"country",
|
|
46
68
|
"region",
|
|
@@ -71,6 +93,7 @@ export function deserializeFSTWeb(input) {
|
|
|
71
93
|
throw new Error(`FST version ${version} unsupported (expected 1..${MAX_VERSION})`);
|
|
72
94
|
}
|
|
73
95
|
const isV2 = version >= 2;
|
|
96
|
+
const isSplit = version >= VERSION_TWO_SCORE_SPLIT;
|
|
74
97
|
// flags bit0 (survey #4, mirrors fst-serialize.ts): place rows carry surface-ambiguity data.
|
|
75
98
|
const hasAmbiguity = (view.getUint16(6, true) & 1) === 1;
|
|
76
99
|
const stateCount = view.getUint32(8, true);
|
|
@@ -95,6 +118,8 @@ export function deserializeFSTWeb(input) {
|
|
|
95
118
|
pos += stringBytes;
|
|
96
119
|
// --- State table ---
|
|
97
120
|
const stateEntrySize = version >= VERSION_WIDE_STATE_COUNTERS ? WIDE_STATE_ENTRY_SIZE : NARROW_STATE_ENTRY_SIZE;
|
|
121
|
+
// v5 grew the place entry by the encyclopedic float; v4-and-below files are read at the old stride.
|
|
122
|
+
const placeEntrySize = isSplit ? SPLIT_PLACE_ENTRY_SIZE : LEGACY_PLACE_ENTRY_SIZE;
|
|
98
123
|
const stateTableStart = pos;
|
|
99
124
|
const edgeTableStart = stateTableStart + stateCount * stateEntrySize;
|
|
100
125
|
const placeTableStart = edgeTableStart + edgeCount * EDGE_ENTRY_SIZE;
|
|
@@ -114,24 +139,28 @@ export function deserializeFSTWeb(input) {
|
|
|
114
139
|
}
|
|
115
140
|
const places = new Array(placeCountForState);
|
|
116
141
|
for (let pi = 0; pi < placeCountForState; pi++) {
|
|
117
|
-
const pp = placeTableStart + (placeStart + pi) *
|
|
142
|
+
const pp = placeTableStart + (placeStart + pi) * placeEntrySize;
|
|
118
143
|
const chainLen = view.getUint8(pp + 5);
|
|
119
144
|
const parentChain = [];
|
|
120
145
|
for (let ci = 0; ci < chainLen; ci++) {
|
|
121
146
|
parentChain.push(view.getUint32(pp + 24 + ci * 4, true));
|
|
122
147
|
}
|
|
123
|
-
|
|
148
|
+
// v1 stored a raw population u32 here; v2-v4 the conflated `importance` float; v5 the
|
|
149
|
+
// referential score. See the Node deserializer for why a v1 value is genuinely referential.
|
|
150
|
+
const referential = isV2
|
|
124
151
|
? view.getFloat32(pp + 12, true)
|
|
125
152
|
: Math.min(1, Math.log2(1 + view.getUint32(pp + 12, true) / 1000) / 14);
|
|
153
|
+
const hasEncyclopedic = isSplit && (view.getUint8(pp + 7) & PLACE_FLAG_HAS_ENCYCLOPEDIC) === PLACE_FLAG_HAS_ENCYCLOPEDIC;
|
|
126
154
|
places[pi] = {
|
|
127
155
|
wofID: view.getUint32(pp, true),
|
|
128
156
|
placetype: PLACETYPE_ORDER[view.getUint8(pp + 4)] ?? "locality",
|
|
129
157
|
name: strings[view.getUint32(pp + 8, true)],
|
|
130
|
-
|
|
158
|
+
referential,
|
|
131
159
|
lat: view.getFloat32(pp + 16, true),
|
|
132
160
|
lon: view.getFloat32(pp + 20, true),
|
|
133
161
|
parentChain,
|
|
134
162
|
...(hasAmbiguity ? { crossCountryBranches: view.getUint8(pp + 6) } : {}),
|
|
163
|
+
...(hasEncyclopedic ? { encyclopedic: view.getFloat32(pp + ENCYCLOPEDIC_OFFSET, true) } : {}),
|
|
135
164
|
};
|
|
136
165
|
}
|
|
137
166
|
nodes[si] = { edges, places };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fst-deserialize-web.js","sourceRoot":"","sources":["../fst-deserialize-web.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C;;;GAGG;AACH,MAAM,2BAA2B,GAAG,CAAC,CAAA;AAErC;;GAEG;AACH,MAAM,qBAAqB,GAAG,EAAE,CAAA;AAEhC;;GAEG;AACH,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAElC;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAA;AAE/B,MAAM,WAAW,GAAG,EAAE,CAAA;AACtB,MAAM,eAAe,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"fst-deserialize-web.js","sourceRoot":"","sources":["../fst-deserialize-web.ts"],"names":[],"mappings":"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"}
|
package/out/fst-freshness.d.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* `FSTProvenance` already recorded `sourceDB` — the source's PATH, which is exactly the field that
|
|
16
16
|
* cannot change when the bytes behind it do. So the stamp gains the source's IDENTITY (md5 + byte
|
|
17
17
|
* size) and this module compares it. The shape deliberately mirrors
|
|
18
|
-
*
|
|
18
|
+
* `@mailwoman/resolver-wof-sqlite/weights-overlay-linker`'s `pairIndexStaleReason`: one function returning a reason
|
|
19
19
|
* string or `undefined`, so a fact added to the stamp cannot be checked by some callers and not
|
|
20
20
|
* others — which is how three of the four base linkers ended up unable to notice a PIX1 schema bump.
|
|
21
21
|
*
|
|
@@ -87,7 +87,7 @@ export declare function peekFSTStampFields(path: string): FSTStampFields | undef
|
|
|
87
87
|
*
|
|
88
88
|
* The async `md5File` in `@mailwoman/core/utils` is the one to reach for anywhere else. This exists because the FST
|
|
89
89
|
* builder and its whole call chain are synchronous by design (`buildFSTFromWOF` → `buildLocaleFSTs`), and making them
|
|
90
|
-
* async to stamp a checksum would cascade through
|
|
90
|
+
* async to stamp a checksum would cascade through command callers and tests for one hash. It reads in
|
|
91
91
|
* {@link MD5_CHUNK_BYTES} chunks rather than `readFileSync` — the source is a multi-gigabyte database.
|
|
92
92
|
*/
|
|
93
93
|
export declare function md5FileSync(path: string): string;
|
package/out/fst-freshness.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* `FSTProvenance` already recorded `sourceDB` — the source's PATH, which is exactly the field that
|
|
16
16
|
* cannot change when the bytes behind it do. So the stamp gains the source's IDENTITY (md5 + byte
|
|
17
17
|
* size) and this module compares it. The shape deliberately mirrors
|
|
18
|
-
*
|
|
18
|
+
* `@mailwoman/resolver-wof-sqlite/weights-overlay-linker`'s `pairIndexStaleReason`: one function returning a reason
|
|
19
19
|
* string or `undefined`, so a fact added to the stamp cannot be checked by some callers and not
|
|
20
20
|
* others — which is how three of the four base linkers ended up unable to notice a PIX1 schema bump.
|
|
21
21
|
*
|
|
@@ -107,7 +107,7 @@ export function peekFSTStampFields(path) {
|
|
|
107
107
|
*
|
|
108
108
|
* The async `md5File` in `@mailwoman/core/utils` is the one to reach for anywhere else. This exists because the FST
|
|
109
109
|
* builder and its whole call chain are synchronous by design (`buildFSTFromWOF` → `buildLocaleFSTs`), and making them
|
|
110
|
-
* async to stamp a checksum would cascade through
|
|
110
|
+
* async to stamp a checksum would cascade through command callers and tests for one hash. It reads in
|
|
111
111
|
* {@link MD5_CHUNK_BYTES} chunks rather than `readFileSync` — the source is a multi-gigabyte database.
|
|
112
112
|
*/
|
|
113
113
|
export function md5FileSync(path) {
|
package/out/fst-serialize.d.ts
CHANGED
|
@@ -18,9 +18,19 @@
|
|
|
18
18
|
*
|
|
19
19
|
* EDGE TABLE [edgeCount × 8 bytes] stringIdx u32 index into string table targetState u32
|
|
20
20
|
*
|
|
21
|
-
* PLACE TABLE [placeCount × 56
|
|
22
|
-
* u8 0..8
|
|
23
|
-
* (
|
|
21
|
+
* PLACE TABLE [placeCount × 60 bytes at V5, 56 below] wofID u32 placetypeIdx u8 index into
|
|
22
|
+
* PLACETYPE_ORDER chainLen u8 0..8 crossCountryBranches u8 (header flags bit0 gates the read)
|
|
23
|
+
* placeFlags u8 (V5; bit0 = encyclopedic present) nameIdx u32 index into string table referential f32
|
|
24
|
+
* population-anchored likelihood [0,1] — was the conflated `importance` (V2–V4), was population u32
|
|
25
|
+
* (V1) lat f32 lon f32 chain [u32; 8] parent chain (unused slots = 0) encyclopedic f32 (V5 only;
|
|
26
|
+
* read only when placeFlags bit0 is set)
|
|
27
|
+
*
|
|
28
|
+
* THE V5 BUMP IS THE TWO-SCORE SPLIT (ROAD_TO_V9 §2 R1). Through V4 one float carried whichever score
|
|
29
|
+
* the source database held, and nothing in the bytes said which — so a reader could not tell a
|
|
30
|
+
* population proxy from a Wikipedia score. V5 names the ranking score `referential` and gives the
|
|
31
|
+
* encyclopedic signal its own slot plus a PER-PLACE presence bit, because most places have no
|
|
32
|
+
* Wikipedia article and a 0 there would be a fact nobody recorded. `fst-freshness.ts` reports every
|
|
33
|
+
* V4-and-below artifact as format-stale for exactly this reason: its single float is unattributable.
|
|
24
34
|
*/
|
|
25
35
|
import { FSTMatcher } from "./fst-matcher.ts";
|
|
26
36
|
import type { FSTProvenance } from "./fst-types.ts";
|
|
@@ -29,7 +39,7 @@ import type { FSTProvenance } from "./fst-types.ts";
|
|
|
29
39
|
* re-typing the number. Mirrors `REQUIRED_PAIR_INDEX_SCHEMA`'s role for PIX1: one constant, so a version bump cannot be
|
|
30
40
|
* noticed by some checkers and not others. See `fst-freshness.ts`.
|
|
31
41
|
*/
|
|
32
|
-
export declare const FST_FORMAT_VERSION =
|
|
42
|
+
export declare const FST_FORMAT_VERSION = 5;
|
|
33
43
|
export declare function serializeFST(matcher: FSTMatcher, provenance?: FSTProvenance): Buffer;
|
|
34
44
|
export declare function deserializeFST(buf: Buffer): FSTMatcher;
|
|
35
45
|
export declare function readFSTProvenance(buf: Buffer): FSTProvenance | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fst-serialize.d.ts","sourceRoot":"","sources":["../fst-serialize.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"fst-serialize.d.ts","sourceRoot":"","sources":["../fst-serialize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAKH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,gBAAgB,CAAA;AA6D5E;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,IAAU,CAAA;AAoDzC,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,MAAM,CA6JpF;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAgHtD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAmBxE"}
|
package/out/fst-serialize.js
CHANGED
|
@@ -18,9 +18,19 @@
|
|
|
18
18
|
*
|
|
19
19
|
* EDGE TABLE [edgeCount × 8 bytes] stringIdx u32 index into string table targetState u32
|
|
20
20
|
*
|
|
21
|
-
* PLACE TABLE [placeCount × 56
|
|
22
|
-
* u8 0..8
|
|
23
|
-
* (
|
|
21
|
+
* PLACE TABLE [placeCount × 60 bytes at V5, 56 below] wofID u32 placetypeIdx u8 index into
|
|
22
|
+
* PLACETYPE_ORDER chainLen u8 0..8 crossCountryBranches u8 (header flags bit0 gates the read)
|
|
23
|
+
* placeFlags u8 (V5; bit0 = encyclopedic present) nameIdx u32 index into string table referential f32
|
|
24
|
+
* population-anchored likelihood [0,1] — was the conflated `importance` (V2–V4), was population u32
|
|
25
|
+
* (V1) lat f32 lon f32 chain [u32; 8] parent chain (unused slots = 0) encyclopedic f32 (V5 only;
|
|
26
|
+
* read only when placeFlags bit0 is set)
|
|
27
|
+
*
|
|
28
|
+
* THE V5 BUMP IS THE TWO-SCORE SPLIT (ROAD_TO_V9 §2 R1). Through V4 one float carried whichever score
|
|
29
|
+
* the source database held, and nothing in the bytes said which — so a reader could not tell a
|
|
30
|
+
* population proxy from a Wikipedia score. V5 names the ranking score `referential` and gives the
|
|
31
|
+
* encyclopedic signal its own slot plus a PER-PLACE presence bit, because most places have no
|
|
32
|
+
* Wikipedia article and a 0 there would be a fact nobody recorded. `fst-freshness.ts` reports every
|
|
33
|
+
* V4-and-below artifact as format-stale for exactly this reason: its single float is unattributable.
|
|
24
34
|
*/
|
|
25
35
|
import { tryParsingJSON } from "@mailwoman/core/objects";
|
|
26
36
|
import { FSTMatcher } from "./fst-matcher.js";
|
|
@@ -41,6 +51,29 @@ const NARROW_STATE_ENTRY_SIZE = 12;
|
|
|
41
51
|
* First format version carrying the trailing metadata block; older files simply have none.
|
|
42
52
|
*/
|
|
43
53
|
const VERSION_WITH_METADATA = 3;
|
|
54
|
+
/**
|
|
55
|
+
* Format version that split the single `importance` float into `referential` + `encyclopedic`, growing the place entry
|
|
56
|
+
* from 56 to 60 bytes and claiming the previously-reserved `pp+7` byte as {@link PLACE_FLAG_HAS_ENCYCLOPEDIC}.
|
|
57
|
+
*/
|
|
58
|
+
const VERSION_TWO_SCORE_SPLIT = 5;
|
|
59
|
+
/**
|
|
60
|
+
* Place-entry size in bytes at or above {@link VERSION_TWO_SCORE_SPLIT}.
|
|
61
|
+
*/
|
|
62
|
+
const SPLIT_PLACE_ENTRY_SIZE = 60;
|
|
63
|
+
/**
|
|
64
|
+
* Place-entry size in bytes below {@link VERSION_TWO_SCORE_SPLIT}.
|
|
65
|
+
*/
|
|
66
|
+
const LEGACY_PLACE_ENTRY_SIZE = 56;
|
|
67
|
+
/**
|
|
68
|
+
* Byte offset of the encyclopedic float inside a v5 place entry — immediately after the 8-slot parent chain.
|
|
69
|
+
*/
|
|
70
|
+
const ENCYCLOPEDIC_OFFSET = 56;
|
|
71
|
+
/**
|
|
72
|
+
* `placeFlags` bit 0 (byte `pp+7`, v5+): this place carries an encyclopedic score. Per-PLACE rather than per-file
|
|
73
|
+
* because absence is the common case — roughly 89% of the 2026-08-05 gazetteer has no Wikipedia article — and a
|
|
74
|
+
* file-level flag would force every one of those rows to claim a 0 it never had.
|
|
75
|
+
*/
|
|
76
|
+
const PLACE_FLAG_HAS_ENCYCLOPEDIC = 1;
|
|
44
77
|
/**
|
|
45
78
|
* File magic. A reader rejects anything not starting with these four bytes before parsing further.
|
|
46
79
|
*/
|
|
@@ -48,7 +81,7 @@ const MAGIC = Buffer.from("FST\0", "ascii");
|
|
|
48
81
|
/**
|
|
49
82
|
* Format version this serializer emits. See {@link VERSION_WIDE_STATE_COUNTERS} for what each bump changed.
|
|
50
83
|
*/
|
|
51
|
-
const VERSION =
|
|
84
|
+
const VERSION = 5;
|
|
52
85
|
/**
|
|
53
86
|
* The format version this tree WRITES, published so a freshness guard can call an older artifact format-stale without
|
|
54
87
|
* re-typing the number. Mirrors `REQUIRED_PAIR_INDEX_SCHEMA`'s role for PIX1: one constant, so a version bump cannot be
|
|
@@ -68,9 +101,9 @@ const STATE_ENTRY_SIZE = 16;
|
|
|
68
101
|
*/
|
|
69
102
|
const EDGE_ENTRY_SIZE = 8;
|
|
70
103
|
/**
|
|
71
|
-
* Place-table entry: the place id, its placetype, coordinates, and
|
|
104
|
+
* Place-table entry at the version this tree WRITES: the place id, its placetype, coordinates, and both scores.
|
|
72
105
|
*/
|
|
73
|
-
const PLACE_ENTRY_SIZE =
|
|
106
|
+
const PLACE_ENTRY_SIZE = SPLIT_PLACE_ENTRY_SIZE;
|
|
74
107
|
/**
|
|
75
108
|
* Longest ancestry chain stored per place. Deeper hierarchies are truncated at the leaf end, since the specific end of
|
|
76
109
|
* the chain is what disambiguates and the country end is recoverable anyway.
|
|
@@ -203,16 +236,20 @@ export function serializeFST(matcher, provenance) {
|
|
|
203
236
|
buf.writeUInt32LE(place.wofID, pp);
|
|
204
237
|
buf.writeUInt8(placetypeToIdx.get(place.placetype) ?? 0, pp + 4);
|
|
205
238
|
buf.writeUInt8(chainLen, pp + 5);
|
|
206
|
-
// Former _pad: byte 0 = crossCountryBranches (header flags bit0 gates the read), byte 1
|
|
239
|
+
// Former _pad: byte 0 = crossCountryBranches (header flags bit0 gates the read), byte 1 = v5 placeFlags.
|
|
207
240
|
buf.writeUInt8(hasAmbiguity ? Math.min(place.crossCountryBranches ?? 0, 255) : 0, pp + 6);
|
|
208
|
-
|
|
241
|
+
// An absent encyclopedic score writes flag 0 AND a 0.0 float. The float is unread in that
|
|
242
|
+
// state, so absence can never surface as a score — the meaning-of-zero rule, in bytes.
|
|
243
|
+
const hasEncyclopedic = place.encyclopedic !== undefined;
|
|
244
|
+
buf.writeUInt8(hasEncyclopedic ? PLACE_FLAG_HAS_ENCYCLOPEDIC : 0, pp + 7);
|
|
209
245
|
buf.writeUInt32LE(intern(place.name), pp + 8);
|
|
210
|
-
buf.writeFloatLE(place.
|
|
246
|
+
buf.writeFloatLE(place.referential, pp + 12);
|
|
211
247
|
buf.writeFloatLE(place.lat, pp + 16);
|
|
212
248
|
buf.writeFloatLE(place.lon, pp + 20);
|
|
213
249
|
for (let ci = 0; ci < MAX_CHAIN_LEN; ci++) {
|
|
214
250
|
buf.writeUInt32LE(ci < chainLen ? validChain[ci] : 0, pp + 24 + ci * 4);
|
|
215
251
|
}
|
|
252
|
+
buf.writeFloatLE(hasEncyclopedic ? place.encyclopedic : 0, pp + ENCYCLOPEDIC_OFFSET);
|
|
216
253
|
placeIdx++;
|
|
217
254
|
}
|
|
218
255
|
}
|
|
@@ -233,6 +270,7 @@ export function deserializeFST(buf) {
|
|
|
233
270
|
if (version < 1 || version > VERSION)
|
|
234
271
|
throw new Error(`FST version ${version} unsupported (expected 1..${VERSION})`);
|
|
235
272
|
const isV2 = version >= 2;
|
|
273
|
+
const isSplit = version >= VERSION_TWO_SCORE_SPLIT;
|
|
236
274
|
// flags bit0 (survey #4): place rows carry surface-ambiguity data in the former _pad byte.
|
|
237
275
|
const hasAmbiguity = (buf.readUInt16LE(6) & 1) === 1;
|
|
238
276
|
const stateCount = buf.readUInt32LE(8);
|
|
@@ -257,6 +295,8 @@ export function deserializeFST(buf) {
|
|
|
257
295
|
pos += stringBytes;
|
|
258
296
|
// --- State table ---
|
|
259
297
|
const stateEntrySize = version >= VERSION_WIDE_STATE_COUNTERS ? WIDE_STATE_ENTRY_SIZE : NARROW_STATE_ENTRY_SIZE;
|
|
298
|
+
// v5 grew the place entry by the encyclopedic float; v4-and-below files are read at the old stride.
|
|
299
|
+
const placeEntrySize = version >= VERSION_TWO_SCORE_SPLIT ? SPLIT_PLACE_ENTRY_SIZE : LEGACY_PLACE_ENTRY_SIZE;
|
|
260
300
|
const stateTableStart = pos;
|
|
261
301
|
const edgeTableStart = stateTableStart + stateCount * stateEntrySize;
|
|
262
302
|
const placeTableStart = edgeTableStart + edgeCount * EDGE_ENTRY_SIZE;
|
|
@@ -276,25 +316,33 @@ export function deserializeFST(buf) {
|
|
|
276
316
|
}
|
|
277
317
|
const places = new Array(placeCountForState);
|
|
278
318
|
for (let pi = 0; pi < placeCountForState; pi++) {
|
|
279
|
-
const pp = placeTableStart + (placeStart + pi) *
|
|
319
|
+
const pp = placeTableStart + (placeStart + pi) * placeEntrySize;
|
|
280
320
|
const chainLen = buf.readUInt8(pp + 5);
|
|
281
321
|
const parentChain = [];
|
|
282
322
|
for (let ci = 0; ci < chainLen; ci++) {
|
|
283
323
|
parentChain.push(buf.readUInt32LE(pp + 24 + ci * 4));
|
|
284
324
|
}
|
|
285
|
-
|
|
325
|
+
// v1 stored a raw population u32 here; v2–v4 the conflated `importance` float; v5 the
|
|
326
|
+
// referential score. A v1 file's population is mapped through the SAME curve
|
|
327
|
+
// `referentialFromPopulation` uses, so its value is genuinely referential — the only
|
|
328
|
+
// generation of this format for which that can be said without reading the source database.
|
|
329
|
+
const referential = isV2
|
|
286
330
|
? buf.readFloatLE(pp + 12)
|
|
287
331
|
: Math.min(1, Math.log2(1 + buf.readUInt32LE(pp + 12) / 1000) / 14);
|
|
332
|
+
// Per-place presence bit (v5+). A v4-and-below file has no encyclopedic channel at all, so
|
|
333
|
+
// the field stays undefined rather than reading the reserved byte as a flag.
|
|
334
|
+
const hasEncyclopedic = isSplit && (buf.readUInt8(pp + 7) & PLACE_FLAG_HAS_ENCYCLOPEDIC) === PLACE_FLAG_HAS_ENCYCLOPEDIC;
|
|
288
335
|
places[pi] = {
|
|
289
336
|
wofID: buf.readUInt32LE(pp),
|
|
290
337
|
placetype: PLACETYPE_ORDER[buf.readUInt8(pp + 4)] ?? "locality",
|
|
291
338
|
name: strings[buf.readUInt32LE(pp + 8)],
|
|
292
|
-
|
|
339
|
+
referential,
|
|
293
340
|
lat: buf.readFloatLE(pp + 16),
|
|
294
341
|
lon: buf.readFloatLE(pp + 20),
|
|
295
342
|
parentChain,
|
|
296
343
|
// Header flags bit0 gates the read (survey #4): pre-ambiguity artifacts expose undefined.
|
|
297
344
|
...(hasAmbiguity ? { crossCountryBranches: buf.readUInt8(pp + 6) } : {}),
|
|
345
|
+
...(hasEncyclopedic ? { encyclopedic: buf.readFloatLE(pp + ENCYCLOPEDIC_OFFSET) } : {}),
|
|
298
346
|
};
|
|
299
347
|
}
|
|
300
348
|
nodes[si] = { edges, places };
|