@mailwoman/resolver-wof-sqlite 9.1.0 → 9.3.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 +36 -20
- package/lib/address/index.ts +9 -0
- package/{address-point-interpolation.ts → lib/address/point-interpolation.ts} +40 -28
- package/{address-point-schema.ts → lib/address/point-schema.ts} +34 -8
- package/lib/address/point.ts +280 -0
- package/{ancestry-backfill.ts → lib/ancestry/backfill.ts} +14 -19
- package/{ancestry.ts → lib/ancestry/index.ts} +13 -8
- package/{build-candidate.ts → lib/build-candidate.ts} +243 -199
- package/{build-slim.ts → lib/build-slim.ts} +153 -168
- package/lib/candidate/alias-bags.ts +56 -0
- package/lib/candidate/ancestors-sidecar.ts +204 -0
- package/lib/candidate/country-display-names.ts +79 -0
- package/lib/candidate/extract-fold.ts +138 -0
- package/lib/candidate/name-roles.ts +238 -0
- package/lib/candidate/own-name.ts +146 -0
- package/lib/candidate/place-attrs.ts +44 -0
- package/lib/candidate-ancestors-schema.ts +195 -0
- package/{candidate-fts.ts → lib/candidate-fts.ts} +7 -5
- package/{candidate-importance.ts → lib/candidate-importance.ts} +54 -57
- package/lib/candidate-lookup.ts +976 -0
- package/{candidate-schema.ts → lib/candidate-schema.ts} +34 -6
- package/lib/candidate-scoring.ts +261 -0
- package/lib/capital-schema.ts +89 -0
- package/lib/capitals.ts +148 -0
- package/{coincident-roles.ts → lib/coincident-roles.ts} +75 -19
- package/{convention.ts → lib/convention/index.ts} +5 -5
- package/lib/convention/schema.ts +72 -0
- package/{coverage-manifest-schema.ts → lib/coverage-manifest-schema.ts} +15 -16
- package/lib/currency-backfill.ts +334 -0
- package/lib/env.ts +50 -0
- package/lib/exact-match.ts +113 -0
- package/{sharding.ts → lib/extracts.ts} +63 -60
- package/lib/fst/autocomplete.ts +176 -0
- package/{fst-builder.ts → lib/fst/builder.ts} +30 -27
- package/{fst-deserialize-web.ts → lib/fst/deserialize-web.ts} +27 -87
- package/lib/fst/format.ts +106 -0
- package/{fst-freshness.ts → lib/fst/freshness.ts} +42 -75
- package/lib/fst/index.ts +14 -0
- package/{fst-matcher.ts → lib/fst/matcher.ts} +1 -1
- package/{fst-serialize.ts → lib/fst/serialize.ts} +37 -115
- package/{fst-types.ts → lib/fst/types.ts} +4 -2
- package/{fts.ts → lib/fts/index.ts} +28 -23
- package/{fts-query.ts → lib/fts/query.ts} +2 -2
- package/{geonames-aliases.ts → lib/geonames/aliases.ts} +13 -13
- package/lib/geonames/index.ts +8 -0
- package/{geonames-postal.ts → lib/geonames/postal.ts} +16 -15
- package/{index.ts → lib/index.ts} +52 -48
- package/{interpolation.ts → lib/interpolation.ts} +137 -41
- package/lib/lookup.ts +861 -0
- package/{name-score.ts → lib/name-score.ts} +6 -4
- package/lib/nsul/index.ts +8 -0
- package/lib/nsul/lookup.ts +144 -0
- package/lib/nsul/schema.ts +130 -0
- package/{place-importance-schema.ts → lib/place-importance-schema.ts} +70 -22
- package/lib/poi/index.ts +8 -0
- package/{poi-lookup.ts → lib/poi/lookup.ts} +32 -39
- package/{poi-schema.ts → lib/poi/schema.ts} +10 -6
- package/lib/polygon-schema.ts +47 -0
- package/{postal-city-alias-lookup.ts → lib/postal/city-alias-lookup.ts} +15 -21
- package/{postal-city-candidate-schema.ts → lib/postal/city-candidate-schema.ts} +4 -2
- package/lib/postal/index.ts +9 -0
- package/{postcode-point-lookup.ts → lib/postcode-point-lookup.ts} +17 -15
- package/lib/primary-preference.ts +226 -0
- package/lib/proximity-rerank.ts +120 -0
- package/{ranking-weights.ts → lib/ranking-weights.ts} +30 -4
- package/lib/region-keys.ts +144 -0
- package/{reverse.ts → lib/reverse.ts} +45 -56
- package/{schema.ts → lib/schema.ts} +11 -1
- package/lib/search-fetch.ts +257 -0
- package/{sqlite-convention-source.ts → lib/sqlite-convention-source.ts} +9 -10
- package/lib/sqlite-utils.ts +83 -0
- package/{street-centroid-schema.ts → lib/street/centroid-schema.ts} +12 -6
- package/{street-centroid.ts → lib/street/centroid.ts} +26 -28
- package/lib/street/index.ts +13 -0
- package/{street-morphology-fst-builder.ts → lib/street/morphology-fst-builder.ts} +24 -14
- package/{street-morphology-fst-loader.ts → lib/street/morphology-fst-loader.ts} +14 -12
- package/{street-name-lookup.ts → lib/street/name-lookup.ts} +14 -30
- package/lib/street/normalize.ts +572 -0
- package/{street-segment-schema.ts → lib/street/segment-schema.ts} +13 -8
- package/{types.ts → lib/types.ts} +49 -9
- package/{unified-schema.ts → lib/unified-schema.ts} +21 -25
- package/lib/uprn/existence.ts +84 -0
- package/lib/uprn/index.ts +9 -0
- package/lib/uprn/lookup.ts +206 -0
- package/lib/uprn/schema.ts +124 -0
- package/lib/weights-overlay-linker.ts +878 -0
- package/out/address/index.d.ts +9 -0
- package/out/address/index.d.ts.map +1 -0
- package/out/address/index.js +9 -0
- package/out/address/index.js.map +1 -0
- package/out/{address-point-interpolation.d.ts → address/point-interpolation.d.ts} +11 -10
- package/out/address/point-interpolation.d.ts.map +1 -0
- package/out/{address-point-interpolation.js → address/point-interpolation.js} +29 -23
- package/out/address/point-interpolation.js.map +1 -0
- package/out/{address-point-schema.d.ts → address/point-schema.d.ts} +30 -10
- package/out/address/point-schema.d.ts.map +1 -0
- package/out/{address-point-schema.js → address/point-schema.js} +7 -3
- package/out/address/point-schema.js.map +1 -0
- package/out/{address-point.d.ts → address/point.d.ts} +16 -8
- package/out/address/point.d.ts.map +1 -0
- package/out/address/point.js +191 -0
- package/out/address/point.js.map +1 -0
- package/out/{ancestry-backfill.d.ts → ancestry/backfill.d.ts} +7 -5
- package/out/ancestry/backfill.d.ts.map +1 -0
- package/out/{ancestry-backfill.js → ancestry/backfill.js} +12 -16
- package/out/ancestry/backfill.js.map +1 -0
- package/out/{ancestry.d.ts → ancestry/index.d.ts} +6 -5
- package/out/ancestry/index.d.ts.map +1 -0
- package/out/{ancestry.js → ancestry/index.js} +7 -7
- package/out/ancestry/index.js.map +1 -0
- package/out/build-candidate.d.ts +88 -7
- package/out/build-candidate.d.ts.map +1 -1
- package/out/build-candidate.js +145 -149
- package/out/build-candidate.js.map +1 -1
- package/out/build-slim.d.ts +5 -5
- package/out/build-slim.d.ts.map +1 -1
- package/out/build-slim.js +127 -142
- package/out/build-slim.js.map +1 -1
- package/out/candidate/alias-bags.d.ts +19 -0
- package/out/candidate/alias-bags.d.ts.map +1 -0
- package/out/candidate/alias-bags.js +39 -0
- package/out/candidate/alias-bags.js.map +1 -0
- package/out/candidate/ancestors-sidecar.d.ts +32 -0
- package/out/candidate/ancestors-sidecar.d.ts.map +1 -0
- package/out/candidate/ancestors-sidecar.js +140 -0
- package/out/candidate/ancestors-sidecar.js.map +1 -0
- package/out/candidate/country-display-names.d.ts +35 -0
- package/out/candidate/country-display-names.d.ts.map +1 -0
- package/out/candidate/country-display-names.js +59 -0
- package/out/candidate/country-display-names.js.map +1 -0
- package/out/candidate/extract-fold.d.ts +32 -0
- package/out/candidate/extract-fold.d.ts.map +1 -0
- package/out/candidate/extract-fold.js +104 -0
- package/out/candidate/extract-fold.js.map +1 -0
- package/out/candidate/name-roles.d.ts +57 -0
- package/out/candidate/name-roles.d.ts.map +1 -0
- package/out/candidate/name-roles.js +166 -0
- package/out/candidate/name-roles.js.map +1 -0
- package/out/candidate/own-name.d.ts +50 -0
- package/out/candidate/own-name.d.ts.map +1 -0
- package/out/candidate/own-name.js +132 -0
- package/out/candidate/own-name.js.map +1 -0
- package/out/candidate/place-attrs.d.ts +43 -0
- package/out/candidate/place-attrs.d.ts.map +1 -0
- package/out/candidate/place-attrs.js +15 -0
- package/out/candidate/place-attrs.js.map +1 -0
- package/out/candidate-ancestors-schema.d.ts +150 -0
- package/out/candidate-ancestors-schema.d.ts.map +1 -0
- package/out/candidate-ancestors-schema.js +123 -0
- package/out/candidate-ancestors-schema.js.map +1 -0
- package/out/candidate-fts.d.ts +7 -5
- package/out/candidate-fts.d.ts.map +1 -1
- package/out/candidate-fts.js +5 -3
- package/out/candidate-fts.js.map +1 -1
- package/out/candidate-importance.d.ts +16 -16
- package/out/candidate-importance.d.ts.map +1 -1
- package/out/candidate-importance.js +47 -52
- package/out/candidate-importance.js.map +1 -1
- package/out/candidate-lookup.d.ts +31 -52
- package/out/candidate-lookup.d.ts.map +1 -1
- package/out/candidate-lookup.js +380 -172
- package/out/candidate-lookup.js.map +1 -1
- package/out/candidate-schema.d.ts +31 -7
- package/out/candidate-schema.d.ts.map +1 -1
- package/out/candidate-schema.js +3 -0
- package/out/candidate-schema.js.map +1 -1
- package/out/candidate-scoring.d.ts +34 -0
- package/out/candidate-scoring.d.ts.map +1 -0
- package/out/candidate-scoring.js +196 -0
- package/out/candidate-scoring.js.map +1 -0
- package/out/capital-schema.d.ts +51 -0
- package/out/capital-schema.d.ts.map +1 -0
- package/out/capital-schema.js +63 -0
- package/out/capital-schema.js.map +1 -0
- package/out/capitals.d.ts +69 -0
- package/out/capitals.d.ts.map +1 -0
- package/out/capitals.js +98 -0
- package/out/capitals.js.map +1 -0
- package/out/coincident-roles.d.ts +12 -4
- package/out/coincident-roles.d.ts.map +1 -1
- package/out/coincident-roles.js +43 -11
- package/out/coincident-roles.js.map +1 -1
- package/out/{convention.d.ts → convention/index.d.ts} +5 -5
- package/out/convention/index.d.ts.map +1 -0
- package/out/{convention.js → convention/index.js} +4 -4
- package/out/convention/index.js.map +1 -0
- package/out/convention/schema.d.ts +51 -0
- package/out/convention/schema.d.ts.map +1 -0
- package/out/convention/schema.js +34 -0
- package/out/convention/schema.js.map +1 -0
- package/out/coverage-manifest-schema.d.ts +8 -8
- package/out/coverage-manifest-schema.d.ts.map +1 -1
- package/out/coverage-manifest-schema.js +6 -10
- package/out/coverage-manifest-schema.js.map +1 -1
- package/out/currency-backfill.d.ts +90 -0
- package/out/currency-backfill.d.ts.map +1 -0
- package/out/currency-backfill.js +196 -0
- package/out/currency-backfill.js.map +1 -0
- package/out/env.d.ts +43 -0
- package/out/env.d.ts.map +1 -0
- package/out/env.js +48 -0
- package/out/env.js.map +1 -0
- package/out/exact-match.d.ts +25 -0
- package/out/exact-match.d.ts.map +1 -0
- package/out/exact-match.js +88 -0
- package/out/exact-match.js.map +1 -0
- package/out/extracts.d.ts +114 -0
- package/out/extracts.d.ts.map +1 -0
- package/out/{sharding.js → extracts.js} +38 -38
- package/out/extracts.js.map +1 -0
- package/out/{fst-autocomplete.d.ts → fst/autocomplete.d.ts} +13 -13
- package/out/fst/autocomplete.d.ts.map +1 -0
- package/out/fst/autocomplete.js +113 -0
- package/out/fst/autocomplete.js.map +1 -0
- package/out/{fst-builder.d.ts → fst/builder.d.ts} +5 -5
- package/out/fst/builder.d.ts.map +1 -0
- package/out/{fst-builder.js → fst/builder.js} +24 -24
- package/out/fst/builder.js.map +1 -0
- package/out/{fst-deserialize-web.d.ts → fst/deserialize-web.d.ts} +3 -3
- package/out/fst/deserialize-web.d.ts.map +1 -0
- package/out/{fst-deserialize-web.js → fst/deserialize-web.js} +10 -74
- package/out/fst/deserialize-web.js.map +1 -0
- package/out/fst/format.d.ts +80 -0
- package/out/fst/format.d.ts.map +1 -0
- package/out/fst/format.js +91 -0
- package/out/fst/format.js.map +1 -0
- package/out/{fst-freshness.d.ts → fst/freshness.d.ts} +11 -14
- package/out/fst/freshness.d.ts.map +1 -0
- package/out/{fst-freshness.js → fst/freshness.js} +42 -74
- package/out/fst/freshness.js.map +1 -0
- package/out/fst/index.d.ts +14 -0
- package/out/fst/index.d.ts.map +1 -0
- package/out/fst/index.js +14 -0
- package/out/fst/index.js.map +1 -0
- package/out/{fst-matcher.d.ts → fst/matcher.d.ts} +2 -2
- package/out/fst/matcher.d.ts.map +1 -0
- package/out/{fst-matcher.js → fst/matcher.js} +1 -1
- package/out/fst/matcher.js.map +1 -0
- package/out/{fst-serialize.d.ts → fst/serialize.d.ts} +5 -10
- package/out/fst/serialize.d.ts.map +1 -0
- package/out/{fst-serialize.js → fst/serialize.js} +18 -98
- package/out/fst/serialize.js.map +1 -0
- package/out/{fst-types.d.ts → fst/types.d.ts} +4 -3
- package/out/fst/types.d.ts.map +1 -0
- package/out/{fst-types.js → fst/types.js} +1 -1
- package/out/fst/types.js.map +1 -0
- package/out/{fts.d.ts → fts/index.d.ts} +20 -13
- package/out/fts/index.d.ts.map +1 -0
- package/out/{fts.js → fts/index.js} +20 -15
- package/out/fts/index.js.map +1 -0
- package/out/{fts-query.d.ts → fts/query.d.ts} +2 -2
- package/out/fts/query.d.ts.map +1 -0
- package/out/{fts-query.js → fts/query.js} +2 -2
- package/out/fts/query.js.map +1 -0
- package/out/{geonames-aliases.d.ts → geonames/aliases.d.ts} +8 -6
- package/out/geonames/aliases.d.ts.map +1 -0
- package/out/{geonames-aliases.js → geonames/aliases.js} +7 -7
- package/out/geonames/aliases.js.map +1 -0
- package/out/geonames/index.d.ts +8 -0
- package/out/geonames/index.d.ts.map +1 -0
- package/out/geonames/index.js +8 -0
- package/out/geonames/index.js.map +1 -0
- package/out/{geonames-postal.d.ts → geonames/postal.d.ts} +12 -10
- package/out/geonames/postal.d.ts.map +1 -0
- package/out/{geonames-postal.js → geonames/postal.js} +11 -11
- package/out/geonames/postal.js.map +1 -0
- package/out/index.d.ts +32 -31
- package/out/index.d.ts.map +1 -1
- package/out/index.js +24 -24
- package/out/index.js.map +1 -1
- package/out/interpolation.d.ts +18 -9
- package/out/interpolation.d.ts.map +1 -1
- package/out/interpolation.js +108 -36
- package/out/interpolation.js.map +1 -1
- package/out/lookup.d.ts +25 -25
- package/out/lookup.d.ts.map +1 -1
- package/out/lookup.js +174 -558
- package/out/lookup.js.map +1 -1
- package/out/name-score.d.ts +0 -10
- package/out/name-score.d.ts.map +1 -1
- package/out/name-score.js +6 -4
- package/out/name-score.js.map +1 -1
- package/out/nsul/index.d.ts +8 -0
- package/out/nsul/index.d.ts.map +1 -0
- package/out/nsul/index.js +8 -0
- package/out/nsul/index.js.map +1 -0
- package/out/nsul/lookup.d.ts +83 -0
- package/out/nsul/lookup.d.ts.map +1 -0
- package/out/nsul/lookup.js +80 -0
- package/out/nsul/lookup.js.map +1 -0
- package/out/nsul/schema.d.ts +100 -0
- package/out/nsul/schema.d.ts.map +1 -0
- package/out/nsul/schema.js +78 -0
- package/out/nsul/schema.js.map +1 -0
- package/out/place-importance-schema.d.ts +47 -10
- package/out/place-importance-schema.d.ts.map +1 -1
- package/out/place-importance-schema.js +56 -10
- package/out/place-importance-schema.js.map +1 -1
- package/out/poi/index.d.ts +8 -0
- package/out/poi/index.d.ts.map +1 -0
- package/out/poi/index.js +8 -0
- package/out/poi/index.js.map +1 -0
- package/out/{poi-lookup.d.ts → poi/lookup.d.ts} +8 -10
- package/out/poi/lookup.d.ts.map +1 -0
- package/out/{poi-lookup.js → poi/lookup.js} +24 -29
- package/out/poi/lookup.js.map +1 -0
- package/out/{poi-schema.d.ts → poi/schema.d.ts} +10 -6
- package/out/poi/schema.d.ts.map +1 -0
- package/out/{poi-schema.js → poi/schema.js} +1 -1
- package/out/poi/schema.js.map +1 -0
- package/out/polygon-schema.d.ts +37 -0
- package/out/polygon-schema.d.ts.map +1 -0
- package/out/polygon-schema.js +23 -0
- package/out/polygon-schema.js.map +1 -0
- package/out/{postal-city-alias-lookup.d.ts → postal/city-alias-lookup.d.ts} +7 -6
- package/out/postal/city-alias-lookup.d.ts.map +1 -0
- package/out/{postal-city-alias-lookup.js → postal/city-alias-lookup.js} +12 -16
- package/out/postal/city-alias-lookup.js.map +1 -0
- package/out/{postal-city-alias-schema.d.ts → postal/city-alias-schema.d.ts} +1 -1
- package/out/{postal-city-alias-schema.d.ts.map → postal/city-alias-schema.d.ts.map} +1 -1
- package/out/{postal-city-alias-schema.js → postal/city-alias-schema.js} +1 -1
- package/out/{postal-city-alias-schema.js.map → postal/city-alias-schema.js.map} +1 -1
- package/out/{postal-city-candidate-schema.d.ts → postal/city-candidate-schema.d.ts} +4 -3
- package/out/postal/city-candidate-schema.d.ts.map +1 -0
- package/out/{postal-city-candidate-schema.js → postal/city-candidate-schema.js} +2 -2
- package/out/{postal-city-candidate-schema.js.map → postal/city-candidate-schema.js.map} +1 -1
- package/out/postal/index.d.ts +9 -0
- package/out/postal/index.d.ts.map +1 -0
- package/out/postal/index.js +9 -0
- package/out/postal/index.js.map +1 -0
- package/out/postcode-point-lookup.d.ts +10 -10
- package/out/postcode-point-lookup.d.ts.map +1 -1
- package/out/postcode-point-lookup.js +13 -13
- package/out/postcode-point-lookup.js.map +1 -1
- package/out/primary-preference.d.ts +133 -0
- package/out/primary-preference.d.ts.map +1 -0
- package/out/primary-preference.js +146 -0
- package/out/primary-preference.js.map +1 -0
- package/out/proximity-rerank.d.ts +77 -0
- package/out/proximity-rerank.d.ts.map +1 -0
- package/out/proximity-rerank.js +86 -0
- package/out/proximity-rerank.js.map +1 -0
- package/out/ranking-weights.d.ts +15 -3
- package/out/ranking-weights.d.ts.map +1 -1
- package/out/ranking-weights.js +21 -3
- package/out/ranking-weights.js.map +1 -1
- package/out/region-keys.d.ts +47 -0
- package/out/region-keys.d.ts.map +1 -0
- package/out/region-keys.js +121 -0
- package/out/region-keys.js.map +1 -0
- package/out/reverse.d.ts +6 -6
- package/out/reverse.d.ts.map +1 -1
- package/out/reverse.js +23 -35
- package/out/reverse.js.map +1 -1
- package/out/schema.d.ts +10 -1
- package/out/schema.d.ts.map +1 -1
- package/out/schema.js.map +1 -1
- package/out/search-fetch.d.ts +59 -0
- package/out/search-fetch.d.ts.map +1 -0
- package/out/search-fetch.js +184 -0
- package/out/search-fetch.js.map +1 -0
- package/out/sqlite-convention-source.d.ts +7 -7
- package/out/sqlite-convention-source.d.ts.map +1 -1
- package/out/sqlite-convention-source.js +5 -5
- package/out/sqlite-convention-source.js.map +1 -1
- package/out/sqlite-utils.d.ts +24 -6
- package/out/sqlite-utils.d.ts.map +1 -1
- package/out/sqlite-utils.js +24 -7
- package/out/sqlite-utils.js.map +1 -1
- package/out/{street-centroid-schema.d.ts → street/centroid-schema.d.ts} +12 -7
- package/out/street/centroid-schema.d.ts.map +1 -0
- package/out/{street-centroid-schema.js → street/centroid-schema.js} +5 -5
- package/out/{street-centroid-schema.js.map → street/centroid-schema.js.map} +1 -1
- package/out/{street-centroid.d.ts → street/centroid.d.ts} +6 -6
- package/out/street/centroid.d.ts.map +1 -0
- package/out/{street-centroid.js → street/centroid.js} +18 -24
- package/out/street/centroid.js.map +1 -0
- package/out/street/index.d.ts +13 -0
- package/out/street/index.d.ts.map +1 -0
- package/out/street/index.js +13 -0
- package/out/street/index.js.map +1 -0
- package/out/{street-morphology-fst-builder.d.ts → street/morphology-fst-builder.d.ts} +4 -4
- package/out/street/morphology-fst-builder.d.ts.map +1 -0
- package/out/{street-morphology-fst-builder.js → street/morphology-fst-builder.js} +18 -13
- package/out/street/morphology-fst-builder.js.map +1 -0
- package/out/{street-morphology-fst-loader.d.ts → street/morphology-fst-loader.d.ts} +5 -5
- package/out/street/morphology-fst-loader.d.ts.map +1 -0
- package/out/{street-morphology-fst-loader.js → street/morphology-fst-loader.js} +11 -10
- package/out/street/morphology-fst-loader.js.map +1 -0
- package/out/{street-name-lookup.d.ts → street/name-lookup.d.ts} +4 -7
- package/out/street/name-lookup.d.ts.map +1 -0
- package/out/{street-name-lookup.js → street/name-lookup.js} +9 -23
- package/out/street/name-lookup.js.map +1 -0
- package/out/street/normalize.d.ts +179 -0
- package/out/street/normalize.d.ts.map +1 -0
- package/out/street/normalize.js +457 -0
- package/out/street/normalize.js.map +1 -0
- package/out/{street-segment-schema.d.ts → street/segment-schema.d.ts} +13 -9
- package/out/street/segment-schema.d.ts.map +1 -0
- package/out/{street-segment-schema.js → street/segment-schema.js} +4 -4
- package/out/{street-segment-schema.js.map → street/segment-schema.js.map} +1 -1
- package/out/types.d.ts +49 -9
- package/out/types.d.ts.map +1 -1
- package/out/types.js.map +1 -1
- package/out/unified-schema.d.ts +6 -5
- package/out/unified-schema.d.ts.map +1 -1
- package/out/unified-schema.js +16 -19
- package/out/unified-schema.js.map +1 -1
- package/out/uprn/existence.d.ts +53 -0
- package/out/uprn/existence.d.ts.map +1 -0
- package/out/uprn/existence.js +61 -0
- package/out/uprn/existence.js.map +1 -0
- package/out/uprn/index.d.ts +9 -0
- package/out/uprn/index.d.ts.map +1 -0
- package/out/uprn/index.js +9 -0
- package/out/uprn/index.js.map +1 -0
- package/out/uprn/lookup.d.ts +85 -0
- package/out/uprn/lookup.d.ts.map +1 -0
- package/out/uprn/lookup.js +149 -0
- package/out/uprn/lookup.js.map +1 -0
- package/out/uprn/schema.d.ts +93 -0
- package/out/uprn/schema.d.ts.map +1 -0
- package/out/uprn/schema.js +78 -0
- package/out/uprn/schema.js.map +1 -0
- package/out/weights-overlay-linker.d.ts +299 -0
- package/out/weights-overlay-linker.d.ts.map +1 -0
- package/out/weights-overlay-linker.js +511 -0
- package/out/weights-overlay-linker.js.map +1 -0
- package/package.json +622 -154
- package/address-point.ts +0 -125
- package/candidate-lookup.ts +0 -720
- package/fst-autocomplete.ts +0 -204
- package/geo.ts +0 -121
- package/lookup.ts +0 -1354
- 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.map +0 -1
- package/out/address-point-schema.js.map +0 -1
- package/out/address-point.d.ts.map +0 -1
- package/out/address-point.js +0 -84
- package/out/address-point.js.map +0 -1
- package/out/ancestry-backfill.d.ts.map +0 -1
- package/out/ancestry-backfill.js.map +0 -1
- package/out/ancestry.d.ts.map +0 -1
- package/out/ancestry.js.map +0 -1
- package/out/convention.d.ts.map +0 -1
- package/out/convention.js.map +0 -1
- package/out/fst-autocomplete.d.ts.map +0 -1
- package/out/fst-autocomplete.js +0 -130
- package/out/fst-autocomplete.js.map +0 -1
- package/out/fst-builder.d.ts.map +0 -1
- package/out/fst-builder.js.map +0 -1
- package/out/fst-deserialize-web.d.ts.map +0 -1
- package/out/fst-deserialize-web.js.map +0 -1
- package/out/fst-freshness.d.ts.map +0 -1
- package/out/fst-freshness.js.map +0 -1
- package/out/fst-matcher.d.ts.map +0 -1
- package/out/fst-matcher.js.map +0 -1
- package/out/fst-serialize.d.ts.map +0 -1
- package/out/fst-serialize.js.map +0 -1
- package/out/fst-types.d.ts.map +0 -1
- package/out/fst-types.js.map +0 -1
- package/out/fts-query.d.ts.map +0 -1
- package/out/fts-query.js.map +0 -1
- package/out/fts.d.ts.map +0 -1
- package/out/fts.js.map +0 -1
- package/out/geo.d.ts +0 -74
- package/out/geo.d.ts.map +0 -1
- package/out/geo.js +0 -71
- package/out/geo.js.map +0 -1
- package/out/geonames-aliases.d.ts.map +0 -1
- package/out/geonames-aliases.js.map +0 -1
- package/out/geonames-postal.d.ts.map +0 -1
- package/out/geonames-postal.js.map +0 -1
- package/out/poi-lookup.d.ts.map +0 -1
- package/out/poi-lookup.js.map +0 -1
- package/out/poi-schema.d.ts.map +0 -1
- package/out/poi-schema.js.map +0 -1
- package/out/postal-city-alias-lookup.d.ts.map +0 -1
- package/out/postal-city-alias-lookup.js.map +0 -1
- package/out/postal-city-candidate-schema.d.ts.map +0 -1
- package/out/sharding.d.ts +0 -114
- package/out/sharding.d.ts.map +0 -1
- package/out/sharding.js.map +0 -1
- package/out/street-centroid-schema.d.ts.map +0 -1
- package/out/street-centroid.d.ts.map +0 -1
- package/out/street-centroid.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.map +0 -1
- package/out/street-morphology-fst-loader.js.map +0 -1
- package/out/street-name-lookup.d.ts.map +0 -1
- package/out/street-name-lookup.js.map +0 -1
- package/out/street-normalize.d.ts +0 -95
- package/out/street-normalize.d.ts.map +0 -1
- package/out/street-normalize.js +0 -272
- package/out/street-normalize.js.map +0 -1
- package/out/street-segment-schema.d.ts.map +0 -1
- package/sqlite-utils.ts +0 -46
- package/street-normalize.ts +0 -318
- /package/{postal-city-alias-schema.ts → lib/postal/city-alias-schema.ts} +0 -0
package/out/sqlite-utils.d.ts
CHANGED
|
@@ -5,14 +5,32 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Small shared helpers for the SQLite-backed lookups.
|
|
7
7
|
*/
|
|
8
|
-
import type {
|
|
8
|
+
import type { DatabaseClient, SQLInputValue } from "@mailwoman/sqlite/client";
|
|
9
|
+
export { allRows, getRow } from "@mailwoman/core/utils";
|
|
10
|
+
/**
|
|
11
|
+
* A prepared single-row query whose parameter tuple remains visible to TypeScript. `StatementSync` accepts only the
|
|
12
|
+
* broad `SQLInputValue[]`, which otherwise erases tagged key types before they reach SQLite.
|
|
13
|
+
*/
|
|
14
|
+
export type PreparedGet<Parameters extends SQLInputValue[], Row> = (...parameters: Parameters) => Row | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Prepare a single-row query while preserving its exact parameter tuple at every call site.
|
|
17
|
+
*/
|
|
18
|
+
export declare function prepareGet<Parameters extends SQLInputValue[], Row, DB>(db: DatabaseClient<DB>, sql: string): PreparedGet<Parameters, Row>;
|
|
19
|
+
/**
|
|
20
|
+
* Multi-row counterpart to {@link PreparedGet}.
|
|
21
|
+
*/
|
|
22
|
+
export type PreparedAll<Parameters extends SQLInputValue[], Row> = (...parameters: Parameters) => Row[];
|
|
23
|
+
/**
|
|
24
|
+
* Prepare a multi-row query while preserving its exact parameter tuple at every call site.
|
|
25
|
+
*/
|
|
26
|
+
export declare function prepareAll<Parameters extends SQLInputValue[], Row, DB>(db: DatabaseClient<DB>, sql: string): PreparedAll<Parameters, Row>;
|
|
9
27
|
/**
|
|
10
28
|
* True when `name` is a table in the open database. The street-level lookups use this to degrade gracefully on an
|
|
11
|
-
* empty/tableless
|
|
12
|
-
* CREATES one) — rather than throwing `no such table` at construction and taking down a whole state's geocode
|
|
13
|
-
* missing table makes the lookup a no-op miss.
|
|
29
|
+
* empty/tableless extract — an interrupted `build-*-extract.ts`, or a stray 0-byte file (e.g. `sqlite3 <missing>.db
|
|
30
|
+
* "…"` CREATES one) — rather than throwing `no such table` at construction and taking down a whole state's geocode
|
|
31
|
+
* (#568). A missing table makes the lookup a no-op miss.
|
|
14
32
|
*/
|
|
15
|
-
export declare function hasTable(db:
|
|
33
|
+
export declare function hasTable<DB>(db: DatabaseClient<DB>, name: string): boolean;
|
|
16
34
|
/**
|
|
17
35
|
* True when `table` exists in the open database AND carries `column`.
|
|
18
36
|
*
|
|
@@ -24,5 +42,5 @@ export declare function hasTable(db: DatabaseSync, name: string): boolean;
|
|
|
24
42
|
* Note the interpolation: PRAGMA does not take bound parameters, so `table` is spliced. Every caller passes a
|
|
25
43
|
* module-level constant; never pass user input.
|
|
26
44
|
*/
|
|
27
|
-
export declare function hasColumn(db:
|
|
45
|
+
export declare function hasColumn<DB>(db: DatabaseClient<DB>, table: string, column: string): boolean;
|
|
28
46
|
//# sourceMappingURL=sqlite-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-utils.d.ts","sourceRoot":"","sources":["../sqlite-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"sqlite-utils.d.ts","sourceRoot":"","sources":["../lib/sqlite-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAK7E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEvD;;;GAGG;AACH,MAAM,MAAM,WAAW,CAAC,UAAU,SAAS,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,UAAU,EAAE,UAAU,KAAK,GAAG,GAAG,SAAS,CAAA;AAEjH;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,SAAS,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE,EACrE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EACtB,GAAG,EAAE,MAAM,GACT,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAI9B;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,UAAU,SAAS,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,UAAU,EAAE,UAAU,KAAK,GAAG,EAAE,CAAA;AAEvG;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,SAAS,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE,EACrE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EACtB,GAAG,EAAE,MAAM,GACT,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAI9B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAM1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAM5F"}
|
package/out/sqlite-utils.js
CHANGED
|
@@ -5,16 +5,34 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Small shared helpers for the SQLite-backed lookups.
|
|
7
7
|
*/
|
|
8
|
+
import { allRows, getRow } from "@mailwoman/core/utils";
|
|
9
|
+
import { hasColumn as columnExists, tableExists } from "@mailwoman/sqlite/introspection";
|
|
10
|
+
// The row-shape assertion itself lives in `core` so the readers that cannot depend on this package reach the same
|
|
11
|
+
// helper; re-exported here because this module is where this package's readers already look for it.
|
|
12
|
+
export { allRows, getRow } from "@mailwoman/core/utils";
|
|
13
|
+
/**
|
|
14
|
+
* Prepare a single-row query while preserving its exact parameter tuple at every call site.
|
|
15
|
+
*/
|
|
16
|
+
export function prepareGet(db, sql) {
|
|
17
|
+
const statement = db.prepare(sql);
|
|
18
|
+
return (...parameters) => getRow(statement, ...parameters);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Prepare a multi-row query while preserving its exact parameter tuple at every call site.
|
|
22
|
+
*/
|
|
23
|
+
export function prepareAll(db, sql) {
|
|
24
|
+
const statement = db.prepare(sql);
|
|
25
|
+
return (...parameters) => allRows(statement, ...parameters);
|
|
26
|
+
}
|
|
8
27
|
/**
|
|
9
28
|
* True when `name` is a table in the open database. The street-level lookups use this to degrade gracefully on an
|
|
10
|
-
* empty/tableless
|
|
11
|
-
* CREATES one) — rather than throwing `no such table` at construction and taking down a whole state's geocode
|
|
12
|
-
* missing table makes the lookup a no-op miss.
|
|
29
|
+
* empty/tableless extract — an interrupted `build-*-extract.ts`, or a stray 0-byte file (e.g. `sqlite3 <missing>.db
|
|
30
|
+
* "…"` CREATES one) — rather than throwing `no such table` at construction and taking down a whole state's geocode
|
|
31
|
+
* (#568). A missing table makes the lookup a no-op miss.
|
|
13
32
|
*/
|
|
14
33
|
export function hasTable(db, name) {
|
|
15
34
|
try {
|
|
16
|
-
|
|
17
|
-
return row !== undefined;
|
|
35
|
+
return tableExists(db, name);
|
|
18
36
|
}
|
|
19
37
|
catch {
|
|
20
38
|
return false;
|
|
@@ -33,8 +51,7 @@ export function hasTable(db, name) {
|
|
|
33
51
|
*/
|
|
34
52
|
export function hasColumn(db, table, column) {
|
|
35
53
|
try {
|
|
36
|
-
|
|
37
|
-
return rows.some((r) => String(r.name) === column);
|
|
54
|
+
return columnExists(db, table, column);
|
|
38
55
|
}
|
|
39
56
|
catch {
|
|
40
57
|
return false;
|
package/out/sqlite-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-utils.js","sourceRoot":"","sources":["../sqlite-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"sqlite-utils.js","sourceRoot":"","sources":["../lib/sqlite-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAExF,kHAAkH;AAClH,oGAAoG;AACpG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAQvD;;GAEG;AACH,MAAM,UAAU,UAAU,CACzB,EAAsB,EACtB,GAAW;IAEX,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEjC,OAAO,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,MAAM,CAAM,SAAS,EAAE,GAAG,UAAU,CAAC,CAAA;AAChE,CAAC;AAOD;;GAEG;AACH,MAAM,UAAU,UAAU,CACzB,EAAsB,EACtB,GAAW;IAEX,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAEjC,OAAO,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,OAAO,CAAM,SAAS,EAAE,GAAG,UAAU,CAAC,CAAA;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAK,EAAsB,EAAE,IAAY;IAChE,IAAI,CAAC;QACJ,OAAO,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAA;IACb,CAAC;AACF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAK,EAAsB,EAAE,KAAa,EAAE,MAAc;IAClF,IAAI,CAAC;QACJ,OAAO,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACvC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAA;IACb,CAAC;AACF,CAAC"}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Typed schema for the DERIVED STREET-CENTROID
|
|
7
|
-
* `ban/scripts/build-street-centroid-
|
|
8
|
-
* FR queries deserve a street-level answer"). The
|
|
9
|
-
* sealed rooftop address-point
|
|
6
|
+
* Typed schema for the DERIVED STREET-CENTROID extract (`street-centroids-<cc>.db`, built by
|
|
7
|
+
* `ban/scripts/build-street-centroid-extract.ts` — the #1042 street-level tier behind "street-only
|
|
8
|
+
* FR queries deserve a street-level answer"). The extract is a `GROUP BY street` roll-up of the
|
|
9
|
+
* sealed rooftop address-point extract: one row per (street, postcode, commune) carrying the street's
|
|
10
10
|
* CENTROID + bounding-box EXTENT + member-point count. No new data source — a derived artifact.
|
|
11
11
|
*
|
|
12
12
|
* Single source of truth for the columns shared by the BUILDER (a positional prepared INSERT for
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* every postcode/arrondissement it spans.
|
|
21
21
|
*/
|
|
22
22
|
import type { Kysely } from "kysely";
|
|
23
|
+
import type { NameKey, StreetKey } from "#street/normalize";
|
|
23
24
|
/**
|
|
24
25
|
* One street roll-up. `(street_norm, postcode, locality_base)` is unique. `lat`/`lon` are the UNWEIGHTED mean of the
|
|
25
26
|
* group's member address points (each source row = one point), so a cross-group weighted mean (`SUM(lat*point_count) /
|
|
@@ -30,7 +31,7 @@ export interface StreetCentroidTable {
|
|
|
30
31
|
/**
|
|
31
32
|
* Shared `normalizeStreetForKeyLocale` of the street — the build/query-consistent probe key.
|
|
32
33
|
*/
|
|
33
|
-
street_norm:
|
|
34
|
+
street_norm: StreetKey;
|
|
34
35
|
/**
|
|
35
36
|
* The 5-digit postcode of this group, or null when the source row carried none.
|
|
36
37
|
*/
|
|
@@ -38,7 +39,7 @@ export interface StreetCentroidTable {
|
|
|
38
39
|
/**
|
|
39
40
|
* Arrondissement-stripped commune (`stripArrondissement(normalizeLocalityForKey(commune))`) — the fallback scope.
|
|
40
41
|
*/
|
|
41
|
-
locality_base:
|
|
42
|
+
locality_base: NameKey;
|
|
42
43
|
/**
|
|
43
44
|
* Weighted-mean centroid latitude of the street's member points.
|
|
44
45
|
*/
|
|
@@ -73,6 +74,10 @@ export interface StreetCentroidTable {
|
|
|
73
74
|
* name-evidence rerank folds the model's street surface with the SAME `foldStreetSurface` used to build this column
|
|
74
75
|
* (the fold-parity contract), so it must not drift from `street_norm`'s richer normalizer. Indexed (`idx_sc_name`)
|
|
75
76
|
* for a direct seek.
|
|
77
|
+
*
|
|
78
|
+
* Deliberately UNBRANDED despite the `name_key` column name: `foldStreetSurface` is a different fold from the
|
|
79
|
+
* {@link NameKey} one every other `name_key` column carries, and giving it that brand would invite exactly the
|
|
80
|
+
* cross-fold probe the brands exist to stop.
|
|
76
81
|
*/
|
|
77
82
|
name_key: string;
|
|
78
83
|
}
|
|
@@ -97,4 +102,4 @@ export declare function createStreetCentroidTable(db: Kysely<StreetCentroidDatab
|
|
|
97
102
|
* lookup; without it that query skip-scans `idx_sc_postcode` at ~5 ms/probe).
|
|
98
103
|
*/
|
|
99
104
|
export declare function createStreetCentroidIndexes(db: Kysely<StreetCentroidDatabase>): Promise<void>;
|
|
100
|
-
//# sourceMappingURL=
|
|
105
|
+
//# sourceMappingURL=centroid-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"centroid-schema.d.ts","sourceRoot":"","sources":["../../lib/street/centroid-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE3D;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,WAAW,EAAE,SAAS,CAAA;IACtB;;OAEG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;;;;;OAUG;IACH,QAAQ,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,eAAe,EAAE,mBAAmB,CAAA;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,+KAe1B,CAAA;AAEV;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,EAAE,EAAE,MAAM,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBjG;AAED;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,EAAE,EAAE,MAAM,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnG"}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Typed schema for the DERIVED STREET-CENTROID
|
|
7
|
-
* `ban/scripts/build-street-centroid-
|
|
8
|
-
* FR queries deserve a street-level answer"). The
|
|
9
|
-
* sealed rooftop address-point
|
|
6
|
+
* Typed schema for the DERIVED STREET-CENTROID extract (`street-centroids-<cc>.db`, built by
|
|
7
|
+
* `ban/scripts/build-street-centroid-extract.ts` — the #1042 street-level tier behind "street-only
|
|
8
|
+
* FR queries deserve a street-level answer"). The extract is a `GROUP BY street` roll-up of the
|
|
9
|
+
* sealed rooftop address-point extract: one row per (street, postcode, commune) carrying the street's
|
|
10
10
|
* CENTROID + bounding-box EXTENT + member-point count. No new data source — a derived artifact.
|
|
11
11
|
*
|
|
12
12
|
* Single source of truth for the columns shared by the BUILDER (a positional prepared INSERT for
|
|
@@ -75,4 +75,4 @@ export async function createStreetCentroidIndexes(db) {
|
|
|
75
75
|
.execute();
|
|
76
76
|
await db.schema.createIndex("idx_sc_name").on("street_centroid").columns(["name_key"]).execute();
|
|
77
77
|
}
|
|
78
|
-
//# sourceMappingURL=
|
|
78
|
+
//# sourceMappingURL=centroid-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"centroid-schema.js","sourceRoot":"","sources":["../../lib/street/centroid-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* number) plus a postcode/commune scope, it returns the street's CENTROID + an honest extent-derived
|
|
9
9
|
* uncertainty from the derived `street-centroids-<cc>.db` roll-up.
|
|
10
10
|
*
|
|
11
|
-
* Query-side normalization is THE shared normalizer (`street-normalize.ts`), selected per the
|
|
11
|
+
* Query-side normalization is THE shared normalizer (`street-normalize.ts`), selected per the extract's
|
|
12
12
|
* `streetLocale`, so build-side and probe-side keys agree by construction. The commune scope folds
|
|
13
13
|
* through `normalizeLocalityForKey` + `stripArrondissement` (BAN names Paris/Lyon/Marseille per
|
|
14
14
|
* arrondissement; a query names the base commune).
|
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
* exact-after-normalization only (no fuzzy street matching in this tier).
|
|
20
20
|
*/
|
|
21
21
|
import type { StreetCentroidHit, StreetCentroidLookup } from "@mailwoman/resolver";
|
|
22
|
-
import { type StreetLocale } from "
|
|
22
|
+
import { type StreetLocale } from "#street/normalize";
|
|
23
23
|
export declare class StreetCentroidSqliteLookup implements StreetCentroidLookup {
|
|
24
24
|
#private;
|
|
25
25
|
/**
|
|
26
|
-
* @param dbPath
|
|
27
|
-
* @param opts.streetLocale The street-normalization locale this
|
|
26
|
+
* @param dbPath Extract path.
|
|
27
|
+
* @param opts.streetLocale The street-normalization locale this extract was BUILT with — must match, or every key
|
|
28
28
|
* misses. Defaults to `"fr"` (BAN is the French national register; the tier is FR-only today).
|
|
29
29
|
*/
|
|
30
30
|
constructor(dbPath: string, opts?: {
|
|
@@ -35,6 +35,6 @@ export declare class StreetCentroidSqliteLookup implements StreetCentroidLookup
|
|
|
35
35
|
postcode?: string;
|
|
36
36
|
locality?: string;
|
|
37
37
|
}): StreetCentroidHit | null;
|
|
38
|
-
|
|
38
|
+
[Symbol.dispose](): void;
|
|
39
39
|
}
|
|
40
|
-
//# sourceMappingURL=
|
|
40
|
+
//# sourceMappingURL=centroid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"centroid.d.ts","sourceRoot":"","sources":["../../lib/street/centroid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAMlF,OAAO,EAMN,KAAK,YAAY,EAEjB,MAAM,mBAAmB,CAAA;AAgC1B,qBAAa,0BAA2B,YAAW,oBAAoB;;IAMtE;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,YAAY,CAAC,EAAE,YAAY,CAAA;KAAO;IAmBtE,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,iBAAiB,GAAG,IAAI;IA4B/F,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CAGxB"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* number) plus a postcode/commune scope, it returns the street's CENTROID + an honest extent-derived
|
|
9
9
|
* uncertainty from the derived `street-centroids-<cc>.db` roll-up.
|
|
10
10
|
*
|
|
11
|
-
* Query-side normalization is THE shared normalizer (`street-normalize.ts`), selected per the
|
|
11
|
+
* Query-side normalization is THE shared normalizer (`street-normalize.ts`), selected per the extract's
|
|
12
12
|
* `streetLocale`, so build-side and probe-side keys agree by construction. The commune scope folds
|
|
13
13
|
* through `normalizeLocalityForKey` + `stripArrondissement` (BAN names Paris/Lyon/Marseille per
|
|
14
14
|
* arrondissement; a query names the base commune).
|
|
@@ -18,9 +18,10 @@
|
|
|
18
18
|
* street's grand centroid over every postcode/arrondissement it spans — one row, one hit. Matching is
|
|
19
19
|
* exact-after-normalization only (no fuzzy street matching in this tier).
|
|
20
20
|
*/
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
21
|
+
import { haversineKm } from "@mailwoman/spatial";
|
|
22
|
+
import { DatabaseClient } from "@mailwoman/sqlite/client";
|
|
23
|
+
import { hasTable, prepareGet } from "#sqlite-utils";
|
|
24
|
+
import { normalizeLocalityForKey, normalizeStreetForKeyLocale, streetLocaleForSurface, stripArrondissement, } from "#street/normalize";
|
|
24
25
|
/**
|
|
25
26
|
* Weighted-centroid aggregate over a WHERE-filtered set. `SUM(coord*n)/SUM(n)` reconstructs the grand centroid.
|
|
26
27
|
*/
|
|
@@ -32,14 +33,7 @@ const AGG_SELECT = "SUM(lat * point_count) / SUM(point_count) AS lat, " +
|
|
|
32
33
|
* Half the bbox diagonal, in METERS — an honest coarse radius for a street centroid.
|
|
33
34
|
*/
|
|
34
35
|
function extentRadiusM(minLat, maxLat, minLon, maxLon) {
|
|
35
|
-
|
|
36
|
-
const toRad = (d) => (d * Math.PI) / 180;
|
|
37
|
-
const dLat = toRad(maxLat - minLat);
|
|
38
|
-
const dLon = toRad(maxLon - minLon);
|
|
39
|
-
const midLat = toRad((minLat + maxLat) / 2);
|
|
40
|
-
const a = Math.sin(dLat / 2) ** 2 + Math.cos(midLat) ** 2 * Math.sin(dLon / 2) ** 2;
|
|
41
|
-
const diag = 2 * R * Math.asin(Math.min(1, Math.sqrt(a)));
|
|
42
|
-
return Math.round(diag / 2);
|
|
36
|
+
return Math.round(haversineKm(minLat, minLon, maxLat, maxLon) * 500);
|
|
43
37
|
}
|
|
44
38
|
export class StreetCentroidSqliteLookup {
|
|
45
39
|
#db;
|
|
@@ -47,33 +41,33 @@ export class StreetCentroidSqliteLookup {
|
|
|
47
41
|
#byPostcode;
|
|
48
42
|
#byLocality;
|
|
49
43
|
/**
|
|
50
|
-
* @param dbPath
|
|
51
|
-
* @param opts.streetLocale The street-normalization locale this
|
|
44
|
+
* @param dbPath Extract path.
|
|
45
|
+
* @param opts.streetLocale The street-normalization locale this extract was BUILT with — must match, or every key
|
|
52
46
|
* misses. Defaults to `"fr"` (BAN is the French national register; the tier is FR-only today).
|
|
53
47
|
*/
|
|
54
48
|
constructor(dbPath, opts = {}) {
|
|
55
|
-
this.#db = new
|
|
49
|
+
this.#db = new DatabaseClient(dbPath, { readOnly: true });
|
|
56
50
|
this.#locale = opts.streetLocale ?? "fr";
|
|
57
|
-
// Degrade gracefully on an empty/tableless
|
|
51
|
+
// Degrade gracefully on an empty/tableless extract (interrupted build, stray 0-byte file): with no
|
|
58
52
|
// `street_centroid` table this lookup is a no-op miss, not a crash (mirrors the address-point reader).
|
|
59
53
|
if (hasTable(this.#db, "street_centroid")) {
|
|
60
|
-
this.#byPostcode = this.#db
|
|
61
|
-
this.#byLocality = this.#db
|
|
54
|
+
this.#byPostcode = prepareGet(this.#db, `SELECT ${AGG_SELECT} FROM street_centroid WHERE postcode = ? AND street_norm = ?`);
|
|
55
|
+
this.#byLocality = prepareGet(this.#db, `SELECT ${AGG_SELECT} FROM street_centroid WHERE locality_base = ? AND street_norm = ?`);
|
|
62
56
|
}
|
|
63
57
|
}
|
|
64
58
|
find(query) {
|
|
65
59
|
if (!this.#byPostcode || !this.#byLocality)
|
|
66
60
|
return null;
|
|
67
|
-
const streetNorm = normalizeStreetForKeyLocale(query.street, this.#locale);
|
|
61
|
+
const streetNorm = normalizeStreetForKeyLocale(query.street, streetLocaleForSurface(query.street, this.#locale));
|
|
68
62
|
if (!streetNorm)
|
|
69
63
|
return null;
|
|
70
64
|
let row;
|
|
71
65
|
if (query.postcode?.trim()) {
|
|
72
|
-
row = this.#byPostcode
|
|
66
|
+
row = this.#byPostcode(query.postcode.trim(), streetNorm);
|
|
73
67
|
}
|
|
74
68
|
if ((!row || row.lat == null) && query.locality?.trim()) {
|
|
75
69
|
const base = stripArrondissement(normalizeLocalityForKey(query.locality));
|
|
76
|
-
row = this.#byLocality
|
|
70
|
+
row = this.#byLocality(base, streetNorm);
|
|
77
71
|
}
|
|
78
72
|
if (!row || row.lat == null || row.lon == null)
|
|
79
73
|
return null;
|
|
@@ -85,8 +79,8 @@ export class StreetCentroidSqliteLookup {
|
|
|
85
79
|
release: row.release ?? "",
|
|
86
80
|
};
|
|
87
81
|
}
|
|
88
|
-
|
|
89
|
-
this.#db.
|
|
82
|
+
[Symbol.dispose]() {
|
|
83
|
+
this.#db[Symbol.dispose]();
|
|
90
84
|
}
|
|
91
85
|
}
|
|
92
|
-
//# sourceMappingURL=
|
|
86
|
+
//# sourceMappingURL=centroid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"centroid.js","sourceRoot":"","sources":["../../lib/street/centroid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
export * from "#street/centroid";
|
|
7
|
+
export * from "#street/centroid-schema";
|
|
8
|
+
export * from "#street/morphology-fst-builder";
|
|
9
|
+
export * from "#street/morphology-fst-loader";
|
|
10
|
+
export * from "#street/name-lookup";
|
|
11
|
+
export * from "#street/normalize";
|
|
12
|
+
export * from "#street/segment-schema";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/street/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
export * from "#street/centroid";
|
|
7
|
+
export * from "#street/centroid-schema";
|
|
8
|
+
export * from "#street/morphology-fst-builder";
|
|
9
|
+
export * from "#street/morphology-fst-loader";
|
|
10
|
+
export * from "#street/name-lookup";
|
|
11
|
+
export * from "#street/normalize";
|
|
12
|
+
export * from "#street/segment-schema";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/street/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA"}
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
* Output: an `FSTMatcher` ready to serialize via `serializeFST` to e.g.
|
|
23
23
|
* `fst-street-morphology.bin`.
|
|
24
24
|
*/
|
|
25
|
-
import { FSTMatcher } from "
|
|
26
|
-
import type { FSTProvenance } from "
|
|
25
|
+
import { FSTMatcher } from "#fst/matcher";
|
|
26
|
+
import type { FSTProvenance } from "#fst/types";
|
|
27
27
|
export interface BuildStreetMorphologyFSTOpts {
|
|
28
28
|
/**
|
|
29
29
|
* Path to the `core/data/libpostal/dictionaries` directory containing per-locale subfolders.
|
|
@@ -56,5 +56,5 @@ export interface BuildStreetMorphologyFSTResult {
|
|
|
56
56
|
insertCount: number;
|
|
57
57
|
locales: string[];
|
|
58
58
|
}
|
|
59
|
-
export declare function buildStreetMorphologyFST(opts: BuildStreetMorphologyFSTOpts): BuildStreetMorphologyFSTResult
|
|
60
|
-
//# sourceMappingURL=
|
|
59
|
+
export declare function buildStreetMorphologyFST(opts: BuildStreetMorphologyFSTOpts): Promise<BuildStreetMorphologyFSTResult>;
|
|
60
|
+
//# sourceMappingURL=morphology-fst-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphology-fst-builder.d.ts","sourceRoot":"","sources":["../../lib/street/morphology-fst-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,YAAY,CAAA;AAW3D,MAAM,WAAW,4BAA4B;IAC5C;;OAEG;IACH,eAAe,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,8BAA8B;IAC9C,OAAO,EAAE,UAAU,CAAA;IACnB,UAAU,EAAE,aAAa,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB;AAuBD,wBAAsB,wBAAwB,CAC7C,IAAI,EAAE,4BAA4B,GAChC,OAAO,CAAC,8BAA8B,CAAC,CA+JzC"}
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
* Output: an `FSTMatcher` ready to serialize via `serializeFST` to e.g.
|
|
23
23
|
* `fst-street-morphology.bin`.
|
|
24
24
|
*/
|
|
25
|
-
import {
|
|
26
|
-
import { join } from "
|
|
25
|
+
import { isDirectory, readDirectory, readLocalTextFile, statPath } from "@mailwoman/core/fs/readers";
|
|
26
|
+
import { join } from "path-ts";
|
|
27
27
|
import { TextSpliterator } from "spliterator";
|
|
28
|
-
import { FSTMatcher, normalizeTokens } from "
|
|
28
|
+
import { FSTMatcher, normalizeTokens } from "#fst/matcher";
|
|
29
29
|
/**
|
|
30
30
|
* Reserved synthetic wofID base for street-morphology entries. 32-bit unsigned, well above any realistic WOF
|
|
31
31
|
* allocation. Reusing the same base across rebuilds keeps IDs stable for any consumer that caches them. See
|
|
@@ -51,7 +51,7 @@ function parseLine(line) {
|
|
|
51
51
|
return null;
|
|
52
52
|
return { canonical: parts[0], variants: parts };
|
|
53
53
|
}
|
|
54
|
-
export function buildStreetMorphologyFST(opts) {
|
|
54
|
+
export async function buildStreetMorphologyFST(opts) {
|
|
55
55
|
const progress = opts.onProgress ?? (() => { });
|
|
56
56
|
const minVariantLength = opts.minVariantLength ?? 3;
|
|
57
57
|
// Discover locales — either provided explicitly, or all directories containing street_types.txt.
|
|
@@ -61,18 +61,23 @@ export function buildStreetMorphologyFST(opts) {
|
|
|
61
61
|
locales = opts.locales;
|
|
62
62
|
}
|
|
63
63
|
else {
|
|
64
|
-
|
|
64
|
+
const entries = await readDirectory(opts.dictionariesDir);
|
|
65
|
+
const localeProbes = [];
|
|
66
|
+
for (const entry of entries) {
|
|
65
67
|
const localePath = join(opts.dictionariesDir, entry);
|
|
66
|
-
if (!
|
|
67
|
-
|
|
68
|
+
if (!(await isDirectory(localePath))) {
|
|
69
|
+
localeProbes.push([entry, false]);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
68
72
|
try {
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
await statPath(join(localePath, STREET_TYPES_FILENAME));
|
|
74
|
+
localeProbes.push([entry, true]);
|
|
71
75
|
}
|
|
72
76
|
catch {
|
|
73
|
-
|
|
77
|
+
localeProbes.push([entry, false]);
|
|
74
78
|
}
|
|
75
|
-
}
|
|
79
|
+
}
|
|
80
|
+
locales = localeProbes.filter(([, hasFile]) => hasFile).map(([entry]) => entry);
|
|
76
81
|
}
|
|
77
82
|
progress("discover", `Found ${locales.length} locales with ${STREET_TYPES_FILENAME}`);
|
|
78
83
|
// Collect canonical → set-of-variants across all locales. Same canonical form may appear in
|
|
@@ -80,7 +85,7 @@ export function buildStreetMorphologyFST(opts) {
|
|
|
80
85
|
const canonicalToVariants = new Map();
|
|
81
86
|
for (const locale of locales) {
|
|
82
87
|
const filePath = join(opts.dictionariesDir, locale, STREET_TYPES_FILENAME);
|
|
83
|
-
const content =
|
|
88
|
+
const content = await readLocalTextFile(filePath);
|
|
84
89
|
for (const line of TextSpliterator.from(content)) {
|
|
85
90
|
const parsed = parseLine(line);
|
|
86
91
|
if (!parsed)
|
|
@@ -175,4 +180,4 @@ export function buildStreetMorphologyFST(opts) {
|
|
|
175
180
|
locales,
|
|
176
181
|
};
|
|
177
182
|
}
|
|
178
|
-
//# sourceMappingURL=
|
|
183
|
+
//# sourceMappingURL=morphology-fst-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphology-fst-builder.js","sourceRoot":"","sources":["../../lib/street/morphology-fst-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Unified runtime loader for the street-morphology FST — the #1315 street-context
|
|
6
|
+
* Unified runtime loader for the street-morphology FST — the #1315 street-context check's signal
|
|
7
7
|
* source, previously rebuilt from the libpostal dictionaries per process at three duplicate call
|
|
8
8
|
* sites (runtime pipeline / parity eval / neural harness). The sealed artifact
|
|
9
9
|
* (`fst-street-morphology.bin`, built by `mailwoman gazetteer build street-morphology`) replaces
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
* Browsers can't take the fallback (no fs) — they deserialize the same artifact via
|
|
21
21
|
* `fst-deserialize-web.ts` (see the docs demo loader).
|
|
22
22
|
*/
|
|
23
|
-
import type { FSTMatcher } from "
|
|
24
|
-
import type { FSTProvenance } from "
|
|
23
|
+
import type { FSTMatcher } from "#fst/matcher";
|
|
24
|
+
import type { FSTProvenance } from "#fst/types";
|
|
25
25
|
/**
|
|
26
26
|
* The sealed artifact's canonical filename — identical in the data-root staging dir and as a weights-package sibling.
|
|
27
27
|
*/
|
|
@@ -63,5 +63,5 @@ export interface LoadedStreetMorphologyFST {
|
|
|
63
63
|
/**
|
|
64
64
|
* Load the street-morphology matcher: sealed artifact first, per-process dictionary build as the degrade path.
|
|
65
65
|
*/
|
|
66
|
-
export declare function loadStreetMorphologyFST(opts?: LoadStreetMorphologyFSTOpts): LoadedStreetMorphologyFST
|
|
67
|
-
//# sourceMappingURL=
|
|
66
|
+
export declare function loadStreetMorphologyFST(opts?: LoadStreetMorphologyFSTOpts): Promise<LoadedStreetMorphologyFST>;
|
|
67
|
+
//# sourceMappingURL=morphology-fst-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphology-fst-loader.d.ts","sourceRoot":"","sources":["../../lib/street/morphology-fst-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAG/C;;GAEG;AACH,eAAO,MAAM,mCAAmC,8BAA8B,CAAA;AAE9E;;GAEG;AACH,wBAAgB,mCAAmC,IAAI,MAAM,CAE5D;AAED,MAAM,WAAW,2BAA2B;IAC3C;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAClC;AAED,MAAM,WAAW,yBAAyB;IACzC,OAAO,EAAE,UAAU,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,UAAU,GAAG,OAAO,CAAA;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,CAAA;CAC1B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC5C,IAAI,GAAE,2BAAgC,GACpC,OAAO,CAAC,yBAAyB,CAAC,CAuBpC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Unified runtime loader for the street-morphology FST — the #1315 street-context
|
|
6
|
+
* Unified runtime loader for the street-morphology FST — the #1315 street-context check's signal
|
|
7
7
|
* source, previously rebuilt from the libpostal dictionaries per process at three duplicate call
|
|
8
8
|
* sites (runtime pipeline / parity eval / neural harness). The sealed artifact
|
|
9
9
|
* (`fst-street-morphology.bin`, built by `mailwoman gazetteer build street-morphology`) replaces
|
|
@@ -20,10 +20,11 @@
|
|
|
20
20
|
* Browsers can't take the fallback (no fs) — they deserialize the same artifact via
|
|
21
21
|
* `fst-deserialize-web.ts` (see the docs demo loader).
|
|
22
22
|
*/
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
23
|
+
import { dataRootPath } from "@mailwoman/core/data-root";
|
|
24
|
+
import { pathExists, readLocalBuffer } from "@mailwoman/core/fs/readers";
|
|
25
|
+
import { resourceDictionaryPath } from "@mailwoman/core/paths";
|
|
26
|
+
import { deserializeFST, readFSTProvenance } from "#fst/serialize";
|
|
27
|
+
import { buildStreetMorphologyFST } from "#street/morphology-fst-builder";
|
|
27
28
|
/**
|
|
28
29
|
* The sealed artifact's canonical filename — identical in the data-root staging dir and as a weights-package sibling.
|
|
29
30
|
*/
|
|
@@ -37,12 +38,12 @@ export function defaultStreetMorphologyArtifactPath() {
|
|
|
37
38
|
/**
|
|
38
39
|
* Load the street-morphology matcher: sealed artifact first, per-process dictionary build as the degrade path.
|
|
39
40
|
*/
|
|
40
|
-
export function loadStreetMorphologyFST(opts = {}) {
|
|
41
|
+
export async function loadStreetMorphologyFST(opts = {}) {
|
|
41
42
|
const warn = opts.onWarn ?? (() => { });
|
|
42
43
|
const artifactPath = opts.artifactPath ?? defaultStreetMorphologyArtifactPath();
|
|
43
|
-
if (
|
|
44
|
+
if (await pathExists(artifactPath)) {
|
|
44
45
|
try {
|
|
45
|
-
const buf =
|
|
46
|
+
const buf = await readLocalBuffer(artifactPath);
|
|
46
47
|
const matcher = deserializeFST(buf);
|
|
47
48
|
const provenance = readFSTProvenance(buf);
|
|
48
49
|
return { matcher, source: "artifact", path: artifactPath, ...(provenance ? { provenance } : {}) };
|
|
@@ -51,9 +52,9 @@ export function loadStreetMorphologyFST(opts = {}) {
|
|
|
51
52
|
warn(`street-morphology artifact at ${artifactPath} unreadable (${error.message}) — falling back to the dictionary build`);
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
|
-
const built = buildStreetMorphologyFST({
|
|
55
|
+
const built = await buildStreetMorphologyFST({
|
|
55
56
|
dictionariesDir: opts.dictionariesDir ?? resourceDictionaryPath("libpostal"),
|
|
56
57
|
});
|
|
57
58
|
return { matcher: built.matcher, source: "built", provenance: built.provenance };
|
|
58
59
|
}
|
|
59
|
-
//# sourceMappingURL=
|
|
60
|
+
//# sourceMappingURL=morphology-fst-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphology-fst-loader.js","sourceRoot":"","sources":["../../lib/street/morphology-fst-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAG9D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,2BAA2B,CAAA;AAE9E;;GAEG;AACH,MAAM,UAAU,mCAAmC;IAClD,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC,CAAA;AACxE,CAAC;AAkCD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,OAAoC,EAAE;IAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,mCAAmC,EAAE,CAAA;IAE/E,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;YACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;YAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;QAClG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CACH,iCAAiC,YAAY,gBAAiB,KAAe,CAAC,OAAO,0CAA0C,CAC/H,CAAA;QACF,CAAC;IACF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC;QAC5C,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,sBAAsB,CAAC,WAAW,CAAC;KAC5E,CAAC,CAAA;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAA;AACjF,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Reads a street-name index (the FR instance = BAN `street-centroids-fr.db`, a `street_centroid`
|
|
9
9
|
* table of `street_norm × locality_base × postcode` rows) and answers "does this street surface
|
|
10
10
|
* exist as a name" for the k-best rerank. Sync-by-interface, `readOnly`, prepared statements,
|
|
11
|
-
* graceful-degrade on a tableless
|
|
11
|
+
* graceful-degrade on a tableless extract — the same reader discipline as `AddressPointSqliteLookup`.
|
|
12
12
|
*
|
|
13
13
|
* THE FOLD CONTRACT: the surface is folded with {@link foldStreetSurface} (the shared function),
|
|
14
14
|
* and the DB's `street_norm` column MUST have been built with that SAME fold or every hyphenated /
|
|
@@ -33,14 +33,11 @@ export interface SQLiteStreetNameLookupOpts {
|
|
|
33
33
|
* A {@link StreetLocalityEvidence} backed by a street-name SQLite index. Positive evidence only: any doubt (missing
|
|
34
34
|
* table, read miss) returns `false`, so the rerank fails open to the model's ranking.
|
|
35
35
|
*/
|
|
36
|
-
export declare class SQLiteStreetNameLookup implements StreetLocalityEvidence {
|
|
36
|
+
export declare class SQLiteStreetNameLookup implements StreetLocalityEvidence, Disposable {
|
|
37
37
|
#private;
|
|
38
38
|
readonly countries: ReadonlySet<string>;
|
|
39
39
|
constructor(dbPath: string, opts?: SQLiteStreetNameLookupOpts);
|
|
40
40
|
hasStreetName(streetSurface: string, scope?: StreetEvidenceScope): boolean;
|
|
41
|
-
|
|
42
|
-
* Close the underlying handle.
|
|
43
|
-
*/
|
|
44
|
-
close(): void;
|
|
41
|
+
[Symbol.dispose](): void;
|
|
45
42
|
}
|
|
46
|
-
//# sourceMappingURL=
|
|
43
|
+
//# sourceMappingURL=name-lookup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-lookup.d.ts","sourceRoot":"","sources":["../../lib/street/name-lookup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAqB,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAM9G,MAAM,WAAW,0BAA0B;IAC1C;;OAEG;IACH,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC5B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,qBAAa,sBAAuB,YAAW,sBAAsB,EAAE,UAAU;;IAChF,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;gBAM3B,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,0BAA+B;IAqBjE,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,OAAO;IAuB1E,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CAGxB"}
|