@mailwoman/resolver-wof-sqlite 8.1.0 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/address-point-interpolation.ts +9 -3
- package/address-point-schema.ts +32 -10
- package/address-point.ts +3 -0
- package/ancestry-backfill.ts +18 -5
- package/ancestry.ts +7 -2
- package/build-candidate.ts +29 -6
- package/build-slim.ts +40 -11
- package/candidate-fts.ts +1 -0
- package/candidate-lookup.ts +36 -14
- package/candidate-schema.ts +35 -11
- package/coincident-roles.ts +28 -6
- package/convention.ts +3 -1
- package/coverage-manifest-schema.ts +49 -16
- package/fst-autocomplete.ts +15 -9
- package/fst-builder.ts +29 -5
- package/fst-deserialize-web.ts +46 -9
- package/fst-matcher.ts +12 -5
- package/fst-serialize.ts +83 -9
- package/fst-types.ts +26 -3
- package/fts-query.ts +84 -0
- package/fts.ts +35 -9
- package/geo.ts +9 -3
- package/geonames-aliases.ts +116 -79
- package/geonames-postal.ts +25 -5
- package/index.ts +10 -0
- package/interpolation.ts +33 -55
- package/lookup.ts +103 -292
- package/name-score.ts +76 -0
- package/out/address-point-interpolation.d.ts.map +1 -1
- package/out/address-point-interpolation.js +4 -2
- package/out/address-point-interpolation.js.map +1 -1
- package/out/address-point-schema.d.ts +30 -10
- package/out/address-point-schema.d.ts.map +1 -1
- package/out/address-point-schema.js +6 -2
- package/out/address-point-schema.js.map +1 -1
- package/out/address-point.d.ts.map +1 -1
- package/out/address-point.js.map +1 -1
- package/out/ancestry-backfill.d.ts +6 -2
- package/out/ancestry-backfill.d.ts.map +1 -1
- package/out/ancestry-backfill.js +7 -3
- package/out/ancestry-backfill.js.map +1 -1
- package/out/ancestry.d.ts +6 -2
- package/out/ancestry.d.ts.map +1 -1
- package/out/ancestry.js +3 -1
- package/out/ancestry.js.map +1 -1
- package/out/build-candidate.d.ts +9 -3
- package/out/build-candidate.d.ts.map +1 -1
- package/out/build-candidate.js +5 -3
- package/out/build-candidate.js.map +1 -1
- package/out/build-slim.d.ts +15 -5
- package/out/build-slim.d.ts.map +1 -1
- package/out/build-slim.js +11 -5
- package/out/build-slim.js.map +1 -1
- package/out/candidate-fts.d.ts.map +1 -1
- package/out/candidate-fts.js.map +1 -1
- package/out/candidate-lookup.d.ts +9 -3
- package/out/candidate-lookup.d.ts.map +1 -1
- package/out/candidate-lookup.js +16 -11
- package/out/candidate-lookup.js.map +1 -1
- package/out/candidate-schema.d.ts +33 -11
- package/out/candidate-schema.d.ts.map +1 -1
- package/out/candidate-schema.js.map +1 -1
- package/out/coincident-roles.d.ts +16 -4
- package/out/coincident-roles.d.ts.map +1 -1
- package/out/coincident-roles.js +9 -3
- package/out/coincident-roles.js.map +1 -1
- package/out/convention.d.ts +3 -1
- package/out/convention.d.ts.map +1 -1
- package/out/convention.js.map +1 -1
- package/out/coverage-manifest-schema.d.ts +45 -14
- package/out/coverage-manifest-schema.d.ts.map +1 -1
- package/out/coverage-manifest-schema.js +14 -5
- package/out/coverage-manifest-schema.js.map +1 -1
- package/out/fst-autocomplete.d.ts +1 -1
- package/out/fst-autocomplete.d.ts.map +1 -1
- package/out/fst-autocomplete.js +11 -9
- package/out/fst-autocomplete.js.map +1 -1
- package/out/fst-builder.d.ts.map +1 -1
- package/out/fst-builder.js +15 -5
- package/out/fst-builder.js.map +1 -1
- package/out/fst-deserialize-web.d.ts.map +1 -1
- package/out/fst-deserialize-web.js +34 -9
- package/out/fst-deserialize-web.js.map +1 -1
- package/out/fst-matcher.d.ts +6 -2
- package/out/fst-matcher.d.ts.map +1 -1
- package/out/fst-matcher.js +9 -5
- package/out/fst-matcher.js.map +1 -1
- package/out/fst-serialize.d.ts.map +1 -1
- package/out/fst-serialize.js +62 -9
- package/out/fst-serialize.js.map +1 -1
- package/out/fst-types.d.ts +26 -3
- package/out/fst-types.d.ts.map +1 -1
- package/out/fts-query.d.ts +41 -0
- package/out/fts-query.d.ts.map +1 -0
- package/out/fts-query.js +75 -0
- package/out/fts-query.js.map +1 -0
- package/out/fts.d.ts +21 -7
- package/out/fts.d.ts.map +1 -1
- package/out/fts.js +10 -4
- package/out/fts.js.map +1 -1
- package/out/geo.d.ts +6 -2
- package/out/geo.d.ts.map +1 -1
- package/out/geo.js +3 -1
- package/out/geo.js.map +1 -1
- package/out/geonames-aliases.d.ts +12 -4
- package/out/geonames-aliases.d.ts.map +1 -1
- package/out/geonames-aliases.js +72 -67
- package/out/geonames-aliases.js.map +1 -1
- package/out/geonames-postal.d.ts +9 -3
- package/out/geonames-postal.d.ts.map +1 -1
- package/out/geonames-postal.js +7 -2
- package/out/geonames-postal.js.map +1 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js.map +1 -1
- package/out/interpolation.d.ts +18 -6
- package/out/interpolation.d.ts.map +1 -1
- package/out/interpolation.js +11 -40
- package/out/interpolation.js.map +1 -1
- package/out/lookup.d.ts +3 -97
- package/out/lookup.d.ts.map +1 -1
- package/out/lookup.js +52 -184
- package/out/lookup.js.map +1 -1
- package/out/name-score.d.ts +28 -0
- package/out/name-score.d.ts.map +1 -0
- package/out/name-score.js +67 -0
- package/out/name-score.js.map +1 -0
- package/out/poi-lookup.d.ts +24 -8
- package/out/poi-lookup.d.ts.map +1 -1
- package/out/poi-lookup.js +27 -13
- package/out/poi-lookup.js.map +1 -1
- package/out/poi-schema.d.ts +42 -13
- package/out/poi-schema.d.ts.map +1 -1
- package/out/poi-schema.js +12 -3
- package/out/poi-schema.js.map +1 -1
- package/out/postal-city-alias-lookup.d.ts +18 -6
- package/out/postal-city-alias-lookup.d.ts.map +1 -1
- package/out/postal-city-alias-lookup.js.map +1 -1
- package/out/postal-city-alias-schema.d.ts +27 -9
- package/out/postal-city-alias-schema.d.ts.map +1 -1
- package/out/postal-city-alias-schema.js +3 -1
- package/out/postal-city-alias-schema.js.map +1 -1
- package/out/postal-city-candidate-schema.d.ts +15 -5
- package/out/postal-city-candidate-schema.d.ts.map +1 -1
- package/out/postal-city-candidate-schema.js +3 -1
- package/out/postal-city-candidate-schema.js.map +1 -1
- package/out/postcode-point-lookup.d.ts +6 -2
- package/out/postcode-point-lookup.d.ts.map +1 -1
- package/out/postcode-point-lookup.js +6 -2
- package/out/postcode-point-lookup.js.map +1 -1
- package/out/ranking-weights.d.ts +118 -0
- package/out/ranking-weights.d.ts.map +1 -0
- package/out/ranking-weights.js +44 -0
- package/out/ranking-weights.js.map +1 -0
- package/out/reverse.d.ts +9 -3
- package/out/reverse.d.ts.map +1 -1
- package/out/reverse.js +20 -6
- package/out/reverse.js.map +1 -1
- package/out/sharding.d.ts +3 -1
- package/out/sharding.d.ts.map +1 -1
- package/out/sharding.js +7 -5
- package/out/sharding.js.map +1 -1
- package/out/sqlite-convention-source.d.ts.map +1 -1
- package/out/sqlite-convention-source.js +3 -1
- package/out/sqlite-convention-source.js.map +1 -1
- package/out/street-centroid-schema.d.ts +33 -11
- package/out/street-centroid-schema.d.ts.map +1 -1
- package/out/street-centroid-schema.js +3 -1
- package/out/street-centroid-schema.js.map +1 -1
- package/out/street-centroid.d.ts.map +1 -1
- package/out/street-centroid.js +6 -2
- package/out/street-centroid.js.map +1 -1
- package/out/street-morphology-fst-builder.d.ts +6 -2
- package/out/street-morphology-fst-builder.d.ts.map +1 -1
- package/out/street-morphology-fst-builder.js +8 -7
- package/out/street-morphology-fst-builder.js.map +1 -1
- package/out/street-morphology-fst-loader.d.ts +24 -8
- package/out/street-morphology-fst-loader.d.ts.map +1 -1
- package/out/street-morphology-fst-loader.js +11 -5
- package/out/street-morphology-fst-loader.js.map +1 -1
- package/out/street-name-lookup.d.ts +9 -3
- package/out/street-name-lookup.d.ts.map +1 -1
- package/out/street-name-lookup.js +9 -7
- package/out/street-name-lookup.js.map +1 -1
- package/out/street-normalize.d.ts +3 -1
- package/out/street-normalize.d.ts.map +1 -1
- package/out/street-normalize.js +23 -13
- package/out/street-normalize.js.map +1 -1
- package/out/street-segment-schema.d.ts +48 -16
- package/out/street-segment-schema.d.ts.map +1 -1
- package/out/street-segment-schema.js +6 -2
- package/out/street-segment-schema.js.map +1 -1
- package/out/types.d.ts +18 -6
- package/out/types.d.ts.map +1 -1
- package/out/unified-schema.d.ts +1 -1
- package/out/unified-schema.d.ts.map +1 -1
- package/out/unified-schema.js +2 -2
- package/out/unified-schema.js.map +1 -1
- package/package.json +5 -5
- package/poi-lookup.ts +53 -21
- package/poi-schema.ts +43 -13
- package/postal-city-alias-lookup.ts +20 -6
- package/postal-city-alias-schema.ts +28 -9
- package/postal-city-candidate-schema.ts +15 -5
- package/postcode-point-lookup.ts +6 -2
- package/ranking-weights.ts +148 -0
- package/reverse.ts +47 -10
- package/sharding.ts +13 -6
- package/sqlite-convention-source.ts +4 -1
- package/street-centroid-schema.ts +35 -11
- package/street-centroid.ts +10 -3
- package/street-morphology-fst-builder.ts +25 -9
- package/street-morphology-fst-loader.ts +26 -10
- package/street-name-lookup.ts +19 -7
- package/street-normalize.ts +28 -13
- package/street-segment-schema.ts +50 -16
- package/types.ts +18 -6
- package/unified-schema.ts +11 -2
package/out/fst-serialize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fst-serialize.js","sourceRoot":"","sources":["../fst-serialize.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fst-serialize.js","sourceRoot":"","sources":["../fst-serialize.ts"],"names":[],"mappings":"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"}
|
package/out/fst-types.d.ts
CHANGED
|
@@ -15,6 +15,13 @@ export interface PlaceEntry {
|
|
|
15
15
|
importance: number;
|
|
16
16
|
lat: number;
|
|
17
17
|
lon: number;
|
|
18
|
+
/**
|
|
19
|
+
* Surface-ambiguity class (survey #4): how many DISTINCT countries carry a place with THIS entry's accepting surface,
|
|
20
|
+
* counted over the whole admin DB at build time (clamped to 255). A property of the surface, not the place — the same
|
|
21
|
+
* place reached via different alias surfaces reports each surface's own count. `undefined` = built without ambiguity
|
|
22
|
+
* data (pre-2026-07-27 artifacts) — NEVER conflate with 1 (the unambiguous case); the meaning-of-zero rule.
|
|
23
|
+
*/
|
|
24
|
+
crossCountryBranches?: number;
|
|
18
25
|
}
|
|
19
26
|
export type PlacetypeID = "country" | "region" | "county" | "locality" | "localadmin" | "borough" | "neighbourhood" | "postalcode" | "campus" | "dependency" | "street_affix";
|
|
20
27
|
export interface FSTMatchResult {
|
|
@@ -43,9 +50,13 @@ export interface FSTProvenance {
|
|
|
43
50
|
importanceMatches: number;
|
|
44
51
|
sourceDB?: string;
|
|
45
52
|
modelCardVersion?: string;
|
|
46
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Degenerate-surface curation policy applied at build time (absent = uncurated build).
|
|
55
|
+
*/
|
|
47
56
|
exclusionPolicy?: string;
|
|
48
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* Name insertions refused by the curation policy.
|
|
59
|
+
*/
|
|
49
60
|
excludedInsertions?: number;
|
|
50
61
|
}
|
|
51
62
|
export interface BuildFSTOpts {
|
|
@@ -67,8 +78,20 @@ export interface BuildFSTOpts {
|
|
|
67
78
|
* street-type words ("Avenue Road" is a real name; "de la" is not).
|
|
68
79
|
*/
|
|
69
80
|
excludeAllTokensOf?: ReadonlySet<string>;
|
|
70
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Recorded verbatim into provenance when either exclusion set is supplied.
|
|
83
|
+
*/
|
|
71
84
|
exclusionPolicy?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Surface-ambiguity classes (survey #4, 2026-07-27): normalized-join surface → the number of DISTINCT countries
|
|
87
|
+
* (across the WHOLE admin DB, not just this build's country scope) with a place carrying that surface. When supplied,
|
|
88
|
+
* every inserted place row records the count for ITS accepting surface (`PlaceEntry.crossCountryBranches`) — an entry
|
|
89
|
+
* accessible under several surfaces records each surface's own count. Serialized into the place row's former `_pad`
|
|
90
|
+
* byte with presence signaled by header flags bit0, so VERSION stays put and pre-ambiguity artifacts read as "no
|
|
91
|
+
* data" (never "0 branches" — the meaning-of-zero rule). No decoder consumes it yet; consumers (FST-prior tempering,
|
|
92
|
+
* the Option-A evidence channel) arrive behind their own measured gates.
|
|
93
|
+
*/
|
|
94
|
+
surfaceCountryCounts?: ReadonlyMap<string, number>;
|
|
72
95
|
onProgress?: (phase: string, detail?: string) => void;
|
|
73
96
|
}
|
|
74
97
|
export interface BuildFSTResult {
|
package/out/fst-types.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;IACX;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC7B;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;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC3B;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;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACrC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACxC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClD,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,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Query shaping for the FTS5 lookup: placetype normalization and the MATCH-expression sanitizer.
|
|
7
|
+
* Both turn a caller's loose input into something SQLite's FTS5 parser accepts without throwing —
|
|
8
|
+
* an unescaped quote or a bare `*` is a syntax error, not an empty result.
|
|
9
|
+
*/
|
|
10
|
+
import type { FindPlaceQuery, WOFPlacetype } from "./types.ts";
|
|
11
|
+
export declare function normalizePlacetypes(p: FindPlaceQuery["placetype"]): WOFPlacetype[] | null;
|
|
12
|
+
/**
|
|
13
|
+
* Make an arbitrary user-typed string safe for FTS5 MATCH.
|
|
14
|
+
*
|
|
15
|
+
* FTS5 has its own query syntax (`"phrase"`, `term1 OR term2`, `prefix*`, NEAR/N, etc.). Letting raw user input through
|
|
16
|
+
* means a user typing `Paris's` or `St. (Petersburg)` causes a syntax error.
|
|
17
|
+
*
|
|
18
|
+
* Per-token rules:
|
|
19
|
+
*
|
|
20
|
+
* - Strip all punctuation except trailing `*` from each whitespace-separated token.
|
|
21
|
+
* - **Trailing `*`** is preserved as FTS5 **prefix syntax** — `627*` becomes the literal `627*` (unquoted). The caller
|
|
22
|
+
* signaled they want a prefix; respect that.
|
|
23
|
+
* - All other tokens are wrapped in `"..."` as a single-word phrase. Conservative — handles apostrophes, parens, accented
|
|
24
|
+
* input, etc. safely.
|
|
25
|
+
* - Multiple tokens join with implicit AND.
|
|
26
|
+
*
|
|
27
|
+
* Examples:
|
|
28
|
+
*
|
|
29
|
+
* - `"Paris"` → `"Paris"` (phrase)
|
|
30
|
+
* - `"627*"` → `627*` (prefix)
|
|
31
|
+
* - `"St. (Petersburg)"` → `"St" "Petersburg"` (two phrases, AND-joined)
|
|
32
|
+
* - `"Thiron-Gardais"` → `"Thiron" "Gardais"` (intra-token punctuation SPLITS — #945; fusing to `ThironGardais` matched
|
|
33
|
+
* nothing because the FTS doc tokenizes the hyphenated name as two terms)
|
|
34
|
+
* - `"110 00"` with `fuseTokens` (postcode-typed) → `"110" "00"` per-token fused — the #920 name law
|
|
35
|
+
* - `"Pari* TX"` → `Pari* "TX"` (mixed prefix + phrase)
|
|
36
|
+
* - `"*"` alone → `""` (no body → drop)
|
|
37
|
+
*/
|
|
38
|
+
export declare function sanitizeFTSQuery(text: string, opts?: {
|
|
39
|
+
fuseTokens?: boolean;
|
|
40
|
+
}): string;
|
|
41
|
+
//# sourceMappingURL=fts-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fts-query.d.ts","sourceRoot":"","sources":["../fts-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9D,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,GAAG,YAAY,EAAE,GAAG,IAAI,CAIzF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAuCtF"}
|
package/out/fts-query.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Query shaping for the FTS5 lookup: placetype normalization and the MATCH-expression sanitizer.
|
|
7
|
+
* Both turn a caller's loose input into something SQLite's FTS5 parser accepts without throwing —
|
|
8
|
+
* an unescaped quote or a bare `*` is a syntax error, not an empty result.
|
|
9
|
+
*/
|
|
10
|
+
export function normalizePlacetypes(p) {
|
|
11
|
+
if (!p)
|
|
12
|
+
return null;
|
|
13
|
+
return Array.isArray(p) ? p : [p];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Make an arbitrary user-typed string safe for FTS5 MATCH.
|
|
17
|
+
*
|
|
18
|
+
* FTS5 has its own query syntax (`"phrase"`, `term1 OR term2`, `prefix*`, NEAR/N, etc.). Letting raw user input through
|
|
19
|
+
* means a user typing `Paris's` or `St. (Petersburg)` causes a syntax error.
|
|
20
|
+
*
|
|
21
|
+
* Per-token rules:
|
|
22
|
+
*
|
|
23
|
+
* - Strip all punctuation except trailing `*` from each whitespace-separated token.
|
|
24
|
+
* - **Trailing `*`** is preserved as FTS5 **prefix syntax** — `627*` becomes the literal `627*` (unquoted). The caller
|
|
25
|
+
* signaled they want a prefix; respect that.
|
|
26
|
+
* - All other tokens are wrapped in `"..."` as a single-word phrase. Conservative — handles apostrophes, parens, accented
|
|
27
|
+
* input, etc. safely.
|
|
28
|
+
* - Multiple tokens join with implicit AND.
|
|
29
|
+
*
|
|
30
|
+
* Examples:
|
|
31
|
+
*
|
|
32
|
+
* - `"Paris"` → `"Paris"` (phrase)
|
|
33
|
+
* - `"627*"` → `627*` (prefix)
|
|
34
|
+
* - `"St. (Petersburg)"` → `"St" "Petersburg"` (two phrases, AND-joined)
|
|
35
|
+
* - `"Thiron-Gardais"` → `"Thiron" "Gardais"` (intra-token punctuation SPLITS — #945; fusing to `ThironGardais` matched
|
|
36
|
+
* nothing because the FTS doc tokenizes the hyphenated name as two terms)
|
|
37
|
+
* - `"110 00"` with `fuseTokens` (postcode-typed) → `"110" "00"` per-token fused — the #920 name law
|
|
38
|
+
* - `"Pari* TX"` → `Pari* "TX"` (mixed prefix + phrase)
|
|
39
|
+
* - `"*"` alone → `""` (no body → drop)
|
|
40
|
+
*/
|
|
41
|
+
export function sanitizeFTSQuery(text, opts) {
|
|
42
|
+
const out = [];
|
|
43
|
+
for (const rawToken of text.normalize("NFKC").split(/\s+/u)) {
|
|
44
|
+
const trimmed = rawToken.trim();
|
|
45
|
+
if (!trimmed)
|
|
46
|
+
continue;
|
|
47
|
+
const hasPrefixStar = trimmed.endsWith("*");
|
|
48
|
+
// #920 name law (postcode-typed queries ONLY): delete intra-token punctuation and FUSE the
|
|
49
|
+
// remainder — postal names are stored in this collapsed shape ("SW1A" stays one term).
|
|
50
|
+
if (opts?.fuseTokens) {
|
|
51
|
+
const body = trimmed.replaceAll(/[^\p{L}\p{N}]/gu, "");
|
|
52
|
+
if (!body)
|
|
53
|
+
continue;
|
|
54
|
+
out.push(hasPrefixStar ? `${body}*` : `"${body.replaceAll('"', '""')}"`);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
// Everything else SPLITS on intra-token punctuation — the behavior the docstring always
|
|
58
|
+
// promised ("St. (Petersburg)" → two phrases). The old code DELETED punctuation instead,
|
|
59
|
+
// fusing "Thiron-Gardais" into the unmatchable single term `ThironGardais` while the FTS
|
|
60
|
+
// doc holds two terms (#945 — the entire hyphenated-name class missed at the raw lookup;
|
|
61
|
+
// masked for years because pre-splice tokenizers never emitted hyphen-preserved values).
|
|
62
|
+
const parts = trimmed.split(/[^\p{L}\p{N}]+/u).filter(Boolean);
|
|
63
|
+
if (!parts.length)
|
|
64
|
+
continue;
|
|
65
|
+
for (let i = 0; i < parts.length; i++) {
|
|
66
|
+
const body = parts[i].replaceAll("*", "");
|
|
67
|
+
if (!body)
|
|
68
|
+
continue;
|
|
69
|
+
// The caller's trailing `*` applies to the FINAL part ("Thiron-Gard*" → "Thiron" Gard*).
|
|
70
|
+
out.push(hasPrefixStar && i === parts.length - 1 ? `${body}*` : `"${body.replaceAll('"', '""')}"`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return out.join(" ");
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=fts-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fts-query.js","sourceRoot":"","sources":["../fts-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,UAAU,mBAAmB,CAAC,CAA8B;IACjE,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAA+B;IAC7E,MAAM,GAAG,GAAa,EAAE,CAAA;IAExB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAA;QAE/B,IAAI,CAAC,OAAO;YAAE,SAAQ;QACtB,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAE3C,2FAA2F;QAC3F,uFAAuF;QACvF,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;YAEtD,IAAI,CAAC,IAAI;gBAAE,SAAQ;YACnB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;YAExE,SAAQ;QACT,CAAC;QAED,wFAAwF;QACxF,yFAAyF;QACzF,yFAAyF;QACzF,yFAAyF;QACzF,yFAAyF;QACzF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAE9D,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,SAAQ;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;YAE1C,IAAI,CAAC,IAAI;gBAAE,SAAQ;YACnB,yFAAyF;YACzF,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QACnG,CAAC;IACF,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACrB,CAAC"}
|
package/out/fts.d.ts
CHANGED
|
@@ -105,15 +105,25 @@ export declare const PLACE_POPULATION_TABLE = "place_population";
|
|
|
105
105
|
* user.
|
|
106
106
|
*/
|
|
107
107
|
export interface BuildPlaceSearchFTSResult {
|
|
108
|
-
/**
|
|
108
|
+
/**
|
|
109
|
+
* Whether the FTS5 index was created (true) or already existed and was left alone (false).
|
|
110
|
+
*/
|
|
109
111
|
created: boolean;
|
|
110
|
-
/**
|
|
112
|
+
/**
|
|
113
|
+
* Number of rows in the `place_search` table after the call.
|
|
114
|
+
*/
|
|
111
115
|
indexedRows: number;
|
|
112
|
-
/**
|
|
116
|
+
/**
|
|
117
|
+
* Whether the R*Tree bbox index was created (true) or already existed (false).
|
|
118
|
+
*/
|
|
113
119
|
bboxCreated: boolean;
|
|
114
|
-
/**
|
|
120
|
+
/**
|
|
121
|
+
* Number of rows in the `place_bbox` R*Tree after the call.
|
|
122
|
+
*/
|
|
115
123
|
bboxIndexedRows: number;
|
|
116
|
-
/**
|
|
124
|
+
/**
|
|
125
|
+
* Wall-clock duration of the build step, in milliseconds.
|
|
126
|
+
*/
|
|
117
127
|
durationMs: number;
|
|
118
128
|
}
|
|
119
129
|
export interface BuildPlaceSearchFTSOpts {
|
|
@@ -145,8 +155,12 @@ export declare function buildPlaceSearchFTS(db: DatabaseSync, opts?: BuildPlaceS
|
|
|
145
155
|
* missing — pass buildFTS:true or run the CLI" guard.
|
|
146
156
|
*/
|
|
147
157
|
export declare function placeSearchFTSExists(db: DatabaseSync): boolean;
|
|
148
|
-
/**
|
|
158
|
+
/**
|
|
159
|
+
* Returns true iff the `place_bbox` R*Tree table exists. Used for opt-in proximity lookup checks.
|
|
160
|
+
*/
|
|
149
161
|
export declare function placeBboxExists(db: DatabaseSync): boolean;
|
|
150
|
-
/**
|
|
162
|
+
/**
|
|
163
|
+
* Returns true iff the `place_population` table exists. Used for opt-in population-ranking checks.
|
|
164
|
+
*/
|
|
151
165
|
export declare function placePopulationExists(db: DatabaseSync): boolean;
|
|
152
166
|
//# sourceMappingURL=fts.d.ts.map
|
package/out/fts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fts.d.ts","sourceRoot":"","sources":["../fts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,kBAAkB,iBAAiB,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,eAAe,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"fts.d.ts","sourceRoot":"","sources":["../fts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,kBAAkB,iBAAiB,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,eAAe,WAAW,CAAA;AAOvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAWrH;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,eAAe,CAAA;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,qBAAqB,CAAA;AAExD;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACzC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,uBAAuB;IACvC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,UAAU,CAAC,EAAE,CACZ,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,eAAe,GAAG,iBAAiB,GAAG,MAAM,EACzG,MAAM,CAAC,EAAE,MAAM,KACX,IAAI,CAAA;CACT;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,GAAE,uBAA4B,GAAG,yBAAyB,CAsInH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAE9D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAEzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAE/D"}
|
package/out/fts.js
CHANGED
|
@@ -61,7 +61,9 @@ export const PLACE_SEARCH_TABLE = "place_search";
|
|
|
61
61
|
* both into ONE rebuild rather than shipping two FTS schema bumps.
|
|
62
62
|
*/
|
|
63
63
|
export const ALIAS_SEPARATOR = "\uE000";
|
|
64
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* `char()` argument for {@link ALIAS_SEPARATOR} in SQL — keeps the SQL text plain ASCII.
|
|
66
|
+
*/
|
|
65
67
|
const ALIAS_SEPARATOR_CODEPOINT = ALIAS_SEPARATOR.codePointAt(0);
|
|
66
68
|
/**
|
|
67
69
|
* Does any alias in an `alt_names` bag exactly equal the (already-normalized) query? The single shared implementation
|
|
@@ -88,7 +90,7 @@ const ALIAS_SEPARATOR_CODEPOINT = ALIAS_SEPARATOR.codePointAt(0);
|
|
|
88
90
|
export function aliasBagExactMatch(altNames, normalizedQuery, anyStrictExact) {
|
|
89
91
|
if (altNames === null || altNames === "" || !normalizedQuery)
|
|
90
92
|
return false;
|
|
91
|
-
const norm = (s) => s.toLowerCase().trim().
|
|
93
|
+
const norm = (s) => s.toLowerCase().trim().replaceAll(/\s+/g, " ");
|
|
92
94
|
if (altNames.includes(ALIAS_SEPARATOR)) {
|
|
93
95
|
return altNames.split(ALIAS_SEPARATOR).some((alias) => norm(alias) === normalizedQuery);
|
|
94
96
|
}
|
|
@@ -240,11 +242,15 @@ export function buildPlaceSearchFTS(db, opts = {}) {
|
|
|
240
242
|
export function placeSearchFTSExists(db) {
|
|
241
243
|
return tableExists(db, PLACE_SEARCH_TABLE);
|
|
242
244
|
}
|
|
243
|
-
/**
|
|
245
|
+
/**
|
|
246
|
+
* Returns true iff the `place_bbox` R*Tree table exists. Used for opt-in proximity lookup checks.
|
|
247
|
+
*/
|
|
244
248
|
export function placeBboxExists(db) {
|
|
245
249
|
return tableExists(db, PLACE_BBOX_TABLE);
|
|
246
250
|
}
|
|
247
|
-
/**
|
|
251
|
+
/**
|
|
252
|
+
* Returns true iff the `place_population` table exists. Used for opt-in population-ranking checks.
|
|
253
|
+
*/
|
|
248
254
|
export function placePopulationExists(db) {
|
|
249
255
|
return tableExists(db, PLACE_POPULATION_TABLE);
|
|
250
256
|
}
|
package/out/fts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fts.js","sourceRoot":"","sources":["../fts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAA;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAA;AAEvC
|
|
1
|
+
{"version":3,"file":"fts.js","sourceRoot":"","sources":["../fts.ts"],"names":[],"mappings":"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"}
|
package/out/geo.d.ts
CHANGED
|
@@ -37,10 +37,14 @@ export declare function bboxAround(lat: number, lon: number, radiusKm: number):
|
|
|
37
37
|
* the type stays open so a 3-D source doesn't break parsing.
|
|
38
38
|
*/
|
|
39
39
|
export type GeojsonPosition = [number, number, ...number[]];
|
|
40
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* The two areal GeoJSON geometry types PIP can test, plus an open fallback (Point etc.).
|
|
42
|
+
*/
|
|
41
43
|
export interface GeojsonPolygon {
|
|
42
44
|
type: "Polygon";
|
|
43
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* `[outerRing, hole1, hole2, …]` — each ring a closed list of positions.
|
|
47
|
+
*/
|
|
44
48
|
coordinates: GeojsonPosition[][];
|
|
45
49
|
}
|
|
46
50
|
export interface GeojsonMultiPolygon {
|
package/out/geo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../geo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../geo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAShD;;;;;;GAMG;AACH,MAAM,WAAW,IAAI;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAY3E;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;AAE3D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,SAAS,CAAA;IACf;;OAEG;IACH,WAAW,EAAE,eAAe,EAAE,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,cAAc,CAAA;IACpB,WAAW,EAAE,eAAe,EAAE,EAAE,EAAE,CAAA;CAClC;AAED,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE5G;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAgB/F;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,eAAe,EAAE,EAAE,GAAG,OAAO,CAU1G;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC5C,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACT,OAAO,GAAG,IAAI,CAYhB"}
|
package/out/geo.js
CHANGED
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
// haversineKm is the canonical implementation in @mailwoman/spatial; re-exported so this package's
|
|
21
21
|
// readers keep importing it from "./geo.ts" (the spatial dep is transitive via @mailwoman/resolver).
|
|
22
22
|
export { haversineKm } from "@mailwoman/spatial";
|
|
23
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* WGS-84 degrees → radians.
|
|
25
|
+
*/
|
|
24
26
|
function toRad(deg) {
|
|
25
27
|
return (deg * Math.PI) / 180;
|
|
26
28
|
}
|
package/out/geo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geo.js","sourceRoot":"","sources":["../geo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,mGAAmG;AACnG,qGAAqG;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD
|
|
1
|
+
{"version":3,"file":"geo.js","sourceRoot":"","sources":["../geo.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,13 +29,21 @@ import type { DatabaseSync } from "node:sqlite";
|
|
|
29
29
|
* Overture, GeoNames) never collide in a combined DB.
|
|
30
30
|
*/
|
|
31
31
|
export declare const GEONAMES_ID_BASE = 9000000000000;
|
|
32
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Per-country progress for the ingest — one event per country dump processed (or skipped).
|
|
34
|
+
*/
|
|
33
35
|
export interface GeonamesIngestProgress {
|
|
34
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* ISO 3166-1 alpha-2 code.
|
|
38
|
+
*/
|
|
35
39
|
country: string;
|
|
36
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Populated places ingested from this country's dump (0 when skipped).
|
|
42
|
+
*/
|
|
37
43
|
places: number;
|
|
38
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* True when the country's `<CC>.txt` dump was missing — the country is skipped, not fatal.
|
|
46
|
+
*/
|
|
39
47
|
skipped: boolean;
|
|
40
48
|
}
|
|
41
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geonames-aliases.d.ts","sourceRoot":"","sources":["../geonames-aliases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,gBAAoB,CAAA;AAEjD
|
|
1
|
+
{"version":3,"file":"geonames-aliases.d.ts","sourceRoot":"","sources":["../geonames-aliases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,gBAAoB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;CAChB;AA6FD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,EAAE,EAAE,YAAY,EAChB,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,EACpD,IAAI,CAAC,EAAE;IACN;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACvC;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB,GACC,MAAM,CA8KR"}
|
package/out/geonames-aliases.js
CHANGED
|
@@ -31,6 +31,77 @@ import { isOfficialLanguage } from "@mailwoman/codex/country";
|
|
|
31
31
|
* Overture, GeoNames) never collide in a combined DB.
|
|
32
32
|
*/
|
|
33
33
|
export const GEONAMES_ID_BASE = 9_000_000_000_000;
|
|
34
|
+
/**
|
|
35
|
+
* Parse a country's alternateNamesV2 file into `geonameid -> spelling -> attribution`, restricted to the populated
|
|
36
|
+
* places (`P`) present in `lines`.
|
|
37
|
+
*/
|
|
38
|
+
function parseAlternateNamesV2(v2File, cc, lines) {
|
|
39
|
+
const wanted = new Set();
|
|
40
|
+
for (const line of lines) {
|
|
41
|
+
const f = line.split("\t");
|
|
42
|
+
if (f[6] === "P") {
|
|
43
|
+
wanted.add(Number(f[0]));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const v2 = new Map();
|
|
47
|
+
// V2 columns (0-indexed): 1 geonameid, 2 isolanguage, 3 name, 4 isPreferredName, 5 isShortName,
|
|
48
|
+
// 6 isColloquial, 7 isHistoric, 8 from, 9 to.
|
|
49
|
+
//
|
|
50
|
+
// Two passes, because historic-ness is a fact about the NAME, not the row: GeoNames splits one
|
|
51
|
+
// spelling across rows — Malabo carries "Santa Isabel" as (es, unflagged) AND as (no-language,
|
|
52
|
+
// isHistoric=1, to=1973). Officialness must see the flags from EVERY row for the spelling, or the
|
|
53
|
+
// colonial-era name sails through on the language-tagged row (the #936 review's Malabo finding).
|
|
54
|
+
// Do NOT gate on isPreferredName instead — it's sparse annotation, not a signal (Turku's sv "Åbo"
|
|
55
|
+
// is unflagged; FI has 1,746 flags across the whole dump).
|
|
56
|
+
const v2Lines = readFileSync(v2File, "utf8").split("\n");
|
|
57
|
+
const historicNames = new Set();
|
|
58
|
+
for (const line of v2Lines) {
|
|
59
|
+
if (!line)
|
|
60
|
+
continue;
|
|
61
|
+
const f = line.split("\t");
|
|
62
|
+
if (f[6] === "1" || f[7] === "1" || (f[9] ?? "").trim() !== "") {
|
|
63
|
+
const alt = (f[3] ?? "").trim();
|
|
64
|
+
if (alt && wanted.has(Number(f[1]))) {
|
|
65
|
+
historicNames.add(`${f[1]}|${alt}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const line of v2Lines) {
|
|
70
|
+
if (!line)
|
|
71
|
+
continue;
|
|
72
|
+
const f = line.split("\t");
|
|
73
|
+
const gid = Number(f[1]);
|
|
74
|
+
if (!wanted.has(gid))
|
|
75
|
+
continue;
|
|
76
|
+
const lang = f[2] ?? "";
|
|
77
|
+
// ISO 639 codes are 2-3 letters; GeoNames' pseudo-codes (post, link, iata, wkdt, …) are 4+.
|
|
78
|
+
if (!/^[a-z]{2,3}$/.test(lang))
|
|
79
|
+
continue;
|
|
80
|
+
const alt = (f[3] ?? "").trim();
|
|
81
|
+
if (!alt)
|
|
82
|
+
continue;
|
|
83
|
+
const preferred = f[4] === "1";
|
|
84
|
+
const official = !historicNames.has(`${gid}|${alt}`) && isOfficialLanguage(cc, lang) ? 1 : 0;
|
|
85
|
+
let byName = v2.get(gid);
|
|
86
|
+
if (!byName) {
|
|
87
|
+
v2.set(gid, (byName = new Map()));
|
|
88
|
+
}
|
|
89
|
+
const prev = byName.get(alt);
|
|
90
|
+
if (!prev) {
|
|
91
|
+
byName.set(alt, { language: lang, privateuse: preferred ? "preferred" : "", official });
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
if (official && !prev.official) {
|
|
95
|
+
prev.language = lang;
|
|
96
|
+
prev.official = 1;
|
|
97
|
+
}
|
|
98
|
+
if (preferred && !prev.privateuse) {
|
|
99
|
+
prev.privateuse = "preferred";
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return v2;
|
|
104
|
+
}
|
|
34
105
|
/**
|
|
35
106
|
* Fold the GeoNames `P`-class places (+ their Latin alt-names) for `countries` into `db`'s `spr` / `names` /
|
|
36
107
|
* `place_population` tables. Returns the total places ingested.
|
|
@@ -83,73 +154,7 @@ export function ingestGeonamesAliases(db, countries, geonamesDir, onProgress, op
|
|
|
83
154
|
// dump repeats one spelling under several languages ("Åbo" sv/da/no); the merged tag is official /
|
|
84
155
|
// preferred if ANY qualifying row is.
|
|
85
156
|
const v2File = opts?.alternateDir ? join(opts.alternateDir, `${cc}.txt`) : undefined;
|
|
86
|
-
|
|
87
|
-
if (v2File && existsSync(v2File)) {
|
|
88
|
-
const wanted = new Set();
|
|
89
|
-
for (const line of lines) {
|
|
90
|
-
const f = line.split("\t");
|
|
91
|
-
if (f[6] === "P") {
|
|
92
|
-
wanted.add(Number(f[0]));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
v2 = new Map();
|
|
96
|
-
// V2 columns (0-indexed): 1 geonameid, 2 isolanguage, 3 name, 4 isPreferredName, 5 isShortName,
|
|
97
|
-
// 6 isColloquial, 7 isHistoric, 8 from, 9 to.
|
|
98
|
-
//
|
|
99
|
-
// Two passes, because historic-ness is a fact about the NAME, not the row: GeoNames splits one
|
|
100
|
-
// spelling across rows — Malabo carries "Santa Isabel" as (es, unflagged) AND as (no-language,
|
|
101
|
-
// isHistoric=1, to=1973). Officialness must see the flags from EVERY row for the spelling, or the
|
|
102
|
-
// colonial-era name sails through on the language-tagged row (the #936 review's Malabo finding).
|
|
103
|
-
// Do NOT gate on isPreferredName instead — it's sparse annotation, not a signal (Turku's sv "Åbo"
|
|
104
|
-
// is unflagged; FI has 1,746 flags across the whole dump).
|
|
105
|
-
const v2Lines = readFileSync(v2File, "utf8").split("\n");
|
|
106
|
-
const historicNames = new Set();
|
|
107
|
-
for (const line of v2Lines) {
|
|
108
|
-
if (!line)
|
|
109
|
-
continue;
|
|
110
|
-
const f = line.split("\t");
|
|
111
|
-
if (f[6] === "1" || f[7] === "1" || (f[9] ?? "").trim() !== "") {
|
|
112
|
-
const alt = (f[3] ?? "").trim();
|
|
113
|
-
if (alt && wanted.has(Number(f[1]))) {
|
|
114
|
-
historicNames.add(`${f[1]}|${alt}`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
for (const line of v2Lines) {
|
|
119
|
-
if (!line)
|
|
120
|
-
continue;
|
|
121
|
-
const f = line.split("\t");
|
|
122
|
-
const gid = Number(f[1]);
|
|
123
|
-
if (!wanted.has(gid))
|
|
124
|
-
continue;
|
|
125
|
-
const lang = f[2] ?? "";
|
|
126
|
-
// ISO 639 codes are 2-3 letters; GeoNames' pseudo-codes (post, link, iata, wkdt, …) are 4+.
|
|
127
|
-
if (!/^[a-z]{2,3}$/.test(lang))
|
|
128
|
-
continue;
|
|
129
|
-
const alt = (f[3] ?? "").trim();
|
|
130
|
-
if (!alt)
|
|
131
|
-
continue;
|
|
132
|
-
const preferred = f[4] === "1";
|
|
133
|
-
const official = !historicNames.has(`${gid}|${alt}`) && isOfficialLanguage(cc, lang) ? 1 : 0;
|
|
134
|
-
let byName = v2.get(gid);
|
|
135
|
-
if (!byName) {
|
|
136
|
-
v2.set(gid, (byName = new Map()));
|
|
137
|
-
}
|
|
138
|
-
const prev = byName.get(alt);
|
|
139
|
-
if (!prev) {
|
|
140
|
-
byName.set(alt, { language: lang, privateuse: preferred ? "preferred" : "", official });
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
if (official && !prev.official) {
|
|
144
|
-
prev.language = lang;
|
|
145
|
-
prev.official = 1;
|
|
146
|
-
}
|
|
147
|
-
if (preferred && !prev.privateuse) {
|
|
148
|
-
prev.privateuse = "preferred";
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
157
|
+
const v2 = v2File && existsSync(v2File) ? parseAlternateNamesV2(v2File, cc, lines) : undefined;
|
|
153
158
|
// #267 admin pre-pass (gap countries): fold the country (PCLI) + regions (ADM1), self+ancestry them, and
|
|
154
159
|
// build the admin1→region map the localities link through. Point bbox (GeoNames gives a centroid only).
|
|
155
160
|
let countryID = -1;
|