@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"street-segment-schema.d.ts","sourceRoot":"","sources":["../street-segment-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC
|
|
1
|
+
{"version":3,"file":"street-segment-schema.d.ts","sourceRoot":"","sources":["../street-segment-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACpC;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,cAAc,EAAE,kBAAkB,CAAA;IAClC,kBAAkB,EAAE,oBAAoB,CAAA;CACxC;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,8JAczB,CAAA;AAEV;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB/F;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC3C,EAAE,EAAE,MAAM,CAAC,qBAAqB,CAAC,EACjC,GAAG,EAAE,oBAAoB,GACvB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,qBAAqB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjG"}
|
|
@@ -33,7 +33,9 @@ export const STREET_SEGMENT_COLUMNS = [
|
|
|
33
33
|
"source",
|
|
34
34
|
"release",
|
|
35
35
|
];
|
|
36
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Create the `street_segment` table — called before the streaming bulk load.
|
|
38
|
+
*/
|
|
37
39
|
export async function createStreetSegmentTable(db) {
|
|
38
40
|
await db.schema
|
|
39
41
|
.createTable("street_segment")
|
|
@@ -67,7 +69,9 @@ export async function writeInterpCalibration(db, row) {
|
|
|
67
69
|
.execute();
|
|
68
70
|
await db.insertInto("interp_calibration").values(row).execute();
|
|
69
71
|
}
|
|
70
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* Create the two probe indexes the reader relies on (postcode-scope, street-scope).
|
|
74
|
+
*/
|
|
71
75
|
export async function createStreetSegmentIndexes(db) {
|
|
72
76
|
await db.schema
|
|
73
77
|
.createIndex("idx_seg_postcode")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"street-segment-schema.js","sourceRoot":"","sources":["../street-segment-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"street-segment-schema.js","sourceRoot":"","sources":["../street-segment-schema.ts"],"names":[],"mappings":"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"}
|
package/out/types.d.ts
CHANGED
|
@@ -33,7 +33,9 @@ export interface PlaceCandidate {
|
|
|
33
33
|
id: number;
|
|
34
34
|
name: string;
|
|
35
35
|
placetype: WOFPlacetype;
|
|
36
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* ISO 3166-1 alpha-2 country code.
|
|
38
|
+
*/
|
|
37
39
|
country: string;
|
|
38
40
|
lat: number;
|
|
39
41
|
lon: number;
|
|
@@ -106,9 +108,13 @@ export interface GeoBbox {
|
|
|
106
108
|
export interface FindPlaceQuery {
|
|
107
109
|
text: string;
|
|
108
110
|
placetype?: WOFPlacetype | WOFPlacetype[];
|
|
109
|
-
/**
|
|
111
|
+
/**
|
|
112
|
+
* ISO 3166-1 alpha-2 — narrows to one country.
|
|
113
|
+
*/
|
|
110
114
|
country?: string;
|
|
111
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* WOF place id — narrows to descendants of this place.
|
|
117
|
+
*/
|
|
112
118
|
parentID?: number;
|
|
113
119
|
/**
|
|
114
120
|
* Sibling postcode. When set on a `locality` query AND a `postcode_locality` table is present, triggers the
|
|
@@ -117,7 +123,9 @@ export interface FindPlaceQuery {
|
|
|
117
123
|
* postcode_locality shard is present.
|
|
118
124
|
*/
|
|
119
125
|
postcode?: string;
|
|
120
|
-
/**
|
|
126
|
+
/**
|
|
127
|
+
* Proximity hint — candidates close to this point get a ranking boost.
|
|
128
|
+
*/
|
|
121
129
|
near?: GeoPoint & {
|
|
122
130
|
maxDistanceKm?: number;
|
|
123
131
|
};
|
|
@@ -132,9 +140,13 @@ export interface FindPlaceQuery {
|
|
|
132
140
|
bias?: Array<GeoPoint & {
|
|
133
141
|
weight?: number;
|
|
134
142
|
}>;
|
|
135
|
-
/**
|
|
143
|
+
/**
|
|
144
|
+
* Bounding-box filter — only candidates whose bbox intersects this box are returned.
|
|
145
|
+
*/
|
|
136
146
|
bbox?: GeoBbox;
|
|
137
|
-
/**
|
|
147
|
+
/**
|
|
148
|
+
* Default 10.
|
|
149
|
+
*/
|
|
138
150
|
limit?: number;
|
|
139
151
|
}
|
|
140
152
|
/**
|
package/out/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GACrB,SAAS,GACT,aAAa,GACb,QAAQ,GACR,aAAa,GACb,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,SAAS,GACT,eAAe,GACf,WAAW,GACX,YAAY,GACZ,OAAO,GACP,QAAQ,GACR,SAAS,CAAA;AAEZ;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,YAAY,CAAA;IACvB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GACrB,SAAS,GACT,aAAa,GACb,QAAQ,GACR,aAAa,GACb,QAAQ,GACR,YAAY,GACZ,UAAU,GACV,SAAS,GACT,eAAe,GACf,WAAW,GACX,YAAY,GACZ,OAAO,GACP,QAAQ,GACR,SAAS,CAAA;AAEZ;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,YAAY,CAAA;IACvB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;CACX;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,CAAA;IACzC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC5C;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAA;IAC3D,KAAK,IAAI,IAAI,CAAA;CACb"}
|
package/out/unified-schema.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* table (which lookup.ts's parent-constraint subquery needs) — see `populateAncestors`. The
|
|
12
12
|
* `place_search` FTS5 + `place_bbox` R*Tree are built separately by `build-fts` (fts.ts).
|
|
13
13
|
*/
|
|
14
|
-
import { DatabaseSync } from "node:sqlite";
|
|
14
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
15
15
|
export declare function createUnifiedSchema(db: DatabaseSync): Promise<void>;
|
|
16
16
|
/**
|
|
17
17
|
* Populate the `ancestors` table by walking each place's `parent_id` chain in `spr` (transitive closure, including the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified-schema.d.ts","sourceRoot":"","sources":["../unified-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"unified-schema.d.ts","sourceRoot":"","sources":["../unified-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAM/C,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFzE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,CA0C1D;AAED,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B1E"}
|
package/out/unified-schema.js
CHANGED
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
* table (which lookup.ts's parent-constraint subquery needs) — see `populateAncestors`. The
|
|
12
12
|
* `place_search` FTS5 + `place_bbox` R*Tree are built separately by `build-fts` (fts.ts).
|
|
13
13
|
*/
|
|
14
|
-
import { DatabaseSync } from "node:sqlite";
|
|
15
14
|
import { DatabaseClient } from "@mailwoman/core/kysley/client";
|
|
16
15
|
export async function createUnifiedSchema(db) {
|
|
17
16
|
// PRAGMAs stay raw — not Kysely-modelled, and these tune the bulk build.
|
|
@@ -106,7 +105,8 @@ export function populateAncestors(db) {
|
|
|
106
105
|
db.exec("BEGIN");
|
|
107
106
|
let count = 0;
|
|
108
107
|
for (const r of rows) {
|
|
109
|
-
insert.run(r.id, r.id, r.placetype);
|
|
108
|
+
insert.run(r.id, r.id, r.placetype);
|
|
109
|
+
// self
|
|
110
110
|
count++;
|
|
111
111
|
const seen = new Set([r.id]);
|
|
112
112
|
let cur = r.parent_id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unified-schema.js","sourceRoot":"","sources":["../unified-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"unified-schema.js","sourceRoot":"","sources":["../unified-schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mailwoman/resolver-wof-sqlite",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.3.0",
|
|
4
4
|
"description": "Who's On First SQLite resolver — FTS5-backed PlaceLookup that resolves text queries to WOF place IDs + coordinates. Optional dependency for callers who want geocoding.",
|
|
5
5
|
"license": "AGPL-3.0-only OR LicenseRef-Commercial",
|
|
6
6
|
"repository": {
|
|
@@ -242,10 +242,10 @@
|
|
|
242
242
|
}
|
|
243
243
|
},
|
|
244
244
|
"dependencies": {
|
|
245
|
-
"@mailwoman/codex": "8.
|
|
246
|
-
"@mailwoman/core": "8.
|
|
247
|
-
"@mailwoman/resolver": "8.
|
|
248
|
-
"@mailwoman/spatial": "8.
|
|
245
|
+
"@mailwoman/codex": "8.3.0",
|
|
246
|
+
"@mailwoman/core": "8.3.0",
|
|
247
|
+
"@mailwoman/resolver": "8.3.0",
|
|
248
|
+
"@mailwoman/spatial": "8.3.0",
|
|
249
249
|
"h3-js": "^4.5.0",
|
|
250
250
|
"kysely": "^0.29.4"
|
|
251
251
|
}
|
package/poi-lookup.ts
CHANGED
|
@@ -32,7 +32,9 @@ import { gridDisk, latLngToCell } from "h3-js"
|
|
|
32
32
|
|
|
33
33
|
import type { POICategoryCodeTable, POITable } from "./poi-schema.ts"
|
|
34
34
|
|
|
35
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Resolution the `poi` table's `h3_cell` column is keyed at — matches the builder (spec §3.4).
|
|
37
|
+
*/
|
|
36
38
|
export const POI_H3_RESOLUTION = 9
|
|
37
39
|
|
|
38
40
|
/**
|
|
@@ -57,11 +59,15 @@ const DEFAULT_MAX_RINGS = 16
|
|
|
57
59
|
*/
|
|
58
60
|
const BRAND_MAX_DISTANCE_KM = 500
|
|
59
61
|
|
|
60
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Row-count default when a query doesn't specify `limit`.
|
|
64
|
+
*/
|
|
61
65
|
const DEFAULT_LIMIT = 20
|
|
62
66
|
|
|
63
67
|
export interface POISearchQuery {
|
|
64
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Poi-taxonomy category id (string side of the dictionary). Ignored when `brandWikidata` is also set — brand wins.
|
|
70
|
+
*/
|
|
65
71
|
categoryID?: string
|
|
66
72
|
/**
|
|
67
73
|
* Fan-out category ids — the Overture `taxonomy.primary` leaves a single canonical category rolls up into (e.g.
|
|
@@ -70,11 +76,17 @@ export interface POISearchQuery {
|
|
|
70
76
|
* one-element list `[categoryID]` when this is absent). Ignored when `brandWikidata` is set — brand wins.
|
|
71
77
|
*/
|
|
72
78
|
categoryIDs?: string[]
|
|
73
|
-
/**
|
|
79
|
+
/**
|
|
80
|
+
* Wikidata QID for brand-exact search.
|
|
81
|
+
*/
|
|
74
82
|
brandWikidata?: string
|
|
75
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* Free-text name (FTS5).
|
|
85
|
+
*/
|
|
76
86
|
name?: string
|
|
77
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* Search center. Required for category/brand queries (k-ring expansion).
|
|
89
|
+
*/
|
|
78
90
|
center?: { latitude: number; longitude: number }
|
|
79
91
|
/**
|
|
80
92
|
* Ring budget: how many res-9 k-rings to expand before giving up (default 16 ≈ ~5.4 km). Counts ring 0, so k reaches
|
|
@@ -92,19 +104,27 @@ export interface POISearchHit {
|
|
|
92
104
|
longitude: number
|
|
93
105
|
country: string
|
|
94
106
|
confidence: number
|
|
95
|
-
/**
|
|
107
|
+
/**
|
|
108
|
+
* Overture GERS id — nullable METADATA ONLY, never a key (the #470 rule; see `POITable.gers_id`).
|
|
109
|
+
*/
|
|
96
110
|
gersID: string | null
|
|
97
111
|
distanceM?: number
|
|
98
112
|
}
|
|
99
113
|
|
|
100
114
|
export interface POILookupOpts {
|
|
101
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* Path to a `poi.db` built by the (future) POI builder. Opened read-only.
|
|
117
|
+
*/
|
|
102
118
|
databasePath?: string
|
|
103
|
-
/**
|
|
119
|
+
/**
|
|
120
|
+
* Pre-opened handle (tests / shared connections). Mutually exclusive with `databasePath`.
|
|
121
|
+
*/
|
|
104
122
|
database?: DatabaseSync
|
|
105
123
|
}
|
|
106
124
|
|
|
107
|
-
/**
|
|
125
|
+
/**
|
|
126
|
+
* The `poi` columns every search mode hydrates — a typed projection of the SHARED {@link POITable}.
|
|
127
|
+
*/
|
|
108
128
|
type POIRow = Pick<
|
|
109
129
|
POITable,
|
|
110
130
|
| "name"
|
|
@@ -129,11 +149,17 @@ export class POILookup implements Disposable {
|
|
|
129
149
|
readonly #categoryToID = new Map<string, number>()
|
|
130
150
|
readonly #idToCategory = new Map<number, string>()
|
|
131
151
|
|
|
132
|
-
/**
|
|
152
|
+
/**
|
|
153
|
+
* `(h3_cell, category_id)` → the cell's category-clustered range, most-confident-first.
|
|
154
|
+
*/
|
|
133
155
|
readonly #categoryCellProbe: ReturnType<DatabaseSync["prepare"]>
|
|
134
|
-
/**
|
|
156
|
+
/**
|
|
157
|
+
* `brand_wikidata` → ALL of a brand's rows globally (partial-index range-scan); distance-sorted in JS, not SQL.
|
|
158
|
+
*/
|
|
135
159
|
readonly #brandProbe: ReturnType<DatabaseSync["prepare"]>
|
|
136
|
-
/**
|
|
160
|
+
/**
|
|
161
|
+
* FTS5 `MATCH` over `poi_search`, returning candidate `name_key`s to hydrate.
|
|
162
|
+
*/
|
|
137
163
|
readonly #nameFTSProbe: ReturnType<DatabaseSync["prepare"]>
|
|
138
164
|
|
|
139
165
|
constructor(opts: POILookupOpts) {
|
|
@@ -161,7 +187,9 @@ export class POILookup implements Disposable {
|
|
|
161
187
|
this.#categoryCellProbe = this.#db.prepare(
|
|
162
188
|
`SELECT ${columns} FROM poi WHERE h3_cell = ? AND category_id = ? ORDER BY neg_rank ASC LIMIT ?`
|
|
163
189
|
)
|
|
190
|
+
|
|
164
191
|
this.#brandProbe = this.#db.prepare(`SELECT ${columns} FROM poi WHERE brand_wikidata = ?`)
|
|
192
|
+
|
|
165
193
|
this.#nameFTSProbe = this.#db.prepare(
|
|
166
194
|
"SELECT name_key FROM poi_search WHERE poi_search MATCH ? ORDER BY bm25(poi_search) LIMIT ?"
|
|
167
195
|
)
|
|
@@ -174,7 +202,7 @@ export class POILookup implements Disposable {
|
|
|
174
202
|
return this.#searchByName(query.name, limit, query.center)
|
|
175
203
|
}
|
|
176
204
|
|
|
177
|
-
if (query.categoryID || (query.categoryIDs && query.categoryIDs.length
|
|
205
|
+
if (query.categoryID || (query.categoryIDs && query.categoryIDs.length) || query.brandWikidata) {
|
|
178
206
|
if (!query.center) {
|
|
179
207
|
throw new Error("POILookup.search: category/brand search requires a `center`")
|
|
180
208
|
}
|
|
@@ -208,7 +236,9 @@ export class POILookup implements Disposable {
|
|
|
208
236
|
.map((row) => toHit(row, this.#idToCategory, center))
|
|
209
237
|
}
|
|
210
238
|
|
|
211
|
-
/**
|
|
239
|
+
/**
|
|
240
|
+
* Category path: k-ring expansion from `query.center`'s res-9 cell, probing each new ring's cells.
|
|
241
|
+
*/
|
|
212
242
|
#searchKRing(query: POISearchQuery, limit: number): POISearchHit[] {
|
|
213
243
|
const center = query.center!
|
|
214
244
|
const maxRings = query.maxRings ?? DEFAULT_MAX_RINGS
|
|
@@ -227,7 +257,7 @@ export class POILookup implements Disposable {
|
|
|
227
257
|
}
|
|
228
258
|
|
|
229
259
|
// No resolvable leaf (every id unknown to the dictionary) can't have rows — a clean miss, not a throw.
|
|
230
|
-
if (categoryIds.length
|
|
260
|
+
if (!categoryIds.length) return []
|
|
231
261
|
|
|
232
262
|
const origin = latLngToCell(center.latitude, center.longitude, POI_H3_RESOLUTION) as H3Cell
|
|
233
263
|
const seenCells = new Set<string>()
|
|
@@ -281,7 +311,7 @@ export class POILookup implements Disposable {
|
|
|
281
311
|
uniqueKeys.push(hit.name_key)
|
|
282
312
|
}
|
|
283
313
|
|
|
284
|
-
if (uniqueKeys.length
|
|
314
|
+
if (!uniqueKeys.length) return []
|
|
285
315
|
|
|
286
316
|
const hydrated = this.#hydrateByNameKeys(uniqueKeys)
|
|
287
317
|
const rowsByKey = new Map<string, POIRow[]>()
|
|
@@ -334,13 +364,15 @@ export class POILookup implements Disposable {
|
|
|
334
364
|
}
|
|
335
365
|
}
|
|
336
366
|
|
|
337
|
-
/**
|
|
367
|
+
/**
|
|
368
|
+
* `poi.h3_cell` is the SHORTENED (48-bit) cell — never the full h3-js cell string.
|
|
369
|
+
*/
|
|
338
370
|
function h3CellToInt(cell: H3Cell): number {
|
|
339
371
|
return Number(BigInt(`0x${shortenH3Cell(cell)}`))
|
|
340
372
|
}
|
|
341
373
|
|
|
342
374
|
function sortByDistance(rows: POIRow[], center: { latitude: number; longitude: number }): POIRow[] {
|
|
343
|
-
return [...rows].
|
|
375
|
+
return [...rows].toSorted(
|
|
344
376
|
(a, b) =>
|
|
345
377
|
haversineKm(center.latitude, center.longitude, a.latitude, a.longitude) -
|
|
346
378
|
haversineKm(center.latitude, center.longitude, b.latitude, b.longitude)
|
|
@@ -378,10 +410,10 @@ function toHit(
|
|
|
378
410
|
*/
|
|
379
411
|
function sanitizePOINameQuery(text: string): string {
|
|
380
412
|
return text
|
|
381
|
-
.
|
|
413
|
+
.replaceAll(/["*:]/g, "")
|
|
382
414
|
.trim()
|
|
383
415
|
.split(/\s+/u)
|
|
384
416
|
.filter(Boolean)
|
|
385
|
-
.map((token) => `"${token.
|
|
417
|
+
.map((token) => `"${token.replaceAll('"', '""')}"`)
|
|
386
418
|
.join(" ")
|
|
387
419
|
}
|
package/poi-schema.ts
CHANGED
|
@@ -17,27 +17,45 @@ import type { DatabaseSync } from "node:sqlite"
|
|
|
17
17
|
import type { LayerContractDatabase } from "@mailwoman/core/layers"
|
|
18
18
|
import { sql, type Kysely } from "kysely"
|
|
19
19
|
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* One POI row. Clustered PK: h3_cell → category_id → neg_rank → rowid_key.
|
|
22
|
+
*/
|
|
21
23
|
export interface POITable {
|
|
22
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* 48-bit short H3 cell at res 9 (`latLngToCell` → `shortenH3Cell`).
|
|
26
|
+
*/
|
|
23
27
|
h3_cell: number
|
|
24
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Small int from {@link POICategoryCodeTable}; 0 = uncategorized.
|
|
30
|
+
*/
|
|
25
31
|
category_id: number
|
|
26
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* `-log10(confidence + epsilon)` so ASC = most-confident-first within a cell+category.
|
|
34
|
+
*/
|
|
27
35
|
neg_rank: number
|
|
28
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* Uniquifier within the clustered key (builder-assigned monotonic int).
|
|
38
|
+
*/
|
|
29
39
|
rowid_key: number
|
|
30
40
|
name: string | null
|
|
31
|
-
/**
|
|
41
|
+
/**
|
|
42
|
+
* Lowercased, diacritic-flattened probe key for exact name lookups.
|
|
43
|
+
*/
|
|
32
44
|
name_key: string | null
|
|
33
45
|
brand_wikidata: string | null
|
|
34
46
|
latitude: number
|
|
35
47
|
longitude: number
|
|
36
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* ISO 3166-1 alpha-2 (from the Overture partition).
|
|
50
|
+
*/
|
|
37
51
|
country: string
|
|
38
|
-
/**
|
|
52
|
+
/**
|
|
53
|
+
* Overture existence confidence (already filtered ≥ 0.85 at build).
|
|
54
|
+
*/
|
|
39
55
|
confidence: number
|
|
40
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* GERS id — nullable METADATA ONLY, never a key (the #470 rule).
|
|
58
|
+
*/
|
|
41
59
|
gers_id: string | null
|
|
42
60
|
}
|
|
43
61
|
|
|
@@ -60,7 +78,9 @@ export interface POIStageTable {
|
|
|
60
78
|
gers_id: string | null
|
|
61
79
|
}
|
|
62
80
|
|
|
63
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* `(id → poi-taxonomy category id)` dictionary, e.g. `3 → "cafe"`.
|
|
83
|
+
*/
|
|
64
84
|
export interface POICategoryCodeTable {
|
|
65
85
|
id: number
|
|
66
86
|
category: string
|
|
@@ -72,7 +92,9 @@ export interface POIDatabase extends LayerContractDatabase {
|
|
|
72
92
|
poi_category_codes: POICategoryCodeTable
|
|
73
93
|
}
|
|
74
94
|
|
|
75
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* Clustered-key-order column list shared by builder + `INSERT INTO poi SELECT … FROM poi_stage`.
|
|
97
|
+
*/
|
|
76
98
|
export const POI_COLUMNS = [
|
|
77
99
|
"h3_cell",
|
|
78
100
|
"category_id",
|
|
@@ -94,6 +116,7 @@ export async function createPOIStagingTables(db: Kysely<POIDatabase>): Promise<v
|
|
|
94
116
|
.addColumn("id", "integer", (c) => c.primaryKey())
|
|
95
117
|
.addColumn("category", "text", (c) => c.unique())
|
|
96
118
|
.execute()
|
|
119
|
+
|
|
97
120
|
await db.schema
|
|
98
121
|
.createTable("poi_stage")
|
|
99
122
|
.addColumn("h3_cell", "integer")
|
|
@@ -132,7 +155,9 @@ export async function createPOITable(db: Kysely<POIDatabase>): Promise<void> {
|
|
|
132
155
|
.execute()
|
|
133
156
|
}
|
|
134
157
|
|
|
135
|
-
/**
|
|
158
|
+
/**
|
|
159
|
+
* Secondary index for the FTS-hydration path. Builders call this AFTER the bulk materialize (index-after-load).
|
|
160
|
+
*/
|
|
136
161
|
export async function createPOINameKeyIndex(db: Kysely<POIDatabase>): Promise<void> {
|
|
137
162
|
await db.schema.createIndex("poi_name_key").on("poi").column("name_key").execute()
|
|
138
163
|
}
|
|
@@ -154,9 +179,14 @@ export async function createPOIBrandIndex(db: Kysely<POIDatabase>): Promise<void
|
|
|
154
179
|
.execute()
|
|
155
180
|
}
|
|
156
181
|
|
|
182
|
+
/**
|
|
183
|
+
* FTS5 virtual table backing POI name search in poi.db.
|
|
184
|
+
*/
|
|
157
185
|
export const POI_FTS_TABLE = "poi_search"
|
|
158
186
|
|
|
159
|
-
/**
|
|
187
|
+
/**
|
|
188
|
+
* FTS5 stays raw SQL by project rule (Kysely can't express virtual tables). Content-keyed by name_key.
|
|
189
|
+
*/
|
|
160
190
|
export function createPOISearchFTS(db: DatabaseSync): void {
|
|
161
191
|
db.exec(
|
|
162
192
|
`CREATE VIRTUAL TABLE ${POI_FTS_TABLE} USING fts5(name, name_key UNINDEXED, h3_cell UNINDEXED, tokenize = 'unicode61')`
|
|
@@ -23,19 +23,31 @@ import { DatabaseClient } from "@mailwoman/core/kysley/client"
|
|
|
23
23
|
import type { PostalCityAliasDatabase } from "./postal-city-alias-schema.ts"
|
|
24
24
|
|
|
25
25
|
export interface WOFPostalCityAliasLookupOpts {
|
|
26
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Path to a `postal-city-alias-<cc>.db` built by `build-postal-city-alias.ts`. Opened read-only.
|
|
28
|
+
*/
|
|
27
29
|
databasePath?: string
|
|
28
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Pre-opened handle (tests / shared connections). Mutually exclusive with `databasePath`.
|
|
32
|
+
*/
|
|
29
33
|
database?: DatabaseSync
|
|
30
34
|
}
|
|
31
35
|
|
|
32
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* One divergent alias edge: the postal-system name and the geographic locality it maps to.
|
|
38
|
+
*/
|
|
33
39
|
export interface PostalCityAlias {
|
|
34
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* The postal-system surface (what a user types).
|
|
42
|
+
*/
|
|
35
43
|
postalCity: string
|
|
36
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* The geographic locality name the postcode sits in (≈ the gazetteer's canonical name).
|
|
46
|
+
*/
|
|
37
47
|
geoLocality: string
|
|
38
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Observed usage count — the evidence weight.
|
|
50
|
+
*/
|
|
39
51
|
n: number
|
|
40
52
|
}
|
|
41
53
|
|
|
@@ -59,6 +71,7 @@ export class WOFPostalCityAliasLookup {
|
|
|
59
71
|
} else {
|
|
60
72
|
throw new Error("WOFPostalCityAliasLookup needs `databasePath` or `database`")
|
|
61
73
|
}
|
|
74
|
+
|
|
62
75
|
// `#kdb` wraps `#db` for the typed query; close() owns the raw handle directly (sync).
|
|
63
76
|
this.#kdb = new DatabaseClient<PostalCityAliasDatabase>({ database: this.#db })
|
|
64
77
|
}
|
|
@@ -71,6 +84,7 @@ export class WOFPostalCityAliasLookup {
|
|
|
71
84
|
const pc = postcode.trim()
|
|
72
85
|
|
|
73
86
|
if (!pc) return []
|
|
87
|
+
|
|
74
88
|
const rows = await this.#kdb
|
|
75
89
|
.selectFrom("postal_city_alias")
|
|
76
90
|
.select(["postal_city", "geo_locality", "n"])
|
|
@@ -23,28 +23,46 @@ import type { Kysely } from "kysely"
|
|
|
23
23
|
* a `MIN_COUNT` floor on `n`, so every row is a non-trivial usage.
|
|
24
24
|
*/
|
|
25
25
|
export interface PostalCityAliasTable {
|
|
26
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* The postcode the aggregate is scoped to (the resolver probes by this).
|
|
28
|
+
*/
|
|
27
29
|
postcode: string
|
|
28
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* What the postal system calls the place (the surface a user is likely to type).
|
|
32
|
+
*/
|
|
29
33
|
postal_city: string
|
|
30
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* The geographic locality name the postcode actually sits in (≈ the gazetteer's canonical name).
|
|
36
|
+
*/
|
|
31
37
|
geo_locality: string
|
|
32
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Observed row count — the evidence weight behind this alias.
|
|
40
|
+
*/
|
|
33
41
|
n: number
|
|
34
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* 1 when `postal_city != geo_locality` (the alias signal); 0 when they agree.
|
|
44
|
+
*/
|
|
35
45
|
divergent: number
|
|
36
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* Provenance: the dataset this aggregate came from (e.g. `overture:US`).
|
|
48
|
+
*/
|
|
37
49
|
source: string
|
|
38
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
* The pinned data release the aggregate was computed from.
|
|
52
|
+
*/
|
|
39
53
|
release: string
|
|
40
54
|
}
|
|
41
55
|
|
|
42
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* The postal-city-alias database schema for `new DatabaseClient<PostalCityAliasDatabase>(...)`.
|
|
58
|
+
*/
|
|
43
59
|
export interface PostalCityAliasDatabase {
|
|
44
60
|
postal_city_alias: PostalCityAliasTable
|
|
45
61
|
}
|
|
46
62
|
|
|
47
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* The `postal_city_alias` column order — the builder's INSERT derives its column list from this.
|
|
65
|
+
*/
|
|
48
66
|
export const POSTAL_CITY_ALIAS_COLUMNS = [
|
|
49
67
|
"postcode",
|
|
50
68
|
"postal_city",
|
|
@@ -70,6 +88,7 @@ export async function createPostalCityAliasTable(db: Kysely<PostalCityAliasDatab
|
|
|
70
88
|
.addColumn("source", "text", (c) => c.notNull())
|
|
71
89
|
.addColumn("release", "text", (c) => c.notNull())
|
|
72
90
|
.execute()
|
|
91
|
+
|
|
73
92
|
await db.schema.createIndex("idx_pca_postcode").on("postal_city_alias").column("postcode").execute()
|
|
74
93
|
await db.schema.createIndex("idx_pca_pair").on("postal_city_alias").columns(["postal_city", "geo_locality"]).execute()
|
|
75
94
|
}
|
|
@@ -25,13 +25,21 @@ import { sql, type Kysely } from "kysely"
|
|
|
25
25
|
* locality directly; the denormalized name/coord avoid a join back to `candidate`.
|
|
26
26
|
*/
|
|
27
27
|
export interface PostalCityCandidateTable {
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* {@link normalizeLocalityForKey} of the postal-city name — the build/query-consistent probe key.
|
|
30
|
+
*/
|
|
29
31
|
name_key: string
|
|
30
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* The postcode the alias is scoped to (the second half of the exact key).
|
|
34
|
+
*/
|
|
31
35
|
postcode: string
|
|
32
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* WOF id of the geographic locality the postcode sits in (the resolve target).
|
|
38
|
+
*/
|
|
33
39
|
spr_id: number
|
|
34
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* The geographic locality's display name.
|
|
42
|
+
*/
|
|
35
43
|
name: string
|
|
36
44
|
latitude: number
|
|
37
45
|
longitude: number
|
|
@@ -49,7 +57,9 @@ export interface PostalCityCandidateDatabase {
|
|
|
49
57
|
*/
|
|
50
58
|
export const POSTAL_CITY_CANDIDATE_TABLE = "postal_city_candidate"
|
|
51
59
|
|
|
52
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* Column order for the builder's positional INSERT.
|
|
62
|
+
*/
|
|
53
63
|
export const POSTAL_CITY_CANDIDATE_COLUMNS = [
|
|
54
64
|
"name_key",
|
|
55
65
|
"postcode",
|