@mailwoman/resolver-wof-sqlite 9.4.0 → 10.1.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 +8 -8
- package/lib/address/{point-interpolation.ts → point/interpolation.ts} +40 -38
- package/lib/address/point/schema.ts +132 -0
- package/lib/address/point.ts +68 -81
- package/lib/{address/index.ts → address.ts} +2 -2
- package/lib/ancestry/backfill.ts +24 -88
- package/lib/{ancestry/index.ts → ancestry.ts} +19 -15
- package/lib/build/candidate.ts +608 -0
- package/lib/build/population-corrections.ts +64 -0
- package/lib/build/slim.ts +338 -0
- package/lib/candidate/alias-bags.ts +74 -14
- package/lib/candidate/ancestors/schema.ts +211 -0
- package/lib/candidate/{ancestors-sidecar.ts → ancestors/sidecar.ts} +17 -24
- package/lib/candidate/country-display-names.ts +6 -20
- package/lib/candidate/extract-fold.ts +12 -57
- package/lib/candidate/fts.ts +28 -0
- package/lib/candidate/importance.ts +221 -0
- package/lib/candidate/lookup.ts +669 -0
- package/lib/candidate/name-roles.ts +16 -34
- package/lib/candidate/own-name.ts +34 -31
- package/lib/candidate/place-attrs.ts +20 -13
- package/lib/candidate/schema.ts +211 -0
- package/lib/candidate/scoring.ts +222 -0
- package/lib/capital-schema.ts +21 -17
- package/lib/capitals.ts +26 -24
- package/lib/coincident-roles.ts +74 -55
- package/lib/convention/schema.ts +13 -7
- package/lib/convention.ts +144 -0
- package/lib/coverage-manifest-schema.ts +34 -39
- package/lib/currency-backfill.ts +24 -69
- package/lib/env.ts +1 -1
- package/lib/exact-match.ts +31 -20
- package/lib/extracts.ts +96 -73
- package/lib/fst/autocomplete.ts +52 -35
- package/lib/fst/builder.ts +30 -36
- package/lib/fst/deserialize-web.ts +8 -9
- package/lib/fst/format.ts +41 -23
- package/lib/fst/freshness.ts +17 -95
- package/lib/fst/matcher.ts +2 -2
- package/lib/fst/serialize.ts +45 -60
- package/lib/fst/types.ts +71 -59
- package/lib/fts/query.ts +5 -36
- package/lib/fts.ts +280 -0
- package/lib/geonames/aliases.ts +72 -149
- package/lib/geonames/postal.ts +162 -77
- package/lib/index.ts +20 -27
- package/lib/interpolation.ts +43 -96
- package/lib/lookup.ts +137 -257
- package/lib/name-score.ts +9 -7
- package/lib/nsul/lookup.ts +36 -53
- package/lib/nsul/schema.ts +16 -43
- package/lib/paths.ts +159 -0
- package/lib/place-importance-schema.ts +57 -164
- package/lib/poi/lookup.ts +100 -109
- package/lib/poi/schema.ts +42 -26
- package/lib/polygon-schema.ts +10 -6
- package/lib/postal/city/alias/lookup.ts +79 -0
- package/lib/postal/{city-alias-schema.ts → city/alias/schema.ts} +14 -10
- package/lib/postal/{city-candidate-schema.ts → city/candidate-schema.ts} +26 -20
- package/lib/postal.ts +9 -0
- package/lib/postcode-point-lookup.ts +9 -19
- package/lib/primary-preference.ts +45 -125
- package/lib/proximity-rerank.ts +43 -32
- package/lib/ranking-weights.ts +98 -76
- package/lib/region-keys.ts +68 -40
- package/lib/reverse.ts +108 -72
- package/lib/schema.ts +74 -42
- package/lib/search-fetch.ts +90 -68
- package/lib/sqlite/convention-source.ts +57 -0
- package/lib/sqlite/utils.ts +79 -0
- package/lib/street/centroid/schema.ts +149 -0
- package/lib/street/centroid.ts +16 -25
- package/lib/street/{morphology-fst-builder.ts → morphology/fst/builder.ts} +56 -41
- package/lib/street/{morphology-fst-loader.ts → morphology/fst/loader.ts} +36 -29
- package/lib/street/name-lookup.ts +43 -35
- package/lib/street/normalize.ts +85 -216
- package/lib/street/segment-schema.ts +116 -43
- package/lib/{street/index.ts → street.ts} +3 -3
- package/lib/types.ts +94 -140
- package/lib/unified-schema.ts +29 -29
- package/lib/uprn/existence.ts +30 -19
- package/lib/uprn/lookup.ts +28 -67
- package/lib/uprn/schema.ts +18 -40
- package/lib/weights-overlay-linker.ts +204 -232
- package/out/address/point/interpolation.d.ts +45 -0
- package/out/address/point/interpolation.d.ts.map +1 -0
- package/out/address/{point-interpolation.js → point/interpolation.js} +38 -38
- package/out/address/point/interpolation.js.map +1 -0
- package/out/address/point/schema.d.ts +74 -0
- package/out/address/point/schema.d.ts.map +1 -0
- package/out/address/{point-schema.js → point/schema.js} +4 -20
- package/out/address/point/schema.js.map +1 -0
- package/out/address/point.d.ts +24 -21
- package/out/address/point.d.ts.map +1 -1
- package/out/address/point.js +60 -77
- package/out/address/point.js.map +1 -1
- package/out/{address/index.js → address.d.ts} +3 -3
- package/out/address.d.ts.map +1 -0
- package/out/{address/index.d.ts → address.js} +3 -3
- 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 +18 -76
- 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 +170 -0
- package/out/build/candidate.d.ts.map +1 -0
- package/out/{build-candidate.js → build/candidate.js} +33 -102
- package/out/build/candidate.js.map +1 -0
- 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 +44 -0
- package/out/build/slim.d.ts.map +1 -0
- package/out/{build-slim.js → build/slim.js} +33 -94
- package/out/build/slim.js.map +1 -0
- package/out/candidate/alias-bags.d.ts +13 -5
- package/out/candidate/alias-bags.d.ts.map +1 -1
- package/out/candidate/alias-bags.js +55 -12
- package/out/candidate/alias-bags.js.map +1 -1
- package/out/candidate/ancestors/schema.d.ts +166 -0
- package/out/candidate/ancestors/schema.d.ts.map +1 -0
- package/out/candidate/ancestors/schema.js +131 -0
- package/out/candidate/ancestors/schema.js.map +1 -0
- package/out/candidate/ancestors/sidecar.d.ts +27 -0
- package/out/candidate/ancestors/sidecar.d.ts.map +1 -0
- package/out/candidate/{ancestors-sidecar.js → ancestors/sidecar.js} +17 -24
- package/out/candidate/ancestors/sidecar.js.map +1 -0
- 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 +8 -16
- package/out/candidate/extract-fold.d.ts.map +1 -1
- package/out/candidate/extract-fold.js +6 -48
- package/out/candidate/extract-fold.js.map +1 -1
- package/out/candidate/fts.d.ts +19 -0
- package/out/candidate/fts.d.ts.map +1 -0
- package/out/candidate/fts.js +22 -0
- package/out/candidate/fts.js.map +1 -0
- package/out/candidate/importance.d.ts +127 -0
- package/out/candidate/importance.d.ts.map +1 -0
- package/out/candidate/importance.js +162 -0
- package/out/candidate/importance.js.map +1 -0
- package/out/candidate/lookup.d.ts +36 -0
- package/out/candidate/lookup.d.ts.map +1 -0
- package/out/candidate/lookup.js +456 -0
- package/out/candidate/lookup.js.map +1 -0
- package/out/candidate/name-roles.d.ts +10 -22
- 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 +34 -31
- 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 +120 -0
- package/out/candidate/schema.d.ts.map +1 -0
- package/out/{candidate-schema.js → candidate/schema.js} +11 -23
- package/out/candidate/schema.js.map +1 -0
- package/out/{candidate-scoring.d.ts → candidate/scoring.d.ts} +8 -9
- package/out/candidate/scoring.d.ts.map +1 -0
- package/out/candidate/scoring.js +157 -0
- package/out/candidate/scoring.js.map +1 -0
- 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 +26 -24
- 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 +61 -50
- package/out/coincident-roles.js.map +1 -1
- package/out/convention/schema.d.ts +12 -6
- 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 +33 -38
- package/out/coverage-manifest-schema.d.ts.map +1 -1
- package/out/coverage-manifest-schema.js +20 -29
- package/out/coverage-manifest-schema.js.map +1 -1
- package/out/currency-backfill.d.ts +13 -35
- package/out/currency-backfill.d.ts.map +1 -1
- package/out/currency-backfill.js +12 -39
- package/out/currency-backfill.js.map +1 -1
- package/out/env.d.ts +2 -2
- 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 +31 -20
- package/out/exact-match.js.map +1 -1
- package/out/extracts.d.ts +65 -54
- 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 +28 -20
- package/out/fst/autocomplete.d.ts.map +1 -1
- package/out/fst/autocomplete.js +38 -27
- package/out/fst/autocomplete.js.map +1 -1
- package/out/fst/builder.d.ts.map +1 -1
- package/out/fst/builder.js +30 -36
- package/out/fst/builder.js.map +1 -1
- package/out/fst/deserialize-web.d.ts +3 -3
- package/out/fst/deserialize-web.d.ts.map +1 -1
- package/out/fst/deserialize-web.js +8 -9
- 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 +11 -73
- package/out/fst/freshness.d.ts.map +1 -1
- package/out/fst/freshness.js +12 -76
- package/out/fst/freshness.js.map +1 -1
- package/out/fst/matcher.d.ts +1 -1
- 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 +30 -26
- package/out/fst/serialize.d.ts.map +1 -1
- package/out/fst/serialize.js +44 -58
- package/out/fst/serialize.js.map +1 -1
- package/out/fst/types.d.ts +71 -59
- 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} +1 -1
- package/out/fst.d.ts.map +1 -0
- package/out/{fst/index.d.ts → fst.js} +1 -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 -67
- package/out/geonames/aliases.d.ts.map +1 -1
- package/out/geonames/aliases.js +44 -121
- package/out/geonames/aliases.js.map +1 -1
- package/out/geonames/postal.d.ts +84 -50
- package/out/geonames/postal.d.ts.map +1 -1
- package/out/geonames/postal.js +115 -78
- 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 +20 -21
- package/out/index.d.ts.map +1 -1
- package/out/index.js +14 -15
- package/out/index.js.map +1 -1
- package/out/interpolation.d.ts +15 -52
- package/out/interpolation.d.ts.map +1 -1
- package/out/interpolation.js +25 -68
- package/out/interpolation.js.map +1 -1
- package/out/lookup.d.ts +24 -53
- package/out/lookup.d.ts.map +1 -1
- package/out/lookup.js +117 -223
- 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 +49 -141
- package/out/place-importance-schema.d.ts.map +1 -1
- package/out/place-importance-schema.js +25 -140
- package/out/place-importance-schema.js.map +1 -1
- package/out/poi/lookup.d.ts +38 -42
- package/out/poi/lookup.d.ts.map +1 -1
- package/out/poi/lookup.js +67 -90
- 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 → city/alias/lookup.d.ts} +22 -25
- package/out/postal/city/alias/lookup.d.ts.map +1 -0
- package/out/postal/city/alias/lookup.js +49 -0
- package/out/postal/city/alias/lookup.js.map +1 -0
- package/out/postal/{city-alias-schema.d.ts → city/alias/schema.d.ts} +15 -11
- package/out/postal/city/alias/schema.d.ts.map +1 -0
- package/out/postal/{city-alias-schema.js → city/alias/schema.js} +11 -9
- package/out/postal/city/alias/schema.js.map +1 -0
- package/out/postal/city/candidate-schema.d.ts +72 -0
- package/out/postal/city/candidate-schema.d.ts.map +1 -0
- package/out/postal/city/candidate-schema.js +60 -0
- package/out/postal/city/candidate-schema.js.map +1 -0
- package/out/postal.d.ts +9 -0
- package/out/postal.d.ts.map +1 -0
- package/out/postal.js +9 -0
- package/out/postal.js.map +1 -0
- package/out/postcode-point-lookup.d.ts +9 -19
- 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 +39 -93
- package/out/primary-preference.d.ts.map +1 -1
- package/out/primary-preference.js +13 -97
- package/out/primary-preference.js.map +1 -1
- package/out/proximity-rerank.d.ts +40 -29
- 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 +91 -62
- 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 +48 -29
- 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 +75 -50
- package/out/reverse.d.ts.map +1 -1
- package/out/reverse.js +61 -49
- package/out/reverse.js.map +1 -1
- package/out/schema.d.ts +74 -42
- 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 +25 -0
- package/out/sqlite/convention-source.d.ts.map +1 -0
- package/out/sqlite/convention-source.js +48 -0
- package/out/sqlite/convention-source.js.map +1 -0
- package/out/sqlite/utils.d.ts +45 -0
- package/out/sqlite/utils.d.ts.map +1 -0
- package/out/sqlite/utils.js +56 -0
- package/out/sqlite/utils.js.map +1 -0
- package/out/street/centroid/schema.d.ts +100 -0
- package/out/street/centroid/schema.d.ts.map +1 -0
- package/out/street/centroid/schema.js +66 -0
- package/out/street/centroid/schema.js.map +1 -0
- package/out/street/centroid.d.ts +9 -19
- package/out/street/centroid.d.ts.map +1 -1
- package/out/street/centroid.js +11 -22
- package/out/street/centroid.js.map +1 -1
- package/out/street/{morphology-fst-builder.d.ts → morphology/fst/builder.d.ts} +21 -11
- package/out/street/morphology/fst/builder.d.ts.map +1 -0
- package/out/street/{morphology-fst-builder.js → morphology/fst/builder.js} +40 -34
- package/out/street/morphology/fst/builder.js.map +1 -0
- package/out/street/morphology/fst/loader.d.ts +74 -0
- package/out/street/morphology/fst/loader.d.ts.map +1 -0
- package/out/street/{morphology-fst-loader.js → morphology/fst/loader.js} +21 -21
- package/out/street/morphology/fst/loader.js.map +1 -0
- 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 +32 -31
- 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 +74 -191
- 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.d.ts → street.d.ts} +4 -4
- package/out/street.d.ts.map +1 -0
- package/out/{street/index.js → street.js} +4 -4
- package/out/street.js.map +1 -0
- package/out/types.d.ts +69 -138
- 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 +20 -56
- 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 +132 -141
- package/out/weights-overlay-linker.d.ts.map +1 -1
- package/out/weights-overlay-linker.js +86 -154
- package/out/weights-overlay-linker.js.map +1 -1
- package/package.json +94 -599
- package/lib/address/point-schema.ts +0 -155
- package/lib/build-candidate.ts +0 -632
- package/lib/build-slim.ts +0 -408
- package/lib/candidate-ancestors-schema.ts +0 -195
- package/lib/candidate-fts.ts +0 -46
- package/lib/candidate-importance.ts +0 -224
- package/lib/candidate-lookup.ts +0 -977
- package/lib/candidate-schema.ts +0 -247
- package/lib/candidate-scoring.ts +0 -261
- package/lib/convention/index.ts +0 -154
- package/lib/fts/index.ts +0 -361
- package/lib/postal/city-alias-lookup.ts +0 -97
- package/lib/postal/index.ts +0 -9
- package/lib/sqlite-convention-source.ts +0 -65
- package/lib/sqlite-utils.ts +0 -82
- package/lib/street/centroid-schema.ts +0 -154
- package/out/address/index.d.ts.map +0 -1
- package/out/address/index.js.map +0 -1
- package/out/address/point-interpolation.d.ts +0 -49
- package/out/address/point-interpolation.d.ts.map +0 -1
- package/out/address/point-interpolation.js.map +0 -1
- package/out/address/point-schema.d.ts +0 -97
- package/out/address/point-schema.d.ts.map +0 -1
- package/out/address/point-schema.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/build-candidate.d.ts +0 -184
- package/out/build-candidate.d.ts.map +0 -1
- package/out/build-candidate.js.map +0 -1
- package/out/build-slim.d.ts +0 -80
- package/out/build-slim.d.ts.map +0 -1
- package/out/build-slim.js.map +0 -1
- package/out/candidate/ancestors-sidecar.d.ts +0 -32
- package/out/candidate/ancestors-sidecar.d.ts.map +0 -1
- package/out/candidate/ancestors-sidecar.js.map +0 -1
- package/out/candidate-ancestors-schema.d.ts +0 -150
- package/out/candidate-ancestors-schema.d.ts.map +0 -1
- package/out/candidate-ancestors-schema.js +0 -123
- package/out/candidate-ancestors-schema.js.map +0 -1
- package/out/candidate-fts.d.ts +0 -37
- package/out/candidate-fts.d.ts.map +0 -1
- package/out/candidate-fts.js +0 -40
- package/out/candidate-fts.js.map +0 -1
- package/out/candidate-importance.d.ts +0 -132
- package/out/candidate-importance.d.ts.map +0 -1
- package/out/candidate-importance.js +0 -169
- package/out/candidate-importance.js.map +0 -1
- package/out/candidate-lookup.d.ts +0 -76
- package/out/candidate-lookup.d.ts.map +0 -1
- package/out/candidate-lookup.js +0 -768
- package/out/candidate-lookup.js.map +0 -1
- package/out/candidate-schema.d.ts +0 -155
- package/out/candidate-schema.d.ts.map +0 -1
- package/out/candidate-schema.js.map +0 -1
- package/out/candidate-scoring.d.ts.map +0 -1
- package/out/candidate-scoring.js +0 -196
- package/out/candidate-scoring.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/city-alias-lookup.d.ts.map +0 -1
- package/out/postal/city-alias-lookup.js +0 -62
- package/out/postal/city-alias-lookup.js.map +0 -1
- package/out/postal/city-alias-schema.d.ts.map +0 -1
- package/out/postal/city-alias-schema.js.map +0 -1
- package/out/postal/city-candidate-schema.d.ts +0 -66
- package/out/postal/city-candidate-schema.d.ts.map +0 -1
- package/out/postal/city-candidate-schema.js +0 -56
- package/out/postal/city-candidate-schema.js.map +0 -1
- package/out/postal/index.d.ts +0 -9
- package/out/postal/index.d.ts.map +0 -1
- package/out/postal/index.js +0 -9
- package/out/postal/index.js.map +0 -1
- package/out/sqlite-convention-source.d.ts +0 -29
- package/out/sqlite-convention-source.d.ts.map +0 -1
- package/out/sqlite-convention-source.js +0 -57
- package/out/sqlite-convention-source.js.map +0 -1
- package/out/sqlite-utils.d.ts +0 -45
- package/out/sqlite-utils.d.ts.map +0 -1
- package/out/sqlite-utils.js +0 -57
- package/out/sqlite-utils.js.map +0 -1
- package/out/street/centroid-schema.d.ts +0 -105
- package/out/street/centroid-schema.d.ts.map +0 -1
- package/out/street/centroid-schema.js +0 -78
- package/out/street/centroid-schema.js.map +0 -1
- package/out/street/index.d.ts.map +0 -1
- package/out/street/index.js.map +0 -1
- package/out/street/morphology-fst-builder.d.ts.map +0 -1
- package/out/street/morphology-fst-builder.js.map +0 -1
- package/out/street/morphology-fst-loader.d.ts +0 -67
- package/out/street/morphology-fst-loader.d.ts.map +0 -1
- package/out/street/morphology-fst-loader.js.map +0 -1
- package/out/uprn/index.d.ts.map +0 -1
- package/out/uprn/index.js.map +0 -1
- /package/lib/{fst/index.ts → fst.ts} +0 -0
- /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/{uprn/index.ts → uprn.ts} +0 -0
package/lib/ancestry/backfill.ts
CHANGED
|
@@ -3,98 +3,50 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Repair the truncated ancestry
|
|
7
|
-
* unified-schema.ts) leaves wherever the closure dead-ends before reaching the top.
|
|
8
|
-
*
|
|
9
|
-
* Root cause (#440 / #832): a place that straddles multiple parents — New York City spans five
|
|
10
|
-
* counties (its boroughs), London 30+ — carries `wof:parent_id = -4`, so the parent_id closure
|
|
11
|
-
* dead-ends and the place gets NO region/county/country ancestry. The resolver's region-descendant
|
|
12
|
-
* filter then can't reach it: given "New York, NY", NYC (with no NY-state ancestor) is excluded and
|
|
13
|
-
* a correctly-parented namesake ("New York Mills", pop 3,190) wins over NYC's 8.8M. The same defect
|
|
14
|
-
* orphans London, Singapore, and ~2,850 other localities — the most demo-visible queries.
|
|
15
|
-
*
|
|
16
|
-
* **The dead end is inherited by children (#1445).** Repairing the `-4` place itself does not repair
|
|
17
|
-
* anything BELOW it: the closure walks Brooklyn → New York and stops, because New York's own
|
|
18
|
-
* `parent_id` is `-4`. Brooklyn-the-borough (pop 2.5M) therefore carried exactly two ancestor rows —
|
|
19
|
-
* itself and New York — with no county, region or country, and the only US locality-tier place named
|
|
20
|
-
* "Brooklyn" that survived a New-York-State descendant filter was Pillar Point, a Jefferson County
|
|
21
|
-
* hamlet 411 km away carrying "Brooklyn" as an alternate name. All five NYC boroughs, every London
|
|
22
|
-
* borough and Hyderabad's zones were in the same state.
|
|
23
|
-
*
|
|
24
|
-
* So the candidate test is NOT "has only a self ancestor" — that misses every child of a repaired
|
|
25
|
-
* place, which by construction has two. It is **"has no `country`-tier ancestor"**. Country is the
|
|
26
|
-
* universal terminal for every non-{@link TOP_PLACETYPES} placetype, so its absence is exactly the
|
|
27
|
-
* signal that the chain dead-ended somewhere, at whatever depth. On a wide-coverage build this
|
|
28
|
-
* selects ~24k places against 2.55M rows.
|
|
29
|
-
*
|
|
30
|
-
* A place whose `wof:hierarchy` genuinely stops short is NOT a candidate and needs no repair: the
|
|
31
|
-
* source is the authority on what a place should have. American Samoa's localities, for instance,
|
|
32
|
-
* have `{country_id, locality_id}` and no region in WOF itself — the artifact matching that is
|
|
33
|
-
* correct, not truncated.
|
|
34
|
-
*
|
|
35
|
-
* The authoritative hierarchy IS in the source geojson: `wof:hierarchy` is an array of branches,
|
|
36
|
-
* each a `<placetype>_id` → id map (region_id, county_id, country_id, …), fully populated even when
|
|
37
|
-
* parent_id is -4. This reads it for every candidate and inserts the missing ancestor rows (one per
|
|
38
|
-
* distinct ancestor across branches).
|
|
39
|
-
*
|
|
40
|
-
* MUST run AFTER populateAncestors and BEFORE the build freezes (VACUUM INTO), so the rows land in
|
|
41
|
-
* the shipped artifact — `scripts/build-unified-wof.ts` Phase 3 calls it inline. The standalone
|
|
42
|
-
* `scripts/backfill-ancestors-from-hierarchy.ts` is a thin CLI over the same function for ad-hoc
|
|
43
|
-
* repair of an already-built DB. Idempotent by the per-pair existence check, not by the candidate
|
|
44
|
-
* test: each (id, ancestor_id) is inserted at most once, so a second run over the same DB adds
|
|
45
|
-
* nothing.
|
|
6
|
+
* Repair the truncated ancestry left by the `parent_id` closure. Must run after `populateAncestors` and before the build freezes.
|
|
46
7
|
*/
|
|
47
8
|
|
|
48
|
-
import { readDirectoryEntries } from "@mailwoman/core/fs/readers"
|
|
49
9
|
import { readWOFFeature } from "@mailwoman/core/resources/whosonfirst"
|
|
50
10
|
import type { DatabaseClient } from "@mailwoman/sqlite/client"
|
|
51
|
-
import {
|
|
11
|
+
import { PathBuilder, type PathBuilderLike } from "path-ts"
|
|
12
|
+
import { Globerator } from "spliterator/node/fs"
|
|
52
13
|
|
|
53
14
|
import type { WOFDatabase } from "#schema"
|
|
54
15
|
|
|
55
|
-
/**
|
|
56
|
-
* Genuinely top-level placetypes — they never have (or need) an ancestor, so skip them.
|
|
57
|
-
*/
|
|
58
16
|
const TOP_PLACETYPES = new Set(["country", "continent", "empire", "ocean", "marinearea", "planet"])
|
|
59
17
|
|
|
60
18
|
export interface AncestryBackfillResult {
|
|
61
|
-
/**
|
|
62
|
-
* Places that gained at least one ancestor row.
|
|
63
|
-
*/
|
|
64
19
|
placesFixed: number
|
|
65
|
-
/**
|
|
66
|
-
* Total ancestor rows inserted.
|
|
67
|
-
*/
|
|
68
20
|
rowsAdded: number
|
|
69
21
|
/**
|
|
70
|
-
* Candidates whose source geojson
|
|
71
|
-
* skipped
|
|
22
|
+
* Candidates whose source geojson was not found (non-WOF backfilled places or absent repos),
|
|
23
|
+
* skipped rather than treated as an error.
|
|
72
24
|
*/
|
|
73
25
|
noGeojson: number
|
|
74
26
|
}
|
|
75
27
|
|
|
76
28
|
/**
|
|
77
|
-
* Discover the `data` directories under a WOF repos root that hold attached geojson,
|
|
78
|
-
*
|
|
79
|
-
* the nested lab layout (a `whosonfirst-data` group dir holding the admin repos) and a flat layout (admin repos
|
|
80
|
-
* directly under the root); searches at most two directory levels deep.
|
|
29
|
+
* Discover the `data` directories under a WOF repos root that hold attached geojson,
|
|
30
|
+
* accepting both the nested lab layout and a flat layout at most two directory levels deep.
|
|
81
31
|
*/
|
|
82
|
-
export async function discoverAdminDataRoots(reposRoot: PathBuilderLike): Promise<
|
|
83
|
-
const roots:
|
|
32
|
+
export async function discoverAdminDataRoots(reposRoot: PathBuilderLike): Promise<PathBuilder[]> {
|
|
33
|
+
const roots: PathBuilder[] = []
|
|
84
34
|
|
|
85
|
-
const visit = async (dir:
|
|
35
|
+
const visit = async (dir: PathBuilder, depth: number): Promise<void> => {
|
|
86
36
|
if (depth > 2) return
|
|
87
37
|
|
|
88
38
|
let names: string[]
|
|
89
39
|
|
|
90
40
|
try {
|
|
91
|
-
names = (await
|
|
41
|
+
names = (await Globerator.from("*", { cwd: dir, withFileTypes: true, onlyFiles: false }).toArray())
|
|
42
|
+
.filter((entry) => entry.isDirectory())
|
|
43
|
+
.map((entry) => entry.name)
|
|
92
44
|
} catch {
|
|
93
45
|
return
|
|
94
46
|
}
|
|
95
47
|
|
|
96
48
|
for (const name of names) {
|
|
97
|
-
const child =
|
|
49
|
+
const child = dir(name)
|
|
98
50
|
|
|
99
51
|
if (name === "data") {
|
|
100
52
|
roots.push(child)
|
|
@@ -104,15 +56,13 @@ export async function discoverAdminDataRoots(reposRoot: PathBuilderLike): Promis
|
|
|
104
56
|
}
|
|
105
57
|
}
|
|
106
58
|
|
|
107
|
-
await visit(
|
|
59
|
+
await visit(PathBuilder.from(reposRoot), 0)
|
|
108
60
|
|
|
109
61
|
return roots
|
|
110
62
|
}
|
|
111
63
|
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
// locality candidate `locality_id` IS self (dropped by aid===id), but for a neighbourhood candidate
|
|
115
|
-
// `locality_id` is its PARENT locality — a real ancestor we must keep.
|
|
64
|
+
// The `aid === id` check filters out a place's own `locality_id`.
|
|
65
|
+
// For a neighborhood, that id identifies a real ancestor.
|
|
116
66
|
function placetypeFromKey(key: string): string | null {
|
|
117
67
|
if (!key.endsWith("_id")) return null
|
|
118
68
|
|
|
@@ -120,28 +70,19 @@ function placetypeFromKey(key: string): string | null {
|
|
|
120
70
|
}
|
|
121
71
|
|
|
122
72
|
/**
|
|
123
|
-
* Insert missing ancestor rows for
|
|
124
|
-
* `wof:hierarchy` from its source geojson under `geojsonRoots` (see {@link discoverAdminDataRoots}). Runs inside a
|
|
125
|
-
* single transaction; caller owns connection lifecycle (open, WAL checkpoint, close).
|
|
73
|
+
* Insert missing ancestor rows for places whose ancestry chain ended before reaching a country.
|
|
126
74
|
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
* geojson, so probing them is pure waste: on a wide-coverage DB the country-less set is millions of Overture/GeoNames
|
|
130
|
-
* leaf localities, and the per-candidate geojson probe across every repo root turns a seconds-long WOF-only pass into a
|
|
131
|
-
* ~40-minute one (their ancestry comes from the parent_id closure, not this backfill). Correctness-preserving — the
|
|
132
|
-
* skipped rows would have `noGeojson`-skipped anyway. Omit `maxID` (default) for the legacy WOF-only DBs.
|
|
75
|
+
* The function reads `wof:hierarchy` and runs in one transaction under the caller's connection.
|
|
76
|
+
* `opts.maxID` bounds the scan to avoid probing synthetic-id Overture and GeoNames rows.
|
|
133
77
|
*/
|
|
134
78
|
export async function backfillAncestorsFromHierarchy(
|
|
135
79
|
db: DatabaseClient<WOFDatabase>,
|
|
136
|
-
geojsonRoots: readonly
|
|
80
|
+
geojsonRoots: readonly PathBuilderLike[],
|
|
137
81
|
opts: { maxID?: number } = {}
|
|
138
82
|
): Promise<AncestryBackfillResult> {
|
|
139
83
|
const maxID = opts.maxID ?? Number.MAX_SAFE_INTEGER
|
|
140
84
|
|
|
141
|
-
//
|
|
142
|
-
// earlier "<= 1 ancestor row" test only caught the dead end's origin, never the children that
|
|
143
|
-
// inherit it (a child of a repaired -4 place has two rows: itself and that parent) (#1445).
|
|
144
|
-
// The id bound is stated first so SQLite prunes by the PK index before the NOT EXISTS runs at all.
|
|
85
|
+
// The id bound is stated first so SQLite prunes by the PK index before the not-exists runs.
|
|
145
86
|
const candidateBase = db
|
|
146
87
|
.selectFrom("spr")
|
|
147
88
|
.where("id", "<", maxID)
|
|
@@ -159,12 +100,8 @@ export async function backfillAncestorsFromHierarchy(
|
|
|
159
100
|
|
|
160
101
|
const candidates = await candidateBase.select(["id", "placetype"]).execute()
|
|
161
102
|
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
// a candidate reaching this point has a handful of rows at most. The candidate set rides in as the
|
|
165
|
-
// SAME predicate re-issued as a subquery, never a materialized `IN (?, ?, …)` list — node:sqlite
|
|
166
|
-
// caps a statement at 32,766 bound variables and the wide-coverage build has 67,521 candidates
|
|
167
|
-
// (measured 2026-08-04).
|
|
103
|
+
// Keep the candidate set as a subquery instead of materializing an `IN` list.
|
|
104
|
+
// node:sqlite limits bound variables to 32,766.
|
|
168
105
|
const alreadyPresent = new Map<number, Set<number>>()
|
|
169
106
|
|
|
170
107
|
for (const row of await db
|
|
@@ -204,7 +141,6 @@ export async function backfillAncestorsFromHierarchy(
|
|
|
204
141
|
continue
|
|
205
142
|
}
|
|
206
143
|
|
|
207
|
-
// Collect distinct (ancestor_id, placetype) across all hierarchy branches, excluding self.
|
|
208
144
|
const seen = new Map<number, string>()
|
|
209
145
|
|
|
210
146
|
for (const branch of hierarchy) {
|
|
@@ -3,25 +3,26 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* The shared ancestor-lineage walk over the WOF `ancestors` table
|
|
7
|
-
* joined with `spr` for canonical names
|
|
8
|
-
* first
|
|
6
|
+
* The shared ancestor-lineage walk over the WOF `ancestors` table: one place's containment chain
|
|
7
|
+
* joined with `spr` for canonical names and centroids, ordered nearest-first with the deepest
|
|
8
|
+
* placetype first and the country last.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* instead of sorting last; forward resolution rarely saw those as ANCESTOR placetypes, reverse
|
|
15
|
-
* geocoding always does).
|
|
10
|
+
* The reverse geocoder and `WOFSQLitePlaceLookup.ancestors()` share this walk. Placetype
|
|
11
|
+
* specificity lives here in `PLACETYPE_DEPTH`, a single TypeScript map that extends below
|
|
12
|
+
* `localadmin` so locality, borough, neighborhood and microhood rank correctly. Forward
|
|
13
|
+
* resolution rarely sees those as ancestor placetypes, while reverse geocoding always does.
|
|
16
14
|
*/
|
|
17
15
|
|
|
18
16
|
import { allRows } from "@mailwoman/core/utils"
|
|
19
17
|
import type { DatabaseClient } from "@mailwoman/sqlite/client"
|
|
20
18
|
|
|
21
19
|
/**
|
|
22
|
-
* WOF placetype → containment depth, coarsest = 1.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
20
|
+
* WOF placetype → containment depth, coarsest = 1.
|
|
21
|
+
*
|
|
22
|
+
* Higher = finer. Placetypes we never resolve (continent, empire, …) map to 0 and sort last.
|
|
23
|
+
*
|
|
24
|
+
* This differs from the FST's `PLACETYPE_ORDER` (fst-serialize.ts), which is a serialization order.
|
|
25
|
+
* This one is containment depth.
|
|
25
26
|
*/
|
|
26
27
|
export const PLACETYPE_DEPTH: Readonly<Record<string, number>> = {
|
|
27
28
|
country: 1,
|
|
@@ -38,7 +39,7 @@ export const PLACETYPE_DEPTH: Readonly<Record<string, number>> = {
|
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
/**
|
|
41
|
-
* Containment depth for a placetype
|
|
42
|
+
* Containment depth for a placetype, 0 when unknown (sorts coarsest).
|
|
42
43
|
*/
|
|
43
44
|
export function placetypeDepth(placetype: string): number {
|
|
44
45
|
return PLACETYPE_DEPTH[placetype] ?? 0
|
|
@@ -57,8 +58,11 @@ export interface AncestorPlaceRow {
|
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
/**
|
|
60
|
-
* The ancestor lineage of `id
|
|
61
|
-
*
|
|
61
|
+
* The ancestor lineage of `id`, self excluded, nearest-first.
|
|
62
|
+
*
|
|
63
|
+
* @returns `[]` when the place has no recorded ancestry.
|
|
64
|
+
* Not memoized here.
|
|
65
|
+
* `WOFSQLitePlaceLookup` keeps its own per-id cache.
|
|
62
66
|
*/
|
|
63
67
|
export function ancestorLineage<DB>(db: DatabaseClient<DB>, id: number, schemaName = "main"): AncestorPlaceRow[] {
|
|
64
68
|
const rows = allRows<AncestorPlaceRow>(
|