@mailwoman/resolver-wof-sqlite 10.0.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 +39 -37
- package/lib/address/point/schema.ts +17 -40
- package/lib/address/point.ts +315 -0
- package/lib/{address/index.ts → address.ts} +1 -1
- package/lib/ancestry/backfill.ts +20 -86
- package/lib/{ancestry/index.ts → ancestry.ts} +19 -15
- package/lib/build/candidate.ts +123 -165
- package/lib/build/population-corrections.ts +64 -0
- package/lib/build/slim.ts +43 -113
- package/lib/candidate/alias-bags.ts +16 -17
- package/lib/candidate/ancestors/schema.ts +77 -61
- package/lib/candidate/ancestors/sidecar.ts +15 -22
- package/lib/candidate/country-display-names.ts +6 -20
- package/lib/candidate/extract-fold.ts +10 -55
- package/lib/candidate/fts.ts +5 -23
- package/lib/candidate/importance.ts +64 -67
- package/lib/candidate/lookup.ts +78 -382
- package/lib/candidate/name-roles.ts +15 -33
- package/lib/candidate/own-name.ts +34 -31
- package/lib/candidate/place-attrs.ts +20 -13
- package/lib/candidate/schema.ts +29 -65
- package/lib/candidate/scoring.ts +30 -69
- 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 +22 -67
- 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 +71 -142
- package/lib/geonames/postal.ts +161 -70
- package/lib/index.ts +6 -6
- package/lib/interpolation.ts +43 -96
- package/lib/lookup.ts +132 -253
- 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 +22 -40
- package/lib/postal/city/alias/schema.ts +14 -10
- package/lib/postal/city/candidate-schema.ts +26 -20
- package/lib/postcode-point-lookup.ts +9 -19
- package/lib/primary-preference.ts +44 -124
- 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 +12 -20
- package/lib/sqlite/utils.ts +18 -21
- package/lib/street/centroid/schema.ts +37 -42
- package/lib/street/{centroid/index.ts → centroid.ts} +15 -24
- package/lib/street/morphology/fst/builder.ts +50 -41
- package/lib/street/morphology/fst/loader.ts +35 -28
- 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} +1 -1
- 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 +19 -23
- package/out/address/point/interpolation.d.ts.map +1 -1
- package/out/address/point/interpolation.js +37 -37
- package/out/address/point/interpolation.js.map +1 -1
- package/out/address/point/schema.d.ts +12 -35
- package/out/address/point/schema.d.ts.map +1 -1
- package/out/address/point/schema.js +3 -19
- package/out/address/point/schema.js.map +1 -1
- package/out/address/point.d.ts +56 -0
- package/out/address/point.d.ts.map +1 -0
- package/out/address/point.js +205 -0
- package/out/address/point.js.map +1 -0
- package/out/{address/index.js → address.d.ts} +2 -2
- package/out/address.d.ts.map +1 -0
- package/out/{address/index.d.ts → address.js} +2 -2
- package/out/address.js.map +1 -0
- package/out/ancestry/backfill.d.ts +11 -64
- package/out/ancestry/backfill.d.ts.map +1 -1
- package/out/ancestry/backfill.js +14 -74
- package/out/ancestry/backfill.js.map +1 -1
- package/out/ancestry.d.ts +49 -0
- package/out/ancestry.d.ts.map +1 -0
- package/out/ancestry.js +59 -0
- package/out/ancestry.js.map +1 -0
- package/out/build/candidate.d.ts +87 -107
- package/out/build/candidate.d.ts.map +1 -1
- package/out/build/candidate.js +19 -95
- package/out/build/candidate.js.map +1 -1
- package/out/build/population-corrections.d.ts +52 -0
- package/out/build/population-corrections.d.ts.map +1 -0
- package/out/build/population-corrections.js +40 -0
- package/out/build/population-corrections.js.map +1 -0
- package/out/build/slim.d.ts +8 -44
- package/out/build/slim.d.ts.map +1 -1
- package/out/build/slim.js +32 -93
- package/out/build/slim.js.map +1 -1
- package/out/candidate/alias-bags.d.ts +6 -6
- package/out/candidate/alias-bags.d.ts.map +1 -1
- package/out/candidate/alias-bags.js +16 -17
- package/out/candidate/alias-bags.js.map +1 -1
- package/out/candidate/ancestors/schema.d.ts +73 -57
- package/out/candidate/ancestors/schema.d.ts.map +1 -1
- package/out/candidate/ancestors/schema.js +56 -48
- package/out/candidate/ancestors/schema.js.map +1 -1
- package/out/candidate/ancestors/sidecar.d.ts +3 -8
- package/out/candidate/ancestors/sidecar.d.ts.map +1 -1
- package/out/candidate/ancestors/sidecar.js +15 -22
- package/out/candidate/ancestors/sidecar.js.map +1 -1
- package/out/candidate/country-display-names.d.ts +5 -15
- package/out/candidate/country-display-names.d.ts.map +1 -1
- package/out/candidate/country-display-names.js +6 -20
- package/out/candidate/country-display-names.js.map +1 -1
- package/out/candidate/extract-fold.d.ts +7 -15
- package/out/candidate/extract-fold.d.ts.map +1 -1
- package/out/candidate/extract-fold.js +5 -47
- package/out/candidate/extract-fold.js.map +1 -1
- package/out/candidate/fts.d.ts +5 -23
- package/out/candidate/fts.d.ts.map +1 -1
- package/out/candidate/fts.js +5 -23
- package/out/candidate/fts.js.map +1 -1
- package/out/candidate/importance.d.ts +60 -65
- package/out/candidate/importance.d.ts.map +1 -1
- package/out/candidate/importance.js +55 -62
- package/out/candidate/importance.js.map +1 -1
- package/out/candidate/lookup.d.ts +11 -51
- package/out/candidate/lookup.d.ts.map +1 -1
- package/out/candidate/lookup.js +48 -361
- package/out/candidate/lookup.js.map +1 -1
- package/out/candidate/name-roles.d.ts +9 -21
- package/out/candidate/name-roles.d.ts.map +1 -1
- package/out/candidate/name-roles.js +15 -33
- package/out/candidate/name-roles.js.map +1 -1
- package/out/candidate/own-name.d.ts +23 -25
- package/out/candidate/own-name.d.ts.map +1 -1
- package/out/candidate/own-name.js +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 +27 -62
- package/out/candidate/schema.d.ts.map +1 -1
- package/out/candidate/schema.js +10 -22
- package/out/candidate/schema.js.map +1 -1
- package/out/candidate/scoring.d.ts +7 -8
- package/out/candidate/scoring.d.ts.map +1 -1
- package/out/candidate/scoring.js +30 -69
- package/out/candidate/scoring.js.map +1 -1
- package/out/capital-schema.d.ts +21 -17
- package/out/capital-schema.d.ts.map +1 -1
- package/out/capital-schema.js +17 -15
- package/out/capital-schema.js.map +1 -1
- package/out/capitals.d.ts +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 +11 -33
- 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 +1 -1
- package/out/env.js +1 -1
- package/out/exact-match.d.ts +19 -10
- package/out/exact-match.d.ts.map +1 -1
- package/out/exact-match.js +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.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 -62
- package/out/geonames/aliases.d.ts.map +1 -1
- package/out/geonames/aliases.js +43 -115
- package/out/geonames/aliases.js.map +1 -1
- package/out/geonames/postal.d.ts +84 -44
- package/out/geonames/postal.d.ts.map +1 -1
- package/out/geonames/postal.js +114 -72
- 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 +6 -6
- package/out/index.d.ts.map +1 -1
- package/out/index.js +5 -5
- 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 +22 -51
- package/out/lookup.d.ts.map +1 -1
- package/out/lookup.js +114 -220
- 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 +20 -23
- package/out/postal/city/alias/lookup.d.ts.map +1 -1
- package/out/postal/city/alias/lookup.js +17 -30
- package/out/postal/city/alias/lookup.js.map +1 -1
- package/out/postal/city/alias/schema.d.ts +14 -10
- package/out/postal/city/alias/schema.d.ts.map +1 -1
- package/out/postal/city/alias/schema.js +10 -8
- package/out/postal/city/alias/schema.js.map +1 -1
- package/out/postal/city/candidate-schema.d.ts +25 -19
- package/out/postal/city/candidate-schema.d.ts.map +1 -1
- package/out/postal/city/candidate-schema.js +21 -17
- package/out/postal/city/candidate-schema.js.map +1 -1
- package/out/{postal/index.d.ts → postal.d.ts} +1 -1
- package/out/postal.d.ts.map +1 -0
- package/out/{postal/index.js → postal.js} +1 -1
- package/out/postal.js.map +1 -0
- package/out/postcode-point-lookup.d.ts +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 +38 -92
- 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 +11 -15
- package/out/sqlite/convention-source.d.ts.map +1 -1
- package/out/sqlite/convention-source.js +11 -20
- package/out/sqlite/convention-source.js.map +1 -1
- package/out/sqlite/utils.d.ts +18 -18
- package/out/sqlite/utils.d.ts.map +1 -1
- package/out/sqlite/utils.js +14 -15
- package/out/sqlite/utils.js.map +1 -1
- package/out/street/centroid/schema.d.ts +37 -42
- package/out/street/centroid/schema.d.ts.map +1 -1
- package/out/street/centroid/schema.js +9 -21
- package/out/street/centroid/schema.js.map +1 -1
- package/out/street/centroid.d.ts +30 -0
- package/out/street/centroid.d.ts.map +1 -0
- package/out/street/{centroid/index.js → centroid.js} +12 -23
- package/out/street/centroid.js.map +1 -0
- package/out/street/morphology/fst/builder.d.ts +20 -10
- package/out/street/morphology/fst/builder.d.ts.map +1 -1
- package/out/street/morphology/fst/builder.js +34 -33
- package/out/street/morphology/fst/builder.js.map +1 -1
- package/out/street/morphology/fst/loader.d.ts +32 -25
- package/out/street/morphology/fst/loader.d.ts.map +1 -1
- package/out/street/morphology/fst/loader.js +19 -19
- package/out/street/morphology/fst/loader.js.map +1 -1
- package/out/street/name-lookup.d.ts +24 -18
- package/out/street/name-lookup.d.ts.map +1 -1
- package/out/street/name-lookup.js +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.js → street.d.ts} +2 -2
- package/out/street.d.ts.map +1 -0
- package/out/{street/index.d.ts → street.js} +2 -2
- package/out/street.js.map +1 -0
- package/out/types.d.ts +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 +88 -593
- package/lib/address/point/index.ts +0 -328
- package/lib/convention/index.ts +0 -154
- package/lib/fts/index.ts +0 -361
- package/out/address/index.d.ts.map +0 -1
- package/out/address/index.js.map +0 -1
- package/out/address/point/index.d.ts +0 -53
- package/out/address/point/index.d.ts.map +0 -1
- package/out/address/point/index.js +0 -222
- package/out/address/point/index.js.map +0 -1
- package/out/ancestry/index.d.ts +0 -45
- package/out/ancestry/index.d.ts.map +0 -1
- package/out/ancestry/index.js +0 -55
- package/out/ancestry/index.js.map +0 -1
- package/out/convention/index.d.ts +0 -106
- package/out/convention/index.d.ts.map +0 -1
- package/out/convention/index.js +0 -93
- package/out/convention/index.js.map +0 -1
- package/out/fst/index.d.ts.map +0 -1
- package/out/fst/index.js.map +0 -1
- package/out/fts/index.d.ts +0 -184
- package/out/fts/index.d.ts.map +0 -1
- package/out/fts/index.js +0 -277
- package/out/fts/index.js.map +0 -1
- package/out/geonames/index.d.ts.map +0 -1
- package/out/geonames/index.js.map +0 -1
- package/out/nsul/index.d.ts.map +0 -1
- package/out/nsul/index.js.map +0 -1
- package/out/poi/index.d.ts.map +0 -1
- package/out/poi/index.js.map +0 -1
- package/out/postal/index.d.ts.map +0 -1
- package/out/postal/index.js.map +0 -1
- package/out/street/centroid/index.d.ts +0 -40
- package/out/street/centroid/index.d.ts.map +0 -1
- package/out/street/centroid/index.js.map +0 -1
- package/out/street/index.d.ts.map +0 -1
- package/out/street/index.js.map +0 -1
- package/out/uprn/index.d.ts.map +0 -1
- package/out/uprn/index.js.map +0 -1
- /package/lib/{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/{postal/index.ts → postal.ts} +0 -0
- /package/lib/{uprn/index.ts → uprn.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coincident-roles.js","sourceRoot":"","sources":["../lib/coincident-roles.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"coincident-roles.js","sourceRoot":"","sources":["../lib/coincident-roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
6
|
* Typed schema for the convention asset — the `address_convention` table `SqliteConventionSource` probes, plus the
|
|
7
|
-
* `meta` provenance row every sealed artifact here
|
|
7
|
+
* `meta` provenance row every sealed artifact here includes. The interface is the read/write interface and
|
|
8
8
|
* {@link createAddressConventionTable} creates the table, so a column added to one is a compile error against the
|
|
9
9
|
* other.
|
|
10
10
|
*/
|
|
@@ -15,7 +15,9 @@ import type { Kysely } from "kysely";
|
|
|
15
15
|
export interface AddressConventionTable {
|
|
16
16
|
wof_id: number;
|
|
17
17
|
/**
|
|
18
|
-
* The `Convention` record, JSON-encoded.
|
|
18
|
+
* The `Convention` record, JSON-encoded.
|
|
19
|
+
*
|
|
20
|
+
* Parsed at read time by `SqliteConventionSource`.
|
|
19
21
|
*/
|
|
20
22
|
convention: string;
|
|
21
23
|
/**
|
|
@@ -35,13 +37,17 @@ export interface ConventionDatabase {
|
|
|
35
37
|
meta: ConventionMetaTable;
|
|
36
38
|
}
|
|
37
39
|
/**
|
|
38
|
-
* The
|
|
39
|
-
*
|
|
40
|
+
* The subset of a Kysely handle the convention DDL touches.
|
|
41
|
+
*
|
|
42
|
+
* Kysely is invariant in its schema parameter, so naming only `schema` lets a
|
|
43
|
+
* builder holding a wider handle pass it without a cast.
|
|
40
44
|
*/
|
|
41
45
|
export type ConventionSchemaHandle = Pick<Kysely<ConventionDatabase>, "schema">;
|
|
42
46
|
/**
|
|
43
|
-
* Create `address_convention`.
|
|
44
|
-
*
|
|
47
|
+
* Create `address_convention`.
|
|
48
|
+
*
|
|
49
|
+
* The table name comes from {@link ADDRESS_CONVENTION_TABLE} so the build script, the runtime source.
|
|
50
|
+
* The extract auto-detect stays aligned with it.
|
|
45
51
|
*/
|
|
46
52
|
export declare function createAddressConventionTable(db: ConventionSchemaHandle): Promise<void>;
|
|
47
53
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../lib/convention/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAIpC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../lib/convention/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAIpC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,kBAAkB,EAAE,sBAAsB,CAAA;IAC1C,IAAI,EAAE,mBAAmB,CAAA;CACzB;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,QAAQ,CAAC,CAAA;AAE/E;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAAC,EAAE,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO5F;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAAC,EAAE,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzF"}
|
package/out/convention/schema.js
CHANGED
|
@@ -4,14 +4,16 @@
|
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
6
|
* Typed schema for the convention asset — the `address_convention` table `SqliteConventionSource` probes, plus the
|
|
7
|
-
* `meta` provenance row every sealed artifact here
|
|
7
|
+
* `meta` provenance row every sealed artifact here includes. The interface is the read/write interface and
|
|
8
8
|
* {@link createAddressConventionTable} creates the table, so a column added to one is a compile error against the
|
|
9
9
|
* other.
|
|
10
10
|
*/
|
|
11
|
-
import { ADDRESS_CONVENTION_TABLE } from "#convention
|
|
11
|
+
import { ADDRESS_CONVENTION_TABLE } from "#convention";
|
|
12
12
|
/**
|
|
13
|
-
* Create `address_convention`.
|
|
14
|
-
*
|
|
13
|
+
* Create `address_convention`.
|
|
14
|
+
*
|
|
15
|
+
* The table name comes from {@link ADDRESS_CONVENTION_TABLE} so the build script, the runtime source.
|
|
16
|
+
* The extract auto-detect stays aligned with it.
|
|
15
17
|
*/
|
|
16
18
|
export async function createAddressConventionTable(db) {
|
|
17
19
|
await db.schema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../lib/convention/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,wBAAwB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../lib/convention/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAwCtD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,EAA0B;IAC5E,MAAM,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,wBAAwB,CAAC;SACrC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;SAC/D,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SAC7D,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SACzD,OAAO,EAAE,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAA0B;IACzE,MAAM,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,MAAM,CAAC;SACnB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;SACzD,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;SAC1B,OAAO,EAAE,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
* @file Defines resolution conventions as per-polygon profiles merged along a place's ancestor chain.
|
|
6
|
+
*
|
|
7
|
+
* The strategy implementations live in `lookup.ts` and are registered by name.
|
|
8
|
+
*/
|
|
9
|
+
import type { FindPlaceQuery, PlaceCandidate } from "#types";
|
|
10
|
+
/**
|
|
11
|
+
* Soft-scoring weights for the `postcode_area_resolution` strategy: `pc·S_pc + name·S_name + pop·S_pop`.
|
|
12
|
+
*/
|
|
13
|
+
export interface ScoringWeights {
|
|
14
|
+
pc: number;
|
|
15
|
+
name: number;
|
|
16
|
+
pop: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A resolution profile attached to a Who's On First admin polygon.
|
|
20
|
+
*/
|
|
21
|
+
export interface Convention {
|
|
22
|
+
/**
|
|
23
|
+
* The strategies that the dispatcher runs in order, by registered name.
|
|
24
|
+
* The first strategy that returns a non-null result wins.
|
|
25
|
+
*/
|
|
26
|
+
candidateStrategies?: string[];
|
|
27
|
+
/**
|
|
28
|
+
* Weights for the `postcode_area_resolution` soft score.
|
|
29
|
+
*
|
|
30
|
+
* A layer may set some weights and inherit the rest from the layers below it.
|
|
31
|
+
*/
|
|
32
|
+
scoringWeights?: Partial<ScoringWeights>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A convention with every field set, as `resolveConvention` returns it to strategies.
|
|
36
|
+
*/
|
|
37
|
+
export interface ResolvedConvention {
|
|
38
|
+
candidateStrategies: string[];
|
|
39
|
+
scoringWeights: ScoringWeights;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* The base layer that every ancestor chain starts from.
|
|
43
|
+
*
|
|
44
|
+
* It tries `postcode_area_resolution` and then falls back to fuzzy name matching.
|
|
45
|
+
* Every place without a convention override uses these values, so a change here
|
|
46
|
+
* changes resolution in every such country.
|
|
47
|
+
*/
|
|
48
|
+
export declare const WORLD_DEFAULT: ResolvedConvention;
|
|
49
|
+
/**
|
|
50
|
+
* The names of the strategies that the backend registers.
|
|
51
|
+
*
|
|
52
|
+
* The dispatch registry and the build-time validator share this list, so the build
|
|
53
|
+
* rejects a convention that lists an unknown strategy.
|
|
54
|
+
*/
|
|
55
|
+
export declare const BUILTIN_STRATEGY_NAMES: readonly ["postcode_area_resolution", "fallback_fuzzy_name_match"];
|
|
56
|
+
/**
|
|
57
|
+
* The table name for the convention asset, shared by the build script,
|
|
58
|
+
* the runtime source and extract detection.
|
|
59
|
+
*/
|
|
60
|
+
export declare const ADDRESS_CONVENTION_TABLE = "address_convention";
|
|
61
|
+
/**
|
|
62
|
+
* A resolution strategy selected by name.
|
|
63
|
+
*
|
|
64
|
+
* @returns `null` to abstain, so the dispatcher tries the next strategy,
|
|
65
|
+
* or an array, possibly empty, to claim the result.
|
|
66
|
+
*/
|
|
67
|
+
export type Strategy = (query: FindPlaceQuery, convention: ResolvedConvention) => Promise<PlaceCandidate[] | null>;
|
|
68
|
+
/**
|
|
69
|
+
* Looks up a convention by WOF polygon id.
|
|
70
|
+
* `get` returns `undefined` when the polygon has no override.
|
|
71
|
+
*/
|
|
72
|
+
export interface ConventionSource {
|
|
73
|
+
get(wofID: number): Convention | undefined;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* An in-memory convention source built from a `{ wofID: Convention }` map.
|
|
77
|
+
*/
|
|
78
|
+
export declare class SeedConventionSource implements ConventionSource {
|
|
79
|
+
#private;
|
|
80
|
+
constructor(rows?: Record<number, Convention>);
|
|
81
|
+
get(wofID: number): Convention | undefined;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Merges convention layers, with later, more specific layers winning per field.
|
|
85
|
+
*
|
|
86
|
+
* A layer's `candidateStrategies` replaces the whole list.
|
|
87
|
+
* `scoringWeights` merges key by key, so a layer can change one weight without restating the others.
|
|
88
|
+
*/
|
|
89
|
+
export declare function mergeConventions(base: Convention, ...overrides: Array<Convention | undefined>): Convention;
|
|
90
|
+
/**
|
|
91
|
+
* Resolves the effective convention for a place from its ancestor ids,
|
|
92
|
+
* ordered from most general to most specific.
|
|
93
|
+
*
|
|
94
|
+
* The merge starts from `WORLD_DEFAULT`, so every field is defined.
|
|
95
|
+
*/
|
|
96
|
+
export declare function resolveConvention(source: ConventionSource, ancestorIDs: readonly number[]): ResolvedConvention;
|
|
97
|
+
//# sourceMappingURL=convention.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convention.d.ts","sourceRoot":"","sources":["../lib/convention.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACX;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,cAAc,EAAE,cAAc,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,kBAG3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,YAAI,0BAA0B,EAAE,2BAA2B,CAAU,CAAA;AAExG;;;GAGG;AACH,eAAO,MAAM,wBAAwB,uBAAuB,CAAA;AAE5D;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,kBAAkB,KAAK,OAAO,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAA;AAElH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAChC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CAC1C;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;;IAG5D,YAAY,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAM,EAEhD;IAED,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAEzC;CACD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,UAAU,CAmB1G;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,kBAAkB,CAQ9G"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
* @file Defines resolution conventions as per-polygon profiles merged along a place's ancestor chain.
|
|
6
|
+
*
|
|
7
|
+
* The strategy implementations live in `lookup.ts` and are registered by name.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The base layer that every ancestor chain starts from.
|
|
11
|
+
*
|
|
12
|
+
* It tries `postcode_area_resolution` and then falls back to fuzzy name matching.
|
|
13
|
+
* Every place without a convention override uses these values, so a change here
|
|
14
|
+
* changes resolution in every such country.
|
|
15
|
+
*/
|
|
16
|
+
export const WORLD_DEFAULT = {
|
|
17
|
+
candidateStrategies: ["postcode_area_resolution", "fallback_fuzzy_name_match"],
|
|
18
|
+
scoringWeights: { pc: 0.6, name: 0.3, pop: 0.1 },
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The names of the strategies that the backend registers.
|
|
22
|
+
*
|
|
23
|
+
* The dispatch registry and the build-time validator share this list, so the build
|
|
24
|
+
* rejects a convention that lists an unknown strategy.
|
|
25
|
+
*/
|
|
26
|
+
export const BUILTIN_STRATEGY_NAMES = ["postcode_area_resolution", "fallback_fuzzy_name_match"];
|
|
27
|
+
/**
|
|
28
|
+
* The table name for the convention asset, shared by the build script,
|
|
29
|
+
* the runtime source and extract detection.
|
|
30
|
+
*/
|
|
31
|
+
export const ADDRESS_CONVENTION_TABLE = "address_convention";
|
|
32
|
+
/**
|
|
33
|
+
* An in-memory convention source built from a `{ wofID: Convention }` map.
|
|
34
|
+
*/
|
|
35
|
+
export class SeedConventionSource {
|
|
36
|
+
#rows;
|
|
37
|
+
constructor(rows = {}) {
|
|
38
|
+
this.#rows = new Map(Object.entries(rows).map(([k, v]) => [Number(k), v]));
|
|
39
|
+
}
|
|
40
|
+
get(wofID) {
|
|
41
|
+
return this.#rows.get(wofID);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Merges convention layers, with later, more specific layers winning per field.
|
|
46
|
+
*
|
|
47
|
+
* A layer's `candidateStrategies` replaces the whole list.
|
|
48
|
+
* `scoringWeights` merges key by key, so a layer can change one weight without restating the others.
|
|
49
|
+
*/
|
|
50
|
+
export function mergeConventions(base, ...overrides) {
|
|
51
|
+
const out = {
|
|
52
|
+
candidateStrategies: base.candidateStrategies ? [...base.candidateStrategies] : undefined,
|
|
53
|
+
scoringWeights: base.scoringWeights ? { ...base.scoringWeights } : undefined,
|
|
54
|
+
};
|
|
55
|
+
for (const o of overrides) {
|
|
56
|
+
if (!o)
|
|
57
|
+
continue;
|
|
58
|
+
if (o.candidateStrategies !== undefined) {
|
|
59
|
+
out.candidateStrategies = [...o.candidateStrategies];
|
|
60
|
+
}
|
|
61
|
+
if (o.scoringWeights !== undefined) {
|
|
62
|
+
out.scoringWeights = { ...(out.scoringWeights ?? WORLD_DEFAULT.scoringWeights), ...o.scoringWeights };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolves the effective convention for a place from its ancestor ids,
|
|
69
|
+
* ordered from most general to most specific.
|
|
70
|
+
*
|
|
71
|
+
* The merge starts from `WORLD_DEFAULT`, so every field is defined.
|
|
72
|
+
*/
|
|
73
|
+
export function resolveConvention(source, ancestorIDs) {
|
|
74
|
+
const layers = ancestorIDs.map((id) => source.get(id));
|
|
75
|
+
const merged = mergeConventions(WORLD_DEFAULT, ...layers);
|
|
76
|
+
return {
|
|
77
|
+
candidateStrategies: merged.candidateStrategies ?? WORLD_DEFAULT.candidateStrategies,
|
|
78
|
+
scoringWeights: { ...WORLD_DEFAULT.scoringWeights, ...merged.scoringWeights },
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=convention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convention.js","sourceRoot":"","sources":["../lib/convention.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsCH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAuB;IAChD,mBAAmB,EAAE,CAAC,0BAA0B,EAAE,2BAA2B,CAAC;IAC9E,cAAc,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;CAChD,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,0BAA0B,EAAE,2BAA2B,CAAU,CAAA;AAExG;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAA;AAkB5D;;GAEG;AACH,MAAM,OAAO,oBAAoB;IACvB,KAAK,CAAyB;IAEvC,YAAY,IAAI,GAA+B,EAAE;QAChD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3E,CAAC;IAED,GAAG,CAAC,KAAa;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;CACD;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAgB,EAAE,GAAG,SAAwC;IAC7F,MAAM,GAAG,GAAe;QACvB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS;QACzF,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAA;IAED,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC;YAAE,SAAQ;QAEhB,IAAI,CAAC,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACzC,GAAG,CAAC,mBAAmB,GAAG,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACpC,GAAG,CAAC,cAAc,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,aAAa,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,CAAA;QACtG,CAAC;IACF,CAAC;IAED,OAAO,GAAG,CAAA;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAwB,EAAE,WAA8B;IACzF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,MAAM,CAAC,CAAA;IAEzD,OAAO;QACN,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,aAAa,CAAC,mBAAmB;QACpF,cAAc,EAAE,EAAE,GAAG,aAAa,CAAC,cAAc,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE;KAC7E,CAAA;AACF,CAAC"}
|
|
@@ -2,64 +2,54 @@
|
|
|
2
2
|
* @copyright Sister Software
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
|
+
* @file Schema and read/write helpers for the candidate gazetteer's coverage manifest.
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - `country_coverage`: the hard-country-filter coverage record (#743/#194) — per-country
|
|
11
|
-
* promotion-eval verdicts + the measured hard-resolve rates that used to live in a code comment on
|
|
12
|
-
* `HARD_PLACE_COUNTRY_SAFELIST`. Presence = measured; `hard_filter_safe = 0` = measured and
|
|
13
|
-
* FAILED the check (FI 69.5%, PL 77.8%) — distinguishable from a country never measured at all
|
|
14
|
-
* (the meaning-of-zero rule, `docs/engineering/reference/layer-contract.mdx`).
|
|
15
|
-
* - `country_bbox`: the coarse guard-B plausibility boxes that used to live in
|
|
16
|
-
* `resolver/plausibility.ts`'s `COUNTRY_BBOX`. An absent row fails open (never trips the guard),
|
|
17
|
-
* exactly like an absent key in the constant.
|
|
18
|
-
*
|
|
19
|
-
* Emission happens at build time (`mailwoman/gazetteer-pipeline/coverage-manifest.ts` owns the
|
|
20
|
-
* measured record and calls {@link writeGazetteerCoverageManifest} before the DB is sealed — never
|
|
21
|
-
* patch a shipped DB, rebuild). The read happens at open time ({@link WOFCandidateTableLookup}
|
|
22
|
-
* calls {@link readGazetteerCoverageManifest} in its constructor); an artifact that predates the
|
|
23
|
-
* manifest returns `undefined` and every consumer falls back to the code constants byte-identically.
|
|
7
|
+
* The manifest holds two country-keyed tables. `country_coverage` records each measured country's hard-filter
|
|
8
|
+
* verdict. A missing row means the country was never measured. `hard_filter_safe = 0` means measurement found the
|
|
9
|
+
* filter unsafe. `country_bbox` holds coarse plausibility boxes. A missing bbox row never trips the guard.
|
|
24
10
|
*/
|
|
25
11
|
import { type CountryBBoxFact, type CountryCoverageFact, type GazetteerArtifactCoverage } from "@mailwoman/core/resolver";
|
|
26
12
|
import type { DatabaseClient } from "@mailwoman/sqlite/client";
|
|
27
13
|
import { type Kysely } from "kysely";
|
|
28
14
|
/**
|
|
29
|
-
*
|
|
15
|
+
* The stored form of {@link CountryCoverageFact}, one row per country.
|
|
30
16
|
*/
|
|
31
17
|
export interface CountryCoverageTable {
|
|
32
18
|
/**
|
|
33
|
-
* ISO 3166-1 alpha-2
|
|
19
|
+
* The upper-case ISO 3166-1 alpha-2 code.
|
|
20
|
+
* This field is the primary key.
|
|
34
21
|
*/
|
|
35
22
|
country: string;
|
|
36
23
|
/**
|
|
37
|
-
*
|
|
24
|
+
* The promotion-eval verdict as 0 or 1.
|
|
25
|
+
*
|
|
26
|
+
* It is stored directly because the rate by itself does not decide it.
|
|
38
27
|
*/
|
|
39
28
|
hard_filter_safe: number;
|
|
40
29
|
/**
|
|
41
|
-
*
|
|
30
|
+
* The hard-resolve rate from 0 to 1 on the panel given in `source`, or NULL when none was recorded.
|
|
42
31
|
*/
|
|
43
32
|
hard_resolve_rate: number | null;
|
|
44
33
|
/**
|
|
45
|
-
*
|
|
34
|
+
* The panel size behind `hard_resolve_rate`, or NULL when none was recorded.
|
|
46
35
|
*/
|
|
47
36
|
sample_size: number | null;
|
|
48
37
|
/**
|
|
49
|
-
* ISO
|
|
38
|
+
* The ISO 8601 date of the measurement.
|
|
50
39
|
*/
|
|
51
40
|
measured_at: string;
|
|
52
41
|
/**
|
|
53
|
-
* The
|
|
42
|
+
* The panel or check that produced this row.
|
|
54
43
|
*/
|
|
55
44
|
source: string;
|
|
56
45
|
}
|
|
57
46
|
/**
|
|
58
|
-
*
|
|
47
|
+
* The stored form of {@link CountryBBoxFact}, one coarse bounding box per country.
|
|
59
48
|
*/
|
|
60
49
|
export interface CountryBBoxTable {
|
|
61
50
|
/**
|
|
62
|
-
* ISO 3166-1 alpha-2
|
|
51
|
+
* The upper-case ISO 3166-1 alpha-2 code.
|
|
52
|
+
* This field is the primary key.
|
|
63
53
|
*/
|
|
64
54
|
country: string;
|
|
65
55
|
lat_min: number;
|
|
@@ -67,7 +57,7 @@ export interface CountryBBoxTable {
|
|
|
67
57
|
lon_min: number;
|
|
68
58
|
lon_max: number;
|
|
69
59
|
/**
|
|
70
|
-
*
|
|
60
|
+
* The provenance of the box.
|
|
71
61
|
*/
|
|
72
62
|
source: string;
|
|
73
63
|
}
|
|
@@ -79,34 +69,39 @@ export interface GazetteerCoverageDatabase {
|
|
|
79
69
|
country_bbox: CountryBBoxTable;
|
|
80
70
|
}
|
|
81
71
|
/**
|
|
82
|
-
*
|
|
72
|
+
* The name of the per-country coverage table.
|
|
73
|
+
* Readers check that it exists before querying it.
|
|
83
74
|
*/
|
|
84
75
|
export declare const COUNTRY_COVERAGE_TABLE = "country_coverage";
|
|
85
76
|
/**
|
|
86
|
-
*
|
|
77
|
+
* The name of the per-country bounding-box table, used to reject a placement outside its own country.
|
|
87
78
|
*/
|
|
88
79
|
export declare const COUNTRY_BBOX_TABLE = "country_bbox";
|
|
89
80
|
/**
|
|
90
|
-
*
|
|
81
|
+
* Creates the `country_coverage` table as a `WITHOUT ROWID` table keyed by country.
|
|
91
82
|
*/
|
|
92
83
|
export declare function createCountryCoverageTable(db: Kysely<GazetteerCoverageDatabase>): Promise<void>;
|
|
93
84
|
/**
|
|
94
|
-
*
|
|
85
|
+
* Creates the `country_bbox` table as a `WITHOUT ROWID` table keyed by country.
|
|
95
86
|
*/
|
|
96
87
|
export declare function createCountryBBoxTable(db: Kysely<GazetteerCoverageDatabase>): Promise<void>;
|
|
97
88
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
89
|
+
* Creates both manifest tables in a candidate database under construction and inserts the facts.
|
|
90
|
+
*
|
|
91
|
+
* The gazetteer build calls it once.
|
|
92
|
+
* A shipped database is rebuilt instead of patched.
|
|
100
93
|
*/
|
|
101
94
|
export declare function writeGazetteerCoverageManifest(db: Kysely<GazetteerCoverageDatabase>, facts: {
|
|
102
95
|
coverage: readonly CountryCoverageFact[];
|
|
103
96
|
bboxes: readonly CountryBBoxFact[];
|
|
104
97
|
}): Promise<void>;
|
|
105
98
|
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
99
|
+
* Reads the coverage manifest from an open candidate database.
|
|
100
|
+
*
|
|
101
|
+
* It returns `undefined` when neither table exists.
|
|
102
|
+
* Consumers then fall back to the code constants.
|
|
103
|
+
*
|
|
104
|
+
* The reads are synchronous because the candidate lookup calls this from its constructor.
|
|
110
105
|
*/
|
|
111
106
|
export declare function readGazetteerCoverageManifest<DB>(db: DatabaseClient<DB>): GazetteerArtifactCoverage | undefined;
|
|
112
107
|
//# sourceMappingURL=coverage-manifest-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-manifest-schema.d.ts","sourceRoot":"","sources":["../lib/coverage-manifest-schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"coverage-manifest-schema.d.ts","sourceRoot":"","sources":["../lib/coverage-manifest-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAEN,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,MAAM,0BAA0B,CAAA;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAIzC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACzC,gBAAgB,EAAE,oBAAoB,CAAA;IACtC,YAAY,EAAE,gBAAgB,CAAA;CAC9B;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,qBAAqB,CAAA;AACxD;;GAEG;AACH,eAAO,MAAM,kBAAkB,iBAAiB,CAAA;AAEhD;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,MAAM,CAAC,yBAAyB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAarG;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,MAAM,CAAC,yBAAyB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYjG;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CACnD,EAAE,EAAE,MAAM,CAAC,yBAAyB,CAAC,EACrC,KAAK,EAAE;IAAE,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,GACrF,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,yBAAyB,GAAG,SAAS,CAuD/G"}
|
|
@@ -2,40 +2,27 @@
|
|
|
2
2
|
* @copyright Sister Software
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
|
+
* @file Schema and read/write helpers for the candidate gazetteer's coverage manifest.
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - `country_coverage`: the hard-country-filter coverage record (#743/#194) — per-country
|
|
11
|
-
* promotion-eval verdicts + the measured hard-resolve rates that used to live in a code comment on
|
|
12
|
-
* `HARD_PLACE_COUNTRY_SAFELIST`. Presence = measured; `hard_filter_safe = 0` = measured and
|
|
13
|
-
* FAILED the check (FI 69.5%, PL 77.8%) — distinguishable from a country never measured at all
|
|
14
|
-
* (the meaning-of-zero rule, `docs/engineering/reference/layer-contract.mdx`).
|
|
15
|
-
* - `country_bbox`: the coarse guard-B plausibility boxes that used to live in
|
|
16
|
-
* `resolver/plausibility.ts`'s `COUNTRY_BBOX`. An absent row fails open (never trips the guard),
|
|
17
|
-
* exactly like an absent key in the constant.
|
|
18
|
-
*
|
|
19
|
-
* Emission happens at build time (`mailwoman/gazetteer-pipeline/coverage-manifest.ts` owns the
|
|
20
|
-
* measured record and calls {@link writeGazetteerCoverageManifest} before the DB is sealed — never
|
|
21
|
-
* patch a shipped DB, rebuild). The read happens at open time ({@link WOFCandidateTableLookup}
|
|
22
|
-
* calls {@link readGazetteerCoverageManifest} in its constructor); an artifact that predates the
|
|
23
|
-
* manifest returns `undefined` and every consumer falls back to the code constants byte-identically.
|
|
7
|
+
* The manifest holds two country-keyed tables. `country_coverage` records each measured country's hard-filter
|
|
8
|
+
* verdict. A missing row means the country was never measured. `hard_filter_safe = 0` means measurement found the
|
|
9
|
+
* filter unsafe. `country_bbox` holds coarse plausibility boxes. A missing bbox row never trips the guard.
|
|
24
10
|
*/
|
|
25
11
|
import { hardCountrySafelistFromCoverage, } from "@mailwoman/core/resolver";
|
|
26
12
|
import { allRows } from "@mailwoman/core/utils";
|
|
27
13
|
import { sql } from "kysely";
|
|
28
14
|
import { hasTable } from "#sqlite-utils";
|
|
29
15
|
/**
|
|
30
|
-
*
|
|
16
|
+
* The name of the per-country coverage table.
|
|
17
|
+
* Readers check that it exists before querying it.
|
|
31
18
|
*/
|
|
32
19
|
export const COUNTRY_COVERAGE_TABLE = "country_coverage";
|
|
33
20
|
/**
|
|
34
|
-
*
|
|
21
|
+
* The name of the per-country bounding-box table, used to reject a placement outside its own country.
|
|
35
22
|
*/
|
|
36
23
|
export const COUNTRY_BBOX_TABLE = "country_bbox";
|
|
37
24
|
/**
|
|
38
|
-
*
|
|
25
|
+
* Creates the `country_coverage` table as a `WITHOUT ROWID` table keyed by country.
|
|
39
26
|
*/
|
|
40
27
|
export async function createCountryCoverageTable(db) {
|
|
41
28
|
await db.schema
|
|
@@ -47,12 +34,12 @@ export async function createCountryCoverageTable(db) {
|
|
|
47
34
|
.addColumn("sample_size", "integer")
|
|
48
35
|
.addColumn("measured_at", "text", (c) => c.notNull())
|
|
49
36
|
.addColumn("source", "text", (c) => c.notNull())
|
|
50
|
-
//
|
|
37
|
+
// Kysely has no builder method for `without rowid`.
|
|
51
38
|
.modifyEnd(sql `without rowid`)
|
|
52
39
|
.execute();
|
|
53
40
|
}
|
|
54
41
|
/**
|
|
55
|
-
*
|
|
42
|
+
* Creates the `country_bbox` table as a `WITHOUT ROWID` table keyed by country.
|
|
56
43
|
*/
|
|
57
44
|
export async function createCountryBBoxTable(db) {
|
|
58
45
|
await db.schema
|
|
@@ -68,8 +55,10 @@ export async function createCountryBBoxTable(db) {
|
|
|
68
55
|
.execute();
|
|
69
56
|
}
|
|
70
57
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
58
|
+
* Creates both manifest tables in a candidate database under construction and inserts the facts.
|
|
59
|
+
*
|
|
60
|
+
* The gazetteer build calls it once.
|
|
61
|
+
* A shipped database is rebuilt instead of patched.
|
|
73
62
|
*/
|
|
74
63
|
export async function writeGazetteerCoverageManifest(db, facts) {
|
|
75
64
|
await createCountryCoverageTable(db);
|
|
@@ -102,10 +91,12 @@ export async function writeGazetteerCoverageManifest(db, facts) {
|
|
|
102
91
|
}
|
|
103
92
|
}
|
|
104
93
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
94
|
+
* Reads the coverage manifest from an open candidate database.
|
|
95
|
+
*
|
|
96
|
+
* It returns `undefined` when neither table exists.
|
|
97
|
+
* Consumers then fall back to the code constants.
|
|
98
|
+
*
|
|
99
|
+
* The reads are synchronous because the candidate lookup calls this from its constructor.
|
|
109
100
|
*/
|
|
110
101
|
export function readGazetteerCoverageManifest(db) {
|
|
111
102
|
const hasCoverage = hasTable(db, COUNTRY_COVERAGE_TABLE);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-manifest-schema.js","sourceRoot":"","sources":["../lib/coverage-manifest-schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"coverage-manifest-schema.js","sourceRoot":"","sources":["../lib/coverage-manifest-schema.ts"],"names":[],"mappings":"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"}
|