@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
package/lib/name-score.ts
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Soft name matching for locality ranking: case/diacritic folding, padded character trigrams
|
|
6
|
+
* Soft name matching for locality ranking: case/diacritic folding, padded character trigrams and the
|
|
7
7
|
* trigram-Jaccard score built on them. Shared by the FTS lookup and the candidate-table backend so
|
|
8
8
|
* both rank the same typo identically — the whole reason this is one module rather than two copies.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Case-fold + strip diacritics + collapse punctuation
|
|
12
|
+
* Case-fold + strip diacritics + collapse punctuation, for the coord-first soft name match.
|
|
13
13
|
*/
|
|
14
14
|
export function cfNormalize(s: string): string {
|
|
15
15
|
return s
|
|
@@ -35,11 +35,13 @@ function trigrams(s: string): Set<string> {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
|
-
* Character-trigram Jaccard ∈ [0,1] — tolerant of the swallowed-leading-char fragments
|
|
39
|
-
* misspellings without a heavyweight edit-distance pass.
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
38
|
+
* Character-trigram Jaccard ∈ [0,1] — tolerant of the swallowed-leading-char fragments
|
|
39
|
+
* ("auen" vs "plauen") and minor misspellings without a heavyweight edit-distance pass.
|
|
40
|
+
*
|
|
41
|
+
* The fuzzy component of {@link softNameScore}, and private to this module:
|
|
42
|
+
* the candidate backend scores typos with a word-level measure instead, on receipts that
|
|
43
|
+
* falsify trigram Jaccard for that job (see `candidate-lookup.ts`'s `FUZZY_FETCH`).
|
|
44
|
+
* A shared name here would assert a parity the two backends do not have.
|
|
43
45
|
*/
|
|
44
46
|
function trigramJaccard(a: string, b: string): number {
|
|
45
47
|
const A = trigrams(a)
|
package/lib/nsul/lookup.ts
CHANGED
|
@@ -3,38 +3,38 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Node reader for `nsul.db` — the GB
|
|
6
|
+
* Node reader for `nsul.db` — the GB uprn → unit-postcode register (`nsul/schema.ts`). Two probes,
|
|
7
7
|
* both synchronous `.prepare()` hits in the `uprn/lookup.ts` style:
|
|
8
8
|
*
|
|
9
|
-
* - **`postcodeForUPRN(uprn)`**: primary-key hit on the `
|
|
10
|
-
* - **`uprnsForPostcode(postcode)`**: the `pcds_compact` index, answering every
|
|
9
|
+
* - **`postcodeForUPRN(uprn)`**: primary-key hit on the `without rowid` table.
|
|
10
|
+
* - **`uprnsForPostcode(postcode)`**: the `pcds_compact` index, answering every uprn the register
|
|
11
11
|
* assigns to one unit postcode with the point OS publishes for each — the "assigned points and
|
|
12
12
|
* their bound" the physical-constraint design record names as the prior's soft structure.
|
|
13
13
|
*
|
|
14
14
|
* ## `null` and `[]` are claims, scoped by coverage
|
|
15
15
|
*
|
|
16
|
-
* The register designates GB complete (every
|
|
16
|
+
* The register designates GB complete (every uprn in AddressBase with a Code-Point Open postcode),
|
|
17
17
|
* and the builder writes `layer_coverage` with basis `designated` for every cell the register
|
|
18
|
-
* touches. Inside a covered cell an empty answer is evidence of absence: no GB
|
|
19
|
-
*
|
|
20
|
-
* tell from those are recorded in `nsul_meta` as counts rather than as rows
|
|
21
|
-
* null (its postcode is not in Code-Point Open) and one Open
|
|
22
|
-
* caller building negative evidence reads the coverage table and those counts
|
|
23
|
-
*
|
|
24
|
-
*
|
|
18
|
+
* touches. Inside a covered cell an empty answer is evidence of absence: no GB uprn by that number
|
|
19
|
+
* has a Code-Point postcode, or no UPRN has that postcode. Two absences the reader cannot
|
|
20
|
+
* tell from those are recorded in `nsul_meta` as counts rather than as rows. A uprn whose `pcds` is
|
|
21
|
+
* null (its postcode is not in Code-Point Open) and one Open uprn publishes no coordinate for — so a
|
|
22
|
+
* caller building negative evidence reads the coverage table and those counts rather than this reader
|
|
23
|
+
* by itself. Outside coverage (Northern Ireland, the Isle of Man, the Channel Islands) the answer is
|
|
24
|
+
* unknown, per the meaning-of-zero rule.
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
import {
|
|
27
|
+
import { SQLiteLookup, type SQLiteLookupOptions } from "@mailwoman/sqlite/lookup"
|
|
28
28
|
|
|
29
29
|
import { compactPostcode, type NSULDatabase } from "#nsul/schema"
|
|
30
30
|
import { prepareAll, prepareGet } from "#sqlite-utils"
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
* The unit postcode the register assigns to a
|
|
33
|
+
* The unit postcode the register assigns to a uprn, in both stored forms.
|
|
34
34
|
*/
|
|
35
35
|
export interface NSULPostcode {
|
|
36
36
|
/**
|
|
37
|
-
* As
|
|
37
|
+
* As nsul writes it — `RG40 4HR`.
|
|
38
38
|
*/
|
|
39
39
|
pcds: string
|
|
40
40
|
/**
|
|
@@ -44,7 +44,7 @@ export interface NSULPostcode {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
|
-
* One
|
|
47
|
+
* One uprn assigned to a unit postcode, with the point `uprn.db` holds for it.
|
|
48
48
|
*/
|
|
49
49
|
export interface NSULAssignedPoint {
|
|
50
50
|
uprn: number
|
|
@@ -56,16 +56,13 @@ export interface NSULAssignedPoint {
|
|
|
56
56
|
h3Cell: number
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
*/
|
|
67
|
-
database?: DatabaseClient<NSULDatabase>
|
|
68
|
-
}
|
|
59
|
+
/**
|
|
60
|
+
* Where an {@link NSULLookup} reads from.
|
|
61
|
+
*
|
|
62
|
+
* The source is a `nsul.db` built by `mailwoman`'s gazetteer pipeline, opened read-only,
|
|
63
|
+
* or a connection the caller already holds.
|
|
64
|
+
*/
|
|
65
|
+
export type NSULLookupOpts = SQLiteLookupOptions<NSULDatabase>
|
|
69
66
|
|
|
70
67
|
interface PostcodeRow {
|
|
71
68
|
pcds: string
|
|
@@ -80,43 +77,31 @@ interface PointRow {
|
|
|
80
77
|
}
|
|
81
78
|
|
|
82
79
|
/**
|
|
83
|
-
* Node reader over `nsul.db`.
|
|
84
|
-
*
|
|
80
|
+
* Node reader over `nsul.db`.
|
|
81
|
+
*
|
|
82
|
+
* Disposable, so callers can `using lookup = new NSULLookup(...)`.
|
|
85
83
|
*/
|
|
86
|
-
export class NSULLookup
|
|
87
|
-
#
|
|
88
|
-
/**
|
|
89
|
-
* Resources this instance opened. A connection handed in by a caller is NOT in here, so disposal cannot reach it —
|
|
90
|
-
* ownership is membership rather than a flag a later branch has to check.
|
|
91
|
-
*/
|
|
92
|
-
readonly #resources = new DisposableStack()
|
|
93
|
-
|
|
94
|
-
readonly #postcodeProbe: (uprn: number) => PostcodeRow | undefined
|
|
84
|
+
export class NSULLookup extends SQLiteLookup<NSULDatabase> {
|
|
85
|
+
readonly #postcodeProbe: (uprn: number) => PostcodeRow | null
|
|
95
86
|
readonly #pointsProbe: (pcdsCompact: string) => PointRow[]
|
|
96
87
|
|
|
97
88
|
constructor(opts: NSULLookupOpts) {
|
|
98
|
-
|
|
99
|
-
this.#db = opts.database
|
|
100
|
-
} else if (opts.databasePath) {
|
|
101
|
-
this.#db = this.#resources.use(new DatabaseClient<NSULDatabase>(opts.databasePath, { readOnly: true }))
|
|
102
|
-
} else {
|
|
103
|
-
throw new Error("NSULLookup needs `databasePath` or `database`")
|
|
104
|
-
}
|
|
89
|
+
super(opts)
|
|
105
90
|
|
|
106
91
|
this.#postcodeProbe = prepareGet<[number], PostcodeRow, NSULDatabase>(
|
|
107
|
-
this
|
|
92
|
+
this.database,
|
|
108
93
|
"SELECT pcds, pcds_compact FROM uprn_postcode WHERE uprn = ?"
|
|
109
94
|
)
|
|
110
95
|
|
|
111
96
|
this.#pointsProbe = prepareAll<[string], PointRow, NSULDatabase>(
|
|
112
|
-
this
|
|
97
|
+
this.database,
|
|
113
98
|
"SELECT uprn, lat, lon, h3_cell FROM uprn_postcode WHERE pcds_compact = ? ORDER BY uprn"
|
|
114
99
|
)
|
|
115
100
|
}
|
|
116
101
|
|
|
117
102
|
/**
|
|
118
|
-
* The unit postcode the register assigns to `uprn`, or `null` when the register holds
|
|
119
|
-
* docstring for what that `null` claims).
|
|
103
|
+
* The unit postcode the register assigns to `uprn`, or `null` when the register holds
|
|
104
|
+
* no row for it (see the module docstring for what that `null` claims).
|
|
120
105
|
*/
|
|
121
106
|
postcodeForUPRN(uprn: number): NSULPostcode | null {
|
|
122
107
|
const row = this.#postcodeProbe(uprn)
|
|
@@ -125,9 +110,11 @@ export class NSULLookup implements Disposable {
|
|
|
125
110
|
}
|
|
126
111
|
|
|
127
112
|
/**
|
|
128
|
-
* Every
|
|
129
|
-
*
|
|
130
|
-
*
|
|
113
|
+
* Every uprn the register assigns to one unit postcode, with its published point, in ascending uprn order.
|
|
114
|
+
*
|
|
115
|
+
* The key is compacted through {@link compactPostcode} first, so `PO21 1HR`
|
|
116
|
+
* and `PO211HR` answer identically.
|
|
117
|
+
* An empty array is the register's answer, scoped as the module docstring describes.
|
|
131
118
|
*/
|
|
132
119
|
uprnsForPostcode(postcode: string): NSULAssignedPoint[] {
|
|
133
120
|
return this.#pointsProbe(compactPostcode(postcode)).map((row) => ({
|
|
@@ -137,8 +124,4 @@ export class NSULLookup implements Disposable {
|
|
|
137
124
|
h3Cell: row.h3_cell,
|
|
138
125
|
}))
|
|
139
126
|
}
|
|
140
|
-
|
|
141
|
-
[Symbol.dispose](): void {
|
|
142
|
-
this.#resources[Symbol.dispose]()
|
|
143
|
-
}
|
|
144
127
|
}
|
package/lib/nsul/schema.ts
CHANGED
|
@@ -3,44 +3,21 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* UPRN Lookup** (NSUL) joined to the WGS84 point OS Open UPRN publishes for the same UPRN. One row per
|
|
8
|
-
* GB UPRN that carries a unit postcode AND has a published coordinate; the postcode is Code-Point
|
|
9
|
-
* Open's, so this table and `postcode-gb.bin` agree by construction on the universe of unit postcodes.
|
|
10
|
-
*
|
|
11
|
-
* ## Why this table exists
|
|
12
|
-
*
|
|
13
|
-
* Code-Point Open gives one coordinate per unit postcode; Open UPRN gives one coordinate per
|
|
14
|
-
* addressable object; neither says which object carries which postcode. NSUL does, as field `PCDS`,
|
|
15
|
-
* under OGL-UK-3.0. The `PO`-area measurement that produced this design (recorded on #1975) showed a
|
|
16
|
-
* nearest-centroid reconstruction of the register is exact on 69.6% of 531,266 UPRNs and a building
|
|
17
|
-
* footprint adds nothing, so the register is stored rather than inferred.
|
|
18
|
-
*
|
|
19
|
-
* ## Shape
|
|
20
|
-
*
|
|
21
|
-
* `uprn_postcode` is `WITHOUT ROWID` keyed on the UPRN: small fixed rows, probed by primary key, with
|
|
22
|
-
* one secondary index on `pcds_compact`. The postcode is stored twice on purpose — `pcds` exactly as
|
|
23
|
-
* NSUL writes it (`RG40 4HR`, one space) and `pcds_compact` with the space removed (`RG404HR`), which
|
|
24
|
-
* is the form Code-Point Open's `spr.name` uses, so the two artifacts join on a column rather than an
|
|
25
|
-
* expression. `lat`/`lon`/`h3_cell` are COPIED from `uprn.db` at build time by UPRN join — OS's own
|
|
26
|
-
* WGS84 columns, never a reprojection of NSUL's `GRIDGB1E`/`GRIDGB1N` — so a coordinate here is
|
|
27
|
-
* byte-identical to the one `uprn.db` holds for the same UPRN.
|
|
28
|
-
*
|
|
29
|
-
* The DB also embeds the layer-contract tables from `@mailwoman/core/layers`; the builder
|
|
30
|
-
* (`packages/mailwoman/lib/gazetteer-pipeline/nsul-layer.ts`) writes the manifest and coverage.
|
|
6
|
+
* Typed schema for `nsul.db`, the GB UPRN-to-unit-postcode register.
|
|
31
7
|
*/
|
|
32
8
|
|
|
33
|
-
import type {
|
|
9
|
+
import type { layerschemadatabase } from "@mailwoman/core/layers"
|
|
34
10
|
import { sql, type Kysely } from "kysely"
|
|
35
11
|
|
|
36
12
|
/**
|
|
37
|
-
* Resolution of the `h3_cell` column
|
|
13
|
+
* Resolution of the `h3_cell` column, matching the res-9 spine `uprn.db` keys on
|
|
14
|
+
* because the value is copied from it.
|
|
38
15
|
*/
|
|
39
16
|
export const NSUL_H3_RESOLUTION = 9
|
|
40
17
|
|
|
41
18
|
/**
|
|
42
|
-
* Resolution of the layer's `layer_coverage` cells
|
|
43
|
-
*
|
|
19
|
+
* Resolution of the layer's `layer_coverage` cells, matching `uprn.db`'s
|
|
20
|
+
* so both coverage tables describe the same cells.
|
|
44
21
|
*/
|
|
45
22
|
export const NSUL_COVERAGE_H3_RESOLUTION = 6
|
|
46
23
|
|
|
@@ -49,16 +26,16 @@ export const NSUL_COVERAGE_H3_RESOLUTION = 6
|
|
|
49
26
|
*/
|
|
50
27
|
export interface UPRNPostcodeTable {
|
|
51
28
|
/**
|
|
52
|
-
* The Unique Property Reference Number
|
|
29
|
+
* The Unique Property Reference Number, up to 12 digits, so always within `Number.MAX_SAFE_INTEGER`.
|
|
53
30
|
*/
|
|
54
31
|
uprn: number
|
|
55
32
|
/**
|
|
56
|
-
* The unit postcode as
|
|
33
|
+
* The unit postcode as nsul writes it: outward code, one space, inward code (`RG40 4HR`).
|
|
57
34
|
*/
|
|
58
35
|
pcds: string
|
|
59
36
|
/**
|
|
60
|
-
* {@link pcds} with the space removed (`RG404HR`)
|
|
61
|
-
* `uprnsForPostcode` probes.
|
|
37
|
+
* {@link pcds} with the space removed (`RG404HR`), the form Code-Point Open's
|
|
38
|
+
* `spr.name` contains and `uprnsForPostcode` probes.
|
|
62
39
|
*/
|
|
63
40
|
pcds_compact: string
|
|
64
41
|
/**
|
|
@@ -76,23 +53,20 @@ export interface UPRNPostcodeTable {
|
|
|
76
53
|
}
|
|
77
54
|
|
|
78
55
|
/**
|
|
79
|
-
* Build-provenance key/value pairs the fixed `layer_manifest` columns have no room for
|
|
80
|
-
* header as found, the per-region row counts, the four attribution lines.
|
|
56
|
+
* Build-provenance key/value pairs the fixed `layer_manifest` columns have no room for.
|
|
81
57
|
*/
|
|
82
58
|
export interface NSULMetaTable {
|
|
83
59
|
key: string
|
|
84
60
|
value: string
|
|
85
61
|
}
|
|
86
62
|
|
|
87
|
-
export interface NSULDatabase extends
|
|
63
|
+
export interface NSULDatabase extends layerschemadatabase {
|
|
88
64
|
uprn_postcode: UPRNPostcodeTable
|
|
89
65
|
nsul_meta: NSULMetaTable
|
|
90
66
|
}
|
|
91
67
|
|
|
92
68
|
/**
|
|
93
|
-
* The compact form of a unit postcode
|
|
94
|
-
* both the builder and every consumer share, so a caller holding NSUL's spaced form and one holding Code-Point's
|
|
95
|
-
* compact form reach the same key.
|
|
69
|
+
* The compact form of a unit postcode, every space removed and upper-cased.
|
|
96
70
|
*/
|
|
97
71
|
export function compactPostcode(pcds: string): string {
|
|
98
72
|
return pcds.replaceAll(/\s+/g, "").toUpperCase()
|
|
@@ -120,10 +94,9 @@ export async function createNSULMetaTable(db: Kysely<NSULDatabase>): Promise<voi
|
|
|
120
94
|
}
|
|
121
95
|
|
|
122
96
|
/**
|
|
123
|
-
* The `pcds_compact` index the `uprnsForPostcode` probe reads.
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* its key first.
|
|
97
|
+
* The `pcds_compact` index the `uprnsForPostcode` probe reads.
|
|
98
|
+
*
|
|
99
|
+
* There is no index on the spaced `pcds` because it is derivable through {@link compactPostcode}.
|
|
127
100
|
*/
|
|
128
101
|
export async function createNSULIndexes(db: Kysely<NSULDatabase>): Promise<void> {
|
|
129
102
|
await db.schema.createIndex("uprn_postcode_pcds_compact").on("uprn_postcode").column("pcds_compact").execute()
|
package/lib/paths.ts
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Where the databases this resolver reads live under the data root's `db/` group.
|
|
7
|
+
*
|
|
8
|
+
* Each constant is a lazy path builder: it reads `$MAILWOMAN_DATA_ROOT` when a path is requested,
|
|
9
|
+
* so a later environment change or a test stub is honored.
|
|
10
|
+
* Call it with a filename, as in `wofDatabasePath("admin-global-priority.db")`.
|
|
11
|
+
* A caller holding another data root uses the matching `…DatabaseRoot(dataRoot)` function.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { databaseRootPath, dataRootPath } from "@mailwoman/core/data-root"
|
|
15
|
+
import type { PathBuilder, PathBuilderLike } from "path-ts"
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* `<dataRoot>/db/wof`, which holds the admin, candidate and postcode databases.
|
|
19
|
+
*/
|
|
20
|
+
export function wofDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder {
|
|
21
|
+
return databaseRootPath(dataRoot)("wof")
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* `$MAILWOMAN_DATA_ROOT/db/wof`.
|
|
26
|
+
*
|
|
27
|
+
* @see {@link wofDatabaseRoot} for another data root.
|
|
28
|
+
*/
|
|
29
|
+
export const wofDatabasePath: PathBuilder = wofDatabaseRoot(dataRootPath())
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* `<dataRoot>/db/address-points`, which holds the national rooftop address-point databases.
|
|
33
|
+
*/
|
|
34
|
+
export function addressPointDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder {
|
|
35
|
+
return databaseRootPath(dataRoot)("address-points")
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* `$MAILWOMAN_DATA_ROOT/db/address-points`.
|
|
40
|
+
*/
|
|
41
|
+
export const addressPointDatabasePath: PathBuilder = addressPointDatabaseRoot(dataRootPath())
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* `<dataRoot>/db/interpolation`, which holds the street-segment interpolation databases.
|
|
45
|
+
*/
|
|
46
|
+
export function interpolationDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder {
|
|
47
|
+
return databaseRootPath(dataRoot)("interpolation")
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* `$MAILWOMAN_DATA_ROOT/db/interpolation`.
|
|
52
|
+
*/
|
|
53
|
+
export const interpolationDatabasePath: PathBuilder = interpolationDatabaseRoot(dataRootPath())
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* `<dataRoot>/db/poi`, which holds `poi.db` and its per-source builds.
|
|
57
|
+
*/
|
|
58
|
+
export function poiDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder {
|
|
59
|
+
return databaseRootPath(dataRoot)("poi")
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* `$MAILWOMAN_DATA_ROOT/db/poi`.
|
|
64
|
+
*/
|
|
65
|
+
export const poiDatabasePath: PathBuilder = poiDatabaseRoot(dataRootPath())
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* `$MAILWOMAN_DATA_ROOT/db/uprn`, which holds the UPRN point database.
|
|
69
|
+
*/
|
|
70
|
+
export const uprnDatabasePath: PathBuilder = databaseRootPath(dataRootPath())("uprn")
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* `$MAILWOMAN_DATA_ROOT/db/nsul`, which holds the NSUL postcode layer and its source vintages.
|
|
74
|
+
*/
|
|
75
|
+
export const nsulDatabasePath: PathBuilder = databaseRootPath(dataRootPath())("nsul")
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Default WOF extracts for FTS when `--wof-db` is not provided.
|
|
79
|
+
*
|
|
80
|
+
* Includes the global admin-priority extract plus postcode extracts.
|
|
81
|
+
* The routing in `pickExtractForPlacetype` sends each postcode query to the
|
|
82
|
+
* extract that claims that country.
|
|
83
|
+
*
|
|
84
|
+
* All paths are under `dataRoot`.
|
|
85
|
+
* It defaults to `$MAILWOMAN_DATA_ROOT`, and callers may pass `--data-root`.
|
|
86
|
+
* Returns a fresh array each call.
|
|
87
|
+
*
|
|
88
|
+
* Callers usually filter with `existsSync`, so missing files are skipped.
|
|
89
|
+
*
|
|
90
|
+
* This runtime list is intentionally smaller than `DEFAULT_POSTCODE_DATABASES`
|
|
91
|
+
* (`mailwoman/gazetteer-pipeline/index.ts`), because these databases are attached live at boot.
|
|
92
|
+
*
|
|
93
|
+
* Notes:
|
|
94
|
+
* - `postalcode-geonames-tail.db` now contains FI/CZ/SK/SI/DK/no/HR/PL/SE.
|
|
95
|
+
* - `postalcode-ni-osm.db` is build-local (ODbL, OSM `addr:postcode`) and may be absent.
|
|
96
|
+
* A missing file is filtered out.
|
|
97
|
+
* This is the only GB-claiming extract in the list.
|
|
98
|
+
* Code-Point Open is absent.
|
|
99
|
+
*/
|
|
100
|
+
export function wofExtractPaths(dataRoot: PathBuilderLike = dataRootPath()): string[] {
|
|
101
|
+
return Object.values(wofExtractPathsByName(dataRoot))
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The extract set {@link wofExtractPaths} lists, keyed by role so a caller can
|
|
106
|
+
* name one without indexing a tuple.
|
|
107
|
+
*/
|
|
108
|
+
export interface WOFExtractPaths {
|
|
109
|
+
/**
|
|
110
|
+
* The global admin-priority extract, where every admin lookup starts.
|
|
111
|
+
*/
|
|
112
|
+
adminGlobalPriority: string
|
|
113
|
+
/**
|
|
114
|
+
* US ZIP codes.
|
|
115
|
+
*/
|
|
116
|
+
postalcodeUS: string
|
|
117
|
+
/**
|
|
118
|
+
* The nine-country namesake set FI/CZ/SK/SI/DK/no/HR/PL/SE (see {@link wofExtractPaths}).
|
|
119
|
+
*/
|
|
120
|
+
postalcodeGeonamesTail: string
|
|
121
|
+
/**
|
|
122
|
+
* The international postcode extract (FR/DE/ES/IT/NL and the other countries
|
|
123
|
+
* routed here by `pickExtractForPlacetype`).
|
|
124
|
+
*/
|
|
125
|
+
postalcodeIntl: string
|
|
126
|
+
/**
|
|
127
|
+
* The NL PC6 full-postcode extract from CBS via pdok (`scripts/build-postalcode-nl-pc6.ts`), the
|
|
128
|
+
* data the lookup's NL PC6 ladder (`"1012 LG"` → joined `"1012LG"` → 4-digit stem) resolves against.
|
|
129
|
+
*/
|
|
130
|
+
postalcodeNLPC6: string
|
|
131
|
+
/**
|
|
132
|
+
* Northern Ireland (BT) from OpenStreetMap, 4,757 of 50,032 live NI postcodes (9.5 %).
|
|
133
|
+
*
|
|
134
|
+
* It is the only coverage for the hole Code-Point Open leaves.
|
|
135
|
+
*
|
|
136
|
+
* ODbL, build-local, 2.5 MB.
|
|
137
|
+
* A miss on a BT code means not attested in OSM.
|
|
138
|
+
*
|
|
139
|
+
* An unknown postcode abstains, so the extract is strictly additive.
|
|
140
|
+
* Rebuild: `mailwoman gazetteer build postcode-ni-osm`.
|
|
141
|
+
*/
|
|
142
|
+
postalcodeNIOSM: string
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* {@link wofExtractPaths} as a record keyed by source, in the same order the runtime attaches them.
|
|
147
|
+
*/
|
|
148
|
+
export function wofExtractPathsByName(dataRoot: PathBuilderLike = dataRootPath()): WOFExtractPaths {
|
|
149
|
+
const wof = wofDatabaseRoot(dataRoot)
|
|
150
|
+
|
|
151
|
+
return {
|
|
152
|
+
adminGlobalPriority: wof("admin-global-priority.db").toString(),
|
|
153
|
+
postalcodeUS: wof("postalcode-us.db").toString(),
|
|
154
|
+
postalcodeGeonamesTail: wof("postalcode-geonames-tail.db").toString(),
|
|
155
|
+
postalcodeIntl: wof("postalcode-intl.db").toString(),
|
|
156
|
+
postalcodeNLPC6: wof("postalcode-nl-pc6.db").toString(),
|
|
157
|
+
postalcodeNIOSM: wof("postalcode-ni-osm.db").toString(),
|
|
158
|
+
}
|
|
159
|
+
}
|