@mailwoman/resolver-wof-sqlite 10.0.0 → 10.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 +9 -8
- package/lib/address/point/interpolation.ts +45 -39
- package/lib/address/point/schema.ts +17 -40
- package/lib/address/point.ts +316 -0
- package/lib/{address/index.ts → address.ts} +1 -1
- package/lib/ancestry/backfill.ts +20 -86
- package/lib/{ancestry/index.ts → ancestry.ts} +19 -15
- package/lib/build/candidate.ts +122 -174
- package/lib/build/population-corrections.ts +64 -0
- package/lib/build/slim.ts +44 -114
- package/lib/candidate/alias-bags.ts +16 -17
- package/lib/candidate/ancestors/schema.ts +77 -61
- package/lib/candidate/ancestors/sidecar.ts +15 -22
- package/lib/candidate/country-display-names.ts +6 -20
- package/lib/candidate/extract-fold.ts +10 -55
- package/lib/candidate/fts.ts +5 -23
- package/lib/candidate/importance.ts +65 -68
- package/lib/candidate/lookup.ts +124 -415
- package/lib/candidate/name-roles.ts +15 -33
- package/lib/candidate/own-name.ts +35 -32
- package/lib/candidate/place-attrs.ts +20 -13
- package/lib/candidate/schema.ts +29 -65
- package/lib/candidate/scoring.ts +54 -93
- package/lib/capital-schema.ts +21 -17
- package/lib/capitals.ts +29 -27
- package/lib/coincident-roles.ts +85 -55
- package/lib/convention/schema.ts +15 -16
- package/lib/convention.ts +144 -0
- package/lib/coverage-manifest-schema.ts +40 -45
- package/lib/currency-backfill.ts +34 -79
- package/lib/env.ts +1 -1
- package/lib/exact-match.ts +32 -21
- package/lib/extracts.ts +97 -74
- package/lib/fst/autocomplete.ts +54 -37
- package/lib/fst/builder.ts +37 -41
- package/lib/fst/deserialize-web.ts +16 -17
- package/lib/fst/format.ts +41 -23
- package/lib/fst/freshness.ts +43 -120
- package/lib/fst/matcher.ts +7 -5
- package/lib/fst/serialize.ts +54 -74
- package/lib/fst/types.ts +78 -75
- package/lib/{fst/index.ts → fst.ts} +1 -0
- package/lib/fts/query.ts +5 -36
- package/lib/fts.ts +280 -0
- package/lib/geonames/aliases.ts +73 -144
- package/lib/geonames/postal.ts +162 -71
- package/lib/index.ts +9 -8
- package/lib/interpolation.ts +48 -100
- package/lib/lookup.ts +155 -270
- package/lib/name-score.ts +9 -7
- package/lib/nsul/lookup.ts +37 -54
- package/lib/nsul/schema.ts +16 -43
- package/lib/paths.ts +159 -0
- package/lib/place-importance-schema.ts +62 -169
- package/lib/poi/lookup.ts +104 -121
- package/lib/poi/schema.ts +42 -26
- package/lib/polygon-schema.ts +10 -6
- package/lib/postal/city/alias/lookup.ts +22 -40
- package/lib/postal/city/alias/schema.ts +14 -10
- package/lib/postal/city/candidate-schema.ts +26 -20
- package/lib/postcode-point-lookup.ts +8 -27
- package/lib/primary-preference.ts +46 -126
- package/lib/proximity-rerank.ts +44 -33
- package/lib/ranking-weights.ts +105 -78
- package/lib/region-keys.ts +70 -42
- package/lib/reverse.ts +149 -86
- package/lib/schema.ts +73 -50
- package/lib/search-fetch.ts +90 -68
- package/lib/sqlite/convention-source.ts +15 -23
- package/lib/sqlite/utils.ts +19 -22
- package/lib/street/centroid/schema.ts +37 -42
- package/lib/street/{centroid/index.ts → centroid.ts} +16 -25
- package/lib/street/morphology/fst/builder.ts +60 -42
- package/lib/street/morphology/fst/loader.ts +40 -32
- package/lib/street/name-lookup.ts +45 -41
- package/lib/street/normalize.ts +88 -219
- package/lib/street/segment-schema.ts +116 -43
- package/lib/{street/index.ts → street.ts} +1 -1
- package/lib/types.ts +109 -150
- package/lib/unified-schema.ts +29 -29
- package/lib/uprn/existence.ts +30 -19
- package/lib/uprn/lookup.ts +29 -68
- package/lib/uprn/schema.ts +18 -40
- package/lib/weights-overlay-linker.ts +236 -252
- package/out/address/point/interpolation.d.ts +20 -23
- package/out/address/point/interpolation.d.ts.map +1 -1
- package/out/address/point/interpolation.js +42 -39
- package/out/address/point/interpolation.js.map +1 -1
- package/out/address/point/schema.d.ts +12 -35
- package/out/address/point/schema.d.ts.map +1 -1
- package/out/address/point/schema.js +3 -19
- package/out/address/point/schema.js.map +1 -1
- package/out/address/point.d.ts +57 -0
- package/out/address/point.d.ts.map +1 -0
- package/out/address/point.js +206 -0
- package/out/address/point.js.map +1 -0
- package/out/{address/index.js → address.d.ts} +2 -2
- package/out/address.d.ts.map +1 -0
- package/out/{address/index.d.ts → address.js} +2 -2
- package/out/address.js.map +1 -0
- package/out/ancestry/backfill.d.ts +11 -64
- package/out/ancestry/backfill.d.ts.map +1 -1
- package/out/ancestry/backfill.js +14 -74
- package/out/ancestry/backfill.js.map +1 -1
- package/out/ancestry.d.ts +49 -0
- package/out/ancestry.d.ts.map +1 -0
- package/out/ancestry.js +59 -0
- package/out/ancestry.js.map +1 -0
- package/out/build/candidate.d.ts +82 -112
- package/out/build/candidate.d.ts.map +1 -1
- package/out/build/candidate.js +17 -100
- package/out/build/candidate.js.map +1 -1
- package/out/build/population-corrections.d.ts +52 -0
- package/out/build/population-corrections.d.ts.map +1 -0
- package/out/build/population-corrections.js +40 -0
- package/out/build/population-corrections.js.map +1 -0
- package/out/build/slim.d.ts +8 -44
- package/out/build/slim.d.ts.map +1 -1
- package/out/build/slim.js +33 -94
- package/out/build/slim.js.map +1 -1
- package/out/candidate/alias-bags.d.ts +6 -6
- package/out/candidate/alias-bags.d.ts.map +1 -1
- package/out/candidate/alias-bags.js +16 -17
- package/out/candidate/alias-bags.js.map +1 -1
- package/out/candidate/ancestors/schema.d.ts +73 -57
- package/out/candidate/ancestors/schema.d.ts.map +1 -1
- package/out/candidate/ancestors/schema.js +56 -48
- package/out/candidate/ancestors/schema.js.map +1 -1
- package/out/candidate/ancestors/sidecar.d.ts +3 -8
- package/out/candidate/ancestors/sidecar.d.ts.map +1 -1
- package/out/candidate/ancestors/sidecar.js +15 -22
- package/out/candidate/ancestors/sidecar.js.map +1 -1
- package/out/candidate/country-display-names.d.ts +5 -15
- package/out/candidate/country-display-names.d.ts.map +1 -1
- package/out/candidate/country-display-names.js +6 -20
- package/out/candidate/country-display-names.js.map +1 -1
- package/out/candidate/extract-fold.d.ts +7 -15
- package/out/candidate/extract-fold.d.ts.map +1 -1
- package/out/candidate/extract-fold.js +5 -47
- package/out/candidate/extract-fold.js.map +1 -1
- package/out/candidate/fts.d.ts +5 -23
- package/out/candidate/fts.d.ts.map +1 -1
- package/out/candidate/fts.js +5 -23
- package/out/candidate/fts.js.map +1 -1
- package/out/candidate/importance.d.ts +60 -65
- package/out/candidate/importance.d.ts.map +1 -1
- package/out/candidate/importance.js +56 -63
- package/out/candidate/importance.js.map +1 -1
- package/out/candidate/lookup.d.ts +18 -55
- package/out/candidate/lookup.d.ts.map +1 -1
- package/out/candidate/lookup.js +82 -385
- package/out/candidate/lookup.js.map +1 -1
- package/out/candidate/name-roles.d.ts +9 -21
- package/out/candidate/name-roles.d.ts.map +1 -1
- package/out/candidate/name-roles.js +15 -33
- package/out/candidate/name-roles.js.map +1 -1
- package/out/candidate/own-name.d.ts +23 -25
- package/out/candidate/own-name.d.ts.map +1 -1
- package/out/candidate/own-name.js +35 -32
- package/out/candidate/own-name.js.map +1 -1
- package/out/candidate/place-attrs.d.ts +20 -13
- package/out/candidate/place-attrs.d.ts.map +1 -1
- package/out/candidate/place-attrs.js +4 -5
- package/out/candidate/place-attrs.js.map +1 -1
- package/out/candidate/schema.d.ts +27 -62
- package/out/candidate/schema.d.ts.map +1 -1
- package/out/candidate/schema.js +10 -22
- package/out/candidate/schema.js.map +1 -1
- package/out/candidate/scoring.d.ts +7 -8
- package/out/candidate/scoring.d.ts.map +1 -1
- package/out/candidate/scoring.js +52 -89
- package/out/candidate/scoring.js.map +1 -1
- package/out/capital-schema.d.ts +21 -17
- package/out/capital-schema.d.ts.map +1 -1
- package/out/capital-schema.js +17 -15
- package/out/capital-schema.js.map +1 -1
- package/out/capitals.d.ts +27 -25
- package/out/capitals.d.ts.map +1 -1
- package/out/capitals.js +23 -21
- package/out/capitals.js.map +1 -1
- package/out/coincident-roles.d.ts +60 -43
- package/out/coincident-roles.d.ts.map +1 -1
- package/out/coincident-roles.js +72 -50
- package/out/coincident-roles.js.map +1 -1
- package/out/convention/schema.d.ts +14 -14
- package/out/convention/schema.d.ts.map +1 -1
- package/out/convention/schema.js +6 -4
- package/out/convention/schema.js.map +1 -1
- package/out/convention.d.ts +97 -0
- package/out/convention.d.ts.map +1 -0
- package/out/convention.js +81 -0
- package/out/convention.js.map +1 -0
- package/out/coverage-manifest-schema.d.ts +34 -39
- package/out/coverage-manifest-schema.d.ts.map +1 -1
- package/out/coverage-manifest-schema.js +25 -34
- package/out/coverage-manifest-schema.js.map +1 -1
- package/out/currency-backfill.d.ts +16 -38
- package/out/currency-backfill.d.ts.map +1 -1
- package/out/currency-backfill.js +19 -46
- package/out/currency-backfill.js.map +1 -1
- package/out/env.d.ts +1 -1
- package/out/env.js +1 -1
- package/out/exact-match.d.ts +19 -10
- package/out/exact-match.d.ts.map +1 -1
- package/out/exact-match.js +32 -21
- package/out/exact-match.js.map +1 -1
- package/out/extracts.d.ts +66 -55
- package/out/extracts.d.ts.map +1 -1
- package/out/extracts.js +63 -55
- package/out/extracts.js.map +1 -1
- package/out/fst/autocomplete.d.ts +29 -21
- package/out/fst/autocomplete.d.ts.map +1 -1
- package/out/fst/autocomplete.js +39 -28
- package/out/fst/autocomplete.js.map +1 -1
- package/out/fst/builder.d.ts.map +1 -1
- package/out/fst/builder.js +37 -41
- package/out/fst/builder.js.map +1 -1
- package/out/fst/deserialize-web.d.ts +4 -4
- package/out/fst/deserialize-web.d.ts.map +1 -1
- package/out/fst/deserialize-web.js +15 -16
- package/out/fst/deserialize-web.js.map +1 -1
- package/out/fst/format.d.ts +41 -23
- package/out/fst/format.d.ts.map +1 -1
- package/out/fst/format.js +41 -23
- package/out/fst/format.js.map +1 -1
- package/out/fst/freshness.d.ts +19 -81
- package/out/fst/freshness.d.ts.map +1 -1
- package/out/fst/freshness.js +31 -94
- package/out/fst/freshness.js.map +1 -1
- package/out/fst/matcher.d.ts +5 -4
- package/out/fst/matcher.d.ts.map +1 -1
- package/out/fst/matcher.js +2 -2
- package/out/fst/matcher.js.map +1 -1
- package/out/fst/serialize.d.ts +28 -28
- package/out/fst/serialize.d.ts.map +1 -1
- package/out/fst/serialize.js +53 -71
- package/out/fst/serialize.js.map +1 -1
- package/out/fst/types.d.ts +78 -74
- package/out/fst/types.d.ts.map +1 -1
- package/out/fst/types.js +1 -4
- package/out/fst/types.js.map +1 -1
- package/out/{fst/index.js → fst.d.ts} +2 -1
- package/out/fst.d.ts.map +1 -0
- package/out/{fst/index.d.ts → fst.js} +2 -1
- package/out/fst.js.map +1 -0
- package/out/fts/query.d.ts +2 -27
- package/out/fts/query.d.ts.map +1 -1
- package/out/fts/query.js +5 -36
- package/out/fts/query.js.map +1 -1
- package/out/fts.d.ts +126 -0
- package/out/fts.d.ts.map +1 -0
- package/out/fts.js +188 -0
- package/out/fts.js.map +1 -0
- package/out/geonames/aliases.d.ts +26 -62
- package/out/geonames/aliases.d.ts.map +1 -1
- package/out/geonames/aliases.js +45 -117
- package/out/geonames/aliases.js.map +1 -1
- package/out/geonames/postal.d.ts +84 -44
- package/out/geonames/postal.d.ts.map +1 -1
- package/out/geonames/postal.js +115 -73
- package/out/geonames/postal.js.map +1 -1
- package/out/{geonames/index.js → geonames.d.ts} +1 -1
- package/out/geonames.d.ts.map +1 -0
- package/out/{geonames/index.d.ts → geonames.js} +1 -1
- package/out/geonames.js.map +1 -0
- package/out/index.d.ts +9 -8
- package/out/index.d.ts.map +1 -1
- package/out/index.js +6 -5
- package/out/index.js.map +1 -1
- package/out/interpolation.d.ts +18 -55
- package/out/interpolation.d.ts.map +1 -1
- package/out/interpolation.js +27 -69
- package/out/interpolation.js.map +1 -1
- package/out/lookup.d.ts +23 -51
- package/out/lookup.d.ts.map +1 -1
- package/out/lookup.js +136 -234
- package/out/lookup.js.map +1 -1
- package/out/name-score.d.ts +2 -2
- package/out/name-score.d.ts.map +1 -1
- package/out/name-score.js +9 -7
- package/out/name-score.js.map +1 -1
- package/out/nsul/lookup.d.ts +33 -34
- package/out/nsul/lookup.d.ts.map +1 -1
- package/out/nsul/lookup.js +26 -40
- package/out/nsul/lookup.js.map +1 -1
- package/out/nsul/schema.d.ts +16 -43
- package/out/nsul/schema.d.ts.map +1 -1
- package/out/nsul/schema.js +9 -35
- package/out/nsul/schema.js.map +1 -1
- package/out/{nsul/index.d.ts → nsul.d.ts} +1 -1
- package/out/nsul.d.ts.map +1 -0
- package/out/{nsul/index.js → nsul.js} +1 -1
- package/out/nsul.js.map +1 -0
- package/out/paths.d.ts +124 -0
- package/out/paths.d.ts.map +1 -0
- package/out/paths.js +104 -0
- package/out/paths.js.map +1 -0
- package/out/place-importance-schema.d.ts +51 -143
- package/out/place-importance-schema.d.ts.map +1 -1
- package/out/place-importance-schema.js +28 -143
- package/out/place-importance-schema.js.map +1 -1
- package/out/poi/lookup.d.ts +40 -47
- package/out/poi/lookup.d.ts.map +1 -1
- package/out/poi/lookup.js +69 -96
- package/out/poi/lookup.js.map +1 -1
- package/out/poi/schema.d.ts +41 -25
- package/out/poi/schema.d.ts.map +1 -1
- package/out/poi/schema.js +25 -17
- package/out/poi/schema.js.map +1 -1
- package/out/{poi/index.js → poi.d.ts} +1 -1
- package/out/poi.d.ts.map +1 -0
- package/out/{poi/index.d.ts → poi.js} +1 -1
- package/out/poi.js.map +1 -0
- package/out/polygon-schema.d.ts +10 -6
- package/out/polygon-schema.d.ts.map +1 -1
- package/out/polygon-schema.js +2 -2
- package/out/polygon-schema.js.map +1 -1
- package/out/postal/city/alias/lookup.d.ts +20 -23
- package/out/postal/city/alias/lookup.d.ts.map +1 -1
- package/out/postal/city/alias/lookup.js +17 -30
- package/out/postal/city/alias/lookup.js.map +1 -1
- package/out/postal/city/alias/schema.d.ts +14 -10
- package/out/postal/city/alias/schema.d.ts.map +1 -1
- package/out/postal/city/alias/schema.js +10 -8
- package/out/postal/city/alias/schema.js.map +1 -1
- package/out/postal/city/candidate-schema.d.ts +25 -19
- package/out/postal/city/candidate-schema.d.ts.map +1 -1
- package/out/postal/city/candidate-schema.js +21 -17
- package/out/postal/city/candidate-schema.js.map +1 -1
- package/out/{postal/index.d.ts → postal.d.ts} +1 -1
- package/out/postal.d.ts.map +1 -0
- package/out/{postal/index.js → postal.js} +1 -1
- package/out/postal.js.map +1 -0
- package/out/postcode-point-lookup.d.ts +6 -24
- package/out/postcode-point-lookup.d.ts.map +1 -1
- package/out/postcode-point-lookup.js +5 -17
- package/out/postcode-point-lookup.js.map +1 -1
- package/out/primary-preference.d.ts +38 -92
- package/out/primary-preference.d.ts.map +1 -1
- package/out/primary-preference.js +15 -99
- package/out/primary-preference.js.map +1 -1
- package/out/proximity-rerank.d.ts +41 -30
- package/out/proximity-rerank.d.ts.map +1 -1
- package/out/proximity-rerank.js +38 -29
- package/out/proximity-rerank.js.map +1 -1
- package/out/ranking-weights.d.ts +98 -64
- package/out/ranking-weights.d.ts.map +1 -1
- package/out/ranking-weights.js +26 -25
- package/out/ranking-weights.js.map +1 -1
- package/out/region-keys.d.ts +50 -31
- package/out/region-keys.d.ts.map +1 -1
- package/out/region-keys.js +68 -40
- package/out/region-keys.js.map +1 -1
- package/out/reverse.d.ts +78 -50
- package/out/reverse.d.ts.map +1 -1
- package/out/reverse.js +98 -61
- package/out/reverse.js.map +1 -1
- package/out/schema.d.ts +72 -49
- package/out/schema.d.ts.map +1 -1
- package/out/schema.js +4 -5
- package/out/schema.js.map +1 -1
- package/out/search-fetch.d.ts +16 -12
- package/out/search-fetch.d.ts.map +1 -1
- package/out/search-fetch.js +83 -63
- package/out/search-fetch.js.map +1 -1
- package/out/sqlite/convention-source.d.ts +12 -16
- package/out/sqlite/convention-source.d.ts.map +1 -1
- package/out/sqlite/convention-source.js +13 -22
- package/out/sqlite/convention-source.js.map +1 -1
- package/out/sqlite/utils.d.ts +19 -19
- package/out/sqlite/utils.d.ts.map +1 -1
- package/out/sqlite/utils.js +14 -15
- package/out/sqlite/utils.js.map +1 -1
- package/out/street/centroid/schema.d.ts +37 -42
- package/out/street/centroid/schema.d.ts.map +1 -1
- package/out/street/centroid/schema.js +9 -21
- package/out/street/centroid/schema.js.map +1 -1
- package/out/street/centroid.d.ts +30 -0
- package/out/street/centroid.d.ts.map +1 -0
- package/out/street/{centroid/index.js → centroid.js} +13 -24
- package/out/street/centroid.js.map +1 -0
- package/out/street/morphology/fst/builder.d.ts +20 -10
- package/out/street/morphology/fst/builder.d.ts.map +1 -1
- package/out/street/morphology/fst/builder.js +44 -34
- package/out/street/morphology/fst/builder.js.map +1 -1
- package/out/street/morphology/fst/loader.d.ts +33 -26
- package/out/street/morphology/fst/loader.d.ts.map +1 -1
- package/out/street/morphology/fst/loader.js +23 -22
- package/out/street/morphology/fst/loader.js.map +1 -1
- package/out/street/name-lookup.d.ts +24 -18
- package/out/street/name-lookup.d.ts.map +1 -1
- package/out/street/name-lookup.js +34 -35
- package/out/street/name-lookup.js.map +1 -1
- package/out/street/normalize.d.ts +35 -136
- package/out/street/normalize.d.ts.map +1 -1
- package/out/street/normalize.js +77 -194
- package/out/street/normalize.js.map +1 -1
- package/out/street/segment-schema.d.ts +79 -39
- package/out/street/segment-schema.d.ts.map +1 -1
- package/out/street/segment-schema.js +71 -21
- package/out/street/segment-schema.js.map +1 -1
- package/out/{street/index.js → street.d.ts} +2 -2
- package/out/street.d.ts.map +1 -0
- package/out/{street/index.d.ts → street.js} +2 -2
- package/out/street.js.map +1 -0
- package/out/types.d.ts +84 -149
- package/out/types.d.ts.map +1 -1
- package/out/types.js +0 -6
- package/out/types.js.map +1 -1
- package/out/unified-schema.d.ts +8 -12
- package/out/unified-schema.d.ts.map +1 -1
- package/out/unified-schema.js +29 -29
- package/out/unified-schema.js.map +1 -1
- package/out/uprn/existence.d.ts +28 -17
- package/out/uprn/existence.d.ts.map +1 -1
- package/out/uprn/existence.js +26 -16
- package/out/uprn/existence.js.map +1 -1
- package/out/uprn/lookup.d.ts +14 -44
- package/out/uprn/lookup.d.ts.map +1 -1
- package/out/uprn/lookup.js +21 -57
- package/out/uprn/lookup.js.map +1 -1
- package/out/uprn/schema.d.ts +18 -40
- package/out/uprn/schema.d.ts.map +1 -1
- package/out/uprn/schema.js +10 -32
- package/out/uprn/schema.js.map +1 -1
- package/out/{uprn/index.d.ts → uprn.d.ts} +1 -1
- package/out/uprn.d.ts.map +1 -0
- package/out/{uprn/index.js → uprn.js} +1 -1
- package/out/uprn.js.map +1 -0
- package/out/weights-overlay-linker.d.ts +138 -144
- package/out/weights-overlay-linker.d.ts.map +1 -1
- package/out/weights-overlay-linker.js +105 -159
- package/out/weights-overlay-linker.js.map +1 -1
- package/package.json +91 -596
- package/lib/address/point/index.ts +0 -328
- package/lib/convention/index.ts +0 -154
- package/lib/fts/index.ts +0 -361
- package/out/address/index.d.ts.map +0 -1
- package/out/address/index.js.map +0 -1
- package/out/address/point/index.d.ts +0 -53
- package/out/address/point/index.d.ts.map +0 -1
- package/out/address/point/index.js +0 -222
- package/out/address/point/index.js.map +0 -1
- package/out/ancestry/index.d.ts +0 -45
- package/out/ancestry/index.d.ts.map +0 -1
- package/out/ancestry/index.js +0 -55
- package/out/ancestry/index.js.map +0 -1
- package/out/convention/index.d.ts +0 -106
- package/out/convention/index.d.ts.map +0 -1
- package/out/convention/index.js +0 -93
- package/out/convention/index.js.map +0 -1
- package/out/fst/index.d.ts.map +0 -1
- package/out/fst/index.js.map +0 -1
- package/out/fts/index.d.ts +0 -184
- package/out/fts/index.d.ts.map +0 -1
- package/out/fts/index.js +0 -277
- package/out/fts/index.js.map +0 -1
- package/out/geonames/index.d.ts.map +0 -1
- package/out/geonames/index.js.map +0 -1
- package/out/nsul/index.d.ts.map +0 -1
- package/out/nsul/index.js.map +0 -1
- package/out/poi/index.d.ts.map +0 -1
- package/out/poi/index.js.map +0 -1
- package/out/postal/index.d.ts.map +0 -1
- package/out/postal/index.js.map +0 -1
- package/out/street/centroid/index.d.ts +0 -40
- package/out/street/centroid/index.d.ts.map +0 -1
- package/out/street/centroid/index.js.map +0 -1
- package/out/street/index.d.ts.map +0 -1
- package/out/street/index.js.map +0 -1
- package/out/uprn/index.d.ts.map +0 -1
- package/out/uprn/index.js.map +0 -1
- /package/lib/{geonames/index.ts → geonames.ts} +0 -0
- /package/lib/{nsul/index.ts → nsul.ts} +0 -0
- /package/lib/{poi/index.ts → poi.ts} +0 -0
- /package/lib/{postal/index.ts → postal.ts} +0 -0
- /package/lib/{uprn/index.ts → uprn.ts} +0 -0
|
@@ -3,43 +3,49 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Typed schema for the
|
|
7
|
-
* built by `scripts/build-interpolation-extract.ts` from
|
|
8
|
-
* the resolver drops to when the address-point tier (Method 2)
|
|
9
|
-
*
|
|
10
|
-
* a column rename in one is a compile error in the other.
|
|
11
|
-
*
|
|
12
|
-
* The builder reads geometry from shapefiles via DuckDB's spatial extension (raw `ST_Read
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* {@link STREET_SEGMENT_COLUMNS} so it
|
|
6
|
+
* Typed schema for the tiger street-segment interpolation extracts (`street-segments-<cc>-<st>.db`,
|
|
7
|
+
* built by `scripts/build-interpolation-extract.ts` from tiger edges). This is the Method-3
|
|
8
|
+
* fallback the resolver drops to when the address-point tier (Method 2) cannot bracket. It is the
|
|
9
|
+
* definition of the columns the builder writes and the reader ({@link StreetInterpolator}) probes,
|
|
10
|
+
* so a column rename in one is a compile error in the other.
|
|
11
|
+
*
|
|
12
|
+
* The builder reads geometry from shapefiles via DuckDB's spatial extension (raw `ST_Read`, see
|
|
13
|
+
* agents.md "Database / inline SQL") and writes here through `node:sqlite`. The hot positional
|
|
14
|
+
* insert (a county's worth of edges) stays raw. Its column list derives from
|
|
15
|
+
* {@link STREET_SEGMENT_COLUMNS} so it cannot drift from the DDL.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import type
|
|
18
|
+
import { type Kysely, sql } from "kysely"
|
|
19
19
|
|
|
20
20
|
import type { RouteKey } from "#street/normalize"
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
|
-
* One
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* One tiger street-segment edge: a `(from_hn, to_hn)` house-number range on one `side`
|
|
24
|
+
* of a street with a name, with the geometry the interpolator walks.
|
|
25
|
+
*
|
|
26
|
+
* `min_hn`/`max_hn` are the sorted bounds used by the probe.
|
|
27
|
+
* `parity` is `odd`, `even`, or `mixed`.
|
|
26
28
|
*/
|
|
27
29
|
export interface StreetSegmentTable {
|
|
28
30
|
/**
|
|
29
|
-
* `canonicalizeRouteKey(normalizeStreetForKey(street))
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
31
|
+
* `canonicalizeRouteKey(normalizeStreetForKey(street))`, the build/query-consistent probe key.
|
|
32
|
+
*
|
|
33
|
+
* The column name is `street_norm`, but the value includes the route fold on top of the street fold.
|
|
34
|
+
* The value therefore uses the {@link RouteKey} brand.
|
|
35
|
+
*
|
|
36
|
+
* The builder and probe apply both folds.
|
|
37
|
+
* A plain street key bound here misses every numbered-route row.
|
|
33
38
|
*/
|
|
34
39
|
street_norm: RouteKey
|
|
35
40
|
/**
|
|
36
|
-
* `L` or `R
|
|
41
|
+
* `L` or `R`, the tiger side the address range sits on.
|
|
37
42
|
*/
|
|
38
43
|
side: string
|
|
39
44
|
from_hn: number
|
|
40
45
|
to_hn: number
|
|
41
46
|
/**
|
|
42
|
-
* Sorted lower bound of `(from_hn, to_hn)
|
|
47
|
+
* Sorted lower bound of `(from_hn, to_hn)`.
|
|
48
|
+
* The probe filters `min_hn <= n <= max_hn`.
|
|
43
49
|
*/
|
|
44
50
|
min_hn: number
|
|
45
51
|
/**
|
|
@@ -47,7 +53,7 @@ export interface StreetSegmentTable {
|
|
|
47
53
|
*/
|
|
48
54
|
max_hn: number
|
|
49
55
|
/**
|
|
50
|
-
* `odd
|
|
56
|
+
* `odd`, `even` or `mixed`, the house-number parity along the range.
|
|
51
57
|
*/
|
|
52
58
|
parity: string
|
|
53
59
|
postcode: string | null
|
|
@@ -56,11 +62,12 @@ export interface StreetSegmentTable {
|
|
|
56
62
|
*/
|
|
57
63
|
county_fips: string
|
|
58
64
|
/**
|
|
59
|
-
* The street as it appeared in
|
|
65
|
+
* The street as it appeared in tiger (kept for display / debugging).
|
|
60
66
|
*/
|
|
61
67
|
street_raw: string
|
|
62
68
|
/**
|
|
63
|
-
* GeoJSON LineString text
|
|
69
|
+
* GeoJSON LineString text without SpatiaLite.
|
|
70
|
+
* Read back with `JSON.parse`.
|
|
64
71
|
*/
|
|
65
72
|
geometry: string
|
|
66
73
|
/**
|
|
@@ -68,21 +75,27 @@ export interface StreetSegmentTable {
|
|
|
68
75
|
*/
|
|
69
76
|
source: string
|
|
70
77
|
/**
|
|
71
|
-
* The pinned
|
|
78
|
+
* The pinned tiger release the edge was ingested from.
|
|
72
79
|
*/
|
|
73
80
|
release: string
|
|
74
81
|
}
|
|
75
82
|
|
|
76
83
|
/**
|
|
77
|
-
* The extract's single-row calibration metadata
|
|
78
|
-
* property of the
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
84
|
+
* The extract's single-row calibration metadata: the conformal radius multiplier
|
|
85
|
+
* is a property of the calibration set the artifact was built against,
|
|
86
|
+
* so it ships in the artifact rather than in caller code.
|
|
87
|
+
*
|
|
88
|
+
* See the pair-index precedent in `neural/pair-index-resolver.ts`.
|
|
89
|
+
*
|
|
90
|
+
* The builder writes this table once. {@link StreetInterpolator} reads it when opening the database.
|
|
91
|
+
*
|
|
92
|
+
* Extracts built before this table exists lack it.
|
|
93
|
+
* The reader degrades to `undefined`, and callers fall back to the in-code per-region table.
|
|
94
|
+
* Shipped DBs are rebuilt rather than patched.
|
|
82
95
|
*/
|
|
83
96
|
export interface InterpCalibrationRow {
|
|
84
97
|
/**
|
|
85
|
-
* Conformal multiplier for the raw half-segment `uncertainty_m` radius
|
|
98
|
+
* Conformal multiplier for the raw half-segment `uncertainty_m` radius, ×Q̂ for a ~90% bound.
|
|
86
99
|
*/
|
|
87
100
|
radius_multiplier: number
|
|
88
101
|
/**
|
|
@@ -90,7 +103,8 @@ export interface InterpCalibrationRow {
|
|
|
90
103
|
*/
|
|
91
104
|
method: string
|
|
92
105
|
/**
|
|
93
|
-
* The calibration-table key the multiplier was selected by
|
|
106
|
+
* The calibration-table key the multiplier was selected by
|
|
107
|
+
* (a USPS region code, or `default` for unmeasured).
|
|
94
108
|
*/
|
|
95
109
|
region: string
|
|
96
110
|
}
|
|
@@ -104,8 +118,10 @@ export interface StreetSegmentDatabase {
|
|
|
104
118
|
}
|
|
105
119
|
|
|
106
120
|
/**
|
|
107
|
-
* The `street_segment` columns in
|
|
108
|
-
*
|
|
121
|
+
* The `street_segment` columns in insert order.
|
|
122
|
+
*
|
|
123
|
+
* The builder's positional prepared statement derives its placeholder list from this,
|
|
124
|
+
* so the positional order can't drift from the DDL / the reader.
|
|
109
125
|
*/
|
|
110
126
|
export const STREET_SEGMENT_COLUMNS = [
|
|
111
127
|
"street_norm",
|
|
@@ -124,11 +140,20 @@ export const STREET_SEGMENT_COLUMNS = [
|
|
|
124
140
|
] as const
|
|
125
141
|
|
|
126
142
|
/**
|
|
127
|
-
*
|
|
143
|
+
* The staging table the builder bulk-loads in source order before {@link clusterStreetSegments}
|
|
144
|
+
* copies its rows into `street_segment` in probe-key order.
|
|
145
|
+
*/
|
|
146
|
+
export const STREET_SEGMENT_STAGE_TABLE = "street_segment_stage"
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Create the `street_segment` table, or the staging table with the same columns.
|
|
128
150
|
*/
|
|
129
|
-
export async function createStreetSegmentTable(
|
|
151
|
+
export async function createStreetSegmentTable(
|
|
152
|
+
db: Kysely<StreetSegmentDatabase>,
|
|
153
|
+
table: "street_segment" | typeof STREET_SEGMENT_STAGE_TABLE = "street_segment"
|
|
154
|
+
): Promise<void> {
|
|
130
155
|
await db.schema
|
|
131
|
-
.createTable(
|
|
156
|
+
.createTable(table)
|
|
132
157
|
.addColumn("street_norm", "text", (c) => c.notNull())
|
|
133
158
|
.addColumn("side", "text", (c) => c.notNull())
|
|
134
159
|
.addColumn("from_hn", "integer", (c) => c.notNull())
|
|
@@ -146,10 +171,13 @@ export async function createStreetSegmentTable(db: Kysely<StreetSegmentDatabase>
|
|
|
146
171
|
}
|
|
147
172
|
|
|
148
173
|
/**
|
|
149
|
-
* Create
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
174
|
+
* Create and populate the single-row `interp_calibration` metadata table (see {@link InterpCalibrationRow}).
|
|
175
|
+
*
|
|
176
|
+
* Called once by the extract builder, after the value is selected from the calibration source of record.
|
|
177
|
+
*
|
|
178
|
+
* Build-time only, so async Kysely is fine here.
|
|
179
|
+
* The read side is the raw sync probe in {@link StreetInterpolator}'s constructor,
|
|
180
|
+
* per the sync-by-interface doctrine.
|
|
153
181
|
*/
|
|
154
182
|
export async function writeInterpCalibration(
|
|
155
183
|
db: Kysely<StreetSegmentDatabase>,
|
|
@@ -166,14 +194,59 @@ export async function writeInterpCalibration(
|
|
|
166
194
|
}
|
|
167
195
|
|
|
168
196
|
/**
|
|
169
|
-
*
|
|
197
|
+
* The physical row order of `street_segment`: street first, then postcode and range.
|
|
198
|
+
*
|
|
199
|
+
* The browser reads the extract over HTTP range requests.
|
|
200
|
+
* Both probe forms fetch their matching rows from the table.
|
|
201
|
+
*
|
|
202
|
+
* In this order the postcode-scoped probe reads one contiguous run of rows.
|
|
203
|
+
* The street-only probe reads within one street's contiguous block.
|
|
204
|
+
*
|
|
205
|
+
* The staging rowid is the last key, so rows with equal keys keep their source order.
|
|
206
|
+
* The readers break span ties by that order.
|
|
207
|
+
*/
|
|
208
|
+
const STREET_SEGMENT_CLUSTER_ORDER = "street_norm, postcode, min_hn, max_hn, rowid"
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Copy the staged rows into `street_segment` in key order and drop the stage.
|
|
212
|
+
*
|
|
213
|
+
* The order is {@link STREET_SEGMENT_CLUSTER_ORDER}.
|
|
214
|
+
*
|
|
215
|
+
* `street_segment` stays a rowid table, because `postcode` is nullable.
|
|
216
|
+
* A `WITHOUT ROWID` primary key forbids a null column.
|
|
217
|
+
* A load in key order gives the same page locality.
|
|
218
|
+
*
|
|
219
|
+
* Run {@link createStreetSegmentIndexes} and `VACUUM` afterwards.
|
|
220
|
+
*/
|
|
221
|
+
export async function clusterStreetSegments(db: Kysely<StreetSegmentDatabase>): Promise<void> {
|
|
222
|
+
const columns = STREET_SEGMENT_COLUMNS.join(", ")
|
|
223
|
+
|
|
224
|
+
await sql
|
|
225
|
+
.raw(
|
|
226
|
+
`INSERT INTO street_segment (${columns}) SELECT ${columns} FROM ${STREET_SEGMENT_STAGE_TABLE} ORDER BY ${STREET_SEGMENT_CLUSTER_ORDER}`
|
|
227
|
+
)
|
|
228
|
+
.execute(db)
|
|
229
|
+
|
|
230
|
+
await db.schema.dropTable(STREET_SEGMENT_STAGE_TABLE).execute()
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Create the two probe indexes the readers use (postcode-scope, street-scope).
|
|
235
|
+
*
|
|
236
|
+
* Each index holds `max_hn`.
|
|
237
|
+
* SQLite therefore rejects a range ending below the house number from the index entry.
|
|
238
|
+
* The rejected row's table page is never fetched.
|
|
170
239
|
*/
|
|
171
240
|
export async function createStreetSegmentIndexes(db: Kysely<StreetSegmentDatabase>): Promise<void> {
|
|
172
241
|
await db.schema
|
|
173
242
|
.createIndex("idx_seg_postcode")
|
|
174
243
|
.on("street_segment")
|
|
175
|
-
.columns(["postcode", "street_norm", "min_hn"])
|
|
244
|
+
.columns(["postcode", "street_norm", "min_hn", "max_hn"])
|
|
176
245
|
.execute()
|
|
177
246
|
|
|
178
|
-
await db.schema
|
|
247
|
+
await db.schema
|
|
248
|
+
.createIndex("idx_seg_street")
|
|
249
|
+
.on("street_segment")
|
|
250
|
+
.columns(["street_norm", "min_hn", "max_hn"])
|
|
251
|
+
.execute()
|
|
179
252
|
}
|
package/lib/types.ts
CHANGED
|
@@ -2,19 +2,12 @@
|
|
|
2
2
|
* @copyright Sister Software
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
|
-
*
|
|
6
|
-
* Public surface for the WOF SQLite resolver — types only, no runtime.
|
|
7
|
-
*
|
|
8
|
-
* These mirror the conceptual model described in `docs/plan/phases/PHASE_4_2_wof_sqlite.md`. Phase
|
|
9
|
-
* 4.3 will extend `PlaceCandidate` with the resolver-decorated fields that flow into
|
|
10
|
-
* `AddressNode.source` / `sourceID` (e.g. an explicit `wofURI: "wof-admin:101751113"` form).
|
|
11
5
|
*/
|
|
12
6
|
|
|
7
|
+
import type { LatLon, LatLonBounds } from "@mailwoman/spatial"
|
|
8
|
+
|
|
13
9
|
/**
|
|
14
|
-
*
|
|
15
|
-
* https://github.com/whosonfirst/whosonfirst-placetypes for the authoritative definitions of each.
|
|
16
|
-
*
|
|
17
|
-
* Phase 4.2 only emits the ones we actually look up; the union is open enough to extend later.
|
|
10
|
+
* Lists the Who's On First placetypes this resolver looks up, ordered roughly from coarsest to finest.
|
|
18
11
|
*/
|
|
19
12
|
export type WOFPlacetype =
|
|
20
13
|
| "country"
|
|
@@ -33,222 +26,188 @@ export type WOFPlacetype =
|
|
|
33
26
|
| "address"
|
|
34
27
|
|
|
35
28
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* `score` is the post-boost ranking number — higher is better, but the scale is implementation- defined. Callers should
|
|
39
|
-
* treat it as ordinal, not absolute.
|
|
40
|
-
*
|
|
41
|
-
* `id` is the WOF place id. It's named generically (not `wof_id`) so the shape stays structurally compatible with
|
|
42
|
-
* `@mailwoman/resolver`'s `ResolvedPlace` — `WOFSQLitePlaceLookup` satisfies the generic `ResolverBackend` contract
|
|
43
|
-
* without an adapter shim.
|
|
44
|
-
*
|
|
45
|
-
* `distanceKm` is populated only when the query carried `near` (and the place has a centroid). Useful for downstream
|
|
46
|
-
* UIs that want to show "X km from you" alongside the result.
|
|
29
|
+
* Describes one ranked match for a place lookup, with `id` as the WOF id
|
|
30
|
+
* so the shape satisfies `ResolvedPlace`.
|
|
47
31
|
*/
|
|
48
32
|
export interface PlaceCandidate {
|
|
49
33
|
id: number
|
|
50
34
|
name: string
|
|
51
35
|
placetype: WOFPlacetype
|
|
36
|
+
|
|
52
37
|
/**
|
|
53
|
-
* ISO 3166-1 alpha-2 country code.
|
|
38
|
+
* The ISO 3166-1 alpha-2 country code.
|
|
54
39
|
*/
|
|
55
40
|
country: string
|
|
56
41
|
lat: number
|
|
57
42
|
lon: number
|
|
58
|
-
|
|
59
|
-
score: number
|
|
60
|
-
distanceKm?: number
|
|
43
|
+
|
|
61
44
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* `resolveTree`) can pin the country without crossing the tier — see the `exactMatch` field on `@mailwoman/core`'s
|
|
65
|
-
* `ResolvedPlace`.
|
|
45
|
+
* The place's depth-1 ancestor id from the ancestors sidecar, absent when the
|
|
46
|
+
* artifact has no sidecar even for a place with a parent.
|
|
66
47
|
*/
|
|
67
|
-
|
|
48
|
+
parent_id: number | null
|
|
49
|
+
score: number
|
|
50
|
+
distanceKm: number | null
|
|
51
|
+
|
|
68
52
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* (`near`/`bias`).
|
|
53
|
+
* Whether the candidate's name or an alias exactly equals the query, used by a
|
|
54
|
+
* later re-rank to stay within the exact-match tier.
|
|
72
55
|
*/
|
|
73
|
-
|
|
56
|
+
exactMatch: boolean | null
|
|
57
|
+
|
|
74
58
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
59
|
+
* The population term plus the best proximity-bias term.
|
|
60
|
+
*
|
|
61
|
+
* The exact tier sorts by this value instead of population when the query has `near` or `bias`.
|
|
77
62
|
*/
|
|
78
|
-
|
|
63
|
+
prominence: number | null
|
|
64
|
+
|
|
79
65
|
/**
|
|
80
|
-
*
|
|
81
|
-
* this resolver has always ranked namesakes by (ROAD_TO_V9 §2, ratified 2026-08-06).
|
|
82
|
-
*
|
|
83
|
-
* It is a strictly-increasing function of {@link PlaceCandidate.population} below `REFERENTIAL_SATURATION_POPULATION`
|
|
84
|
-
* and constant above it, so ordering by it — via `compareReferential`, which restores the megacity order with a
|
|
85
|
-
* population tiebreak — is the SAME ORDER as ordering by population. That equivalence is the point: naming the
|
|
86
|
-
* ranking key costs nothing at the ranking.
|
|
87
|
-
*
|
|
88
|
-
* Absent when the candidate has no population on record, exactly as {@link PlaceCandidate.population} is.
|
|
66
|
+
* The WOF `wof:population` value, absent when the population is unknown.
|
|
89
67
|
*/
|
|
90
|
-
|
|
68
|
+
population: number | null
|
|
69
|
+
|
|
91
70
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* RESERVED SLOT awaiting a strict-channel source: present only when a extract's `place_importance` table carries the
|
|
95
|
-
* split columns, and no shipped extract does — the FTS lookup's clauses emit NULL for everything today. `undefined`
|
|
96
|
-
* means either "no encyclopedia entry for this place" or "this gazetteer predates the split"; both are absence, and
|
|
97
|
-
* neither is 0. The BLENDED prior the ranking reads is {@link PlaceCandidate.importance}.
|
|
98
|
-
*
|
|
99
|
-
* Saint-Denis is why this is not a ranking key: the Seine-Saint-Denis suburb (pop 96,128) scores 0.1173 while the
|
|
100
|
-
* Aude hamlet (pop 418) scores 0.5683. Consumers that want to display salience read this; the ranking never does.
|
|
71
|
+
* The referential likelihood in [0, 1], derived from {@link PlaceCandidate.population}
|
|
72
|
+
* and absent whenever it is.
|
|
101
73
|
*/
|
|
102
|
-
|
|
74
|
+
referential: number | null
|
|
75
|
+
|
|
103
76
|
/**
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
* Emitted only by the candidate-table backend, and only when the artifact measured this place — absent is UNMEASURED,
|
|
107
|
-
* never zero. Consumed by `rankByImportance` (`resolver/toponym-prior.ts`) for the bare-toponym class. See
|
|
108
|
-
* `candidate-schema.ts` → `CandidateTable.importance` for why the blend, not the strict channel, is what ships.
|
|
77
|
+
* The encyclopedia-evidence importance in [0, 1], used for display only and present only
|
|
78
|
+
* when the extract's `place_importance` table has the split columns.
|
|
109
79
|
*/
|
|
110
|
-
|
|
80
|
+
encyclopedic: number | null
|
|
81
|
+
|
|
111
82
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
* callers ask for it; implementations are free to omit when the underlying schema lacks the columns.
|
|
83
|
+
* The blended toponym prior in [0, 1] that `rankByImportance` reads for bare toponyms,
|
|
84
|
+
* set only by the candidate-table backend.
|
|
115
85
|
*/
|
|
116
|
-
|
|
86
|
+
importance: number | null
|
|
87
|
+
|
|
117
88
|
/**
|
|
118
|
-
*
|
|
119
|
-
* geographically far apart — the postcode and the parsed city name disagree (a transposed / wrong-for-the-city
|
|
120
|
-
* postcode). The candidate is still returned (the name wins for the locality), but the flag lets callers lower
|
|
121
|
-
* confidence / surface the conflict rather than silently mislocate. A retrieval/BM25 geocoder can't raise this — it's
|
|
122
|
-
* the falsehood-detection differentiator.
|
|
89
|
+
* The bounding box from the WOF `spr` extent columns, omitted when the schema lacks them.
|
|
123
90
|
*/
|
|
124
|
-
|
|
91
|
+
bbox: LatLonBounds | null
|
|
92
|
+
|
|
125
93
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* {@link FindPlaceQuery.regionQualifier}; `false` = evaluated and not vouched for; absent = never evaluated (no
|
|
129
|
-
* qualifier on the query, or an artifact without the sidecar). Absence is required — the resolver walk reads it as
|
|
130
|
-
* `unavailable`, never as "not contained".
|
|
94
|
+
* Set by the postcode path when the chosen locality is far from the postcode's own
|
|
95
|
+
* locality. the candidate is still returned so callers can lower their confidence.
|
|
131
96
|
*/
|
|
132
|
-
|
|
97
|
+
mismatch: boolean | null
|
|
98
|
+
|
|
133
99
|
/**
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
* omit the field (not evaluated, never "did not fire").
|
|
100
|
+
* Whether the ancestors sidecar places this candidate under the query's
|
|
101
|
+
* {@link FindPlaceQuery.regionQualifier}, with `false` meaning the check ran
|
|
102
|
+
* and an absent value meaning it did not.
|
|
138
103
|
*/
|
|
139
|
-
|
|
140
|
-
}
|
|
104
|
+
containedByQualifier: boolean | null
|
|
141
105
|
|
|
142
|
-
/**
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
lat: number
|
|
147
|
-
lon: number
|
|
148
|
-
}
|
|
106
|
+
/**
|
|
107
|
+
* Set when the candidate lies outside the query's parent scope, so callers can demote it.
|
|
108
|
+
*/
|
|
109
|
+
regionScopeMiss: boolean | null
|
|
149
110
|
|
|
150
|
-
/**
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
maxLat: number
|
|
156
|
-
minLon: number
|
|
157
|
-
maxLon: number
|
|
111
|
+
/**
|
|
112
|
+
* Set when the variant exemption spared the candidate from the cross-country
|
|
113
|
+
* alias penalty, by the candidate-table backend only.
|
|
114
|
+
*/
|
|
115
|
+
variantAliasExempted: true | null
|
|
158
116
|
}
|
|
159
117
|
|
|
160
118
|
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* `text` is the only required field; everything else narrows the search. When `country` and `parentID` are both set,
|
|
164
|
-
* `parentID` wins (it's more specific).
|
|
165
|
-
*
|
|
166
|
-
* `near` and `bbox` are independent. `near` is a soft signal — candidates close to the point get a ranking boost but
|
|
167
|
-
* distant candidates aren't dropped. `bbox` is a hard filter — only candidates whose bbox intersects the query bbox are
|
|
168
|
-
* returned (uses the package-built R*Tree index when present; if the index is missing the option is silently ignored to
|
|
169
|
-
* preserve backwards compatibility).
|
|
119
|
+
* Describes a place lookup.
|
|
170
120
|
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
121
|
+
* Every field except `text` narrows or ranks the search.
|
|
122
|
+
* An extract without the R*Tree index ignores `bbox` and `near.maxDistanceKm` without an error.
|
|
173
123
|
*/
|
|
174
124
|
export interface FindPlaceQuery {
|
|
175
125
|
text: string
|
|
176
126
|
placetype?: WOFPlacetype | WOFPlacetype[]
|
|
127
|
+
|
|
177
128
|
/**
|
|
178
|
-
* ISO 3166-1 alpha-2
|
|
129
|
+
* Restricts matches to one ISO 3166-1 alpha-2 country.
|
|
179
130
|
*/
|
|
180
131
|
country?: string
|
|
132
|
+
|
|
181
133
|
/**
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* rather than falling through to a world-fuzzy candidate. Ignored when `country` is set (already narrower).
|
|
134
|
+
* Restricts the typo-fuzzy tier to one ISO 3166-1 alpha-2 country, returning no
|
|
135
|
+
* result on a miss rather than falling back worldwide.
|
|
136
|
+
* Ignored when `country` is set.
|
|
186
137
|
*/
|
|
187
138
|
fuzzyCountry?: string
|
|
139
|
+
|
|
188
140
|
/**
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
* `@mailwoman/core/resolver`.
|
|
141
|
+
* Whether to match only primary names, set by probes that re-read a token from
|
|
142
|
+
* a longer span because that token was never an alias.
|
|
192
143
|
*/
|
|
193
144
|
primaryOnly?: boolean
|
|
145
|
+
|
|
194
146
|
/**
|
|
195
|
-
* Alias
|
|
196
|
-
*
|
|
147
|
+
* Alias name roles, such as `abbr` or `gloss`, that the probe excludes.
|
|
148
|
+
*
|
|
149
|
+
* Rows with no role and artifacts without a role column are unaffected.
|
|
197
150
|
*/
|
|
198
151
|
excludeNameRoles?: readonly string[]
|
|
152
|
+
|
|
199
153
|
/**
|
|
200
|
-
*
|
|
154
|
+
* Restricts matches to descendants of this WOF place id.
|
|
201
155
|
*/
|
|
202
156
|
parentID?: number
|
|
157
|
+
|
|
203
158
|
/**
|
|
204
|
-
*
|
|
205
|
-
*
|
|
206
|
-
*
|
|
207
|
-
*
|
|
159
|
+
* The sibling postcode for a `locality` query.
|
|
160
|
+
*
|
|
161
|
+
* A `postcode_locality` table adds that postcode's localities and scores them on a
|
|
162
|
+
* weighted blend so small localities a name match misses are found.
|
|
208
163
|
*/
|
|
209
164
|
postcode?: string
|
|
165
|
+
|
|
210
166
|
/**
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
* the rest appended in their original order. Set by the resolver from `ResolveOpts.postcodeContainmentCoherence`;
|
|
214
|
-
* absent → the population-first order is untouched (byte-identical).
|
|
167
|
+
* Whether a locality query with `postcode` moves candidates near the postcode's centroid
|
|
168
|
+
* to the front, sorted by distance, with the rest keeping their order.
|
|
215
169
|
*/
|
|
216
170
|
postcodeContainmentCoherence?: boolean
|
|
171
|
+
|
|
217
172
|
/**
|
|
218
|
-
* The
|
|
219
|
-
*
|
|
220
|
-
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
173
|
+
* The parsed region qualifier for a locality lookup.
|
|
174
|
+
*
|
|
175
|
+
* A backend with the ancestors sidecar marks contained candidates.
|
|
176
|
+
* It ranks them first.
|
|
177
|
+
*
|
|
178
|
+
* It may add candidates hidden by a country scope.
|
|
179
|
+
* It never removes candidates.
|
|
223
180
|
*/
|
|
224
181
|
regionQualifier?: string
|
|
182
|
+
|
|
225
183
|
/**
|
|
226
|
-
*
|
|
184
|
+
* A proximity hint that boosts nearby candidates and filters by radius only when `maxDistanceKm` is set.
|
|
227
185
|
*/
|
|
228
|
-
near?:
|
|
186
|
+
near?: LatLon & { maxDistanceKm?: number }
|
|
187
|
+
|
|
229
188
|
/**
|
|
230
|
-
* Ordered proximity-bias points
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
* back-compat.
|
|
189
|
+
* Ordered proximity-bias points with an optional weight defaulting to 1.
|
|
190
|
+
*
|
|
191
|
+
* The bias re-ranks exact-tier candidates by combined prominence.
|
|
192
|
+
* It keeps every candidate.
|
|
193
|
+
* It counts `near` as weight 1.
|
|
236
194
|
*/
|
|
237
|
-
bias?: Array<
|
|
195
|
+
bias?: Array<LatLon & { weight?: number }>
|
|
196
|
+
|
|
238
197
|
/**
|
|
239
|
-
*
|
|
198
|
+
* Returns only candidates whose bounding box intersects this box.
|
|
240
199
|
*/
|
|
241
|
-
bbox?:
|
|
200
|
+
bbox?: LatLonBounds
|
|
201
|
+
|
|
242
202
|
/**
|
|
243
|
-
*
|
|
203
|
+
* The maximum number of candidates to return, defaulting to 10.
|
|
244
204
|
*/
|
|
245
205
|
limit?: number
|
|
246
206
|
}
|
|
247
207
|
|
|
248
208
|
/**
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
* a public API break.
|
|
209
|
+
* Resolves a {@link FindPlaceQuery} to ranked {@link PlaceCandidate}s, asynchronously
|
|
210
|
+
* so a worker-backed implementation can share the interface.
|
|
252
211
|
*/
|
|
253
212
|
export interface PlaceLookup extends Disposable {
|
|
254
213
|
findPlace(query: FindPlaceQuery): Promise<PlaceCandidate[]>
|