@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
|
@@ -2,39 +2,12 @@
|
|
|
2
2
|
* @copyright Sister Software
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
|
-
*
|
|
6
|
-
* The TWO-SCORE SPLIT (ROAD_TO_V9 §2 R1) — typed schema, table builder, and the two derivations, in
|
|
7
|
-
* one module so the read contract and the DDL cannot drift.
|
|
8
|
-
*
|
|
9
|
-
* THE POLICY THIS ENCODES, ratified 2026-08-06: **the importance of a knowledge-base article is not
|
|
10
|
-
* the probability that this is the place the user means.** The geocoder ranks by REFERENTIAL
|
|
11
|
-
* likelihood; encyclopedic importance is carried as data and is never the ranking key. So the one
|
|
12
|
-
* `place_importance.importance` column — which was a Wikipedia score where the concordance join
|
|
13
|
-
* landed and a population-derived pseudo-score everywhere else — becomes two named columns that can
|
|
14
|
-
* never be confused for one another:
|
|
15
|
-
*
|
|
16
|
-
* - {@link PlaceImportanceTable.referential} — population-anchored, ALWAYS derivable, the ranking
|
|
17
|
-
* backbone. {@link referentialFromPopulation} is the normalization the FST builder's population
|
|
18
|
-
* fallback has always used; naming it here is the whole change.
|
|
19
|
-
* - {@link PlaceImportanceTable.encyclopedic} — the fan-out-guarded Wikipedia join
|
|
20
|
-
* (`importance-fanout.ts`, #1497). NULLABLE, and null means ABSENT, never "an importance of
|
|
21
|
-
* zero": ~1.5 M of the 1.54 M rows in the 2026-08-05 build have no Wikipedia article at all, and
|
|
22
|
-
* a consumer that reads a 0 there would be reading a fact nobody recorded.
|
|
23
|
-
*
|
|
24
|
-
* WHY SAINT-DENIS IS THE TEST. The Seine-Saint-Denis suburb (pop 96,128) carries encyclopedic
|
|
25
|
-
* 0.1173; the Aude hamlet (pop 418) carries 0.5683 — the encyclopedic signal ranks the hamlet 4.8x
|
|
26
|
-
* ABOVE the place every user means. Referentially the suburb wins by 230x on population. One score
|
|
27
|
-
* cannot serve both readers, which is why there are two.
|
|
28
|
-
*
|
|
29
|
-
* THE LEGACY COLUMN STAYS, AND IS DERIVED. `importance` is written by {@link blendImportance} — the
|
|
30
|
-
* bounded blend the bare-toponym fame consumer (#28) ranks on. It is the CONFLATION, and nothing new
|
|
31
|
-
* should read it; new code reads the split columns.
|
|
32
5
|
*/
|
|
33
6
|
import { referentialFromPopulation } from "@mailwoman/core/resolver";
|
|
34
7
|
import { allRows } from "@mailwoman/core/utils";
|
|
35
8
|
/**
|
|
36
|
-
*
|
|
37
|
-
* {@link PlaceImportanceTable}
|
|
9
|
+
* Lists the `place_importance` columns in declaration order, each checked
|
|
10
|
+
* against {@link PlaceImportanceTable}.
|
|
38
11
|
*/
|
|
39
12
|
export const PLACE_IMPORTANCE_COLUMNS = [
|
|
40
13
|
"id",
|
|
@@ -43,8 +16,7 @@ export const PLACE_IMPORTANCE_COLUMNS = [
|
|
|
43
16
|
"importance",
|
|
44
17
|
];
|
|
45
18
|
/**
|
|
46
|
-
*
|
|
47
|
-
* `mailwoman gazetteer importance`, never a migration.
|
|
19
|
+
* Drops and recreates the `place_importance` table with separate referential and encyclopedic columns.
|
|
48
20
|
*/
|
|
49
21
|
export async function createPlaceImportanceTable(db) {
|
|
50
22
|
await db.schema.dropTable("place_importance").ifExists().execute();
|
|
@@ -56,98 +28,43 @@ export async function createPlaceImportanceTable(db) {
|
|
|
56
28
|
.addColumn("importance", "real", (c) => c.notNull())
|
|
57
29
|
.execute();
|
|
58
30
|
}
|
|
59
|
-
//#endregion
|
|
60
|
-
//#region The referential derivation
|
|
61
31
|
/**
|
|
62
|
-
*
|
|
63
|
-
* (backend-agnostic — it cannot import this package) reads the same number. Re-exported HERE so the schema module stays
|
|
64
|
-
* the one-stop read for the table: the column and the function that fills it are one hop apart.
|
|
65
|
-
*/
|
|
66
|
-
//#endregion
|
|
67
|
-
//#region The legacy blend
|
|
68
|
-
/**
|
|
69
|
-
* The most the encyclopedic channel may raise a place's blended importance above its population-anchored referential
|
|
70
|
-
* score.
|
|
71
|
-
*
|
|
72
|
-
* In referential units 0.25 is 3.5 population doublings (the referential curve divides log2 by 14), so an article can
|
|
73
|
-
* promote a place as if it were up to ~11x its recorded population — never more. The bound exists because the two
|
|
74
|
-
* channels' scales CROSS at the article floor: merely having a Wikipedia article scores ~0.25–0.35, which exceeds the
|
|
75
|
-
* referential score of a mid-size town, so an unbounded blend ranks a 136-person village with an article above a
|
|
76
|
-
* 16,026-person town without one.
|
|
77
|
-
*
|
|
78
|
-
* The value is bracketed by two decided contests, measured on the 2026-08-24 staging build:
|
|
79
|
-
*
|
|
80
|
-
* - `> 0.2282`, or bare `Whitby` stops answering Whitby GB (pop 13,130, referential 0.2729, encyclopedic 0.5496) over
|
|
81
|
-
* Whitby CA (pop 128,377, referential 0.5011) — the #28 design case the fame prior exists to serve.
|
|
82
|
-
* - `< 0.2790`, or bare `Tó`/`To` answers Tó PT (pop 136, referential 0.0131, encyclopedic 0.3375) over Tô BF (pop
|
|
83
|
-
* 16,026, no article) — the `bf-gloss-to-*` board pair.
|
|
32
|
+
* Caps how far the encyclopedic score may raise a place's blended importance above its referential score.
|
|
84
33
|
*
|
|
85
|
-
* 0.25
|
|
34
|
+
* Merely having an article scores about 0.25 to 0.35, above a mid-size town's referential score,
|
|
35
|
+
* so without the cap a tiny village with an article outranks a large town without one.
|
|
86
36
|
*/
|
|
87
37
|
export const ENCYCLOPEDIC_BOOST_CAP = 0.25;
|
|
88
38
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* - No population evidence (`referential` 0) → the encyclopedic score stands alone: there is nothing to bound the
|
|
94
|
-
* article's claim against, and a constant cap would demote every famous place WOF records no population for
|
|
95
|
-
* (meaning-of-zero: referential 0 is "unmeasured", not "tiny").
|
|
96
|
-
* - Both present → the encyclopedic value clamped to at most {@link ENCYCLOPEDIC_BOOST_CAP} above the referential score,
|
|
97
|
-
* and never below it. The floor half repairs the downward inversion (the Seine-Saint-Denis suburb's weak article
|
|
98
|
-
* scored 0.1173 and REPLACED its referential 0.4716 under the old `COALESCE`, so a 418-person Aude hamlet outranked
|
|
99
|
-
* it 4.8x); the cap half repairs the upward one (`Tó`, above).
|
|
100
|
-
*
|
|
101
|
-
* Scale of the clamp on the 2026-08-24 staging build: of 628,202 article-bearing rows, 209,738 sit above the cap and
|
|
102
|
-
* 13,888 sit below their referential floor; the 305,168 article-without-population rows pass through unchanged.
|
|
39
|
+
* Blends the two channels into the legacy `importance` column: the referential score
|
|
40
|
+
* when there is no article, only the encyclopedic score when population is unknown
|
|
41
|
+
* (`referential` 0), and otherwise the encyclopedic score clamped between the
|
|
42
|
+
* referential score and {@link ENCYCLOPEDIC_BOOST_CAP} above it.
|
|
103
43
|
*/
|
|
104
44
|
export function blendImportance(referential, encyclopedic) {
|
|
105
|
-
if (encyclopedic === null
|
|
45
|
+
if (encyclopedic === null)
|
|
106
46
|
return referential;
|
|
107
47
|
if (referential <= 0)
|
|
108
48
|
return encyclopedic;
|
|
109
49
|
return Math.max(referential, Math.min(encyclopedic, referential + ENCYCLOPEDIC_BOOST_CAP));
|
|
110
50
|
}
|
|
111
|
-
//#endregion
|
|
112
|
-
//#region Reading a database that may or may not carry the split
|
|
113
51
|
/**
|
|
114
|
-
*
|
|
115
|
-
*
|
|
52
|
+
* Source names used by {@link loadImportanceSplit}.
|
|
53
|
+
* The FST stamp records these values as provenance.
|
|
116
54
|
*/
|
|
117
55
|
export const IMPORTANCE_SPLIT_SOURCES = {
|
|
118
|
-
/**
|
|
119
|
-
* `place_importance` carries `referential` + `encyclopedic` — the post-split build.
|
|
120
|
-
*/
|
|
121
56
|
splitColumns: "split-columns",
|
|
122
|
-
/**
|
|
123
|
-
* `place_importance` carries only the conflated `importance`; the split was RECONSTRUCTED against `place_population`
|
|
124
|
-
* (see {@link splitLegacyImportance}).
|
|
125
|
-
*/
|
|
126
57
|
legacyReconstructed: "legacy-reconstructed",
|
|
127
|
-
/**
|
|
128
|
-
* No `place_importance` at all — referential from `place_population`, encyclopedic absent for every place.
|
|
129
|
-
*/
|
|
130
58
|
populationOnly: "population-only",
|
|
131
|
-
/**
|
|
132
|
-
* Neither table. Every score is 0, and 0 here means the database carries no salience evidence whatsoever.
|
|
133
|
-
*/
|
|
134
59
|
none: "none",
|
|
135
60
|
};
|
|
136
61
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* THE PROBE IS A COLUMN, NOT A TABLE, and that is the whole reason this lives here rather than beside a caller's other
|
|
141
|
-
* table probes. The pre-split table exists and holds a single conflated `importance` column whose value is a Wikipedia
|
|
142
|
-
* score on some rows and a population proxy on others, with nothing in the row to say which — reading that as
|
|
143
|
-
* encyclopedic would surface the exact confusion ROAD_TO_V9 §2 exists to end.
|
|
62
|
+
* Returns the `select` term and `left join` that add `encyclopedic` to name-lookup results
|
|
63
|
+
* for `schemaName`, degrading to `NULL` and no join when the column is absent.
|
|
144
64
|
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
* carries the column yet, so today that degraded form is the only one anything builds.
|
|
149
|
-
*
|
|
150
|
-
* Call it ONCE per extract and cache the result — it runs a `PRAGMA`, and the callers are per-keystroke hot.
|
|
65
|
+
* It probes for the column rather than the table, because a pre-split table's
|
|
66
|
+
* `importance` mixes Wikipedia and population scores.
|
|
67
|
+
* Cache the result per extract, since it runs a `PRAGMA` and lookups are per keystroke.
|
|
151
68
|
*/
|
|
152
69
|
export function encyclopedicClauses(db, schemaName) {
|
|
153
70
|
let present;
|
|
@@ -166,50 +83,26 @@ export function encyclopedicClauses(db, schemaName) {
|
|
|
166
83
|
};
|
|
167
84
|
}
|
|
168
85
|
/**
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* ~1e-15 absolute against scores Nominatim publishes to four decimals.
|
|
86
|
+
* Sets the relative tolerance within which {@link splitLegacyImportance} treats
|
|
87
|
+
* a value as lying on the population curve.
|
|
172
88
|
*/
|
|
173
89
|
export const LEGACY_FALLBACK_EPSILON = 8 * Number.EPSILON;
|
|
174
90
|
/**
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
* of `min(1, log2(1+pop/1000)/14)` for every place with a population that Wikipedia had missed. So a legacy value is a
|
|
179
|
-
* fallback row IFF it reproduces {@link referentialFromPopulation} of that place's population — the two passes wrote
|
|
180
|
-
* different arithmetic, and a score from Nominatim's four-decimal TSV landing on the log2 curve is a measure-zero
|
|
181
|
-
* event.
|
|
91
|
+
* Splits a legacy `place_importance` value into referential and encyclopedic scores,
|
|
92
|
+
* treating it as a population fallback when it matches {@link referentialFromPopulation}
|
|
93
|
+
* within {@link LEGACY_FALLBACK_EPSILON}.
|
|
182
94
|
*
|
|
183
|
-
*
|
|
184
|
-
*
|
|
185
|
-
* encyclopedic rows against Node's 133,096: `math.log2` and V8's `Math.log2` disagree by one ULP on 33,542 of the 1.5 M
|
|
186
|
-
* inputs (worked example: wof 85803233, population 21,299 — stored 0.31992193633838988953, CPython
|
|
187
|
-
* 0.31992193633838994504, delta 5.55e-17). Bit equality would therefore INVENT 33,542 encyclopedic scores for anyone
|
|
188
|
-
* who ported this rule to another runtime, and invented data is the failure mode this whole module exists to end. The
|
|
189
|
-
* tolerance is a few ULP of the score's own magnitude; a genuine Wikipedia value that close to the population curve is
|
|
190
|
-
* not distinguishable from it by any consequence.
|
|
191
|
-
*
|
|
192
|
-
* MEASURED, not reasoned (2026-08-06, `wof/fst-staging-2026-08-05/admin-global-priority-importance.db`): 1,543,753 rows
|
|
193
|
-
* split **1,410,657 fallback / 133,096 encyclopedic**, and the arithmetic closes on itself — 1,410,657 + 108,861
|
|
194
|
-
* (encyclopedic rows that ALSO have a population) = 1,519,518, which is exactly the count of `place_population` rows
|
|
195
|
-
* with `population > 0`, i.e. every row the fallback pass could have written. The remaining 24,235 encyclopedic rows
|
|
196
|
-
* have no population row at all. Under the exact-equality rule, Node found ZERO mismatches within one ULP, so the
|
|
197
|
-
* tolerance changes no classification on this database — it only makes the answer runtime-independent.
|
|
198
|
-
*
|
|
199
|
-
* Referential is NOT read out of the legacy column under any branch — it is always re-derived from population, because
|
|
200
|
-
* a legacy Wikipedia row overwrote whatever population would have said.
|
|
95
|
+
* The match allows a small tolerance because `log2` differs by an ULP across runtimes.
|
|
96
|
+
* Bit equality would invent encyclopedic scores.
|
|
201
97
|
*/
|
|
202
98
|
export function splitLegacyImportance(legacy, population) {
|
|
203
|
-
const referential = referentialFromPopulation(population);
|
|
204
|
-
if (legacy ===
|
|
99
|
+
const referential = referentialFromPopulation(population ?? null);
|
|
100
|
+
if (legacy === null)
|
|
205
101
|
return { referential };
|
|
206
102
|
if (Math.abs(legacy - referential) <= LEGACY_FALLBACK_EPSILON * Math.max(referential, 1))
|
|
207
103
|
return { referential };
|
|
208
104
|
return { referential, encyclopedic: legacy };
|
|
209
105
|
}
|
|
210
|
-
/**
|
|
211
|
-
* Does `table` exist in `db`, and if so which of `columns` does it have?
|
|
212
|
-
*/
|
|
213
106
|
function tableColumns(db, table) {
|
|
214
107
|
try {
|
|
215
108
|
const rows = allRows(db.prepare(`PRAGMA table_info(${table})`));
|
|
@@ -220,11 +113,7 @@ function tableColumns(db, table) {
|
|
|
220
113
|
}
|
|
221
114
|
}
|
|
222
115
|
/**
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
* Handles all four states in {@link IMPORTANCE_SPLIT_SOURCES} so callers never branch on schema themselves — the FST
|
|
226
|
-
* builder in particular must read the shipped population-only databases, the read-only 2026-08-05 staging database
|
|
227
|
-
* (legacy conflated column), and post-split builds with one code path.
|
|
116
|
+
* Loads both importance scores from a WOF admin database, whichever schema generation it uses.
|
|
228
117
|
*/
|
|
229
118
|
export function loadImportanceSplit(db) {
|
|
230
119
|
const referential = new Map();
|
|
@@ -243,9 +132,6 @@ export function loadImportanceSplit(db) {
|
|
|
243
132
|
}
|
|
244
133
|
const importanceColumns = tableColumns(db, "place_importance");
|
|
245
134
|
if (importanceColumns.has("referential")) {
|
|
246
|
-
// Post-split build: the columns ARE the contract. Referential is read verbatim rather than
|
|
247
|
-
// re-derived, so a build that scored referential differently stays visible instead of being
|
|
248
|
-
// silently overwritten by this reader's own formula.
|
|
249
135
|
const rows = allRows(db.prepare("SELECT id, referential, encyclopedic FROM place_importance"));
|
|
250
136
|
for (const row of rows) {
|
|
251
137
|
if (row.referential > 0) {
|
|
@@ -283,5 +169,4 @@ export function loadImportanceSplit(db) {
|
|
|
283
169
|
legacyFallbackRows: 0,
|
|
284
170
|
};
|
|
285
171
|
}
|
|
286
|
-
//#endregion
|
|
287
172
|
//# sourceMappingURL=place-importance-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place-importance-schema.js","sourceRoot":"","sources":["../lib/place-importance-schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"place-importance-schema.js","sourceRoot":"","sources":["../lib/place-importance-schema.ts"],"names":[],"mappings":"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"}
|
package/out/poi/lookup.d.ts
CHANGED
|
@@ -3,45 +3,34 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Node reader for `poi.db` (spec §3.4)
|
|
7
|
-
* `
|
|
8
|
-
* artifact
|
|
6
|
+
* Node reader for `poi.db` (spec §3.4), the res-9 k-ring reader over the clustered `poi`
|
|
7
|
+
* `without rowid` B-tree `poi-schema.ts` builds. Category, brand and name searches share one
|
|
8
|
+
* artifact. Each path has a method that returns its details.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* haversine distance from `center` after every ring.
|
|
14
|
-
* - **Brand**: NOT a k-ring walk. Brand rows are globally sparse (~0.31% of poi.db; median nearest
|
|
15
|
-
* tagged instance ~110 km), so ring expansion could never reach them. Instead a single brand-wide
|
|
16
|
-
* indexed fetch on `brand_wikidata` (the partial `poi_brand_wikidata` index) pulls EVERY row for
|
|
17
|
-
* the QID — category unconstrained — then haversine-sorts from `center` and takes the nearest
|
|
18
|
-
* `limit`, bounded by a `BRAND_MAX_DISTANCE_KM` sanity radius.
|
|
19
|
-
* - **Name**: FTS5 `MATCH` against the `poi_search` virtual table, hydrated back to full rows by
|
|
20
|
-
* `name_key`. No center required; if one is given, hits are still distance-sorted.
|
|
21
|
-
*
|
|
22
|
-
* `latLngToCell`/`gridDisk` come from `h3-js`; the 48-bit short-cell packing that turns a raw H3
|
|
23
|
-
* cell into the integer `poi.h3_cell` stores is `@mailwoman/spatial`'s `shortCellToInt` — that math
|
|
24
|
-
* is NEVER reimplemented here (see AGENTS.md on `@mailwoman/spatial` being the one true home for
|
|
25
|
-
* it).
|
|
10
|
+
* `latLngToCell` and `gridDisk` come from `h3-js`. The 48-bit short-cell packing that turns a raw
|
|
11
|
+
* H3 cell into the integer `poi.h3_cell` stores is `@mailwoman/spatial`'s `shortCellToInt`, and
|
|
12
|
+
* that math is never reimplemented here.
|
|
26
13
|
*/
|
|
27
|
-
import {
|
|
14
|
+
import { SQLiteLookup, type SQLiteLookupOptions } from "@mailwoman/sqlite/lookup";
|
|
28
15
|
import type { POIDatabase } from "#poi/schema";
|
|
29
16
|
/**
|
|
30
|
-
* Resolution the `poi` table's `h3_cell` column is keyed at
|
|
17
|
+
* Resolution the `poi` table's `h3_cell` column is keyed at, matching the builder (spec §3.4).
|
|
31
18
|
*/
|
|
32
19
|
export declare const POI_H3_RESOLUTION = 9;
|
|
33
20
|
export interface POISearchQuery {
|
|
34
21
|
/**
|
|
35
|
-
* Poi-taxonomy category
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* leaf per cell and unions the rows
|
|
42
|
-
*
|
|
22
|
+
* Poi-taxonomy category ids (string side of the dictionary) to search.
|
|
23
|
+
*
|
|
24
|
+
* A single category is a one-element list.
|
|
25
|
+
* A canonical Overture `taxonomy.primary` category passes every leaf it rolls up into,
|
|
26
|
+
* as in `supermarket` → `grocery_store`, `organic_grocery_store`, ….
|
|
27
|
+
*
|
|
28
|
+
* The k-ring walk probes every resolvable leaf per cell and unions the rows.
|
|
29
|
+
* Unknown leaves are skipped.
|
|
30
|
+
*
|
|
31
|
+
* Ignored when `brandWikidata` is set, since brand wins.
|
|
43
32
|
*/
|
|
44
|
-
categoryIDs?: string[];
|
|
33
|
+
categoryIDs?: readonly string[];
|
|
45
34
|
/**
|
|
46
35
|
* Wikidata QID for brand-exact search.
|
|
47
36
|
*/
|
|
@@ -51,15 +40,20 @@ export interface POISearchQuery {
|
|
|
51
40
|
*/
|
|
52
41
|
name?: string;
|
|
53
42
|
/**
|
|
54
|
-
* Search center.
|
|
43
|
+
* Search center.
|
|
44
|
+
*
|
|
45
|
+
* Required for category/brand queries (k-ring expansion).
|
|
55
46
|
*/
|
|
56
47
|
center?: {
|
|
57
48
|
latitude: number;
|
|
58
49
|
longitude: number;
|
|
59
50
|
};
|
|
60
51
|
/**
|
|
61
|
-
* Ring budget: how many res-9 k-rings to expand before giving up
|
|
62
|
-
*
|
|
52
|
+
* Ring budget: how many res-9 k-rings to expand before giving up.
|
|
53
|
+
*
|
|
54
|
+
* Counts ring 0, so k reaches `maxRings - 1`.
|
|
55
|
+
*
|
|
56
|
+
* @defaultValue `16` ≈ ~5.4 km
|
|
63
57
|
*/
|
|
64
58
|
maxRings?: number;
|
|
65
59
|
limit?: number;
|
|
@@ -73,28 +67,27 @@ export interface POISearchHit {
|
|
|
73
67
|
country: string;
|
|
74
68
|
confidence: number;
|
|
75
69
|
/**
|
|
76
|
-
* Overture
|
|
70
|
+
* Overture gers id.
|
|
71
|
+
*
|
|
72
|
+
* Nullable metadata, never a key.
|
|
73
|
+
* See `POITable.gers_id`.
|
|
77
74
|
*/
|
|
78
75
|
gersID: string | null;
|
|
79
|
-
distanceM
|
|
80
|
-
}
|
|
81
|
-
export interface POILookupOpts<DB extends POIDatabase = POIDatabase> {
|
|
82
|
-
/**
|
|
83
|
-
* Path to a `poi.db` built by the (future) POI builder. Opened read-only.
|
|
84
|
-
*/
|
|
85
|
-
databasePath?: string;
|
|
86
|
-
/**
|
|
87
|
-
* Pre-opened handle (tests / shared connections). Mutually exclusive with `databasePath`.
|
|
88
|
-
*/
|
|
89
|
-
database?: DatabaseClient<DB>;
|
|
76
|
+
distanceM: number | null;
|
|
90
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Where a {@link POILookup} reads from.
|
|
80
|
+
*
|
|
81
|
+
* The source is a `poi.db` built by the POI builder, opened read-only,
|
|
82
|
+
* or a connection the caller already holds.
|
|
83
|
+
*/
|
|
84
|
+
export type POILookupOpts<DB extends POIDatabase = POIDatabase> = SQLiteLookupOptions<DB>;
|
|
91
85
|
/**
|
|
92
86
|
* Node reader over `poi.db`.
|
|
93
87
|
*/
|
|
94
|
-
export declare class POILookup<DB extends POIDatabase = POIDatabase>
|
|
88
|
+
export declare class POILookup<DB extends POIDatabase = POIDatabase> extends SQLiteLookup<DB> {
|
|
95
89
|
#private;
|
|
96
90
|
constructor(opts: POILookupOpts<DB>);
|
|
97
91
|
search(query: POISearchQuery): POISearchHit[];
|
|
98
|
-
[Symbol.dispose](): void;
|
|
99
92
|
}
|
|
100
93
|
//# sourceMappingURL=lookup.d.ts.map
|
package/out/poi/lookup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../lib/poi/lookup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"lookup.d.ts","sourceRoot":"","sources":["../../lib/poi/lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAGjF,OAAO,KAAK,EAAwB,WAAW,EAAY,MAAM,aAAa,CAAA;AAC9E;;GAEG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAA;AA8BlC,MAAM,WAAW,cAAc;IAC9B;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC/B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IAChD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED;;;;;GAKG;AACH,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,WAAW,GAAG,WAAW,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAA;AAkBzF;;GAEG;AACH,qBAAa,SAAS,CAAC,EAAE,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,YAAY,CAAC,EAAE,CAAC;;IAkBpF,YAAY,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,EAuBlC;IAED,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,YAAY,EAAE,CAoB5C;CA4ID"}
|