@mailwoman/resolver-wof-sqlite 10.0.0 → 10.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -8
- package/lib/address/point/interpolation.ts +45 -39
- package/lib/address/point/schema.ts +17 -40
- package/lib/address/point.ts +316 -0
- package/lib/{address/index.ts → address.ts} +1 -1
- package/lib/ancestry/backfill.ts +20 -86
- package/lib/{ancestry/index.ts → ancestry.ts} +19 -15
- package/lib/build/candidate.ts +122 -174
- package/lib/build/population-corrections.ts +64 -0
- package/lib/build/slim.ts +44 -114
- package/lib/candidate/alias-bags.ts +16 -17
- package/lib/candidate/ancestors/schema.ts +77 -61
- package/lib/candidate/ancestors/sidecar.ts +15 -22
- package/lib/candidate/country-display-names.ts +6 -20
- package/lib/candidate/extract-fold.ts +10 -55
- package/lib/candidate/fts.ts +5 -23
- package/lib/candidate/importance.ts +65 -68
- package/lib/candidate/lookup.ts +124 -415
- package/lib/candidate/name-roles.ts +15 -33
- package/lib/candidate/own-name.ts +35 -32
- package/lib/candidate/place-attrs.ts +20 -13
- package/lib/candidate/schema.ts +29 -65
- package/lib/candidate/scoring.ts +54 -93
- package/lib/capital-schema.ts +21 -17
- package/lib/capitals.ts +29 -27
- package/lib/coincident-roles.ts +85 -55
- package/lib/convention/schema.ts +15 -16
- package/lib/convention.ts +144 -0
- package/lib/coverage-manifest-schema.ts +40 -45
- package/lib/currency-backfill.ts +34 -79
- package/lib/env.ts +1 -1
- package/lib/exact-match.ts +32 -21
- package/lib/extracts.ts +97 -74
- package/lib/fst/autocomplete.ts +54 -37
- package/lib/fst/builder.ts +37 -41
- package/lib/fst/deserialize-web.ts +16 -17
- package/lib/fst/format.ts +41 -23
- package/lib/fst/freshness.ts +43 -120
- package/lib/fst/matcher.ts +7 -5
- package/lib/fst/serialize.ts +54 -74
- package/lib/fst/types.ts +78 -75
- package/lib/{fst/index.ts → fst.ts} +1 -0
- package/lib/fts/query.ts +5 -36
- package/lib/fts.ts +280 -0
- package/lib/geonames/aliases.ts +73 -144
- package/lib/geonames/postal.ts +162 -71
- package/lib/index.ts +9 -8
- package/lib/interpolation.ts +48 -100
- package/lib/lookup.ts +155 -270
- package/lib/name-score.ts +9 -7
- package/lib/nsul/lookup.ts +37 -54
- package/lib/nsul/schema.ts +16 -43
- package/lib/paths.ts +159 -0
- package/lib/place-importance-schema.ts +62 -169
- package/lib/poi/lookup.ts +104 -121
- package/lib/poi/schema.ts +42 -26
- package/lib/polygon-schema.ts +10 -6
- package/lib/postal/city/alias/lookup.ts +22 -40
- package/lib/postal/city/alias/schema.ts +14 -10
- package/lib/postal/city/candidate-schema.ts +26 -20
- package/lib/postcode-point-lookup.ts +8 -27
- package/lib/primary-preference.ts +46 -126
- package/lib/proximity-rerank.ts +44 -33
- package/lib/ranking-weights.ts +105 -78
- package/lib/region-keys.ts +70 -42
- package/lib/reverse.ts +149 -86
- package/lib/schema.ts +73 -50
- package/lib/search-fetch.ts +90 -68
- package/lib/sqlite/convention-source.ts +15 -23
- package/lib/sqlite/utils.ts +19 -22
- package/lib/street/centroid/schema.ts +37 -42
- package/lib/street/{centroid/index.ts → centroid.ts} +16 -25
- package/lib/street/morphology/fst/builder.ts +60 -42
- package/lib/street/morphology/fst/loader.ts +40 -32
- package/lib/street/name-lookup.ts +45 -41
- package/lib/street/normalize.ts +88 -219
- package/lib/street/segment-schema.ts +116 -43
- package/lib/{street/index.ts → street.ts} +1 -1
- package/lib/types.ts +109 -150
- package/lib/unified-schema.ts +29 -29
- package/lib/uprn/existence.ts +30 -19
- package/lib/uprn/lookup.ts +29 -68
- package/lib/uprn/schema.ts +18 -40
- package/lib/weights-overlay-linker.ts +236 -252
- package/out/address/point/interpolation.d.ts +20 -23
- package/out/address/point/interpolation.d.ts.map +1 -1
- package/out/address/point/interpolation.js +42 -39
- package/out/address/point/interpolation.js.map +1 -1
- package/out/address/point/schema.d.ts +12 -35
- package/out/address/point/schema.d.ts.map +1 -1
- package/out/address/point/schema.js +3 -19
- package/out/address/point/schema.js.map +1 -1
- package/out/address/point.d.ts +57 -0
- package/out/address/point.d.ts.map +1 -0
- package/out/address/point.js +206 -0
- package/out/address/point.js.map +1 -0
- package/out/{address/index.js → address.d.ts} +2 -2
- package/out/address.d.ts.map +1 -0
- package/out/{address/index.d.ts → address.js} +2 -2
- package/out/address.js.map +1 -0
- package/out/ancestry/backfill.d.ts +11 -64
- package/out/ancestry/backfill.d.ts.map +1 -1
- package/out/ancestry/backfill.js +14 -74
- package/out/ancestry/backfill.js.map +1 -1
- package/out/ancestry.d.ts +49 -0
- package/out/ancestry.d.ts.map +1 -0
- package/out/ancestry.js +59 -0
- package/out/ancestry.js.map +1 -0
- package/out/build/candidate.d.ts +82 -112
- package/out/build/candidate.d.ts.map +1 -1
- package/out/build/candidate.js +17 -100
- package/out/build/candidate.js.map +1 -1
- package/out/build/population-corrections.d.ts +52 -0
- package/out/build/population-corrections.d.ts.map +1 -0
- package/out/build/population-corrections.js +40 -0
- package/out/build/population-corrections.js.map +1 -0
- package/out/build/slim.d.ts +8 -44
- package/out/build/slim.d.ts.map +1 -1
- package/out/build/slim.js +33 -94
- package/out/build/slim.js.map +1 -1
- package/out/candidate/alias-bags.d.ts +6 -6
- package/out/candidate/alias-bags.d.ts.map +1 -1
- package/out/candidate/alias-bags.js +16 -17
- package/out/candidate/alias-bags.js.map +1 -1
- package/out/candidate/ancestors/schema.d.ts +73 -57
- package/out/candidate/ancestors/schema.d.ts.map +1 -1
- package/out/candidate/ancestors/schema.js +56 -48
- package/out/candidate/ancestors/schema.js.map +1 -1
- package/out/candidate/ancestors/sidecar.d.ts +3 -8
- package/out/candidate/ancestors/sidecar.d.ts.map +1 -1
- package/out/candidate/ancestors/sidecar.js +15 -22
- package/out/candidate/ancestors/sidecar.js.map +1 -1
- package/out/candidate/country-display-names.d.ts +5 -15
- package/out/candidate/country-display-names.d.ts.map +1 -1
- package/out/candidate/country-display-names.js +6 -20
- package/out/candidate/country-display-names.js.map +1 -1
- package/out/candidate/extract-fold.d.ts +7 -15
- package/out/candidate/extract-fold.d.ts.map +1 -1
- package/out/candidate/extract-fold.js +5 -47
- package/out/candidate/extract-fold.js.map +1 -1
- package/out/candidate/fts.d.ts +5 -23
- package/out/candidate/fts.d.ts.map +1 -1
- package/out/candidate/fts.js +5 -23
- package/out/candidate/fts.js.map +1 -1
- package/out/candidate/importance.d.ts +60 -65
- package/out/candidate/importance.d.ts.map +1 -1
- package/out/candidate/importance.js +56 -63
- package/out/candidate/importance.js.map +1 -1
- package/out/candidate/lookup.d.ts +18 -55
- package/out/candidate/lookup.d.ts.map +1 -1
- package/out/candidate/lookup.js +82 -385
- package/out/candidate/lookup.js.map +1 -1
- package/out/candidate/name-roles.d.ts +9 -21
- package/out/candidate/name-roles.d.ts.map +1 -1
- package/out/candidate/name-roles.js +15 -33
- package/out/candidate/name-roles.js.map +1 -1
- package/out/candidate/own-name.d.ts +23 -25
- package/out/candidate/own-name.d.ts.map +1 -1
- package/out/candidate/own-name.js +35 -32
- package/out/candidate/own-name.js.map +1 -1
- package/out/candidate/place-attrs.d.ts +20 -13
- package/out/candidate/place-attrs.d.ts.map +1 -1
- package/out/candidate/place-attrs.js +4 -5
- package/out/candidate/place-attrs.js.map +1 -1
- package/out/candidate/schema.d.ts +27 -62
- package/out/candidate/schema.d.ts.map +1 -1
- package/out/candidate/schema.js +10 -22
- package/out/candidate/schema.js.map +1 -1
- package/out/candidate/scoring.d.ts +7 -8
- package/out/candidate/scoring.d.ts.map +1 -1
- package/out/candidate/scoring.js +52 -89
- package/out/candidate/scoring.js.map +1 -1
- package/out/capital-schema.d.ts +21 -17
- package/out/capital-schema.d.ts.map +1 -1
- package/out/capital-schema.js +17 -15
- package/out/capital-schema.js.map +1 -1
- package/out/capitals.d.ts +27 -25
- package/out/capitals.d.ts.map +1 -1
- package/out/capitals.js +23 -21
- package/out/capitals.js.map +1 -1
- package/out/coincident-roles.d.ts +60 -43
- package/out/coincident-roles.d.ts.map +1 -1
- package/out/coincident-roles.js +72 -50
- package/out/coincident-roles.js.map +1 -1
- package/out/convention/schema.d.ts +14 -14
- package/out/convention/schema.d.ts.map +1 -1
- package/out/convention/schema.js +6 -4
- package/out/convention/schema.js.map +1 -1
- package/out/convention.d.ts +97 -0
- package/out/convention.d.ts.map +1 -0
- package/out/convention.js +81 -0
- package/out/convention.js.map +1 -0
- package/out/coverage-manifest-schema.d.ts +34 -39
- package/out/coverage-manifest-schema.d.ts.map +1 -1
- package/out/coverage-manifest-schema.js +25 -34
- package/out/coverage-manifest-schema.js.map +1 -1
- package/out/currency-backfill.d.ts +16 -38
- package/out/currency-backfill.d.ts.map +1 -1
- package/out/currency-backfill.js +19 -46
- package/out/currency-backfill.js.map +1 -1
- package/out/env.d.ts +1 -1
- package/out/env.js +1 -1
- package/out/exact-match.d.ts +19 -10
- package/out/exact-match.d.ts.map +1 -1
- package/out/exact-match.js +32 -21
- package/out/exact-match.js.map +1 -1
- package/out/extracts.d.ts +66 -55
- package/out/extracts.d.ts.map +1 -1
- package/out/extracts.js +63 -55
- package/out/extracts.js.map +1 -1
- package/out/fst/autocomplete.d.ts +29 -21
- package/out/fst/autocomplete.d.ts.map +1 -1
- package/out/fst/autocomplete.js +39 -28
- package/out/fst/autocomplete.js.map +1 -1
- package/out/fst/builder.d.ts.map +1 -1
- package/out/fst/builder.js +37 -41
- package/out/fst/builder.js.map +1 -1
- package/out/fst/deserialize-web.d.ts +4 -4
- package/out/fst/deserialize-web.d.ts.map +1 -1
- package/out/fst/deserialize-web.js +15 -16
- package/out/fst/deserialize-web.js.map +1 -1
- package/out/fst/format.d.ts +41 -23
- package/out/fst/format.d.ts.map +1 -1
- package/out/fst/format.js +41 -23
- package/out/fst/format.js.map +1 -1
- package/out/fst/freshness.d.ts +19 -81
- package/out/fst/freshness.d.ts.map +1 -1
- package/out/fst/freshness.js +31 -94
- package/out/fst/freshness.js.map +1 -1
- package/out/fst/matcher.d.ts +5 -4
- package/out/fst/matcher.d.ts.map +1 -1
- package/out/fst/matcher.js +2 -2
- package/out/fst/matcher.js.map +1 -1
- package/out/fst/serialize.d.ts +28 -28
- package/out/fst/serialize.d.ts.map +1 -1
- package/out/fst/serialize.js +53 -71
- package/out/fst/serialize.js.map +1 -1
- package/out/fst/types.d.ts +78 -74
- package/out/fst/types.d.ts.map +1 -1
- package/out/fst/types.js +1 -4
- package/out/fst/types.js.map +1 -1
- package/out/{fst/index.js → fst.d.ts} +2 -1
- package/out/fst.d.ts.map +1 -0
- package/out/{fst/index.d.ts → fst.js} +2 -1
- package/out/fst.js.map +1 -0
- package/out/fts/query.d.ts +2 -27
- package/out/fts/query.d.ts.map +1 -1
- package/out/fts/query.js +5 -36
- package/out/fts/query.js.map +1 -1
- package/out/fts.d.ts +126 -0
- package/out/fts.d.ts.map +1 -0
- package/out/fts.js +188 -0
- package/out/fts.js.map +1 -0
- package/out/geonames/aliases.d.ts +26 -62
- package/out/geonames/aliases.d.ts.map +1 -1
- package/out/geonames/aliases.js +45 -117
- package/out/geonames/aliases.js.map +1 -1
- package/out/geonames/postal.d.ts +84 -44
- package/out/geonames/postal.d.ts.map +1 -1
- package/out/geonames/postal.js +115 -73
- package/out/geonames/postal.js.map +1 -1
- package/out/{geonames/index.js → geonames.d.ts} +1 -1
- package/out/geonames.d.ts.map +1 -0
- package/out/{geonames/index.d.ts → geonames.js} +1 -1
- package/out/geonames.js.map +1 -0
- package/out/index.d.ts +9 -8
- package/out/index.d.ts.map +1 -1
- package/out/index.js +6 -5
- package/out/index.js.map +1 -1
- package/out/interpolation.d.ts +18 -55
- package/out/interpolation.d.ts.map +1 -1
- package/out/interpolation.js +27 -69
- package/out/interpolation.js.map +1 -1
- package/out/lookup.d.ts +23 -51
- package/out/lookup.d.ts.map +1 -1
- package/out/lookup.js +136 -234
- package/out/lookup.js.map +1 -1
- package/out/name-score.d.ts +2 -2
- package/out/name-score.d.ts.map +1 -1
- package/out/name-score.js +9 -7
- package/out/name-score.js.map +1 -1
- package/out/nsul/lookup.d.ts +33 -34
- package/out/nsul/lookup.d.ts.map +1 -1
- package/out/nsul/lookup.js +26 -40
- package/out/nsul/lookup.js.map +1 -1
- package/out/nsul/schema.d.ts +16 -43
- package/out/nsul/schema.d.ts.map +1 -1
- package/out/nsul/schema.js +9 -35
- package/out/nsul/schema.js.map +1 -1
- package/out/{nsul/index.d.ts → nsul.d.ts} +1 -1
- package/out/nsul.d.ts.map +1 -0
- package/out/{nsul/index.js → nsul.js} +1 -1
- package/out/nsul.js.map +1 -0
- package/out/paths.d.ts +124 -0
- package/out/paths.d.ts.map +1 -0
- package/out/paths.js +104 -0
- package/out/paths.js.map +1 -0
- package/out/place-importance-schema.d.ts +51 -143
- package/out/place-importance-schema.d.ts.map +1 -1
- package/out/place-importance-schema.js +28 -143
- package/out/place-importance-schema.js.map +1 -1
- package/out/poi/lookup.d.ts +40 -47
- package/out/poi/lookup.d.ts.map +1 -1
- package/out/poi/lookup.js +69 -96
- package/out/poi/lookup.js.map +1 -1
- package/out/poi/schema.d.ts +41 -25
- package/out/poi/schema.d.ts.map +1 -1
- package/out/poi/schema.js +25 -17
- package/out/poi/schema.js.map +1 -1
- package/out/{poi/index.js → poi.d.ts} +1 -1
- package/out/poi.d.ts.map +1 -0
- package/out/{poi/index.d.ts → poi.js} +1 -1
- package/out/poi.js.map +1 -0
- package/out/polygon-schema.d.ts +10 -6
- package/out/polygon-schema.d.ts.map +1 -1
- package/out/polygon-schema.js +2 -2
- package/out/polygon-schema.js.map +1 -1
- package/out/postal/city/alias/lookup.d.ts +20 -23
- package/out/postal/city/alias/lookup.d.ts.map +1 -1
- package/out/postal/city/alias/lookup.js +17 -30
- package/out/postal/city/alias/lookup.js.map +1 -1
- package/out/postal/city/alias/schema.d.ts +14 -10
- package/out/postal/city/alias/schema.d.ts.map +1 -1
- package/out/postal/city/alias/schema.js +10 -8
- package/out/postal/city/alias/schema.js.map +1 -1
- package/out/postal/city/candidate-schema.d.ts +25 -19
- package/out/postal/city/candidate-schema.d.ts.map +1 -1
- package/out/postal/city/candidate-schema.js +21 -17
- package/out/postal/city/candidate-schema.js.map +1 -1
- package/out/{postal/index.d.ts → postal.d.ts} +1 -1
- package/out/postal.d.ts.map +1 -0
- package/out/{postal/index.js → postal.js} +1 -1
- package/out/postal.js.map +1 -0
- package/out/postcode-point-lookup.d.ts +6 -24
- package/out/postcode-point-lookup.d.ts.map +1 -1
- package/out/postcode-point-lookup.js +5 -17
- package/out/postcode-point-lookup.js.map +1 -1
- package/out/primary-preference.d.ts +38 -92
- package/out/primary-preference.d.ts.map +1 -1
- package/out/primary-preference.js +15 -99
- package/out/primary-preference.js.map +1 -1
- package/out/proximity-rerank.d.ts +41 -30
- package/out/proximity-rerank.d.ts.map +1 -1
- package/out/proximity-rerank.js +38 -29
- package/out/proximity-rerank.js.map +1 -1
- package/out/ranking-weights.d.ts +98 -64
- package/out/ranking-weights.d.ts.map +1 -1
- package/out/ranking-weights.js +26 -25
- package/out/ranking-weights.js.map +1 -1
- package/out/region-keys.d.ts +50 -31
- package/out/region-keys.d.ts.map +1 -1
- package/out/region-keys.js +68 -40
- package/out/region-keys.js.map +1 -1
- package/out/reverse.d.ts +78 -50
- package/out/reverse.d.ts.map +1 -1
- package/out/reverse.js +98 -61
- package/out/reverse.js.map +1 -1
- package/out/schema.d.ts +72 -49
- package/out/schema.d.ts.map +1 -1
- package/out/schema.js +4 -5
- package/out/schema.js.map +1 -1
- package/out/search-fetch.d.ts +16 -12
- package/out/search-fetch.d.ts.map +1 -1
- package/out/search-fetch.js +83 -63
- package/out/search-fetch.js.map +1 -1
- package/out/sqlite/convention-source.d.ts +12 -16
- package/out/sqlite/convention-source.d.ts.map +1 -1
- package/out/sqlite/convention-source.js +13 -22
- package/out/sqlite/convention-source.js.map +1 -1
- package/out/sqlite/utils.d.ts +19 -19
- package/out/sqlite/utils.d.ts.map +1 -1
- package/out/sqlite/utils.js +14 -15
- package/out/sqlite/utils.js.map +1 -1
- package/out/street/centroid/schema.d.ts +37 -42
- package/out/street/centroid/schema.d.ts.map +1 -1
- package/out/street/centroid/schema.js +9 -21
- package/out/street/centroid/schema.js.map +1 -1
- package/out/street/centroid.d.ts +30 -0
- package/out/street/centroid.d.ts.map +1 -0
- package/out/street/{centroid/index.js → centroid.js} +13 -24
- package/out/street/centroid.js.map +1 -0
- package/out/street/morphology/fst/builder.d.ts +20 -10
- package/out/street/morphology/fst/builder.d.ts.map +1 -1
- package/out/street/morphology/fst/builder.js +44 -34
- package/out/street/morphology/fst/builder.js.map +1 -1
- package/out/street/morphology/fst/loader.d.ts +33 -26
- package/out/street/morphology/fst/loader.d.ts.map +1 -1
- package/out/street/morphology/fst/loader.js +23 -22
- package/out/street/morphology/fst/loader.js.map +1 -1
- package/out/street/name-lookup.d.ts +24 -18
- package/out/street/name-lookup.d.ts.map +1 -1
- package/out/street/name-lookup.js +34 -35
- package/out/street/name-lookup.js.map +1 -1
- package/out/street/normalize.d.ts +35 -136
- package/out/street/normalize.d.ts.map +1 -1
- package/out/street/normalize.js +77 -194
- package/out/street/normalize.js.map +1 -1
- package/out/street/segment-schema.d.ts +79 -39
- package/out/street/segment-schema.d.ts.map +1 -1
- package/out/street/segment-schema.js +71 -21
- package/out/street/segment-schema.js.map +1 -1
- package/out/{street/index.js → street.d.ts} +2 -2
- package/out/street.d.ts.map +1 -0
- package/out/{street/index.d.ts → street.js} +2 -2
- package/out/street.js.map +1 -0
- package/out/types.d.ts +84 -149
- package/out/types.d.ts.map +1 -1
- package/out/types.js +0 -6
- package/out/types.js.map +1 -1
- package/out/unified-schema.d.ts +8 -12
- package/out/unified-schema.d.ts.map +1 -1
- package/out/unified-schema.js +29 -29
- package/out/unified-schema.js.map +1 -1
- package/out/uprn/existence.d.ts +28 -17
- package/out/uprn/existence.d.ts.map +1 -1
- package/out/uprn/existence.js +26 -16
- package/out/uprn/existence.js.map +1 -1
- package/out/uprn/lookup.d.ts +14 -44
- package/out/uprn/lookup.d.ts.map +1 -1
- package/out/uprn/lookup.js +21 -57
- package/out/uprn/lookup.js.map +1 -1
- package/out/uprn/schema.d.ts +18 -40
- package/out/uprn/schema.d.ts.map +1 -1
- package/out/uprn/schema.js +10 -32
- package/out/uprn/schema.js.map +1 -1
- package/out/{uprn/index.d.ts → uprn.d.ts} +1 -1
- package/out/uprn.d.ts.map +1 -0
- package/out/{uprn/index.js → uprn.js} +1 -1
- package/out/uprn.js.map +1 -0
- package/out/weights-overlay-linker.d.ts +138 -144
- package/out/weights-overlay-linker.d.ts.map +1 -1
- package/out/weights-overlay-linker.js +105 -159
- package/out/weights-overlay-linker.js.map +1 -1
- package/package.json +91 -596
- package/lib/address/point/index.ts +0 -328
- package/lib/convention/index.ts +0 -154
- package/lib/fts/index.ts +0 -361
- package/out/address/index.d.ts.map +0 -1
- package/out/address/index.js.map +0 -1
- package/out/address/point/index.d.ts +0 -53
- package/out/address/point/index.d.ts.map +0 -1
- package/out/address/point/index.js +0 -222
- package/out/address/point/index.js.map +0 -1
- package/out/ancestry/index.d.ts +0 -45
- package/out/ancestry/index.d.ts.map +0 -1
- package/out/ancestry/index.js +0 -55
- package/out/ancestry/index.js.map +0 -1
- package/out/convention/index.d.ts +0 -106
- package/out/convention/index.d.ts.map +0 -1
- package/out/convention/index.js +0 -93
- package/out/convention/index.js.map +0 -1
- package/out/fst/index.d.ts.map +0 -1
- package/out/fst/index.js.map +0 -1
- package/out/fts/index.d.ts +0 -184
- package/out/fts/index.d.ts.map +0 -1
- package/out/fts/index.js +0 -277
- package/out/fts/index.js.map +0 -1
- package/out/geonames/index.d.ts.map +0 -1
- package/out/geonames/index.js.map +0 -1
- package/out/nsul/index.d.ts.map +0 -1
- package/out/nsul/index.js.map +0 -1
- package/out/poi/index.d.ts.map +0 -1
- package/out/poi/index.js.map +0 -1
- package/out/postal/index.d.ts.map +0 -1
- package/out/postal/index.js.map +0 -1
- package/out/street/centroid/index.d.ts +0 -40
- package/out/street/centroid/index.d.ts.map +0 -1
- package/out/street/centroid/index.js.map +0 -1
- package/out/street/index.d.ts.map +0 -1
- package/out/street/index.js.map +0 -1
- package/out/uprn/index.d.ts.map +0 -1
- package/out/uprn/index.js.map +0 -1
- /package/lib/{geonames/index.ts → geonames.ts} +0 -0
- /package/lib/{nsul/index.ts → nsul.ts} +0 -0
- /package/lib/{poi/index.ts → poi.ts} +0 -0
- /package/lib/{postal/index.ts → postal.ts} +0 -0
- /package/lib/{uprn/index.ts → uprn.ts} +0 -0
package/out/capital-schema.js
CHANGED
|
@@ -3,26 +3,27 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* The `capital` table
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* per-probe query and no index beyond the rowid.
|
|
6
|
+
* The `capital` table: the capital-status reference included inside `candidate.db`, so an npm
|
|
7
|
+
* consumer who pulled the artifact can run `capital_tier` without the repo's
|
|
8
|
+
* `data/gazetteer/capitals-v1.json`, which published packages do not ship. One row per reference
|
|
9
|
+
* entry. The loader reads the whole table once into a `CapitalIndex` at session construction, so
|
|
10
|
+
* there is no per-probe query and no index beyond the rowid.
|
|
12
11
|
*
|
|
13
|
-
* `keys` holds the entry's folded name set as a JSON array
|
|
14
|
-
*
|
|
12
|
+
* `keys` holds the entry's folded name set as a JSON array, the name-membership conjunct that keeps
|
|
13
|
+
* the coordinate radius from promoting a capital's same-name neighbors (`capitals.ts`).
|
|
15
14
|
*/
|
|
16
15
|
import { tryParsingJSON } from "@mailwoman/core/json";
|
|
17
16
|
import { hasTable } from "#sqlite-utils";
|
|
18
17
|
/**
|
|
19
|
-
* The table name the builder writes and the reader probes
|
|
20
|
-
* tables (`candidate`, `country_codes`).
|
|
18
|
+
* The table name the builder writes and the reader probes, one word and singular,
|
|
19
|
+
* matching the artifact's other reference tables (`candidate`, `country_codes`).
|
|
21
20
|
*/
|
|
22
21
|
export const CAPITAL_TABLE = "capital";
|
|
23
22
|
/**
|
|
24
|
-
* Create the table on a build in progress.
|
|
25
|
-
*
|
|
23
|
+
* Create the table on a build in progress.
|
|
24
|
+
*
|
|
25
|
+
* Async because Kysely's schema-builder is.
|
|
26
|
+
* Called from the candidate build's DDL phase alongside the other typed builders.
|
|
26
27
|
*/
|
|
27
28
|
export async function createCapitalTable(db) {
|
|
28
29
|
await db.schema
|
|
@@ -35,9 +36,10 @@ export async function createCapitalTable(db) {
|
|
|
35
36
|
.execute();
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
38
|
-
* Read the whole reference out of an artifact, or `null` when the artifact predates the table
|
|
39
|
-
*
|
|
40
|
-
*
|
|
39
|
+
* Read the whole reference out of an artifact, or `null` when the artifact predates the table.
|
|
40
|
+
*
|
|
41
|
+
* The caller then falls back to its next source rather than treating an old artifact as "no
|
|
42
|
+
* capitals" (the meaning-of-zero rule: a missing table is unmeasured, an empty one is a finding).
|
|
41
43
|
*/
|
|
42
44
|
export function readCapitalPoints(db) {
|
|
43
45
|
if (!hasTable(db, CAPITAL_TABLE))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capital-schema.js","sourceRoot":"","sources":["../lib/capital-schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"capital-schema.js","sourceRoot":"","sources":["../lib/capital-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAKrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAA;AAmBtC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAuC,EAAc;IAC5F,MAAM,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,aAAa,CAAC;SAC1B,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAChD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACjD,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAClD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC9C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC7C,OAAO,EAAE,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAK,EAAsB;IAC3D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC;QAAE,OAAO,IAAI,CAAA;IAE7C,MAAM,MAAM,GAAmB,EAAE,CAAA;IAEjC,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,yDAAyD,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAClH,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAE/B,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,QAAQ;YAAE,SAAQ;QAExD,MAAM,IAAI,GAAG,cAAc,CAAW,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QAEvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,SAAQ;QAElC,MAAM,CAAC,IAAI,CAAC;YACX,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YAC5B,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;YAChC,KAAK;YACL,CAAC,EAAE,IAAI;SACP,CAAC,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACd,CAAC"}
|
package/out/capitals.d.ts
CHANGED
|
@@ -3,24 +3,21 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* The
|
|
7
|
-
*
|
|
6
|
+
* The capital-status reference index answers whether a resolved candidate is its country's national capital or admin-1 seat.
|
|
7
|
+
* The consumer is the resolver's
|
|
8
8
|
* bounded capital promotion (`@mailwoman/resolver`'s `promoteCapitals`, applied after the fame
|
|
9
|
-
* key on the bare-toponym class)
|
|
10
|
-
* platform-free
|
|
9
|
+
* key on the bare-toponym class). This module only matches and never ranks. It is pure and
|
|
10
|
+
* platform-free.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* names, so exonym rows — "Vienna" for Wien — still match). All three are required. The
|
|
16
|
-
* iteration-1 board run matched on country + coordinate alone, and the 25 km radius promoted
|
|
17
|
-
* capital-ADJACENT namesakes instead of capitals: North Salt Lake beside the Utah seat, a Gujarat
|
|
18
|
-
* Indiranagar beside Gandhinagar, Via delle Parti beside Perugia. The name set is what makes the
|
|
12
|
+
* A match requires the same country and a distance within {@link CAPITAL_MATCH_RADIUS_KM} of the reference point.
|
|
13
|
+
* The candidate's folded name must also appear in the reference entry's folded name set (name + romanization + the source's alternate
|
|
14
|
+
* names, so exonym rows such as "Vienna" for Wien still match). The name set is what makes the
|
|
19
15
|
* radius a centroid-drift allowance rather than a catchment.
|
|
20
16
|
*/
|
|
21
17
|
/**
|
|
22
|
-
* Capital status of one candidate: national capital, admin-1 seat, or neither.
|
|
23
|
-
*
|
|
18
|
+
* Capital status of one candidate: national capital, admin-1 seat, or neither.
|
|
19
|
+
*
|
|
20
|
+
* Numeric so the resolver's promotion can compare levels.
|
|
24
21
|
*/
|
|
25
22
|
export declare const CAPITAL_LEVEL: {
|
|
26
23
|
readonly none: 0;
|
|
@@ -29,13 +26,14 @@ export declare const CAPITAL_LEVEL: {
|
|
|
29
26
|
};
|
|
30
27
|
export type CapitalLevel = (typeof CAPITAL_LEVEL)[keyof typeof CAPITAL_LEVEL];
|
|
31
28
|
/**
|
|
32
|
-
* How far a candidate row may sit from the reference point and still read as the same place
|
|
33
|
-
*
|
|
34
|
-
*
|
|
29
|
+
* How far a candidate row may sit from the reference point and still read as the same place.
|
|
30
|
+
*
|
|
31
|
+
* A centroid-convention allowance for a GeoNames point against a WOF centroid on a metro-scale city.
|
|
32
|
+
* The name-membership conjunct excludes neighbors inside the radius.
|
|
35
33
|
*/
|
|
36
34
|
export declare const CAPITAL_MATCH_RADIUS_KM = 25;
|
|
37
35
|
/**
|
|
38
|
-
* One reference entry, as `data/gazetteer/capitals-v1.json`
|
|
36
|
+
* One reference entry, as recorded in `data/gazetteer/capitals-v1.json` (`entries[]`).
|
|
39
37
|
*/
|
|
40
38
|
export interface CapitalPoint {
|
|
41
39
|
/**
|
|
@@ -46,24 +44,28 @@ export interface CapitalPoint {
|
|
|
46
44
|
longitude: number;
|
|
47
45
|
level: "national" | "admin1";
|
|
48
46
|
/**
|
|
49
|
-
* Folded name keys (name + romanization + alternate names, `normalizeLocalityForKey` fold)
|
|
50
|
-
* the name conjunct.
|
|
47
|
+
* Folded name keys (name + romanization + alternate names, `normalizeLocalityForKey` fold).
|
|
48
|
+
* The membership set for the name conjunct.
|
|
51
49
|
*/
|
|
52
50
|
k: string[];
|
|
53
51
|
}
|
|
54
52
|
/**
|
|
55
|
-
* Country-bucketed capital points with the three-conjunct identity probe.
|
|
56
|
-
*
|
|
57
|
-
*
|
|
53
|
+
* Country-bucketed capital points with the three-conjunct identity probe.
|
|
54
|
+
*
|
|
55
|
+
* Construct from the parsed reference file's `entries`.
|
|
56
|
+
* The loader that reads the file off disk lives with the path owners
|
|
57
|
+
* (`mailwoman`'s resolver backend), keeping this module platform-free.
|
|
58
58
|
*/
|
|
59
59
|
export declare class CapitalIndex {
|
|
60
60
|
#private;
|
|
61
61
|
constructor(entries: Iterable<CapitalPoint>);
|
|
62
62
|
/**
|
|
63
|
-
* The highest capital level whose entry passes all three conjuncts for this place.
|
|
64
|
-
*
|
|
63
|
+
* The highest capital level whose entry passes all three conjuncts for this place.
|
|
64
|
+
*
|
|
65
|
+
* `none`, never a throw, for a missing name, country, or coordinate,
|
|
66
|
+
* an unknown country, or no matching entry.
|
|
65
67
|
*/
|
|
66
|
-
levelOfPlace(name: string | null
|
|
68
|
+
levelOfPlace(name: string | null, country: string | null, latitude: number | null, longitude: number | null | undefined): CapitalLevel;
|
|
67
69
|
get size(): number;
|
|
68
70
|
}
|
|
69
71
|
//# sourceMappingURL=capitals.d.ts.map
|
package/out/capitals.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capitals.d.ts","sourceRoot":"","sources":["../lib/capitals.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"capitals.d.ts","sourceRoot":"","sources":["../lib/capitals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH;;;;GAIG;AACH,eAAO,MAAM,aAAa;aACzB,IAAI,EAAE,CAAC;aACP,MAAM,EAAE,CAAC;aACT,QAAQ,EAAE,CAAC;CACF,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAA;AAE7E;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAEzC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAA;IAC5B;;;OAGG;IACH,CAAC,EAAE,MAAM,EAAE,CAAA;CACX;AAcD;;;;;;GAMG;AACH,qBAAa,YAAY;;IAGxB,YAAY,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAmB1C;IAED;;;;;OAKG;IACH,YAAY,CACX,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,YAAY,CAwBd;IAED,IAAI,IAAI,IAAI,MAAM,CAQjB;CACD"}
|
package/out/capitals.js
CHANGED
|
@@ -3,26 +3,23 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* The
|
|
7
|
-
*
|
|
6
|
+
* The capital-status reference index answers whether a resolved candidate is its country's national capital or admin-1 seat.
|
|
7
|
+
* The consumer is the resolver's
|
|
8
8
|
* bounded capital promotion (`@mailwoman/resolver`'s `promoteCapitals`, applied after the fame
|
|
9
|
-
* key on the bare-toponym class)
|
|
10
|
-
* platform-free
|
|
9
|
+
* key on the bare-toponym class). This module only matches and never ranks. It is pure and
|
|
10
|
+
* platform-free.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* names, so exonym rows — "Vienna" for Wien — still match). All three are required. The
|
|
16
|
-
* iteration-1 board run matched on country + coordinate alone, and the 25 km radius promoted
|
|
17
|
-
* capital-ADJACENT namesakes instead of capitals: North Salt Lake beside the Utah seat, a Gujarat
|
|
18
|
-
* Indiranagar beside Gandhinagar, Via delle Parti beside Perugia. The name set is what makes the
|
|
12
|
+
* A match requires the same country and a distance within {@link CAPITAL_MATCH_RADIUS_KM} of the reference point.
|
|
13
|
+
* The candidate's folded name must also appear in the reference entry's folded name set (name + romanization + the source's alternate
|
|
14
|
+
* names, so exonym rows such as "Vienna" for Wien still match). The name set is what makes the
|
|
19
15
|
* radius a centroid-drift allowance rather than a catchment.
|
|
20
16
|
*/
|
|
21
17
|
import { haversineKm } from "@mailwoman/spatial";
|
|
22
18
|
import { normalizeLocalityForKey } from "#street/normalize";
|
|
23
19
|
/**
|
|
24
|
-
* Capital status of one candidate: national capital, admin-1 seat, or neither.
|
|
25
|
-
*
|
|
20
|
+
* Capital status of one candidate: national capital, admin-1 seat, or neither.
|
|
21
|
+
*
|
|
22
|
+
* Numeric so the resolver's promotion can compare levels.
|
|
26
23
|
*/
|
|
27
24
|
export const CAPITAL_LEVEL = {
|
|
28
25
|
none: 0,
|
|
@@ -30,9 +27,10 @@ export const CAPITAL_LEVEL = {
|
|
|
30
27
|
national: 2,
|
|
31
28
|
};
|
|
32
29
|
/**
|
|
33
|
-
* How far a candidate row may sit from the reference point and still read as the same place
|
|
34
|
-
*
|
|
35
|
-
*
|
|
30
|
+
* How far a candidate row may sit from the reference point and still read as the same place.
|
|
31
|
+
*
|
|
32
|
+
* A centroid-convention allowance for a GeoNames point against a WOF centroid on a metro-scale city.
|
|
33
|
+
* The name-membership conjunct excludes neighbors inside the radius.
|
|
36
34
|
*/
|
|
37
35
|
export const CAPITAL_MATCH_RADIUS_KM = 25;
|
|
38
36
|
const LEVEL_OF = {
|
|
@@ -40,9 +38,11 @@ const LEVEL_OF = {
|
|
|
40
38
|
admin1: CAPITAL_LEVEL.admin1,
|
|
41
39
|
};
|
|
42
40
|
/**
|
|
43
|
-
* Country-bucketed capital points with the three-conjunct identity probe.
|
|
44
|
-
*
|
|
45
|
-
*
|
|
41
|
+
* Country-bucketed capital points with the three-conjunct identity probe.
|
|
42
|
+
*
|
|
43
|
+
* Construct from the parsed reference file's `entries`.
|
|
44
|
+
* The loader that reads the file off disk lives with the path owners
|
|
45
|
+
* (`mailwoman`'s resolver backend), keeping this module platform-free.
|
|
46
46
|
*/
|
|
47
47
|
export class CapitalIndex {
|
|
48
48
|
#byCountry = new Map();
|
|
@@ -65,8 +65,10 @@ export class CapitalIndex {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
68
|
-
* The highest capital level whose entry passes all three conjuncts for this place.
|
|
69
|
-
*
|
|
68
|
+
* The highest capital level whose entry passes all three conjuncts for this place.
|
|
69
|
+
*
|
|
70
|
+
* `none`, never a throw, for a missing name, country, or coordinate,
|
|
71
|
+
* an unknown country, or no matching entry.
|
|
70
72
|
*/
|
|
71
73
|
levelOfPlace(name, country, latitude, longitude) {
|
|
72
74
|
if (!name || !country || typeof latitude !== "number" || typeof longitude !== "number")
|
package/out/capitals.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capitals.js","sourceRoot":"","sources":["../lib/capitals.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"capitals.js","sourceRoot":"","sources":["../lib/capitals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;CACF,CAAA;AAIV;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAA;AAoBzC,MAAM,QAAQ,GAAgD;IAC7D,QAAQ,EAAE,aAAa,CAAC,QAAQ;IAChC,MAAM,EAAE,aAAa,CAAC,MAAM;CAC5B,CAAA;AASD;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACf,UAAU,GAAG,IAAI,GAAG,EAA0B,CAAA;IAEvD,YAAY,OAA+B;QAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;YAE3C,MAAM,KAAK,GAAiB;gBAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC5B,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;aACtB,CAAA;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAE3C,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACnB,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;YACtC,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACH,YAAY,CACX,IAAmB,EACnB,OAAsB,EACtB,QAAuB,EACvB,SAAoC;QAEpC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,OAAO,aAAa,CAAC,IAAI,CAAA;QAEjH,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;QAEzD,IAAI,CAAC,MAAM;YAAE,OAAO,aAAa,CAAC,IAAI,CAAA;QAEtC,MAAM,GAAG,GAAG,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAA;QAEjD,IAAI,CAAC,GAAG;YAAE,OAAO,aAAa,CAAC,IAAI,CAAA;QAEnC,IAAI,IAAI,GAAiB,aAAa,CAAC,IAAI,CAAA;QAE3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,IACC,KAAK,CAAC,KAAK,GAAG,IAAI;gBAClB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBACnB,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI,uBAAuB,EAC3F,CAAC;gBACF,IAAI,GAAG,KAAK,CAAC,KAAK,CAAA;YACnB,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,IAAI,IAAI;QACP,IAAI,CAAC,GAAG,CAAC,CAAA;QAET,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,CAAC,IAAI,MAAM,CAAC,MAAM,CAAA;QACnB,CAAC;QAED,OAAO,CAAC,CAAA;IACT,CAAC;CACD"}
|
|
@@ -3,50 +3,50 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* `buildCoincidentRoles`
|
|
7
|
-
* unified gazetteer.
|
|
6
|
+
* `buildCoincidentRoles` derives the coincident-roles relation into the unified gazetteer.
|
|
8
7
|
*
|
|
9
|
-
* Many places occupy
|
|
10
|
-
*
|
|
11
|
-
* provinces-after-capitals, UK unitary authorities, JP prefectures, NL province-capitals
|
|
12
|
-
*
|
|
13
|
-
* the locality span
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* distance math.
|
|
8
|
+
* Many places occupy multiple admin tiers under one name: German city-states (Berlin, Hamburg,
|
|
9
|
+
* Bremen), Italian provinces whose names match their capital (Milano, Varese), Spanish
|
|
10
|
+
* provinces-after-capitals, UK unitary authorities, JP prefectures, NL province-capitals (Utrecht,
|
|
11
|
+
* Groningen), and Shanghai. When an address surfaces only the admin role because the parser
|
|
12
|
+
* dropped the locality span, the resolver has no locality to place. The hierarchy-completion step
|
|
13
|
+
* consults this relation. The table preserves the gazetteer's own structure, so the runtime is an
|
|
14
|
+
* O(1) membership lookup with no distance math.
|
|
17
15
|
*
|
|
18
|
-
* V1 is
|
|
19
|
-
* countries
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* filter.
|
|
16
|
+
* V1 is region-tier only (admin.placetype = `region`), the ~124 places matching the census across
|
|
17
|
+
* nine countries. County-tier same-name coincidences are excluded because they are dominated by
|
|
18
|
+
* French cantons and JP counties, admin subdivisions whose names match a seat town that do not hit the
|
|
19
|
+
* parser-drops-locality failure. Consolidated city-counties (US SF, Denver) are a separate
|
|
20
|
+
* follow-up needing a relative-size filter.
|
|
24
21
|
*
|
|
25
|
-
* A pair `(admin, locality)` is recorded when
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
22
|
+
* A pair `(admin, locality)` is recorded when the names match case-insensitively, the locality descends from the admin in `ancestors`,
|
|
23
|
+
* and their centroids fall within a
|
|
24
|
+
* relative tolerance of `toleranceFraction × admin-bbox-diagonal`, floored at `minToleranceKm`.
|
|
25
|
+
* The relative term lets a large Italian province admit a city tens of km from its centroid while
|
|
26
|
+
* a tiny city-state stays tight. The floor catches city-states whose bbox is small (Bremen's
|
|
27
|
+
* centroids sit 9.3 km apart). The tolerance lives only here at build time and never enters the
|
|
28
|
+
* resolver hot path.
|
|
32
29
|
*
|
|
33
|
-
* `relationship_type` is recorded for debuggability
|
|
34
|
-
* uniform
|
|
30
|
+
* `relationship_type` is recorded for debuggability and deferred per-type behavior. V1 completion
|
|
31
|
+
* is uniform. It is a coarse classification.
|
|
35
32
|
*
|
|
36
|
-
*
|
|
37
|
-
* against an existing `admin-global-priority.db` via
|
|
38
|
-
* be wired as a post-step of the main
|
|
33
|
+
* This mirrors the derived-table builder pattern in `fts.ts` (`buildPlaceSearchFTS`). It runs
|
|
34
|
+
* incrementally against an existing `admin-global-priority.db` via
|
|
35
|
+
* `build-coincident-roles-cli.ts`, and it should also be wired as a post-step of the main
|
|
36
|
+
* `scripts/build-unified-wof.ts`.
|
|
39
37
|
*/
|
|
40
38
|
import type { CoincidentLocality } from "@mailwoman/core/resolver";
|
|
41
39
|
import type { DatabaseClient } from "@mailwoman/sqlite/client";
|
|
42
40
|
import type { WOFDatabase } from "#schema";
|
|
43
41
|
/**
|
|
44
|
-
* Table of places that hold more than one admin role
|
|
45
|
-
*
|
|
42
|
+
* Table of places that hold more than one admin role.
|
|
43
|
+
* A locality that is also its county seat.
|
|
44
|
+
*
|
|
45
|
+
* Written by the gazetteer build, read by the resolver when a coincident locality has to be chosen.
|
|
46
46
|
*/
|
|
47
47
|
export declare const COINCIDENT_ROLES_TABLE = "coincident_roles";
|
|
48
48
|
/**
|
|
49
|
-
* A place that plays multiple admin roles
|
|
49
|
+
* A place that plays multiple admin roles, one row of the relation keyed by `admin_id`.
|
|
50
50
|
*/
|
|
51
51
|
export interface CoincidentRole {
|
|
52
52
|
localityID: number;
|
|
@@ -57,19 +57,27 @@ export interface CoincidentRole {
|
|
|
57
57
|
}
|
|
58
58
|
export interface BuildCoincidentRolesOpts {
|
|
59
59
|
/**
|
|
60
|
-
* Drop + rebuild the table if it already exists.
|
|
60
|
+
* Drop + rebuild the table if it already exists.
|
|
61
|
+
*
|
|
62
|
+
* @defaultValue `true` (the build is cheap + idempotent)
|
|
61
63
|
*/
|
|
62
64
|
drop?: boolean;
|
|
63
65
|
/**
|
|
64
|
-
* Relative tolerance: a pair is kept when centroid distance ≤ `toleranceFraction × bbox-diagonal`.
|
|
66
|
+
* Relative tolerance: a pair is kept when centroid distance ≤ `toleranceFraction × bbox-diagonal`.
|
|
67
|
+
*
|
|
68
|
+
* @defaultValue `0.15`
|
|
65
69
|
*/
|
|
66
70
|
toleranceFraction?: number;
|
|
67
71
|
/**
|
|
68
|
-
* Floor (km) under the relative tolerance, so small-bbox city-states still qualify.
|
|
72
|
+
* Floor (km) under the relative tolerance, so small-bbox city-states still qualify.
|
|
73
|
+
*
|
|
74
|
+
* @defaultValue `12`
|
|
69
75
|
*/
|
|
70
76
|
minToleranceKm?: number;
|
|
71
77
|
/**
|
|
72
|
-
* Centroid distance (km) below which a region-tier pair is classed `city-state` (metadata only).
|
|
78
|
+
* Centroid distance (km) below which a region-tier pair is classed `city-state` (metadata only).
|
|
79
|
+
*
|
|
80
|
+
* @defaultValue `2`
|
|
73
81
|
*/
|
|
74
82
|
cityStateMaxKm?: number;
|
|
75
83
|
onProgress?: (phase: string, detail?: string) => void;
|
|
@@ -81,23 +89,32 @@ export interface BuildCoincidentRolesResult {
|
|
|
81
89
|
durationMs: number;
|
|
82
90
|
}
|
|
83
91
|
/**
|
|
84
|
-
* Derive the coincident-roles relation into `db`.
|
|
85
|
-
*
|
|
92
|
+
* Derive the coincident-roles relation into `db`.
|
|
93
|
+
*
|
|
94
|
+
* Additive, only creating or replacing the `coincident_roles` table.
|
|
95
|
+
* It never touches `spr`, `names`, or `ancestors`.
|
|
96
|
+
* Idempotent.
|
|
86
97
|
*/
|
|
87
98
|
export declare function buildCoincidentRoles(db: DatabaseClient<WOFDatabase>, opts?: BuildCoincidentRolesOpts): BuildCoincidentRolesResult;
|
|
88
99
|
/**
|
|
89
|
-
* True iff the relation table exists.
|
|
100
|
+
* True iff the relation table exists.
|
|
101
|
+
*
|
|
102
|
+
* Used by the resolver to decide whether completion can run.
|
|
90
103
|
*/
|
|
91
104
|
export declare function coincidentRolesExists<DB>(db: DatabaseClient<DB>): boolean;
|
|
92
105
|
/**
|
|
93
|
-
* Load the relation into an in-memory map keyed by `admin_id` for O(1) runtime lookup
|
|
94
|
-
*
|
|
95
|
-
* map
|
|
106
|
+
* Load the relation into an in-memory map keyed by `admin_id` for an O(1) runtime lookup.
|
|
107
|
+
*
|
|
108
|
+
* Each admin may map to multiple same-name descendants.
|
|
109
|
+
* The consumer disambiguates by minimum distance, then population, then abstains.
|
|
110
|
+
* Returns an empty map when the table is absent.
|
|
96
111
|
*/
|
|
97
112
|
export declare function loadCoincidentRoles<DB>(db: DatabaseClient<DB>): Map<number, CoincidentRole[]>;
|
|
98
113
|
/**
|
|
99
|
-
* The relation joined with `spr`, as an in-memory map keyed by `admin_id
|
|
100
|
-
*
|
|
114
|
+
* The relation joined with `spr`, as an in-memory map keyed by `admin_id`.
|
|
115
|
+
*
|
|
116
|
+
* The resolver-facing view of {@link loadCoincidentRoles}, carrying the canonical name
|
|
117
|
+
* and coordinates each coincident locality resolves to.
|
|
101
118
|
* Returns an empty map when the relation table is absent.
|
|
102
119
|
*/
|
|
103
120
|
export declare function loadCoincidentLocalities<DB>(db: DatabaseClient<DB>): Map<number, CoincidentLocality[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coincident-roles.d.ts","sourceRoot":"","sources":["../lib/coincident-roles.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"coincident-roles.d.ts","sourceRoot":"","sources":["../lib/coincident-roles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAGlE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAG9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,qBAAqB,CAAA;AAExD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,YAAY,GAAG,cAAc,GAAG,qBAAqB,CAAA;IACvE,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,wBAAwB;IACxC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,0BAA0B;IAC1C,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,UAAU,EAAE,MAAM,CAAA;CAClB;AAkBD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CACnC,EAAE,EAAE,cAAc,CAAC,WAAW,CAAC,EAC/B,IAAI,GAAE,wBAA6B,GACjC,0BAA0B,CAgG5B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,OAAO,CAEzE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAsC7F;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CA4DtG"}
|
package/out/coincident-roles.js
CHANGED
|
@@ -3,51 +3,54 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* `buildCoincidentRoles`
|
|
7
|
-
* unified gazetteer.
|
|
6
|
+
* `buildCoincidentRoles` derives the coincident-roles relation into the unified gazetteer.
|
|
8
7
|
*
|
|
9
|
-
* Many places occupy
|
|
10
|
-
*
|
|
11
|
-
* provinces-after-capitals, UK unitary authorities, JP prefectures, NL province-capitals
|
|
12
|
-
*
|
|
13
|
-
* the locality span
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* distance math.
|
|
8
|
+
* Many places occupy multiple admin tiers under one name: German city-states (Berlin, Hamburg,
|
|
9
|
+
* Bremen), Italian provinces whose names match their capital (Milano, Varese), Spanish
|
|
10
|
+
* provinces-after-capitals, UK unitary authorities, JP prefectures, NL province-capitals (Utrecht,
|
|
11
|
+
* Groningen), and Shanghai. When an address surfaces only the admin role because the parser
|
|
12
|
+
* dropped the locality span, the resolver has no locality to place. The hierarchy-completion step
|
|
13
|
+
* consults this relation. The table preserves the gazetteer's own structure, so the runtime is an
|
|
14
|
+
* O(1) membership lookup with no distance math.
|
|
17
15
|
*
|
|
18
|
-
* V1 is
|
|
19
|
-
* countries
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* filter.
|
|
16
|
+
* V1 is region-tier only (admin.placetype = `region`), the ~124 places matching the census across
|
|
17
|
+
* nine countries. County-tier same-name coincidences are excluded because they are dominated by
|
|
18
|
+
* French cantons and JP counties, admin subdivisions whose names match a seat town that do not hit the
|
|
19
|
+
* parser-drops-locality failure. Consolidated city-counties (US SF, Denver) are a separate
|
|
20
|
+
* follow-up needing a relative-size filter.
|
|
24
21
|
*
|
|
25
|
-
* A pair `(admin, locality)` is recorded when
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
22
|
+
* A pair `(admin, locality)` is recorded when the names match case-insensitively, the locality descends from the admin in `ancestors`,
|
|
23
|
+
* and their centroids fall within a
|
|
24
|
+
* relative tolerance of `toleranceFraction × admin-bbox-diagonal`, floored at `minToleranceKm`.
|
|
25
|
+
* The relative term lets a large Italian province admit a city tens of km from its centroid while
|
|
26
|
+
* a tiny city-state stays tight. The floor catches city-states whose bbox is small (Bremen's
|
|
27
|
+
* centroids sit 9.3 km apart). The tolerance lives only here at build time and never enters the
|
|
28
|
+
* resolver hot path.
|
|
32
29
|
*
|
|
33
|
-
* `relationship_type` is recorded for debuggability
|
|
34
|
-
* uniform
|
|
30
|
+
* `relationship_type` is recorded for debuggability and deferred per-type behavior. V1 completion
|
|
31
|
+
* is uniform. It is a coarse classification.
|
|
35
32
|
*
|
|
36
|
-
*
|
|
37
|
-
* against an existing `admin-global-priority.db` via
|
|
38
|
-
* be wired as a post-step of the main
|
|
33
|
+
* This mirrors the derived-table builder pattern in `fts.ts` (`buildPlaceSearchFTS`). It runs
|
|
34
|
+
* incrementally against an existing `admin-global-priority.db` via
|
|
35
|
+
* `build-coincident-roles-cli.ts`, and it should also be wired as a post-step of the main
|
|
36
|
+
* `scripts/build-unified-wof.ts`.
|
|
39
37
|
*/
|
|
40
38
|
import { allRows } from "@mailwoman/core/utils";
|
|
41
39
|
import { haversineKm } from "@mailwoman/spatial";
|
|
42
40
|
import { tableExists } from "@mailwoman/sqlite/introspection";
|
|
43
41
|
/**
|
|
44
|
-
* Table of places that hold more than one admin role
|
|
45
|
-
*
|
|
42
|
+
* Table of places that hold more than one admin role.
|
|
43
|
+
* A locality that is also its county seat.
|
|
44
|
+
*
|
|
45
|
+
* Written by the gazetteer build, read by the resolver when a coincident locality has to be chosen.
|
|
46
46
|
*/
|
|
47
47
|
export const COINCIDENT_ROLES_TABLE = "coincident_roles";
|
|
48
48
|
/**
|
|
49
|
-
* Derive the coincident-roles relation into `db`.
|
|
50
|
-
*
|
|
49
|
+
* Derive the coincident-roles relation into `db`.
|
|
50
|
+
*
|
|
51
|
+
* Additive, only creating or replacing the `coincident_roles` table.
|
|
52
|
+
* It never touches `spr`, `names`, or `ancestors`.
|
|
53
|
+
* Idempotent.
|
|
51
54
|
*/
|
|
52
55
|
export function buildCoincidentRoles(db, opts = {}) {
|
|
53
56
|
const start = Date.now();
|
|
@@ -61,10 +64,9 @@ export function buildCoincidentRoles(db, opts = {}) {
|
|
|
61
64
|
db.exec(`DROP TABLE ${COINCIDENT_ROLES_TABLE}`);
|
|
62
65
|
}
|
|
63
66
|
onProgress("creating", COINCIDENT_ROLES_TABLE);
|
|
64
|
-
// Raw DDL by design: this is a sync builder consumed by a sync CLI
|
|
65
|
-
//
|
|
66
|
-
//
|
|
67
|
-
// likewise the raw hot path.)
|
|
67
|
+
// Raw DDL by design: this is a sync builder consumed by a sync CLI and six sync unit tests,
|
|
68
|
+
// so routing one table through async Kysely would cascade async through all of them.
|
|
69
|
+
// See agents.md "Database / inline SQL".
|
|
68
70
|
db.exec(`
|
|
69
71
|
CREATE TABLE IF NOT EXISTS ${COINCIDENT_ROLES_TABLE} (
|
|
70
72
|
admin_id INTEGER NOT NULL,
|
|
@@ -77,9 +79,11 @@ export function buildCoincidentRoles(db, opts = {}) {
|
|
|
77
79
|
)
|
|
78
80
|
`);
|
|
79
81
|
onProgress("scanning");
|
|
80
|
-
// Admin (region
|
|
81
|
-
//
|
|
82
|
-
//
|
|
82
|
+
// Admin (region or county tier) joined to a same-name descendant locality.
|
|
83
|
+
// `place_population` is optional, so the left join yields 0 when absent.
|
|
84
|
+
// JavaScript applies the relative-tolerance filter and classifies the relationship.
|
|
85
|
+
// SQL stays a plain join.
|
|
86
|
+
// `spr` exposes the bbox columns needed for the diagonal.
|
|
83
87
|
const candidates = allRows(db.prepare(`SELECT r.id AS admin_id, r.placetype AS admin_placetype, r.country AS country, l.id AS locality_id,
|
|
84
88
|
r.latitude AS rlat, r.longitude AS rlon, l.latitude AS llat, l.longitude AS llon,
|
|
85
89
|
r.min_latitude, r.min_longitude, r.max_latitude, r.max_longitude,
|
|
@@ -105,11 +109,12 @@ export function buildCoincidentRoles(db, opts = {}) {
|
|
|
105
109
|
const tolerance = Math.max(toleranceFraction * diag, minToleranceKm);
|
|
106
110
|
if (dist > tolerance)
|
|
107
111
|
continue;
|
|
108
|
-
// v1 is region-tier only: a place is
|
|
109
|
-
// region's (Berlin
|
|
110
|
-
// Milano province
|
|
111
|
-
// pass (US SF
|
|
112
|
-
// dominated by French cantons
|
|
112
|
+
// v1 is region-tier only: a place is `city-state` when its centroid coincides with the
|
|
113
|
+
// region's (Berlin, Hamburg), otherwise `capital-seat` (a region whose name matches its
|
|
114
|
+
// principal city, such as Milano province and Milano comune). `consolidated-county` is
|
|
115
|
+
// reserved for a future county-tier pass (US SF, Denver), excluded from v1 because
|
|
116
|
+
// county-tier same-name coincidences are dominated by French cantons and JP counties
|
|
117
|
+
// that do not hit the parser-drops-locality failure.
|
|
113
118
|
const relationshipType = dist <= cityStateMaxKm ? "city-state" : "capital-seat";
|
|
114
119
|
insert.run(c.admin_id, c.locality_id, relationshipType, c.admin_placetype, dist, c.pop);
|
|
115
120
|
rowCount++;
|
|
@@ -126,15 +131,19 @@ export function buildCoincidentRoles(db, opts = {}) {
|
|
|
126
131
|
return { created: true, rowCount, byCountry, durationMs: Date.now() - start };
|
|
127
132
|
}
|
|
128
133
|
/**
|
|
129
|
-
* True iff the relation table exists.
|
|
134
|
+
* True iff the relation table exists.
|
|
135
|
+
*
|
|
136
|
+
* Used by the resolver to decide whether completion can run.
|
|
130
137
|
*/
|
|
131
138
|
export function coincidentRolesExists(db) {
|
|
132
139
|
return tableExists(db, COINCIDENT_ROLES_TABLE);
|
|
133
140
|
}
|
|
134
141
|
/**
|
|
135
|
-
* Load the relation into an in-memory map keyed by `admin_id` for O(1) runtime lookup
|
|
136
|
-
*
|
|
137
|
-
* map
|
|
142
|
+
* Load the relation into an in-memory map keyed by `admin_id` for an O(1) runtime lookup.
|
|
143
|
+
*
|
|
144
|
+
* Each admin may map to multiple same-name descendants.
|
|
145
|
+
* The consumer disambiguates by minimum distance, then population, then abstains.
|
|
146
|
+
* Returns an empty map when the table is absent.
|
|
138
147
|
*/
|
|
139
148
|
export function loadCoincidentRoles(db) {
|
|
140
149
|
const map = new Map();
|
|
@@ -161,8 +170,10 @@ export function loadCoincidentRoles(db) {
|
|
|
161
170
|
return map;
|
|
162
171
|
}
|
|
163
172
|
/**
|
|
164
|
-
* The relation joined with `spr`, as an in-memory map keyed by `admin_id
|
|
165
|
-
*
|
|
173
|
+
* The relation joined with `spr`, as an in-memory map keyed by `admin_id`.
|
|
174
|
+
*
|
|
175
|
+
* The resolver-facing view of {@link loadCoincidentRoles}, carrying the canonical name
|
|
176
|
+
* and coordinates each coincident locality resolves to.
|
|
166
177
|
* Returns an empty map when the relation table is absent.
|
|
167
178
|
*/
|
|
168
179
|
export function loadCoincidentLocalities(db) {
|
|
@@ -185,6 +196,17 @@ export function loadCoincidentLocalities(db) {
|
|
|
185
196
|
relationshipType: r.relationshipType,
|
|
186
197
|
population: r.population,
|
|
187
198
|
distanceKm: r.distanceKm,
|
|
199
|
+
parent_id: null,
|
|
200
|
+
prominence: null,
|
|
201
|
+
referential: null,
|
|
202
|
+
encyclopedic: null,
|
|
203
|
+
importance: null,
|
|
204
|
+
exactMatch: null,
|
|
205
|
+
mismatch: null,
|
|
206
|
+
resolutionQuality: null,
|
|
207
|
+
containedByQualifier: null,
|
|
208
|
+
regionScopeMiss: null,
|
|
209
|
+
variantAliasExempted: null,
|
|
188
210
|
};
|
|
189
211
|
const list = map.get(r.adminID);
|
|
190
212
|
if (list) {
|