@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
|
@@ -3,72 +3,70 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Typed schema for the candidate gazetteer's
|
|
6
|
+
* Typed schema for the candidate gazetteer's ancestors sidecar (`candidate_ancestor` +
|
|
7
7
|
* `candidate_interval`) — the containment lineage the candidate table itself cannot answer, built
|
|
8
8
|
* into the same `candidate.db` by `build-candidate.ts` and read by
|
|
9
9
|
* {@link WOFCandidateTableLookup.ancestors}.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
* parent's placetype, display name and folded key
|
|
13
|
-
* candidate row. Decided by the two consumers:
|
|
11
|
+
* The sidecar stores denormalized closure rows. Each row represents one (place, ancestor) edge. The row includes the
|
|
12
|
+
* parent's placetype, display name and folded key. The two consumers determine this layout:
|
|
14
13
|
*
|
|
15
|
-
* 1. The admin-coherence check needs the
|
|
16
|
-
* A fixed-slot `[id
|
|
17
|
-
*
|
|
18
|
-
* 2. The account layer needs
|
|
14
|
+
* 1. The admin-coherence check needs the winner's chain as (placetype, name) pairs in one probe.
|
|
15
|
+
* A fixed-slot `[id.8]` chain returns ids. Each id would then need a name lookup, but the artifact has no
|
|
16
|
+
* per-id table. That design requires up to 8 indirections. The closure row requires none.
|
|
17
|
+
* 2. The account layer needs every candidate under a `name_key` enumerable with its chain from
|
|
19
18
|
* one artifact probe ("present-but-outranked, discriminated by containment"). That is the
|
|
20
19
|
* candidate probe (contiguous) followed by one `spr_id`-clustered closure probe per candidate
|
|
21
20
|
* — each a handful of adjacent pages.
|
|
22
21
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* 1-2 pages. The repeated parent strings are the price of the zero-join read, paid at build time.
|
|
22
|
+
* The artifact is read over HTTP byte ranges. A join to a dimension table scatters page fetches. A `without rowid`
|
|
23
|
+
* B-tree clustered on `(spr_id, depth)` keeps a whole chain in 1–2 pages. The builder repeats parent strings to
|
|
24
|
+
* avoid joins during reads.
|
|
27
25
|
*
|
|
28
|
-
* `depth` is 1 for the
|
|
29
|
-
* country
|
|
30
|
-
*
|
|
26
|
+
* `depth` is 1 for the nearest ancestor (deepest containment tier) and increases outward to the
|
|
27
|
+
* country. This matches the nearest-first order that `ancestry.ts` serves for the FTS backend. Both backends'
|
|
28
|
+
* `ancestors()` results therefore use the same order. The order within a place is deterministic:
|
|
31
29
|
* containment depth descending (`placetypeDepth`), then ancestor id ascending, capped at
|
|
32
|
-
* {@link MAX_ANCESTOR_DEPTH}. `parent_name_key` is the
|
|
30
|
+
* {@link MAX_ANCESTOR_DEPTH}. `parent_name_key` is the shared {@link normalizeLocalityForKey}
|
|
33
31
|
* fold — the same fold `candidate.name_key` is built with, so a chain entry and a candidate key
|
|
34
32
|
* compare under one normalizer.
|
|
35
33
|
*
|
|
36
|
-
* `candidate_interval`
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* `
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* ABSENCE SEMANTICS (meaning-of-zero): a place with no `candidate_interval` row has no recorded
|
|
34
|
+
* `candidate_interval` stores pre/post-order labels over the canonical-parent forest. The builder assigns them
|
|
35
|
+
* during construction. The predicate `a.pre <= d.pre and d.post <= a.post` tests whether `a` contains `d` in O(1)
|
|
36
|
+
* time. It needs no chain scan or tier information. Descendants of `a` occupy the contiguous range
|
|
37
|
+
* `pre between a.pre and a.post`. Interval labels add relabeling work to updates. This database is sealed and
|
|
38
|
+
* read-only, so the builder can regenerate all labels together.
|
|
39
|
+
*
|
|
40
|
+
* WOF places can have multiple parents because boundaries can be ambiguous or participate in multiple
|
|
41
|
+
* hierarchies. `candidate_ancestor` stores every parent. Its closure rows hold the complete containment record.
|
|
42
|
+
* One interval pair encodes only a tree. The interval forest therefore links each place to one canonical parent:
|
|
43
|
+
* the depth-1 edge with the finest containment tier and lowest ancestor id. This follows the same MIN-based
|
|
44
|
+
* stability convention as the candidate table's `region_id` stamp. A containment query about another hierarchy
|
|
45
|
+
* must consult the closure rows. The interval result answers only whether a place is contained along the canonical
|
|
46
|
+
* hierarchy.
|
|
47
|
+
*
|
|
48
|
+
* absence semantics (meaning-of-zero): a place with no `candidate_interval` row has no recorded
|
|
53
49
|
* ancestry in the source (extract-fed postcodes and localities, isolated places, cycle-skipped
|
|
54
|
-
* rows). Absence is
|
|
50
|
+
* rows). Absence is unverifiable, never a containment verdict.
|
|
55
51
|
*/
|
|
56
52
|
import { type Kysely } from "kysely";
|
|
57
53
|
import type { CandidateDatabase } from "#candidate/schema";
|
|
58
54
|
import type { NameKey } from "#street/normalize";
|
|
59
55
|
/**
|
|
60
|
-
* The deepest chain the sidecar stores per place.
|
|
61
|
-
*
|
|
62
|
-
*
|
|
56
|
+
* The deepest chain the sidecar stores per place.
|
|
57
|
+
*
|
|
58
|
+
* WOF containment within the resolvable placetypes (country … microhood) never legitimately exceeds this.
|
|
59
|
+
* The build drops and counts anything past it as source noise rather than storing it.
|
|
63
60
|
*/
|
|
64
61
|
export declare const MAX_ANCESTOR_DEPTH = 8;
|
|
65
62
|
/**
|
|
66
|
-
* The closure-row table's name — probed with `hasTable` by the reader, so an artifact
|
|
67
|
-
* "no ancestors capability" rather than `no such table`.
|
|
63
|
+
* The closure-row table's name — probed with `hasTable` by the reader, so an artifact
|
|
64
|
+
* predating the sidecar degrades to "no ancestors capability" rather than `no such table`.
|
|
68
65
|
*/
|
|
69
66
|
export declare const CANDIDATE_ANCESTOR_TABLE = "candidate_ancestor";
|
|
70
67
|
/**
|
|
71
|
-
* The interval-label table's name — the closure table's seal-time sibling
|
|
68
|
+
* The interval-label table's name — the closure table's seal-time sibling.
|
|
69
|
+
* Existence-restricted the same way.
|
|
72
70
|
*/
|
|
73
71
|
export declare const CANDIDATE_INTERVAL_TABLE = "candidate_interval";
|
|
74
72
|
/**
|
|
@@ -93,18 +91,23 @@ export interface CandidateAncestorTable {
|
|
|
93
91
|
*/
|
|
94
92
|
parent_placetype_id: number;
|
|
95
93
|
/**
|
|
96
|
-
* The ancestor's canonical display name
|
|
94
|
+
* The ancestor's canonical display name.
|
|
95
|
+
*
|
|
96
|
+
* What {@link Ancestor.name} serves, matching the FTS backend's register.
|
|
97
97
|
*/
|
|
98
98
|
parent_name: string;
|
|
99
99
|
/**
|
|
100
|
-
* The
|
|
101
|
-
* against a query-side fold under one normalizer, by construction.
|
|
100
|
+
* The shared {@link normalizeLocalityForKey} fold of `parent_name` — comparable against
|
|
101
|
+
* `candidate.name_key` and against a query-side fold under one normalizer, by construction.
|
|
102
102
|
*/
|
|
103
103
|
parent_name_key: NameKey;
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
|
-
* Pre/post-order labels over the canonical-parent forest — one row per place
|
|
107
|
-
* docstring for absence semantics).
|
|
106
|
+
* Pre/post-order labels over the canonical-parent forest — one row per place with
|
|
107
|
+
* recorded ancestry (see the module docstring for absence semantics).
|
|
108
|
+
*
|
|
109
|
+
* `pre < post` always.
|
|
110
|
+
* Labels are unique across the artifact.
|
|
108
111
|
*/
|
|
109
112
|
export interface CandidateIntervalTable {
|
|
110
113
|
spr_id: number;
|
|
@@ -112,39 +115,52 @@ export interface CandidateIntervalTable {
|
|
|
112
115
|
post: number;
|
|
113
116
|
}
|
|
114
117
|
/**
|
|
115
|
-
* The sidecar tables, for a `Kysely` view over the candidate DB.
|
|
116
|
-
*
|
|
118
|
+
* The sidecar tables, for a `Kysely` view over the candidate DB.
|
|
119
|
+
*
|
|
120
|
+
* `CandidateDatabase` (candidate-schema.ts) extends this, so the builder's
|
|
121
|
+
* one typed client sees both families.
|
|
117
122
|
*/
|
|
118
123
|
export interface CandidateAncestorsDatabase {
|
|
119
124
|
candidate_ancestor: CandidateAncestorTable;
|
|
120
125
|
candidate_interval: CandidateIntervalTable;
|
|
121
126
|
}
|
|
122
127
|
/**
|
|
123
|
-
* The `candidate_ancestor` columns in clustered-key order
|
|
124
|
-
*
|
|
128
|
+
* The `candidate_ancestor` columns in clustered-key order.
|
|
129
|
+
*
|
|
130
|
+
* The first two columns form the primary key.
|
|
131
|
+
* The builder's positional `insert` binds values in this order.
|
|
132
|
+
*
|
|
133
|
+
* Keep in sync with {@link CandidateAncestorTable}.
|
|
125
134
|
*/
|
|
126
135
|
export declare const CANDIDATE_ANCESTOR_COLUMNS: readonly ["spr_id", "depth", "parent_spr_id", "parent_placetype_id", "parent_name", "parent_name_key"];
|
|
127
136
|
/**
|
|
128
|
-
* Create the clustered closure table.
|
|
129
|
-
*
|
|
137
|
+
* Create the clustered closure table.
|
|
138
|
+
*
|
|
139
|
+
* The builder inserts in `(spr_id, depth)` order so the B-tree leaves are contiguous
|
|
140
|
+
* per place — the byte-range read discipline.
|
|
130
141
|
*/
|
|
131
142
|
export declare function createCandidateAncestorTable(db: Kysely<CandidateDatabase>): Promise<void>;
|
|
132
143
|
/**
|
|
133
|
-
* Create the interval-label table.
|
|
144
|
+
* Create the interval-label table.
|
|
145
|
+
*
|
|
146
|
+
* Small rows probed by primary key — the `without rowid` win case.
|
|
134
147
|
*/
|
|
135
148
|
export declare function createCandidateIntervalTable(db: Kysely<CandidateDatabase>): Promise<void>;
|
|
136
149
|
/**
|
|
137
|
-
* One place's interval label
|
|
150
|
+
* One place's interval label.
|
|
151
|
+
* The shape both sides of a containment comparison read.
|
|
138
152
|
*/
|
|
139
153
|
export interface IntervalLabel {
|
|
140
154
|
pre: number;
|
|
141
155
|
post: number;
|
|
142
156
|
}
|
|
143
157
|
/**
|
|
144
|
-
* Does `outer` contain `inner` along the canonical hierarchy?
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
158
|
+
* Does `outer` contain `inner` along the canonical hierarchy?
|
|
159
|
+
*
|
|
160
|
+
* Reflexive: a place contains itself (containment degenerates to identity,
|
|
161
|
+
* the same reading the admin-coherence check gives a self-match).
|
|
162
|
+
* The shared function for every consumer of the labels — a re-derived comparison risks
|
|
163
|
+
* disagreeing at exactly the strict/inclusive boundary this line settles.
|
|
148
164
|
*/
|
|
149
165
|
export declare function intervalContains(outer: IntervalLabel, inner: IntervalLabel): boolean;
|
|
150
166
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../lib/candidate/ancestors/schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../lib/candidate/ancestors/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EAAO,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAKzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAEnC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,uBAAuB,CAAA;AAE5D;;;GAGG;AACH,eAAO,MAAM,wBAAwB,uBAAuB,CAAA;AAE5D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAA;IAC3B;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACZ;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IAC1C,kBAAkB,EAAE,sBAAsB,CAAA;IAC1C,kBAAkB,EAAE,sBAAsB,CAAA;CAC1C;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,YACtC,QAAQ,EACR,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,iBAAiB,CACR,CAAA;AAEV;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAAC,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/F;AAED;;;;GAIG;AACH,wBAAsB,4BAA4B,CAAC,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/F;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACZ;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAEpF"}
|
|
@@ -3,75 +3,77 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
* Typed schema for the candidate gazetteer's
|
|
6
|
+
* Typed schema for the candidate gazetteer's ancestors sidecar (`candidate_ancestor` +
|
|
7
7
|
* `candidate_interval`) — the containment lineage the candidate table itself cannot answer, built
|
|
8
8
|
* into the same `candidate.db` by `build-candidate.ts` and read by
|
|
9
9
|
* {@link WOFCandidateTableLookup.ancestors}.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
* parent's placetype, display name and folded key
|
|
13
|
-
* candidate row. Decided by the two consumers:
|
|
11
|
+
* The sidecar stores denormalized closure rows. Each row represents one (place, ancestor) edge. The row includes the
|
|
12
|
+
* parent's placetype, display name and folded key. The two consumers determine this layout:
|
|
14
13
|
*
|
|
15
|
-
* 1. The admin-coherence check needs the
|
|
16
|
-
* A fixed-slot `[id
|
|
17
|
-
*
|
|
18
|
-
* 2. The account layer needs
|
|
14
|
+
* 1. The admin-coherence check needs the winner's chain as (placetype, name) pairs in one probe.
|
|
15
|
+
* A fixed-slot `[id.8]` chain returns ids. Each id would then need a name lookup, but the artifact has no
|
|
16
|
+
* per-id table. That design requires up to 8 indirections. The closure row requires none.
|
|
17
|
+
* 2. The account layer needs every candidate under a `name_key` enumerable with its chain from
|
|
19
18
|
* one artifact probe ("present-but-outranked, discriminated by containment"). That is the
|
|
20
19
|
* candidate probe (contiguous) followed by one `spr_id`-clustered closure probe per candidate
|
|
21
20
|
* — each a handful of adjacent pages.
|
|
22
21
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* 1-2 pages. The repeated parent strings are the price of the zero-join read, paid at build time.
|
|
22
|
+
* The artifact is read over HTTP byte ranges. A join to a dimension table scatters page fetches. A `without rowid`
|
|
23
|
+
* B-tree clustered on `(spr_id, depth)` keeps a whole chain in 1–2 pages. The builder repeats parent strings to
|
|
24
|
+
* avoid joins during reads.
|
|
27
25
|
*
|
|
28
|
-
* `depth` is 1 for the
|
|
29
|
-
* country
|
|
30
|
-
*
|
|
26
|
+
* `depth` is 1 for the nearest ancestor (deepest containment tier) and increases outward to the
|
|
27
|
+
* country. This matches the nearest-first order that `ancestry.ts` serves for the FTS backend. Both backends'
|
|
28
|
+
* `ancestors()` results therefore use the same order. The order within a place is deterministic:
|
|
31
29
|
* containment depth descending (`placetypeDepth`), then ancestor id ascending, capped at
|
|
32
|
-
* {@link MAX_ANCESTOR_DEPTH}. `parent_name_key` is the
|
|
30
|
+
* {@link MAX_ANCESTOR_DEPTH}. `parent_name_key` is the shared {@link normalizeLocalityForKey}
|
|
33
31
|
* fold — the same fold `candidate.name_key` is built with, so a chain entry and a candidate key
|
|
34
32
|
* compare under one normalizer.
|
|
35
33
|
*
|
|
36
|
-
* `candidate_interval`
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* `
|
|
40
|
-
*
|
|
41
|
-
* whole, which is exactly the regime where that cost is void.
|
|
34
|
+
* `candidate_interval` stores pre/post-order labels over the canonical-parent forest. The builder assigns them
|
|
35
|
+
* during construction. The predicate `a.pre <= d.pre and d.post <= a.post` tests whether `a` contains `d` in O(1)
|
|
36
|
+
* time. It needs no chain scan or tier information. Descendants of `a` occupy the contiguous range
|
|
37
|
+
* `pre between a.pre and a.post`. Interval labels add relabeling work to updates. This database is sealed and
|
|
38
|
+
* read-only, so the builder can regenerate all labels together.
|
|
42
39
|
*
|
|
43
|
-
*
|
|
44
|
-
* hierarchies
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* "contained along the canonical hierarchy", never "not contained at all".
|
|
40
|
+
* WOF places can have multiple parents because boundaries can be ambiguous or participate in multiple
|
|
41
|
+
* hierarchies. `candidate_ancestor` stores every parent. Its closure rows hold the complete containment record.
|
|
42
|
+
* One interval pair encodes only a tree. The interval forest therefore links each place to one canonical parent:
|
|
43
|
+
* the depth-1 edge with the finest containment tier and lowest ancestor id. This follows the same MIN-based
|
|
44
|
+
* stability convention as the candidate table's `region_id` stamp. A containment query about another hierarchy
|
|
45
|
+
* must consult the closure rows. The interval result answers only whether a place is contained along the canonical
|
|
46
|
+
* hierarchy.
|
|
51
47
|
*
|
|
52
|
-
*
|
|
48
|
+
* absence semantics (meaning-of-zero): a place with no `candidate_interval` row has no recorded
|
|
53
49
|
* ancestry in the source (extract-fed postcodes and localities, isolated places, cycle-skipped
|
|
54
|
-
* rows). Absence is
|
|
50
|
+
* rows). Absence is unverifiable, never a containment verdict.
|
|
55
51
|
*/
|
|
56
52
|
import { sql } from "kysely";
|
|
57
53
|
/**
|
|
58
|
-
* The deepest chain the sidecar stores per place.
|
|
59
|
-
*
|
|
60
|
-
*
|
|
54
|
+
* The deepest chain the sidecar stores per place.
|
|
55
|
+
*
|
|
56
|
+
* WOF containment within the resolvable placetypes (country … microhood) never legitimately exceeds this.
|
|
57
|
+
* The build drops and counts anything past it as source noise rather than storing it.
|
|
61
58
|
*/
|
|
62
59
|
export const MAX_ANCESTOR_DEPTH = 8;
|
|
63
60
|
/**
|
|
64
|
-
* The closure-row table's name — probed with `hasTable` by the reader, so an artifact
|
|
65
|
-
* "no ancestors capability" rather than `no such table`.
|
|
61
|
+
* The closure-row table's name — probed with `hasTable` by the reader, so an artifact
|
|
62
|
+
* predating the sidecar degrades to "no ancestors capability" rather than `no such table`.
|
|
66
63
|
*/
|
|
67
64
|
export const CANDIDATE_ANCESTOR_TABLE = "candidate_ancestor";
|
|
68
65
|
/**
|
|
69
|
-
* The interval-label table's name — the closure table's seal-time sibling
|
|
66
|
+
* The interval-label table's name — the closure table's seal-time sibling.
|
|
67
|
+
* Existence-restricted the same way.
|
|
70
68
|
*/
|
|
71
69
|
export const CANDIDATE_INTERVAL_TABLE = "candidate_interval";
|
|
72
70
|
/**
|
|
73
|
-
* The `candidate_ancestor` columns in clustered-key order
|
|
74
|
-
*
|
|
71
|
+
* The `candidate_ancestor` columns in clustered-key order.
|
|
72
|
+
*
|
|
73
|
+
* The first two columns form the primary key.
|
|
74
|
+
* The builder's positional `insert` binds values in this order.
|
|
75
|
+
*
|
|
76
|
+
* Keep in sync with {@link CandidateAncestorTable}.
|
|
75
77
|
*/
|
|
76
78
|
export const CANDIDATE_ANCESTOR_COLUMNS = [
|
|
77
79
|
"spr_id",
|
|
@@ -82,8 +84,10 @@ export const CANDIDATE_ANCESTOR_COLUMNS = [
|
|
|
82
84
|
"parent_name_key",
|
|
83
85
|
];
|
|
84
86
|
/**
|
|
85
|
-
* Create the clustered closure table.
|
|
86
|
-
*
|
|
87
|
+
* Create the clustered closure table.
|
|
88
|
+
*
|
|
89
|
+
* The builder inserts in `(spr_id, depth)` order so the B-tree leaves are contiguous
|
|
90
|
+
* per place — the byte-range read discipline.
|
|
87
91
|
*/
|
|
88
92
|
export async function createCandidateAncestorTable(db) {
|
|
89
93
|
await db.schema
|
|
@@ -95,12 +99,14 @@ export async function createCandidateAncestorTable(db) {
|
|
|
95
99
|
.addColumn("parent_name", "text", (c) => c.notNull())
|
|
96
100
|
.addColumn("parent_name_key", "text", (c) => c.notNull())
|
|
97
101
|
.addPrimaryKeyConstraint("candidate_ancestor_pk", ["spr_id", "depth"])
|
|
98
|
-
// `
|
|
102
|
+
// `without rowid` has no first-class builder. The raw modifier is the idiomatic fallback.
|
|
99
103
|
.modifyEnd(sql `without rowid`)
|
|
100
104
|
.execute();
|
|
101
105
|
}
|
|
102
106
|
/**
|
|
103
|
-
* Create the interval-label table.
|
|
107
|
+
* Create the interval-label table.
|
|
108
|
+
*
|
|
109
|
+
* Small rows probed by primary key — the `without rowid` win case.
|
|
104
110
|
*/
|
|
105
111
|
export async function createCandidateIntervalTable(db) {
|
|
106
112
|
await db.schema
|
|
@@ -112,10 +118,12 @@ export async function createCandidateIntervalTable(db) {
|
|
|
112
118
|
.execute();
|
|
113
119
|
}
|
|
114
120
|
/**
|
|
115
|
-
* Does `outer` contain `inner` along the canonical hierarchy?
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
121
|
+
* Does `outer` contain `inner` along the canonical hierarchy?
|
|
122
|
+
*
|
|
123
|
+
* Reflexive: a place contains itself (containment degenerates to identity,
|
|
124
|
+
* the same reading the admin-coherence check gives a self-match).
|
|
125
|
+
* The shared function for every consumer of the labels — a re-derived comparison risks
|
|
126
|
+
* disagreeing at exactly the strict/inclusive boundary this line settles.
|
|
119
127
|
*/
|
|
120
128
|
export function intervalContains(outer, inner) {
|
|
121
129
|
return outer.pre <= inner.pre && inner.post <= outer.post;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../lib/candidate/ancestors/schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../lib/candidate/ancestors/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,EAAE,GAAG,EAAe,MAAM,QAAQ,CAAA;AAQzC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAA;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAA;AAE5D;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAA;AA4D5D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACzC,QAAQ;IACR,OAAO;IACP,eAAe;IACf,qBAAqB;IACrB,aAAa;IACb,iBAAiB;CACR,CAAA;AAEV;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,EAA6B;IAC/E,MAAM,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,wBAAwB,CAAC;SACrC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAClD,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACjD,SAAS,CAAC,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACzD,SAAS,CAAC,qBAAqB,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/D,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACpD,SAAS,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACxD,uBAAuB,CAAC,uBAAuB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtE,0FAA0F;SACzF,SAAS,CAAC,GAAG,CAAA,eAAe,CAAC;SAC7B,OAAO,EAAE,CAAA;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,EAA6B;IAC/E,MAAM,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,wBAAwB,CAAC;SACrC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;SACrD,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC/C,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAChD,SAAS,CAAC,GAAG,CAAA,eAAe,CAAC;SAC7B,OAAO,EAAE,CAAA;AACZ,CAAC;AAWD;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAoB,EAAE,KAAoB;IAC1E,OAAO,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAA;AAC1D,CAAC"}
|
|
@@ -9,14 +9,9 @@ import type { PlaceAttrs } from "#candidate/place-attrs";
|
|
|
9
9
|
import type { CandidateDatabase } from "#candidate/schema";
|
|
10
10
|
import type { WOFDatabase } from "#schema";
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* depth)` insert is sorted — the contiguous-leaves discipline of the candidate table itself.
|
|
16
|
-
*
|
|
17
|
-
* Excluded by policy: self rows, and placetypes outside the containment ladder (continent, empire, …: `placetypeDepth` 0)
|
|
18
|
-
* — they discriminate nothing a consumer of this sidecar checks. An edge to a parent with no current `spr` row has no
|
|
19
|
-
* name to denormalize; it is dropped and counted rather than stored blind.
|
|
12
|
+
* Build the ancestors sidecar (closure rows plus interval labels) from the source
|
|
13
|
+
* `ancestors` table, excluding self rows and placetypes outside the containment ladder.
|
|
14
|
+
* an edge to a parent with no current `spr` row is dropped and counted.
|
|
20
15
|
*/
|
|
21
16
|
export declare function buildAncestorsSidecar(ctx: {
|
|
22
17
|
src: DatabaseClient<WOFDatabase>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../../../lib/candidate/ancestors/sidecar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAW9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C
|
|
1
|
+
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../../../lib/candidate/ancestors/sidecar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAW9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE;IAChD,GAAG,EAAE,cAAc,CAAC,WAAW,CAAC,CAAA;IAChC,GAAG,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAA;IACtC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC9B,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAA;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAClD,GAAG,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAmKpF"}
|
|
@@ -4,17 +4,12 @@
|
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
* @file Pass 3b of the candidate build — the containment sidecar (closure rows + interval labels).
|
|
6
6
|
*/
|
|
7
|
-
import { placetypeDepth } from "#ancestry
|
|
7
|
+
import { placetypeDepth } from "#ancestry";
|
|
8
8
|
import { CANDIDATE_ANCESTOR_COLUMNS, CANDIDATE_ANCESTOR_TABLE, CANDIDATE_INTERVAL_TABLE, createCandidateAncestorTable, createCandidateIntervalTable, MAX_ANCESTOR_DEPTH, } from "#candidate/ancestors/schema";
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* depth)` insert is sorted — the contiguous-leaves discipline of the candidate table itself.
|
|
14
|
-
*
|
|
15
|
-
* Excluded by policy: self rows, and placetypes outside the containment ladder (continent, empire, …: `placetypeDepth` 0)
|
|
16
|
-
* — they discriminate nothing a consumer of this sidecar checks. An edge to a parent with no current `spr` row has no
|
|
17
|
-
* name to denormalize; it is dropped and counted rather than stored blind.
|
|
10
|
+
* Build the ancestors sidecar (closure rows plus interval labels) from the source
|
|
11
|
+
* `ancestors` table, excluding self rows and placetypes outside the containment ladder.
|
|
12
|
+
* an edge to a parent with no current `spr` row is dropped and counted.
|
|
18
13
|
*/
|
|
19
14
|
export async function buildAncestorsSidecar(ctx) {
|
|
20
15
|
const { src, out, attrs, ptID, progress } = ctx;
|
|
@@ -22,23 +17,22 @@ export async function buildAncestorsSidecar(ctx) {
|
|
|
22
17
|
await createCandidateAncestorTable(ctx.out);
|
|
23
18
|
await createCandidateIntervalTable(ctx.out);
|
|
24
19
|
const insAncestor = out.prepare(`INSERT INTO ${CANDIDATE_ANCESTOR_TABLE} VALUES (${CANDIDATE_ANCESTOR_COLUMNS.map(() => "?").join(", ")})`);
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
// convention). ALL parents stay in the closure rows; only the interval tree canonicalizes.
|
|
20
|
+
// One parent per place (the finest containment tier, lowest ancestor id) canonicalizes the interval tree.
|
|
21
|
+
// All parents stay in the closure rows.
|
|
28
22
|
const canonicalParentOf = new Map();
|
|
29
23
|
const childrenOf = new Map();
|
|
30
24
|
const forest = new Set();
|
|
31
25
|
let ancestorRows = 0;
|
|
32
26
|
let ancestorPlaces = 0;
|
|
33
27
|
let droppedParents = 0;
|
|
34
|
-
//
|
|
28
|
+
// The stream is grouped by child id, so each flush owns one place.
|
|
35
29
|
let childID = -1;
|
|
36
30
|
let edges = [];
|
|
37
31
|
const flush = () => {
|
|
38
32
|
if (childID < 0 || !edges.length)
|
|
39
33
|
return;
|
|
40
|
-
// Deterministic nearest-first: containment depth descending, then ancestor id ascending
|
|
41
|
-
// the FTS backend's `ancestorLineage` ordering
|
|
34
|
+
// Deterministic nearest-first: containment depth descending, then ancestor id ascending,
|
|
35
|
+
// matching the FTS backend's `ancestorLineage` ordering across rebuilds.
|
|
42
36
|
edges.sort((a, b) => placetypeDepth(b.apt) - placetypeDepth(a.apt) || a.aid - b.aid);
|
|
43
37
|
if (edges.length > MAX_ANCESTOR_DEPTH) {
|
|
44
38
|
edges = edges.slice(0, MAX_ANCESTOR_DEPTH);
|
|
@@ -85,8 +79,8 @@ export async function buildAncestorsSidecar(ctx) {
|
|
|
85
79
|
}
|
|
86
80
|
flush();
|
|
87
81
|
out.exec("COMMIT");
|
|
88
|
-
// Interval labels
|
|
89
|
-
// order
|
|
82
|
+
// Interval labels are a pre/post-order DFS over the canonical-parent forest, with root
|
|
83
|
+
// and child order id-ascending so labels stay stable across rebuilds.
|
|
90
84
|
const preOf = new Map();
|
|
91
85
|
const postOf = new Map();
|
|
92
86
|
for (const kids of childrenOf.values()) {
|
|
@@ -105,8 +99,8 @@ export async function buildAncestorsSidecar(ctx) {
|
|
|
105
99
|
const kids = childrenOf.get(top.id);
|
|
106
100
|
if (kids && top.next < kids.length) {
|
|
107
101
|
const kid = kids[top.next++];
|
|
108
|
-
// Each child holds exactly one canonical parent, so a labeled node
|
|
109
|
-
//
|
|
102
|
+
// Each child holds exactly one canonical parent, so a labeled node means upstream grouping broke.
|
|
103
|
+
// Skip rather than corrupt the numbering.
|
|
110
104
|
if (preOf.has(kid))
|
|
111
105
|
continue;
|
|
112
106
|
preOf.set(kid, counter++);
|
|
@@ -118,9 +112,8 @@ export async function buildAncestorsSidecar(ctx) {
|
|
|
118
112
|
}
|
|
119
113
|
}
|
|
120
114
|
}
|
|
121
|
-
// A canonical-parent
|
|
122
|
-
//
|
|
123
|
-
// absence semantics the schema module states. Counted so a jump is visible across rebuilds.
|
|
115
|
+
// A canonical-parent cycle leaves its members unreachable from any root,
|
|
116
|
+
// so they receive no label and containment against them reads unverifiable.
|
|
124
117
|
const cycleSkipped = forest.size - preOf.size;
|
|
125
118
|
const insInterval = out.prepare(`INSERT INTO ${CANDIDATE_INTERVAL_TABLE} VALUES (?, ?, ?)`);
|
|
126
119
|
const labeled = [...preOf.keys()];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../../lib/candidate/ancestors/sidecar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../../lib/candidate/ancestors/sidecar.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EACN,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,4BAA4B,EAC5B,kBAAkB,GAClB,MAAM,6BAA6B,CAAA;AAKpC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAM3C;IACA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAA;IAE/C,QAAQ,CAAC,WAAW,EAAE,+DAA+D,CAAC,CAAA;IACtF,MAAM,4BAA4B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3C,MAAM,4BAA4B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAE3C,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAC9B,eAAe,wBAAwB,YAAY,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC1G,CAAA;IAED,0GAA0G;IAC1G,wCAAwC;IACxC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAA;IACnD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAA;IAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;IAEhC,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,IAAI,cAAc,GAAG,CAAC,CAAA;IACtB,IAAI,cAAc,GAAG,CAAC,CAAA;IAEtB,mEAAmE;IACnE,IAAI,OAAO,GAAG,CAAC,CAAC,CAAA;IAChB,IAAI,KAAK,GAAwC,EAAE,CAAA;IAEnD,MAAM,KAAK,GAAG,GAAS,EAAE;QACxB,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAM;QAExC,yFAAyF;QACzF,yEAAyE;QACzE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QAEpF,IAAI,KAAK,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YACvC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAA;QAC3C,CAAC;QAED,cAAc,EAAE,CAAA;QAEhB,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,CAAA;YAEnC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YAEnF,YAAY,EAAE,CAAA;QACf,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,CAAA;QAE/B,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAEzC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAE1C,IAAI,QAAQ,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvB,CAAC;aAAM,CAAC;YACP,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;QACrC,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACnB,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEjB,KAAK,MAAM,CAAC,IAAI,GAAG;SACjB,OAAO,CAAC,+FAA+F,CAAC;SACxG,OAAO,EAAE,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAEvB,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YACpB,KAAK,EAAE,CAAA;YACP,OAAO,GAAG,EAAE,CAAA;YACZ,KAAK,GAAG,EAAE,CAAA;QACX,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,SAAQ;QAE5B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAA;QAE9C,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAQ;QAEvC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;QAEjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,cAAc,EAAE,CAAA;YAEhB,SAAQ;QACT,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;IACzB,CAAC;IAED,KAAK,EAAE,CAAA;IACP,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAElB,uFAAuF;IACvF,sEAAsE;IACtE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IAExC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,wFAAwF;QACxF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IAEpE,wFAAwF;IACxF,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAE3B,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAC1B,MAAM,KAAK,GAAwC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;QAE1E,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAA;YACzB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEnC,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAE,CAAA;gBAE7B,kGAAkG;gBAClG,0CAA0C;gBAC1C,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAQ;gBAE5B,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;gBACzB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAA;YACjC,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;gBAC7B,KAAK,CAAC,GAAG,EAAE,CAAA;YACZ,CAAC;QACF,CAAC;IACF,CAAC;IAED,yEAAyE;IACzE,4EAA4E;IAC5E,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;IAE7C,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,wBAAwB,mBAAmB,CAAC,CAAA;IAC3F,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAEjC,wFAAwF;IACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAE7B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEjB,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;QAC1B,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAA;IACrD,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAElB,QAAQ,CACP,WAAW,EACX,GAAG,YAAY,CAAC,cAAc,EAAE,wBAAwB,cAAc,CAAC,cAAc,EAAE,WAAW;QACjG,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,kBAAkB;QAChD,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,cAAc,EAAE,gDAAgD,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5G,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,cAAc,EAAE,0CAA0C,CAAC,CAAC,CAAC,EAAE,CAAC,CACnG,CAAA;IAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;AACpE,CAAC"}
|
|
@@ -2,26 +2,16 @@
|
|
|
2
2
|
* @copyright Sister Software
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
|
-
* @file Pass 1b of the candidate build — fold ICU's country display names onto the country rows.
|
|
6
5
|
*/
|
|
7
6
|
import type { PlaceAttrs, StageRow } from "#candidate/place-attrs";
|
|
8
7
|
/**
|
|
9
|
-
*
|
|
8
|
+
* Stages each country name that `Intl.DisplayNames` renders in the codex display-name
|
|
9
|
+
* locales as a non-primary key on that country's candidate row.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* 237 country rows are synthetic and carry a canonical English name and nothing else; WOF holds no Chinese country
|
|
14
|
-
* names at all; and the GeoNames alias fold filters through a Latin-script regex, so neither existing source could ever
|
|
15
|
-
* supply them.
|
|
11
|
+
* The row's display name is unchanged, so a query such as `格鲁吉亚` resolves to the existing Georgia row.
|
|
12
|
+
* When several country rows share an ISO code, the most populous one receives the keys.
|
|
16
13
|
*
|
|
17
|
-
*
|
|
18
|
-
* every other locale-sensitive operation. No download, no vendored corpus, no snapshot to drift.
|
|
19
|
-
*
|
|
20
|
-
* `is_primary = 0`: these are NAMES THE WORLD USES, not the country's canonical name. The display `name` stays whatever
|
|
21
|
-
* the gazetteer already had, so resolving `格鲁吉亚` answers with the Georgia country row rather than renaming it.
|
|
22
|
-
*
|
|
23
|
-
* Returns the row count so the caller can report it — a zero means ICU supplied nothing, which is a different fact from
|
|
24
|
-
* the pass not having run.
|
|
14
|
+
* @returns The number of rows staged.
|
|
25
15
|
*/
|
|
26
16
|
export declare function stageCountryDisplayNames(ctx: {
|
|
27
17
|
attrs: Map<number, PlaceAttrs>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"country-display-names.d.ts","sourceRoot":"","sources":["../../lib/candidate/country-display-names.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"country-display-names.d.ts","sourceRoot":"","sources":["../../lib/candidate/country-display-names.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGlE;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE;IAC7C,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC9B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,EAAE,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAC/B,GAAG,MAAM,CAsCT"}
|