@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/out/paths.d.ts
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
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
|
+
import type { PathBuilder, PathBuilderLike } from "path-ts";
|
|
14
|
+
/**
|
|
15
|
+
* `<dataRoot>/db/wof`, which holds the admin, candidate and postcode databases.
|
|
16
|
+
*/
|
|
17
|
+
export declare function wofDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder;
|
|
18
|
+
/**
|
|
19
|
+
* `$MAILWOMAN_DATA_ROOT/db/wof`.
|
|
20
|
+
*
|
|
21
|
+
* @see {@link wofDatabaseRoot} for another data root.
|
|
22
|
+
*/
|
|
23
|
+
export declare const wofDatabasePath: PathBuilder;
|
|
24
|
+
/**
|
|
25
|
+
* `<dataRoot>/db/address-points`, which holds the national rooftop address-point databases.
|
|
26
|
+
*/
|
|
27
|
+
export declare function addressPointDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder;
|
|
28
|
+
/**
|
|
29
|
+
* `$MAILWOMAN_DATA_ROOT/db/address-points`.
|
|
30
|
+
*/
|
|
31
|
+
export declare const addressPointDatabasePath: PathBuilder;
|
|
32
|
+
/**
|
|
33
|
+
* `<dataRoot>/db/interpolation`, which holds the street-segment interpolation databases.
|
|
34
|
+
*/
|
|
35
|
+
export declare function interpolationDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder;
|
|
36
|
+
/**
|
|
37
|
+
* `$MAILWOMAN_DATA_ROOT/db/interpolation`.
|
|
38
|
+
*/
|
|
39
|
+
export declare const interpolationDatabasePath: PathBuilder;
|
|
40
|
+
/**
|
|
41
|
+
* `<dataRoot>/db/poi`, which holds `poi.db` and its per-source builds.
|
|
42
|
+
*/
|
|
43
|
+
export declare function poiDatabaseRoot(dataRoot: PathBuilderLike): PathBuilder;
|
|
44
|
+
/**
|
|
45
|
+
* `$MAILWOMAN_DATA_ROOT/db/poi`.
|
|
46
|
+
*/
|
|
47
|
+
export declare const poiDatabasePath: PathBuilder;
|
|
48
|
+
/**
|
|
49
|
+
* `$MAILWOMAN_DATA_ROOT/db/uprn`, which holds the UPRN point database.
|
|
50
|
+
*/
|
|
51
|
+
export declare const uprnDatabasePath: PathBuilder;
|
|
52
|
+
/**
|
|
53
|
+
* `$MAILWOMAN_DATA_ROOT/db/nsul`, which holds the NSUL postcode layer and its source vintages.
|
|
54
|
+
*/
|
|
55
|
+
export declare const nsulDatabasePath: PathBuilder;
|
|
56
|
+
/**
|
|
57
|
+
* Default WOF extracts for FTS when `--wof-db` is not provided.
|
|
58
|
+
*
|
|
59
|
+
* Includes the global admin-priority extract plus postcode extracts.
|
|
60
|
+
* The routing in `pickExtractForPlacetype` sends each postcode query to the
|
|
61
|
+
* extract that claims that country.
|
|
62
|
+
*
|
|
63
|
+
* All paths are under `dataRoot`.
|
|
64
|
+
* It defaults to `$MAILWOMAN_DATA_ROOT`, and callers may pass `--data-root`.
|
|
65
|
+
* Returns a fresh array each call.
|
|
66
|
+
*
|
|
67
|
+
* Callers usually filter with `existsSync`, so missing files are skipped.
|
|
68
|
+
*
|
|
69
|
+
* This runtime list is intentionally smaller than `DEFAULT_POSTCODE_DATABASES`
|
|
70
|
+
* (`mailwoman/gazetteer-pipeline/index.ts`), because these databases are attached live at boot.
|
|
71
|
+
*
|
|
72
|
+
* Notes:
|
|
73
|
+
* - `postalcode-geonames-tail.db` now contains FI/CZ/SK/SI/DK/no/HR/PL/SE.
|
|
74
|
+
* - `postalcode-ni-osm.db` is build-local (ODbL, OSM `addr:postcode`) and may be absent.
|
|
75
|
+
* A missing file is filtered out.
|
|
76
|
+
* This is the only GB-claiming extract in the list.
|
|
77
|
+
* Code-Point Open is absent.
|
|
78
|
+
*/
|
|
79
|
+
export declare function wofExtractPaths(dataRoot?: PathBuilderLike): string[];
|
|
80
|
+
/**
|
|
81
|
+
* The extract set {@link wofExtractPaths} lists, keyed by role so a caller can
|
|
82
|
+
* name one without indexing a tuple.
|
|
83
|
+
*/
|
|
84
|
+
export interface WOFExtractPaths {
|
|
85
|
+
/**
|
|
86
|
+
* The global admin-priority extract, where every admin lookup starts.
|
|
87
|
+
*/
|
|
88
|
+
adminGlobalPriority: string;
|
|
89
|
+
/**
|
|
90
|
+
* US ZIP codes.
|
|
91
|
+
*/
|
|
92
|
+
postalcodeUS: string;
|
|
93
|
+
/**
|
|
94
|
+
* The nine-country namesake set FI/CZ/SK/SI/DK/no/HR/PL/SE (see {@link wofExtractPaths}).
|
|
95
|
+
*/
|
|
96
|
+
postalcodeGeonamesTail: string;
|
|
97
|
+
/**
|
|
98
|
+
* The international postcode extract (FR/DE/ES/IT/NL and the other countries
|
|
99
|
+
* routed here by `pickExtractForPlacetype`).
|
|
100
|
+
*/
|
|
101
|
+
postalcodeIntl: string;
|
|
102
|
+
/**
|
|
103
|
+
* The NL PC6 full-postcode extract from CBS via pdok (`scripts/build-postalcode-nl-pc6.ts`), the
|
|
104
|
+
* data the lookup's NL PC6 ladder (`"1012 LG"` → joined `"1012LG"` → 4-digit stem) resolves against.
|
|
105
|
+
*/
|
|
106
|
+
postalcodeNLPC6: string;
|
|
107
|
+
/**
|
|
108
|
+
* Northern Ireland (BT) from OpenStreetMap, 4,757 of 50,032 live NI postcodes (9.5 %).
|
|
109
|
+
*
|
|
110
|
+
* It is the only coverage for the hole Code-Point Open leaves.
|
|
111
|
+
*
|
|
112
|
+
* ODbL, build-local, 2.5 MB.
|
|
113
|
+
* A miss on a BT code means not attested in OSM.
|
|
114
|
+
*
|
|
115
|
+
* An unknown postcode abstains, so the extract is strictly additive.
|
|
116
|
+
* Rebuild: `mailwoman gazetteer build postcode-ni-osm`.
|
|
117
|
+
*/
|
|
118
|
+
postalcodeNIOSM: string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* {@link wofExtractPaths} as a record keyed by source, in the same order the runtime attaches them.
|
|
122
|
+
*/
|
|
123
|
+
export declare function wofExtractPathsByName(dataRoot?: PathBuilderLike): WOFExtractPaths;
|
|
124
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../lib/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE3D;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAEtE;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,WAA6C,CAAA;AAE3E;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAE/E;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAsD,CAAA;AAE7F;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAEhF;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,WAAuD,CAAA;AAE/F;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,WAAW,CAEtE;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,WAA6C,CAAA;AAE3E;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAsD,CAAA;AAErF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAsD,CAAA;AAErF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,GAAE,eAAgC,GAAG,MAAM,EAAE,CAEpF;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;IAC3B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,sBAAsB,EAAE,MAAM,CAAA;IAC9B;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAA;IACtB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAA;IACvB;;;;;;;;;;OAUG;IACH,eAAe,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,GAAE,eAAgC,GAAG,eAAe,CAWjG"}
|
package/out/paths.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
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
|
+
import { databaseRootPath, dataRootPath } from "@mailwoman/core/data-root";
|
|
14
|
+
/**
|
|
15
|
+
* `<dataRoot>/db/wof`, which holds the admin, candidate and postcode databases.
|
|
16
|
+
*/
|
|
17
|
+
export function wofDatabaseRoot(dataRoot) {
|
|
18
|
+
return databaseRootPath(dataRoot)("wof");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* `$MAILWOMAN_DATA_ROOT/db/wof`.
|
|
22
|
+
*
|
|
23
|
+
* @see {@link wofDatabaseRoot} for another data root.
|
|
24
|
+
*/
|
|
25
|
+
export const wofDatabasePath = wofDatabaseRoot(dataRootPath());
|
|
26
|
+
/**
|
|
27
|
+
* `<dataRoot>/db/address-points`, which holds the national rooftop address-point databases.
|
|
28
|
+
*/
|
|
29
|
+
export function addressPointDatabaseRoot(dataRoot) {
|
|
30
|
+
return databaseRootPath(dataRoot)("address-points");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* `$MAILWOMAN_DATA_ROOT/db/address-points`.
|
|
34
|
+
*/
|
|
35
|
+
export const addressPointDatabasePath = addressPointDatabaseRoot(dataRootPath());
|
|
36
|
+
/**
|
|
37
|
+
* `<dataRoot>/db/interpolation`, which holds the street-segment interpolation databases.
|
|
38
|
+
*/
|
|
39
|
+
export function interpolationDatabaseRoot(dataRoot) {
|
|
40
|
+
return databaseRootPath(dataRoot)("interpolation");
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* `$MAILWOMAN_DATA_ROOT/db/interpolation`.
|
|
44
|
+
*/
|
|
45
|
+
export const interpolationDatabasePath = interpolationDatabaseRoot(dataRootPath());
|
|
46
|
+
/**
|
|
47
|
+
* `<dataRoot>/db/poi`, which holds `poi.db` and its per-source builds.
|
|
48
|
+
*/
|
|
49
|
+
export function poiDatabaseRoot(dataRoot) {
|
|
50
|
+
return databaseRootPath(dataRoot)("poi");
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* `$MAILWOMAN_DATA_ROOT/db/poi`.
|
|
54
|
+
*/
|
|
55
|
+
export const poiDatabasePath = poiDatabaseRoot(dataRootPath());
|
|
56
|
+
/**
|
|
57
|
+
* `$MAILWOMAN_DATA_ROOT/db/uprn`, which holds the UPRN point database.
|
|
58
|
+
*/
|
|
59
|
+
export const uprnDatabasePath = databaseRootPath(dataRootPath())("uprn");
|
|
60
|
+
/**
|
|
61
|
+
* `$MAILWOMAN_DATA_ROOT/db/nsul`, which holds the NSUL postcode layer and its source vintages.
|
|
62
|
+
*/
|
|
63
|
+
export const nsulDatabasePath = databaseRootPath(dataRootPath())("nsul");
|
|
64
|
+
/**
|
|
65
|
+
* Default WOF extracts for FTS when `--wof-db` is not provided.
|
|
66
|
+
*
|
|
67
|
+
* Includes the global admin-priority extract plus postcode extracts.
|
|
68
|
+
* The routing in `pickExtractForPlacetype` sends each postcode query to the
|
|
69
|
+
* extract that claims that country.
|
|
70
|
+
*
|
|
71
|
+
* All paths are under `dataRoot`.
|
|
72
|
+
* It defaults to `$MAILWOMAN_DATA_ROOT`, and callers may pass `--data-root`.
|
|
73
|
+
* Returns a fresh array each call.
|
|
74
|
+
*
|
|
75
|
+
* Callers usually filter with `existsSync`, so missing files are skipped.
|
|
76
|
+
*
|
|
77
|
+
* This runtime list is intentionally smaller than `DEFAULT_POSTCODE_DATABASES`
|
|
78
|
+
* (`mailwoman/gazetteer-pipeline/index.ts`), because these databases are attached live at boot.
|
|
79
|
+
*
|
|
80
|
+
* Notes:
|
|
81
|
+
* - `postalcode-geonames-tail.db` now contains FI/CZ/SK/SI/DK/no/HR/PL/SE.
|
|
82
|
+
* - `postalcode-ni-osm.db` is build-local (ODbL, OSM `addr:postcode`) and may be absent.
|
|
83
|
+
* A missing file is filtered out.
|
|
84
|
+
* This is the only GB-claiming extract in the list.
|
|
85
|
+
* Code-Point Open is absent.
|
|
86
|
+
*/
|
|
87
|
+
export function wofExtractPaths(dataRoot = dataRootPath()) {
|
|
88
|
+
return Object.values(wofExtractPathsByName(dataRoot));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* {@link wofExtractPaths} as a record keyed by source, in the same order the runtime attaches them.
|
|
92
|
+
*/
|
|
93
|
+
export function wofExtractPathsByName(dataRoot = dataRootPath()) {
|
|
94
|
+
const wof = wofDatabaseRoot(dataRoot);
|
|
95
|
+
return {
|
|
96
|
+
adminGlobalPriority: wof("admin-global-priority.db").toString(),
|
|
97
|
+
postalcodeUS: wof("postalcode-us.db").toString(),
|
|
98
|
+
postalcodeGeonamesTail: wof("postalcode-geonames-tail.db").toString(),
|
|
99
|
+
postalcodeIntl: wof("postalcode-intl.db").toString(),
|
|
100
|
+
postalcodeNLPC6: wof("postalcode-nl-pc6.db").toString(),
|
|
101
|
+
postalcodeNIOSM: wof("postalcode-ni-osm.db").toString(),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=paths.js.map
|
package/out/paths.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../lib/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAG1E;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAyB;IACxD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgB,eAAe,CAAC,YAAY,EAAE,CAAC,CAAA;AAE3E;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAyB;IACjE,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAgB,wBAAwB,CAAC,YAAY,EAAE,CAAC,CAAA;AAE7F;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAyB;IAClE,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAA;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAgB,yBAAyB,CAAC,YAAY,EAAE,CAAC,CAAA;AAE/F;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAyB;IACxD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAgB,eAAe,CAAC,YAAY,EAAE,CAAC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgB,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAErF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgB,gBAAgB,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAErF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,eAAe,CAAC,QAAQ,GAAoB,YAAY,EAAE;IACzE,OAAO,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAA;AACtD,CAAC;AA2CD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAQ,GAAoB,YAAY,EAAE;IAC/E,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;IAErC,OAAO;QACN,mBAAmB,EAAE,GAAG,CAAC,0BAA0B,CAAC,CAAC,QAAQ,EAAE;QAC/D,YAAY,EAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;QAChD,sBAAsB,EAAE,GAAG,CAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE;QACrE,cAAc,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;QACpD,eAAe,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;QACvD,eAAe,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;KACvD,CAAA;AACF,CAAC"}
|
|
@@ -2,196 +2,108 @@
|
|
|
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 type { DatabaseClient } from "@mailwoman/sqlite/client";
|
|
34
7
|
import type { Kysely } from "kysely";
|
|
35
8
|
/**
|
|
36
|
-
*
|
|
9
|
+
* Describes one row of the `place_importance` table, keyed by WOF place id.
|
|
37
10
|
*/
|
|
38
11
|
export interface PlaceImportanceTable {
|
|
39
12
|
id: number;
|
|
40
13
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
14
|
+
* The population-anchored referential likelihood in [0, 1], from {@link referentialFromPopulation}.
|
|
15
|
+
*
|
|
16
|
+
* It is never NULL.
|
|
17
|
+
* A place without a population row scores `0`.
|
|
18
|
+
*
|
|
19
|
+
* That score represents no population evidence, so it earns no boost or penalty.
|
|
44
20
|
*/
|
|
45
21
|
referential: number;
|
|
46
22
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
23
|
+
* The fan-out-guarded Wikipedia importance in [0, 1], or NULL when the place has no surviving concordance.
|
|
24
|
+
*
|
|
25
|
+
* NULL means absence, so consumers must not coalesce it to 0 or rank on it.
|
|
49
26
|
*/
|
|
50
27
|
encyclopedic: number | null;
|
|
51
28
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
29
|
+
* Deprecated blend of the two scores, written by {@link blendImportance} for
|
|
30
|
+
* consumers that still need one scale.
|
|
31
|
+
*
|
|
32
|
+
* New code ranks on `referential` and displays `encyclopedic`.
|
|
55
33
|
*/
|
|
56
34
|
importance: number;
|
|
57
35
|
}
|
|
58
36
|
/**
|
|
59
|
-
*
|
|
37
|
+
* Types the `place_importance` table of a WOF admin database
|
|
38
|
+
* for `new DatabaseClient<PlaceImportanceDatabase>(...)`.
|
|
60
39
|
*/
|
|
61
40
|
export interface PlaceImportanceDatabase {
|
|
62
41
|
place_importance: PlaceImportanceTable;
|
|
63
42
|
}
|
|
64
43
|
/**
|
|
65
|
-
*
|
|
66
|
-
* {@link PlaceImportanceTable}
|
|
44
|
+
* Lists the `place_importance` columns in declaration order, each checked
|
|
45
|
+
* against {@link PlaceImportanceTable}.
|
|
67
46
|
*/
|
|
68
47
|
export declare const PLACE_IMPORTANCE_COLUMNS: readonly ["id", "referential", "encyclopedic", "importance"];
|
|
69
48
|
/**
|
|
70
|
-
*
|
|
71
|
-
* `mailwoman gazetteer importance`, never a migration.
|
|
49
|
+
* Drops and recreates the `place_importance` table with separate referential and encyclopedic columns.
|
|
72
50
|
*/
|
|
73
51
|
export declare function createPlaceImportanceTable(db: Kysely<PlaceImportanceDatabase>): Promise<void>;
|
|
74
52
|
/**
|
|
75
|
-
*
|
|
76
|
-
* (backend-agnostic — it cannot import this package) reads the same number. Re-exported HERE so the schema module stays
|
|
77
|
-
* the one-stop read for the table: the column and the function that fills it are one hop apart.
|
|
78
|
-
*/
|
|
79
|
-
/**
|
|
80
|
-
* The most the encyclopedic channel may raise a place's blended importance above its population-anchored referential
|
|
81
|
-
* score.
|
|
53
|
+
* Caps how far the encyclopedic score may raise a place's blended importance above its referential score.
|
|
82
54
|
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* channels' scales CROSS at the article floor: merely having a Wikipedia article scores ~0.25–0.35, which exceeds the
|
|
86
|
-
* referential score of a mid-size town, so an unbounded blend ranks a 136-person village with an article above a
|
|
87
|
-
* 16,026-person town without one.
|
|
88
|
-
*
|
|
89
|
-
* The value is bracketed by two decided contests, measured on the 2026-08-24 staging build:
|
|
90
|
-
*
|
|
91
|
-
* - `> 0.2282`, or bare `Whitby` stops answering Whitby GB (pop 13,130, referential 0.2729, encyclopedic 0.5496) over
|
|
92
|
-
* Whitby CA (pop 128,377, referential 0.5011) — the #28 design case the fame prior exists to serve.
|
|
93
|
-
* - `< 0.2790`, or bare `Tó`/`To` answers Tó PT (pop 136, referential 0.0131, encyclopedic 0.3375) over Tô BF (pop
|
|
94
|
-
* 16,026, no article) — the `bf-gloss-to-*` board pair.
|
|
95
|
-
*
|
|
96
|
-
* 0.25 sits mid-interval with ~0.02 margin to each bound.
|
|
55
|
+
* Merely having an article scores about 0.25 to 0.35, above a mid-size town's referential score,
|
|
56
|
+
* so without the cap a tiny village with an article outranks a large town without one.
|
|
97
57
|
*/
|
|
98
58
|
export declare const ENCYCLOPEDIC_BOOST_CAP = 0.25;
|
|
99
59
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
* - No population evidence (`referential` 0) → the encyclopedic score stands alone: there is nothing to bound the
|
|
105
|
-
* article's claim against, and a constant cap would demote every famous place WOF records no population for
|
|
106
|
-
* (meaning-of-zero: referential 0 is "unmeasured", not "tiny").
|
|
107
|
-
* - Both present → the encyclopedic value clamped to at most {@link ENCYCLOPEDIC_BOOST_CAP} above the referential score,
|
|
108
|
-
* and never below it. The floor half repairs the downward inversion (the Seine-Saint-Denis suburb's weak article
|
|
109
|
-
* scored 0.1173 and REPLACED its referential 0.4716 under the old `COALESCE`, so a 418-person Aude hamlet outranked
|
|
110
|
-
* it 4.8x); the cap half repairs the upward one (`Tó`, above).
|
|
111
|
-
*
|
|
112
|
-
* Scale of the clamp on the 2026-08-24 staging build: of 628,202 article-bearing rows, 209,738 sit above the cap and
|
|
113
|
-
* 13,888 sit below their referential floor; the 305,168 article-without-population rows pass through unchanged.
|
|
60
|
+
* Blends the two channels into the legacy `importance` column: the referential score
|
|
61
|
+
* when there is no article, only the encyclopedic score when population is unknown
|
|
62
|
+
* (`referential` 0), and otherwise the encyclopedic score clamped between the
|
|
63
|
+
* referential score and {@link ENCYCLOPEDIC_BOOST_CAP} above it.
|
|
114
64
|
*/
|
|
115
|
-
export declare function blendImportance(referential: number, encyclopedic: number | null
|
|
65
|
+
export declare function blendImportance(referential: number, encyclopedic: number | null): number;
|
|
116
66
|
/**
|
|
117
|
-
*
|
|
118
|
-
*
|
|
67
|
+
* Source names used by {@link loadImportanceSplit}.
|
|
68
|
+
* The FST stamp records these values as provenance.
|
|
119
69
|
*/
|
|
120
70
|
export declare const IMPORTANCE_SPLIT_SOURCES: {
|
|
121
|
-
/**
|
|
122
|
-
* `place_importance` carries `referential` + `encyclopedic` — the post-split build.
|
|
123
|
-
*/
|
|
124
71
|
readonly splitColumns: "split-columns";
|
|
125
|
-
/**
|
|
126
|
-
* `place_importance` carries only the conflated `importance`; the split was RECONSTRUCTED against `place_population`
|
|
127
|
-
* (see {@link splitLegacyImportance}).
|
|
128
|
-
*/
|
|
129
72
|
readonly legacyReconstructed: "legacy-reconstructed";
|
|
130
|
-
/**
|
|
131
|
-
* No `place_importance` at all — referential from `place_population`, encyclopedic absent for every place.
|
|
132
|
-
*/
|
|
133
73
|
readonly populationOnly: "population-only";
|
|
134
|
-
/**
|
|
135
|
-
* Neither table. Every score is 0, and 0 here means the database carries no salience evidence whatsoever.
|
|
136
|
-
*/
|
|
137
74
|
readonly none: "none";
|
|
138
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* Identifies how an {@link ImportanceSplit} was obtained, as one of the
|
|
78
|
+
* {@link IMPORTANCE_SPLIT_SOURCES} values.
|
|
79
|
+
*/
|
|
139
80
|
export type ImportanceSplitSource = (typeof IMPORTANCE_SPLIT_SOURCES)[keyof typeof IMPORTANCE_SPLIT_SOURCES];
|
|
140
81
|
/**
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
* THE PROBE IS A COLUMN, NOT A TABLE, and that is the whole reason this lives here rather than beside a caller's other
|
|
145
|
-
* table probes. The pre-split table exists and holds a single conflated `importance` column whose value is a Wikipedia
|
|
146
|
-
* score on some rows and a population proxy on others, with nothing in the row to say which — reading that as
|
|
147
|
-
* encyclopedic would surface the exact confusion ROAD_TO_V9 §2 exists to end.
|
|
82
|
+
* Returns the `select` term and `left join` that add `encyclopedic` to name-lookup results
|
|
83
|
+
* for `schemaName`, degrading to `NULL` and no join when the column is absent.
|
|
148
84
|
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
* carries the column yet, so today that degraded form is the only one anything builds.
|
|
153
|
-
*
|
|
154
|
-
* Call it ONCE per extract and cache the result — it runs a `PRAGMA`, and the callers are per-keystroke hot.
|
|
85
|
+
* It probes for the column rather than the table, because a pre-split table's
|
|
86
|
+
* `importance` mixes Wikipedia and population scores.
|
|
87
|
+
* Cache the result per extract, since it runs a `PRAGMA` and lookups are per keystroke.
|
|
155
88
|
*/
|
|
156
89
|
export declare function encyclopedicClauses<DB>(db: DatabaseClient<DB>, schemaName: string): {
|
|
157
90
|
select: string;
|
|
158
91
|
join: string;
|
|
159
92
|
};
|
|
160
93
|
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* ~1e-15 absolute against scores Nominatim publishes to four decimals.
|
|
94
|
+
* Sets the relative tolerance within which {@link splitLegacyImportance} treats
|
|
95
|
+
* a value as lying on the population curve.
|
|
164
96
|
*/
|
|
165
97
|
export declare const LEGACY_FALLBACK_EPSILON: number;
|
|
166
98
|
/**
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
* of `min(1, log2(1+pop/1000)/14)` for every place with a population that Wikipedia had missed. So a legacy value is a
|
|
171
|
-
* fallback row IFF it reproduces {@link referentialFromPopulation} of that place's population — the two passes wrote
|
|
172
|
-
* different arithmetic, and a score from Nominatim's four-decimal TSV landing on the log2 curve is a measure-zero
|
|
173
|
-
* event.
|
|
99
|
+
* Splits a legacy `place_importance` value into referential and encyclopedic scores,
|
|
100
|
+
* treating it as a population fallback when it matches {@link referentialFromPopulation}
|
|
101
|
+
* within {@link LEGACY_FALLBACK_EPSILON}.
|
|
174
102
|
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
* 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
|
|
178
|
-
* inputs (worked example: wof 85803233, population 21,299 — stored 0.31992193633838988953, CPython
|
|
179
|
-
* 0.31992193633838994504, delta 5.55e-17). Bit equality would therefore INVENT 33,542 encyclopedic scores for anyone
|
|
180
|
-
* who ported this rule to another runtime, and invented data is the failure mode this whole module exists to end. The
|
|
181
|
-
* tolerance is a few ULP of the score's own magnitude; a genuine Wikipedia value that close to the population curve is
|
|
182
|
-
* not distinguishable from it by any consequence.
|
|
183
|
-
*
|
|
184
|
-
* MEASURED, not reasoned (2026-08-06, `wof/fst-staging-2026-08-05/admin-global-priority-importance.db`): 1,543,753 rows
|
|
185
|
-
* split **1,410,657 fallback / 133,096 encyclopedic**, and the arithmetic closes on itself — 1,410,657 + 108,861
|
|
186
|
-
* (encyclopedic rows that ALSO have a population) = 1,519,518, which is exactly the count of `place_population` rows
|
|
187
|
-
* with `population > 0`, i.e. every row the fallback pass could have written. The remaining 24,235 encyclopedic rows
|
|
188
|
-
* have no population row at all. Under the exact-equality rule, Node found ZERO mismatches within one ULP, so the
|
|
189
|
-
* tolerance changes no classification on this database — it only makes the answer runtime-independent.
|
|
190
|
-
*
|
|
191
|
-
* Referential is NOT read out of the legacy column under any branch — it is always re-derived from population, because
|
|
192
|
-
* a legacy Wikipedia row overwrote whatever population would have said.
|
|
103
|
+
* The match allows a small tolerance because `log2` differs by an ULP across runtimes.
|
|
104
|
+
* Bit equality would invent encyclopedic scores.
|
|
193
105
|
*/
|
|
194
|
-
export declare function splitLegacyImportance(legacy: number |
|
|
106
|
+
export declare function splitLegacyImportance(legacy: number | null, population: number | null | undefined): {
|
|
195
107
|
referential: number;
|
|
196
108
|
encyclopedic?: number;
|
|
197
109
|
};
|
|
@@ -200,26 +112,22 @@ export declare function splitLegacyImportance(legacy: number | undefined, popula
|
|
|
200
112
|
*/
|
|
201
113
|
export interface ImportanceSplit {
|
|
202
114
|
/**
|
|
203
|
-
* WOF
|
|
115
|
+
* Referential likelihood by WOF ID, where a missing ID means 0 because only positive scores are stored.
|
|
204
116
|
*/
|
|
205
117
|
referential: Map<number, number>;
|
|
206
118
|
/**
|
|
207
|
-
* WOF
|
|
119
|
+
* Encyclopedic importance by WOF ID, where a missing ID means no score and must not be filled with 0.
|
|
208
120
|
*/
|
|
209
121
|
encyclopedic: Map<number, number>;
|
|
210
122
|
source: ImportanceSplitSource;
|
|
211
123
|
/**
|
|
212
|
-
*
|
|
213
|
-
*
|
|
124
|
+
* The number of legacy rows attributed to the population fallback,
|
|
125
|
+
* nonzero only for the `legacy-reconstructed` source.
|
|
214
126
|
*/
|
|
215
127
|
legacyFallbackRows: number;
|
|
216
128
|
}
|
|
217
129
|
/**
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
* Handles all four states in {@link IMPORTANCE_SPLIT_SOURCES} so callers never branch on schema themselves — the FST
|
|
221
|
-
* builder in particular must read the shipped population-only databases, the read-only 2026-08-05 staging database
|
|
222
|
-
* (legacy conflated column), and post-split builds with one code path.
|
|
130
|
+
* Loads both importance scores from a WOF admin database, whichever schema generation it uses.
|
|
223
131
|
*/
|
|
224
132
|
export declare function loadImportanceSplit<DB>(db: DatabaseClient<DB>): ImportanceSplit;
|
|
225
133
|
//# sourceMappingURL=place-importance-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place-importance-schema.d.ts","sourceRoot":"","sources":["../lib/place-importance-schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"place-importance-schema.d.ts","sourceRoot":"","sources":["../lib/place-importance-schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,EAAE,EAAE,MAAM,CAAA;IAEV;;;;;;;OAOG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAE3B;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAA;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC,gBAAgB,EAAE,oBAAoB,CAAA;CACtC;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,8DAKuB,CAAA;AAE5D;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,uBAAuB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnG;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAMxF;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB;aACpC,YAAY,EAAE,eAAe;aAE7B,mBAAmB,EAAE,sBAAsB;aAE3C,cAAc,EAAE,iBAAiB;aAEjC,IAAI,EAAE,MAAM;CACH,CAAA;AAEV;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,OAAO,wBAAwB,CAAC,CAAA;AAE5G;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiBpH;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,QAAqB,CAAA;AAEzD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAQhD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEhC;;OAEG;IACH,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,MAAM,EAAE,qBAAqB,CAAA;IAE7B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAA;CAC1B;AAYD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,eAAe,CA6E/E"}
|