@mailwoman/corpus 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 +120 -34
- package/data/PROVENANCE.md +623 -17
- package/data/address-source-register.json +14249 -0
- package/data/builds/v0.7.0-de-holdout/inputs.json +22 -0
- package/data/builds/v0.8.0-registers/inputs.json +92 -0
- package/data/license-decisions.json +1603 -0
- package/data/licenses/PROVENANCE.md +65 -0
- package/data/licenses/cdla-permissive-2.0.md +43 -0
- package/data/licenses/geonames-publication.md +34 -0
- package/data/licenses/licence-ouverte-2.0.md +36 -0
- package/data/licenses/national-address-database.md +46 -0
- package/data/licenses/nlod-2.0.md +90 -0
- package/data/licenses/sirene-publication.md +38 -0
- package/data/licenses/whosonfirst-licenses.md +65 -0
- package/data/source-resolutions.json +804 -0
- package/data/sub-venue-lexicon.json +1 -1
- package/data/training-manifests/v0.7.0-de-holdout.effective.json +477 -0
- package/data/training-manifests/v0.7.0-de-holdout.json +78 -0
- package/lib/adapters/cordis/adapter.ts +791 -0
- package/lib/adapters/dedup-key.ts +40 -0
- package/lib/adapters/errors.ts +21 -0
- package/lib/adapters/geonames/adapter.ts +43 -53
- package/lib/adapters/geonames/postal/adapter.ts +31 -37
- package/lib/adapters/gleif/adapter.ts +829 -0
- package/lib/adapters/libpostal-dictionary.ts +37 -0
- package/lib/adapters/openaddresses/adapter.ts +52 -55
- package/lib/adapters/osm/adapter.ts +162 -83
- package/lib/adapters/overture/adapter.ts +52 -43
- package/lib/adapters/po-box/adapter.ts +207 -0
- package/lib/adapters/registry.ts +79 -0
- package/lib/adapters/sha256-stream.ts +49 -0
- package/lib/adapters/source-id.ts +49 -0
- package/lib/adapters/street-line.ts +136 -0
- package/lib/adapters/wof/admin/json/adapter.ts +50 -35
- package/lib/adapters/wof/json-rows.ts +57 -26
- package/lib/adapters/wof/postalcode-json/adapter.ts +63 -61
- package/lib/adapters.ts +230 -0
- package/lib/au/adapters/gnaf/adapter.ts +36 -44
- package/lib/au/adapters/gnaf/assemble.ts +31 -51
- package/lib/be/adapters/brussels/adapter.ts +566 -0
- package/lib/be/adapters/vlaanderen/adapter.ts +667 -0
- package/lib/be/adapters/wallonie/adapter.ts +537 -0
- package/lib/be/tools/fetch/brussels.ts +242 -0
- package/lib/be/tools/fetch/wallonie.ts +275 -0
- package/lib/build/adapters.ts +111 -0
- package/lib/build/align.ts +365 -0
- package/lib/build/checkpoint.ts +133 -0
- package/lib/build/eligibility.ts +96 -0
- package/lib/build/heap.ts +53 -0
- package/lib/build/inputs.ts +81 -0
- package/lib/build/rows.ts +21 -0
- package/lib/build/types.ts +234 -0
- package/lib/build.ts +127 -315
- package/lib/cn/recipes/organizational-units.ts +20 -41
- package/lib/cz/adapters/cuzk/adapter.ts +320 -0
- package/lib/cz/recipes/pcfirst-preposition.ts +40 -27
- package/lib/cz/tools/fetch/cuzk.ts +710 -0
- package/lib/de/recipes/locale.ts +69 -59
- package/lib/directory.ts +31 -0
- package/lib/dk/adapters/inspire/adapter.ts +345 -0
- package/lib/dk/tools/fetch/inspire.ts +323 -0
- package/lib/ee/adapters/ads/adapter.ts +240 -0
- package/lib/ee/tools/fetch/ads.ts +272 -0
- package/lib/env.ts +6 -2
- package/lib/es/adapters/bizkaia/adapter.ts +388 -0
- package/lib/es/adapters/catastro/adapter.ts +345 -0
- package/lib/es/adapters/gipuzkoa/adapter.ts +256 -0
- package/lib/es/adapters/navarra/adapter.ts +290 -0
- package/lib/es/cadastre.ts +194 -0
- package/lib/es/tools/fetch/bizkaia.ts +752 -0
- package/lib/es/tools/fetch/catastro.ts +765 -0
- package/lib/es/tools/fetch/gipuzkoa.ts +338 -0
- package/lib/es/tools/fetch/navarra.ts +496 -0
- package/lib/fi/adapters/ryhti/adapter.ts +319 -0
- package/lib/fi/tools/fetch/ryhti.ts +476 -0
- package/lib/fingerprints.ts +154 -0
- package/lib/fr/adapters/annuaire-education/adapter.ts +600 -0
- package/lib/fr/adapters/ban/adapter.ts +87 -59
- package/lib/fr/adapters/finess/adapter.ts +619 -0
- package/lib/fr/adapters/finess/postal-lines.ts +157 -0
- package/lib/fr/adapters/finess/voie-type.ts +201 -0
- package/lib/fr/insee-country.ts +62 -0
- package/lib/fr/recipes/admin-split.ts +38 -60
- package/lib/fr/recipes/bare-street.ts +37 -50
- package/lib/fr/recipes/fragment.ts +59 -142
- package/lib/fr/recipes/lieudit.ts +111 -73
- package/lib/fr/recipes/order.ts +32 -59
- package/lib/fr/{adapters/ban/street-decompose.ts → street-decompose.ts} +4 -3
- package/lib/fr/tools/fetch/annuaire-education.ts +309 -0
- package/lib/fr/tools/fetch/ban.ts +30 -20
- package/lib/fr/tools/fetch/finess.ts +353 -0
- package/lib/gauntlet-inputs.ts +92 -0
- package/lib/index.ts +9 -3
- package/lib/inspire/address.ts +465 -0
- package/lib/inspire/archive.ts +44 -0
- package/lib/inspire/errors.ts +72 -0
- package/lib/inspire/stream.ts +265 -0
- package/lib/international/recipes/locale.ts +146 -184
- package/lib/it/adapters/anac/adapter.ts +527 -0
- package/lib/it/tools/fetch/anac.ts +391 -0
- package/lib/jp/adapters/wof-admin/adapter.ts +29 -23
- package/lib/jp/tools/fetch/houjin.ts +19 -21
- package/lib/kr/adapters/juso/label-rows.ts +24 -44
- package/lib/kr/adapters/localdata/align.ts +20 -31
- package/lib/kr/adapters/localdata/key-index.ts +17 -25
- package/lib/kr/adapters/localdata/permit-rows.ts +34 -27
- package/lib/kr/tools/fetch/juso.ts +19 -21
- package/lib/kr/tools/fetch/localdata.ts +29 -30
- package/lib/lu/adapters/bd-adresses/adapter.ts +240 -0
- package/lib/lu/tools/fetch/bd-adresses.ts +353 -0
- package/lib/lv/adapters/varis/adapter.ts +500 -0
- package/lib/lv/tools/fetch/varis.ts +215 -0
- package/lib/nl/adapters/kadaster/adapter.ts +386 -0
- package/lib/nl/recipes/postcode.ts +46 -24
- package/lib/nl/tools/fetch/kadaster.ts +302 -0
- package/lib/no/adapters/matrikkelen/adapter.ts +188 -0
- package/lib/no/recipes/fragment.ts +34 -58
- package/lib/no/recipes/street/led.ts +44 -25
- package/lib/no/recipes/{street/index.ts → street.ts} +29 -11
- package/lib/no/tools/fetch/matrikkelen.ts +531 -0
- package/lib/parquet/duckdb.ts +147 -0
- package/lib/parquet/readers.ts +86 -0
- package/lib/parquet/schema.ts +214 -0
- package/lib/parquet/shuffle.ts +59 -0
- package/lib/parquet/span-sql.ts +54 -0
- package/lib/parquet/streams.ts +113 -0
- package/lib/parquet/writers.ts +452 -0
- package/lib/pl/adapters/emuia/adapter.ts +202 -0
- package/lib/pl/tools/fetch/emuia.ts +361 -0
- package/lib/recipes/anchor-absorption.ts +30 -19
- package/lib/recipes/bare/country.ts +24 -32
- package/lib/recipes/bare/postcode/eval.ts +1 -1
- package/lib/recipes/bare/postcode.ts +346 -0
- package/lib/recipes/boundary-stress.ts +37 -20
- package/lib/recipes/country-balanced.ts +66 -86
- package/lib/recipes/house-venue.ts +36 -14
- package/lib/recipes/intersection.ts +84 -62
- package/lib/recipes/po/box/cedex/au-nz.ts +3 -3
- package/lib/recipes/po/box/cedex/ca.ts +3 -2
- package/lib/recipes/po/box/cedex/fr.ts +4 -3
- package/lib/recipes/po/box/cedex/phrases.ts +7 -6
- package/lib/recipes/po/box/cedex/recipe.ts +31 -19
- package/lib/recipes/po/box/cedex/sources.ts +16 -4
- package/lib/recipes/po/box/cedex/us.ts +7 -2
- package/lib/recipes/po/{box/index.ts → box.ts} +39 -18
- package/lib/recipes/scaffold.ts +267 -158
- package/lib/recipes/sources.ts +412 -0
- package/lib/recipes/street/affix.ts +54 -154
- package/lib/recipes/street/bare.ts +30 -17
- package/lib/recipes/street.ts +35 -9
- package/lib/recipes/sub/venue/context.ts +32 -23
- package/lib/recipes/sub/venue/render.ts +170 -0
- package/lib/recipes/sub/venue/sources.ts +92 -248
- package/lib/recipes/sub/venue.ts +795 -0
- package/lib/recipes/trailing-region.ts +75 -87
- package/lib/recipes/unit/sources.ts +44 -0
- package/lib/recipes/unit.ts +101 -89
- package/lib/recipes/venue.ts +347 -0
- package/lib/{recipes/index.ts → recipes.ts} +15 -11
- package/lib/registers.ts +280 -0
- package/lib/ro/adapters/retea-scolara/adapter.ts +264 -0
- package/lib/ro/tools/fetch/retea-scolara.ts +187 -0
- package/lib/runner.ts +221 -84
- package/lib/sg/recipes/register.ts +47 -53
- package/lib/sg/tools/fetch/acra.ts +23 -28
- package/lib/si/recipes/bare-village.ts +34 -17
- package/lib/sk/adapters/inspire/adapter.ts +393 -0
- package/lib/sk/tools/fetch/inspire.ts +403 -0
- package/lib/source-register/effective-manifest.ts +659 -0
- package/lib/source-register/register.ts +539 -0
- package/lib/source-register/training-manifest.ts +218 -0
- package/lib/source-register/types.ts +589 -0
- package/lib/source-register.ts +71 -0
- package/lib/south-asia/recipes/register.ts +45 -26
- package/lib/subvenue/harvest.ts +251 -0
- package/lib/{tools/sub/venue → subvenue}/promotions.ts +33 -70
- package/lib/subvenue/surfaces.ts +94 -0
- package/lib/subvenue/table.ts +264 -0
- package/lib/surfaces/locale.ts +248 -0
- package/lib/synthesizers/anchor-absorption.ts +56 -91
- package/lib/synthesizers/boundary-stress.ts +67 -155
- package/lib/synthesizers/house-venue.ts +65 -127
- package/lib/synthesizers/no-street.ts +71 -119
- package/lib/synthesizers/po-box.ts +93 -105
- package/lib/synthesizers/tail.ts +55 -0
- package/lib/synthesizers/utils.ts +82 -219
- package/lib/test-kit/corpus-recipe.ts +45 -28
- package/lib/test-kit.ts +116 -0
- package/lib/tools/align-canonical.ts +64 -0
- package/lib/tools/audit.ts +117 -120
- package/lib/tools/corpus-stats.ts +45 -31
- package/lib/tools/fetch/atom.ts +164 -0
- package/lib/tools/fetch/cordis.ts +320 -0
- package/lib/tools/fetch/download/manifest.ts +36 -23
- package/lib/tools/fetch/download/network.ts +55 -31
- package/lib/tools/fetch/download/retry.ts +30 -29
- package/lib/tools/fetch/geonames/dump.ts +75 -55
- package/lib/tools/fetch/geonames/postal.ts +27 -62
- package/lib/tools/fetch/gleif.ts +362 -0
- package/lib/tools/fetch/header.ts +71 -0
- package/lib/tools/fetch/inspire-addresses.ts +500 -0
- package/lib/tools/fetch/openaddresses.ts +23 -112
- package/lib/tools/fetch/ourairports.ts +18 -51
- package/lib/tools/fetch/ppd.ts +10 -8
- package/lib/tools/fetch/vlaanderen-ad.ts +435 -0
- package/lib/tools/fetch/wfs-harvest.ts +954 -0
- package/lib/tools/fetch/wikidata-subvenue.ts +45 -145
- package/lib/tools/fetch/zip-archive.ts +100 -0
- package/lib/tools/fetch.ts +101 -0
- package/lib/tools/golden/expand.ts +75 -44
- package/lib/tools/golden/promote.ts +47 -34
- package/lib/tools/golden/relabel-street/directory.ts +67 -39
- package/lib/tools/golden/relabel-street/row.ts +32 -109
- package/lib/tools/ingest-csv.ts +48 -51
- package/lib/tools/jsonl-to-parquet.ts +59 -98
- package/lib/tools/lint/recipe-output/vocab.ts +371 -0
- package/lib/tools/lint/{slice/index.ts → recipe-output.ts} +130 -126
- package/lib/tools/migrate/overlay-parquet.ts +173 -0
- package/lib/tools/migrate/recipe-output.ts +153 -0
- package/lib/tools/migrate/source-names.ts +161 -0
- package/lib/tools/{slice → overlay}/kryptonite.ts +47 -39
- package/lib/tools/overlay/manifest.ts +409 -0
- package/lib/tools/overlay/merge-source.ts +139 -0
- package/lib/tools/overlay/split-slice.ts +144 -0
- package/lib/tools/overlay/translit.ts +236 -0
- package/lib/tools/overture-subvenue.ts +18 -91
- package/lib/tools/postcode-triples.ts +284 -212
- package/lib/tools/source-register/build.ts +822 -0
- package/lib/tools/sub/venue/head-nouns.ts +38 -75
- package/lib/tools/sub/venue/lexicon.ts +71 -110
- package/lib/tools/sub/venue/wikidata.ts +13 -10
- package/lib/tw/tools/fetch/gcis.ts +21 -20
- package/lib/types.ts +305 -101
- package/lib/us/adapters/fcc-bdc/adapter.ts +26 -41
- package/lib/us/adapters/state/hi-schools/adapter.ts +28 -17
- package/lib/us/adapters/state/hi-schools/workbook.ts +8 -3
- package/lib/us/adapters/state/ia-contractors/adapter.ts +27 -15
- package/lib/us/adapters/state/ny-notaries/adapter.ts +24 -25
- package/lib/us/adapters/state/tx-notaries/adapter.ts +21 -15
- package/lib/us/adapters/tiger/adapter.ts +19 -44
- package/lib/us/adapters/tiger/street-decompose.ts +7 -17
- package/lib/us/adapters/usgov/hrsa-fqhc/adapter.ts +49 -34
- package/lib/us/adapters/usgov/imls-pls/adapter.ts +25 -19
- package/lib/us/adapters/usgov/irs-bmf/adapter.ts +32 -23
- package/lib/us/adapters/usgov/nad/adapter.ts +61 -122
- package/lib/us/adapters/usgov/nppes/adapter.ts +72 -35
- package/lib/us/adapters/usgov/samhsa-treatment-locator/adapter.ts +47 -34
- package/lib/us/fips-state.ts +19 -10
- package/lib/{synthesizers → us/synthesizers}/intersection.ts +45 -35
- package/lib/{synthesizers → us/synthesizers}/street.ts +56 -43
- package/lib/us/tools/fetch/hrsa.ts +7 -8
- package/lib/us/tools/fetch/imls-pls.ts +18 -36
- package/lib/us/tools/fetch/nad.ts +51 -33
- package/lib/us/tools/fetch/nppes.ts +27 -39
- package/lib/us/tools/fetch/state/hi-schools.ts +24 -17
- package/lib/us/tools/fetch/state/sources.ts +12 -12
- package/lib/us/tools/fetch/tiger-full.ts +22 -74
- package/lib/utils/align.ts +52 -59
- package/lib/utils/{slice-stats.ts → cooccurrence-stats.ts} +22 -16
- package/lib/utils/golden.ts +36 -51
- package/lib/utils/license.ts +239 -27
- package/lib/utils/split.ts +209 -88
- package/lib/utils/tokenize.ts +25 -56
- package/lib/utils/wof-json.ts +130 -77
- package/lib/{utils/index.ts → utils.ts} +0 -1
- package/lib/ve/recipes/reviewed-postcode-tail.ts +40 -13
- package/out/adapters/cordis/adapter.d.ts +326 -0
- package/out/adapters/cordis/adapter.d.ts.map +1 -0
- package/out/adapters/cordis/adapter.js +622 -0
- package/out/adapters/cordis/adapter.js.map +1 -0
- package/out/adapters/dedup-key.d.ts +30 -0
- package/out/adapters/dedup-key.d.ts.map +1 -0
- package/out/adapters/dedup-key.js +35 -0
- package/out/adapters/dedup-key.js.map +1 -0
- package/out/adapters/errors.d.ts +17 -0
- package/out/adapters/errors.d.ts.map +1 -0
- package/out/adapters/errors.js +20 -0
- package/out/adapters/errors.js.map +1 -0
- package/out/adapters/geonames/adapter.d.ts +26 -28
- package/out/adapters/geonames/adapter.d.ts.map +1 -1
- package/out/adapters/geonames/adapter.js +40 -50
- package/out/adapters/geonames/adapter.js.map +1 -1
- package/out/adapters/geonames/postal/adapter.d.ts +14 -27
- package/out/adapters/geonames/postal/adapter.d.ts.map +1 -1
- package/out/adapters/geonames/postal/adapter.js +30 -35
- package/out/adapters/geonames/postal/adapter.js.map +1 -1
- package/out/adapters/gleif/adapter.d.ts +293 -0
- package/out/adapters/gleif/adapter.d.ts.map +1 -0
- package/out/adapters/gleif/adapter.js +685 -0
- package/out/adapters/gleif/adapter.js.map +1 -0
- package/out/adapters/libpostal-dictionary.d.ts +20 -0
- package/out/adapters/libpostal-dictionary.d.ts.map +1 -0
- package/out/adapters/libpostal-dictionary.js +34 -0
- package/out/adapters/libpostal-dictionary.js.map +1 -0
- package/out/adapters/openaddresses/adapter.d.ts +29 -43
- package/out/adapters/openaddresses/adapter.d.ts.map +1 -1
- package/out/adapters/openaddresses/adapter.js +34 -46
- package/out/adapters/openaddresses/adapter.js.map +1 -1
- package/out/adapters/osm/adapter.d.ts +59 -52
- package/out/adapters/osm/adapter.d.ts.map +1 -1
- package/out/adapters/osm/adapter.js +119 -69
- package/out/adapters/osm/adapter.js.map +1 -1
- package/out/adapters/overture/adapter.d.ts +11 -37
- package/out/adapters/overture/adapter.d.ts.map +1 -1
- package/out/adapters/overture/adapter.js +45 -42
- package/out/adapters/overture/adapter.js.map +1 -1
- package/out/adapters/po-box/adapter.d.ts +66 -0
- package/out/adapters/po-box/adapter.d.ts.map +1 -0
- package/out/adapters/{synth-po-box → po-box}/adapter.js +48 -47
- package/out/adapters/po-box/adapter.js.map +1 -0
- package/out/adapters/registry.d.ts +55 -0
- package/out/adapters/registry.d.ts.map +1 -0
- package/out/adapters/registry.js +43 -0
- package/out/adapters/registry.js.map +1 -0
- package/out/adapters/sha256-stream.d.ts +26 -0
- package/out/adapters/sha256-stream.d.ts.map +1 -0
- package/out/adapters/sha256-stream.js +34 -0
- package/out/adapters/sha256-stream.js.map +1 -0
- package/out/adapters/source-id.d.ts +33 -0
- package/out/adapters/source-id.d.ts.map +1 -0
- package/out/adapters/source-id.js +42 -0
- package/out/adapters/source-id.js.map +1 -0
- package/out/adapters/street-line.d.ts +103 -0
- package/out/adapters/street-line.d.ts.map +1 -0
- package/out/adapters/street-line.js +118 -0
- package/out/adapters/street-line.js.map +1 -0
- package/out/adapters/wof/admin/json/adapter.d.ts +27 -18
- package/out/adapters/wof/admin/json/adapter.d.ts.map +1 -1
- package/out/adapters/wof/admin/json/adapter.js +48 -32
- package/out/adapters/wof/admin/json/adapter.js.map +1 -1
- package/out/adapters/wof/json-rows.d.ts +36 -19
- package/out/adapters/wof/json-rows.d.ts.map +1 -1
- package/out/adapters/wof/json-rows.js +35 -15
- package/out/adapters/wof/json-rows.js.map +1 -1
- package/out/adapters/wof/postalcode-json/adapter.d.ts +22 -38
- package/out/adapters/wof/postalcode-json/adapter.d.ts.map +1 -1
- package/out/adapters/wof/postalcode-json/adapter.js +60 -58
- package/out/adapters/wof/postalcode-json/adapter.js.map +1 -1
- package/out/adapters.d.ts +75 -0
- package/out/adapters.d.ts.map +1 -0
- package/out/adapters.js +167 -0
- package/out/adapters.js.map +1 -0
- package/out/au/adapters/gnaf/adapter.d.ts +15 -27
- package/out/au/adapters/gnaf/adapter.d.ts.map +1 -1
- package/out/au/adapters/gnaf/adapter.js +35 -43
- package/out/au/adapters/gnaf/adapter.js.map +1 -1
- package/out/au/adapters/gnaf/assemble.d.ts +15 -26
- package/out/au/adapters/gnaf/assemble.d.ts.map +1 -1
- package/out/au/adapters/gnaf/assemble.js +26 -46
- package/out/au/adapters/gnaf/assemble.js.map +1 -1
- package/out/be/adapters/brussels/adapter.d.ts +212 -0
- package/out/be/adapters/brussels/adapter.d.ts.map +1 -0
- package/out/be/adapters/brussels/adapter.js +435 -0
- package/out/be/adapters/brussels/adapter.js.map +1 -0
- package/out/be/adapters/vlaanderen/adapter.d.ts +230 -0
- package/out/be/adapters/vlaanderen/adapter.d.ts.map +1 -0
- package/out/be/adapters/vlaanderen/adapter.js +418 -0
- package/out/be/adapters/vlaanderen/adapter.js.map +1 -0
- package/out/be/adapters/wallonie/adapter.d.ts +196 -0
- package/out/be/adapters/wallonie/adapter.d.ts.map +1 -0
- package/out/be/adapters/wallonie/adapter.js +437 -0
- package/out/be/adapters/wallonie/adapter.js.map +1 -0
- package/out/be/tools/fetch/brussels.d.ts +122 -0
- package/out/be/tools/fetch/brussels.d.ts.map +1 -0
- package/out/be/tools/fetch/brussels.js +148 -0
- package/out/be/tools/fetch/brussels.js.map +1 -0
- package/out/be/tools/fetch/wallonie.d.ts +120 -0
- package/out/be/tools/fetch/wallonie.d.ts.map +1 -0
- package/out/be/tools/fetch/wallonie.js +167 -0
- package/out/be/tools/fetch/wallonie.js.map +1 -0
- package/out/build/adapters.d.ts +33 -0
- package/out/build/adapters.d.ts.map +1 -0
- package/out/build/adapters.js +69 -0
- package/out/build/adapters.js.map +1 -0
- package/out/build/align.d.ts +74 -0
- package/out/build/align.d.ts.map +1 -0
- package/out/build/align.js +226 -0
- package/out/build/align.js.map +1 -0
- package/out/build/checkpoint.d.ts +94 -0
- package/out/build/checkpoint.d.ts.map +1 -0
- package/out/build/checkpoint.js +61 -0
- package/out/build/checkpoint.js.map +1 -0
- package/out/build/eligibility.d.ts +47 -0
- package/out/build/eligibility.d.ts.map +1 -0
- package/out/build/eligibility.js +80 -0
- package/out/build/eligibility.js.map +1 -0
- package/out/build/heap.d.ts +28 -0
- package/out/build/heap.d.ts.map +1 -0
- package/out/build/heap.js +47 -0
- package/out/build/heap.js.map +1 -0
- package/out/build/inputs.d.ts +52 -0
- package/out/build/inputs.d.ts.map +1 -0
- package/out/build/inputs.js +49 -0
- package/out/build/inputs.js.map +1 -0
- package/out/build/rows.d.ts +16 -0
- package/out/build/rows.d.ts.map +1 -0
- package/out/build/rows.js +19 -0
- package/out/build/rows.js.map +1 -0
- package/out/build/types.d.ts +222 -0
- package/out/build/types.d.ts.map +1 -0
- package/out/build/types.js +34 -0
- package/out/build/types.js.map +1 -0
- package/out/build.d.ts +6 -121
- package/out/build.d.ts.map +1 -1
- package/out/build.js +112 -207
- package/out/build.js.map +1 -1
- package/out/cn/recipes/organizational-units.d.ts +5 -22
- package/out/cn/recipes/organizational-units.d.ts.map +1 -1
- package/out/cn/recipes/organizational-units.js +20 -41
- package/out/cn/recipes/organizational-units.js.map +1 -1
- package/out/cz/adapters/cuzk/adapter.d.ts +52 -0
- package/out/cz/adapters/cuzk/adapter.d.ts.map +1 -0
- package/out/cz/adapters/cuzk/adapter.js +269 -0
- package/out/cz/adapters/cuzk/adapter.js.map +1 -0
- package/out/cz/recipes/pcfirst-preposition.d.ts +7 -11
- package/out/cz/recipes/pcfirst-preposition.d.ts.map +1 -1
- package/out/cz/recipes/pcfirst-preposition.js +36 -27
- package/out/cz/recipes/pcfirst-preposition.js.map +1 -1
- package/out/cz/tools/fetch/cuzk.d.ts +281 -0
- package/out/cz/tools/fetch/cuzk.d.ts.map +1 -0
- package/out/cz/tools/fetch/cuzk.js +448 -0
- package/out/cz/tools/fetch/cuzk.js.map +1 -0
- package/out/de/recipes/locale.d.ts +24 -26
- package/out/de/recipes/locale.d.ts.map +1 -1
- package/out/de/recipes/locale.js +67 -57
- package/out/de/recipes/locale.js.map +1 -1
- package/out/directory.d.ts +20 -0
- package/out/directory.d.ts.map +1 -0
- package/out/directory.js +27 -0
- package/out/directory.js.map +1 -0
- package/out/dk/adapters/inspire/adapter.d.ts +153 -0
- package/out/dk/adapters/inspire/adapter.d.ts.map +1 -0
- package/out/dk/adapters/inspire/adapter.js +258 -0
- package/out/dk/adapters/inspire/adapter.js.map +1 -0
- package/out/dk/tools/fetch/inspire.d.ts +101 -0
- package/out/dk/tools/fetch/inspire.d.ts.map +1 -0
- package/out/dk/tools/fetch/inspire.js +232 -0
- package/out/dk/tools/fetch/inspire.js.map +1 -0
- package/out/ee/adapters/ads/adapter.d.ts +102 -0
- package/out/ee/adapters/ads/adapter.d.ts.map +1 -0
- package/out/ee/adapters/ads/adapter.js +185 -0
- package/out/ee/adapters/ads/adapter.js.map +1 -0
- package/out/ee/tools/fetch/ads.d.ts +123 -0
- package/out/ee/tools/fetch/ads.d.ts.map +1 -0
- package/out/ee/tools/fetch/ads.js +197 -0
- package/out/ee/tools/fetch/ads.js.map +1 -0
- package/out/env.d.ts +6 -2
- package/out/env.d.ts.map +1 -1
- package/out/env.js +6 -2
- package/out/env.js.map +1 -1
- package/out/es/adapters/bizkaia/adapter.d.ts +143 -0
- package/out/es/adapters/bizkaia/adapter.d.ts.map +1 -0
- package/out/es/adapters/bizkaia/adapter.js +332 -0
- package/out/es/adapters/bizkaia/adapter.js.map +1 -0
- package/out/es/adapters/catastro/adapter.d.ts +103 -0
- package/out/es/adapters/catastro/adapter.d.ts.map +1 -0
- package/out/es/adapters/catastro/adapter.js +290 -0
- package/out/es/adapters/catastro/adapter.js.map +1 -0
- package/out/es/adapters/gipuzkoa/adapter.d.ts +84 -0
- package/out/es/adapters/gipuzkoa/adapter.d.ts.map +1 -0
- package/out/es/adapters/gipuzkoa/adapter.js +218 -0
- package/out/es/adapters/gipuzkoa/adapter.js.map +1 -0
- package/out/es/adapters/navarra/adapter.d.ts +106 -0
- package/out/es/adapters/navarra/adapter.d.ts.map +1 -0
- package/out/es/adapters/navarra/adapter.js +242 -0
- package/out/es/adapters/navarra/adapter.js.map +1 -0
- package/out/es/cadastre.d.ts +110 -0
- package/out/es/cadastre.d.ts.map +1 -0
- package/out/es/cadastre.js +128 -0
- package/out/es/cadastre.js.map +1 -0
- package/out/es/tools/fetch/bizkaia.d.ts +281 -0
- package/out/es/tools/fetch/bizkaia.d.ts.map +1 -0
- package/out/es/tools/fetch/bizkaia.js +478 -0
- package/out/es/tools/fetch/bizkaia.js.map +1 -0
- package/out/es/tools/fetch/catastro.d.ts +280 -0
- package/out/es/tools/fetch/catastro.d.ts.map +1 -0
- package/out/es/tools/fetch/catastro.js +491 -0
- package/out/es/tools/fetch/catastro.js.map +1 -0
- package/out/es/tools/fetch/gipuzkoa.d.ts +164 -0
- package/out/es/tools/fetch/gipuzkoa.d.ts.map +1 -0
- package/out/es/tools/fetch/gipuzkoa.js +210 -0
- package/out/es/tools/fetch/gipuzkoa.js.map +1 -0
- package/out/es/tools/fetch/navarra.d.ts +194 -0
- package/out/es/tools/fetch/navarra.d.ts.map +1 -0
- package/out/es/tools/fetch/navarra.js +321 -0
- package/out/es/tools/fetch/navarra.js.map +1 -0
- package/out/fi/adapters/ryhti/adapter.d.ts +111 -0
- package/out/fi/adapters/ryhti/adapter.d.ts.map +1 -0
- package/out/fi/adapters/ryhti/adapter.js +240 -0
- package/out/fi/adapters/ryhti/adapter.js.map +1 -0
- package/out/fi/tools/fetch/ryhti.d.ts +206 -0
- package/out/fi/tools/fetch/ryhti.d.ts.map +1 -0
- package/out/fi/tools/fetch/ryhti.js +324 -0
- package/out/fi/tools/fetch/ryhti.js.map +1 -0
- package/out/fingerprints.d.ts +68 -0
- package/out/fingerprints.d.ts.map +1 -0
- package/out/fingerprints.js +130 -0
- package/out/fingerprints.js.map +1 -0
- package/out/fr/adapters/annuaire-education/adapter.d.ts +236 -0
- package/out/fr/adapters/annuaire-education/adapter.d.ts.map +1 -0
- package/out/fr/adapters/annuaire-education/adapter.js +477 -0
- package/out/fr/adapters/annuaire-education/adapter.js.map +1 -0
- package/out/fr/adapters/ban/adapter.d.ts +19 -25
- package/out/fr/adapters/ban/adapter.d.ts.map +1 -1
- package/out/fr/adapters/ban/adapter.js +65 -54
- package/out/fr/adapters/ban/adapter.js.map +1 -1
- package/out/fr/adapters/finess/adapter.d.ts +277 -0
- package/out/fr/adapters/finess/adapter.d.ts.map +1 -0
- package/out/fr/adapters/finess/adapter.js +520 -0
- package/out/fr/adapters/finess/adapter.js.map +1 -0
- package/out/fr/adapters/finess/postal-lines.d.ts +61 -0
- package/out/fr/adapters/finess/postal-lines.d.ts.map +1 -0
- package/out/fr/adapters/finess/postal-lines.js +114 -0
- package/out/fr/adapters/finess/postal-lines.js.map +1 -0
- package/out/fr/adapters/finess/voie-type.d.ts +77 -0
- package/out/fr/adapters/finess/voie-type.d.ts.map +1 -0
- package/out/fr/adapters/finess/voie-type.js +173 -0
- package/out/fr/adapters/finess/voie-type.js.map +1 -0
- package/out/fr/insee-country.d.ts +45 -0
- package/out/fr/insee-country.d.ts.map +1 -0
- package/out/fr/insee-country.js +60 -0
- package/out/fr/insee-country.js.map +1 -0
- package/out/fr/recipes/admin-split.d.ts +4 -27
- package/out/fr/recipes/admin-split.d.ts.map +1 -1
- package/out/fr/recipes/admin-split.js +36 -58
- package/out/fr/recipes/admin-split.js.map +1 -1
- package/out/fr/recipes/bare-street.d.ts +2 -17
- package/out/fr/recipes/bare-street.d.ts.map +1 -1
- package/out/fr/recipes/bare-street.js +35 -50
- package/out/fr/recipes/bare-street.js.map +1 -1
- package/out/fr/recipes/fragment.d.ts +6 -65
- package/out/fr/recipes/fragment.d.ts.map +1 -1
- package/out/fr/recipes/fragment.js +55 -135
- package/out/fr/recipes/fragment.js.map +1 -1
- package/out/fr/recipes/lieudit.d.ts +17 -19
- package/out/fr/recipes/lieudit.d.ts.map +1 -1
- package/out/fr/recipes/lieudit.js +89 -68
- package/out/fr/recipes/lieudit.js.map +1 -1
- package/out/fr/recipes/order.d.ts +4 -27
- package/out/fr/recipes/order.d.ts.map +1 -1
- package/out/fr/recipes/order.js +31 -58
- package/out/fr/recipes/order.js.map +1 -1
- package/out/fr/{adapters/ban/street-decompose.d.ts → street-decompose.d.ts} +3 -2
- package/out/fr/street-decompose.d.ts.map +1 -0
- package/out/fr/{adapters/ban/street-decompose.js → street-decompose.js} +4 -3
- package/out/fr/street-decompose.js.map +1 -0
- package/out/fr/tools/fetch/annuaire-education.d.ts +133 -0
- package/out/fr/tools/fetch/annuaire-education.d.ts.map +1 -0
- package/out/fr/tools/fetch/annuaire-education.js +198 -0
- package/out/fr/tools/fetch/annuaire-education.js.map +1 -0
- package/out/fr/tools/fetch/ban.d.ts +9 -7
- package/out/fr/tools/fetch/ban.d.ts.map +1 -1
- package/out/fr/tools/fetch/ban.js +29 -19
- package/out/fr/tools/fetch/ban.js.map +1 -1
- package/out/fr/tools/fetch/finess.d.ts +145 -0
- package/out/fr/tools/fetch/finess.d.ts.map +1 -0
- package/out/fr/tools/fetch/finess.js +229 -0
- package/out/fr/tools/fetch/finess.js.map +1 -0
- package/out/gauntlet-inputs.d.ts +42 -0
- package/out/gauntlet-inputs.d.ts.map +1 -0
- package/out/gauntlet-inputs.js +78 -0
- package/out/gauntlet-inputs.js.map +1 -0
- package/out/index.d.ts +9 -3
- package/out/index.d.ts.map +1 -1
- package/out/index.js +9 -3
- package/out/index.js.map +1 -1
- package/out/inspire/address.d.ts +261 -0
- package/out/inspire/address.d.ts.map +1 -0
- package/out/inspire/address.js +395 -0
- package/out/inspire/address.js.map +1 -0
- package/out/inspire/archive.d.ts +36 -0
- package/out/inspire/archive.d.ts.map +1 -0
- package/out/inspire/archive.js +42 -0
- package/out/inspire/archive.js.map +1 -0
- package/out/inspire/errors.d.ts +56 -0
- package/out/inspire/errors.d.ts.map +1 -0
- package/out/inspire/errors.js +65 -0
- package/out/inspire/errors.js.map +1 -0
- package/out/inspire/stream.d.ts +140 -0
- package/out/inspire/stream.d.ts.map +1 -0
- package/out/inspire/stream.js +123 -0
- package/out/inspire/stream.js.map +1 -0
- package/out/international/recipes/locale.d.ts +40 -86
- package/out/international/recipes/locale.d.ts.map +1 -1
- package/out/international/recipes/locale.js +122 -157
- package/out/international/recipes/locale.js.map +1 -1
- package/out/it/adapters/anac/adapter.d.ts +269 -0
- package/out/it/adapters/anac/adapter.d.ts.map +1 -0
- package/out/it/adapters/anac/adapter.js +434 -0
- package/out/it/adapters/anac/adapter.js.map +1 -0
- package/out/it/tools/fetch/anac.d.ts +171 -0
- package/out/it/tools/fetch/anac.d.ts.map +1 -0
- package/out/it/tools/fetch/anac.js +269 -0
- package/out/it/tools/fetch/anac.js.map +1 -0
- package/out/jp/adapters/wof-admin/adapter.d.ts +14 -11
- package/out/jp/adapters/wof-admin/adapter.d.ts.map +1 -1
- package/out/jp/adapters/wof-admin/adapter.js +27 -16
- package/out/jp/adapters/wof-admin/adapter.js.map +1 -1
- package/out/jp/tools/fetch/houjin.d.ts +7 -4
- package/out/jp/tools/fetch/houjin.d.ts.map +1 -1
- package/out/jp/tools/fetch/houjin.js +17 -13
- package/out/jp/tools/fetch/houjin.js.map +1 -1
- package/out/kr/adapters/juso/label-rows.d.ts +17 -31
- package/out/kr/adapters/juso/label-rows.d.ts.map +1 -1
- package/out/kr/adapters/juso/label-rows.js +19 -41
- package/out/kr/adapters/juso/label-rows.js.map +1 -1
- package/out/kr/adapters/localdata/align.d.ts +4 -16
- package/out/kr/adapters/localdata/align.d.ts.map +1 -1
- package/out/kr/adapters/localdata/align.js +19 -30
- package/out/kr/adapters/localdata/align.js.map +1 -1
- package/out/kr/adapters/localdata/key-index.d.ts +13 -22
- package/out/kr/adapters/localdata/key-index.d.ts.map +1 -1
- package/out/kr/adapters/localdata/key-index.js +15 -21
- package/out/kr/adapters/localdata/key-index.js.map +1 -1
- package/out/kr/adapters/localdata/permit-rows.d.ts +21 -14
- package/out/kr/adapters/localdata/permit-rows.d.ts.map +1 -1
- package/out/kr/adapters/localdata/permit-rows.js +31 -26
- package/out/kr/adapters/localdata/permit-rows.js.map +1 -1
- package/out/kr/tools/fetch/juso.d.ts +11 -8
- package/out/kr/tools/fetch/juso.d.ts.map +1 -1
- package/out/kr/tools/fetch/juso.js +15 -14
- package/out/kr/tools/fetch/juso.js.map +1 -1
- package/out/kr/tools/fetch/localdata.d.ts +16 -9
- package/out/kr/tools/fetch/localdata.d.ts.map +1 -1
- package/out/kr/tools/fetch/localdata.js +24 -16
- package/out/kr/tools/fetch/localdata.js.map +1 -1
- package/out/lu/adapters/bd-adresses/adapter.d.ts +109 -0
- package/out/lu/adapters/bd-adresses/adapter.d.ts.map +1 -0
- package/out/lu/adapters/bd-adresses/adapter.js +196 -0
- package/out/lu/adapters/bd-adresses/adapter.js.map +1 -0
- package/out/lu/tools/fetch/bd-adresses.d.ts +165 -0
- package/out/lu/tools/fetch/bd-adresses.d.ts.map +1 -0
- package/out/lu/tools/fetch/bd-adresses.js +223 -0
- package/out/lu/tools/fetch/bd-adresses.js.map +1 -0
- package/out/lv/adapters/varis/adapter.d.ts +284 -0
- package/out/lv/adapters/varis/adapter.d.ts.map +1 -0
- package/out/lv/adapters/varis/adapter.js +405 -0
- package/out/lv/adapters/varis/adapter.js.map +1 -0
- package/out/lv/tools/fetch/varis.d.ts +81 -0
- package/out/lv/tools/fetch/varis.d.ts.map +1 -0
- package/out/lv/tools/fetch/varis.js +133 -0
- package/out/lv/tools/fetch/varis.js.map +1 -0
- package/out/nl/adapters/kadaster/adapter.d.ts +125 -0
- package/out/nl/adapters/kadaster/adapter.d.ts.map +1 -0
- package/out/nl/adapters/kadaster/adapter.js +309 -0
- package/out/nl/adapters/kadaster/adapter.js.map +1 -0
- package/out/nl/recipes/postcode.d.ts +12 -14
- package/out/nl/recipes/postcode.d.ts.map +1 -1
- package/out/nl/recipes/postcode.js +42 -24
- package/out/nl/recipes/postcode.js.map +1 -1
- package/out/nl/tools/fetch/kadaster.d.ts +159 -0
- package/out/nl/tools/fetch/kadaster.d.ts.map +1 -0
- package/out/nl/tools/fetch/kadaster.js +182 -0
- package/out/nl/tools/fetch/kadaster.js.map +1 -0
- package/out/no/adapters/matrikkelen/adapter.d.ts +44 -0
- package/out/no/adapters/matrikkelen/adapter.d.ts.map +1 -0
- package/out/no/adapters/matrikkelen/adapter.js +143 -0
- package/out/no/adapters/matrikkelen/adapter.js.map +1 -0
- package/out/no/recipes/fragment.d.ts +1 -33
- package/out/no/recipes/fragment.d.ts.map +1 -1
- package/out/no/recipes/fragment.js +23 -57
- package/out/no/recipes/fragment.js.map +1 -1
- package/out/no/recipes/street/led.d.ts +9 -12
- package/out/no/recipes/street/led.d.ts.map +1 -1
- package/out/no/recipes/street/led.js +34 -24
- package/out/no/recipes/street/led.js.map +1 -1
- package/out/no/recipes/street.d.ts +19 -0
- package/out/no/recipes/street.d.ts.map +1 -0
- package/out/no/recipes/{street/index.js → street.js} +28 -12
- package/out/no/recipes/street.js.map +1 -0
- package/out/no/tools/fetch/matrikkelen.d.ts +263 -0
- package/out/no/tools/fetch/matrikkelen.d.ts.map +1 -0
- package/out/no/tools/fetch/matrikkelen.js +353 -0
- package/out/no/tools/fetch/matrikkelen.js.map +1 -0
- package/out/parquet/duckdb.d.ts +103 -0
- package/out/parquet/duckdb.d.ts.map +1 -0
- package/out/parquet/duckdb.js +93 -0
- package/out/parquet/duckdb.js.map +1 -0
- package/out/parquet/readers.d.ts +44 -0
- package/out/parquet/readers.d.ts.map +1 -0
- package/out/parquet/readers.js +69 -0
- package/out/parquet/readers.js.map +1 -0
- package/out/parquet/schema.d.ts +95 -0
- package/out/parquet/schema.d.ts.map +1 -0
- package/out/parquet/schema.js +157 -0
- package/out/parquet/schema.js.map +1 -0
- package/out/parquet/shuffle.d.ts +25 -0
- package/out/parquet/shuffle.d.ts.map +1 -0
- package/out/parquet/shuffle.js +44 -0
- package/out/parquet/shuffle.js.map +1 -0
- package/out/parquet/span-sql.d.ts +49 -0
- package/out/parquet/span-sql.d.ts.map +1 -0
- package/out/parquet/span-sql.js +53 -0
- package/out/parquet/span-sql.js.map +1 -0
- package/out/parquet/streams.d.ts +47 -0
- package/out/parquet/streams.d.ts.map +1 -0
- package/out/parquet/streams.js +78 -0
- package/out/parquet/streams.js.map +1 -0
- package/out/parquet/writers.d.ts +124 -0
- package/out/parquet/writers.d.ts.map +1 -0
- package/out/parquet/writers.js +252 -0
- package/out/parquet/writers.js.map +1 -0
- package/out/pl/adapters/emuia/adapter.d.ts +81 -0
- package/out/pl/adapters/emuia/adapter.d.ts.map +1 -0
- package/out/pl/adapters/emuia/adapter.js +178 -0
- package/out/pl/adapters/emuia/adapter.js.map +1 -0
- package/out/pl/tools/fetch/emuia.d.ts +166 -0
- package/out/pl/tools/fetch/emuia.d.ts.map +1 -0
- package/out/pl/tools/fetch/emuia.js +261 -0
- package/out/pl/tools/fetch/emuia.js.map +1 -0
- package/out/recipes/anchor-absorption.d.ts +9 -9
- package/out/recipes/anchor-absorption.d.ts.map +1 -1
- package/out/recipes/anchor-absorption.js +29 -19
- package/out/recipes/anchor-absorption.js.map +1 -1
- package/out/recipes/bare/country.d.ts +2 -20
- package/out/recipes/bare/country.d.ts.map +1 -1
- package/out/recipes/bare/country.js +20 -31
- package/out/recipes/bare/country.js.map +1 -1
- package/out/recipes/bare/postcode/eval.d.ts +1 -1
- package/out/recipes/bare/postcode/eval.js +1 -1
- package/out/recipes/bare/postcode.d.ts +41 -0
- package/out/recipes/bare/postcode.d.ts.map +1 -0
- package/out/recipes/bare/{postcode/index.js → postcode.js} +92 -80
- package/out/recipes/bare/postcode.js.map +1 -0
- package/out/recipes/boundary-stress.d.ts +8 -8
- package/out/recipes/boundary-stress.d.ts.map +1 -1
- package/out/recipes/boundary-stress.js +37 -20
- package/out/recipes/boundary-stress.js.map +1 -1
- package/out/recipes/country-balanced.d.ts +3 -21
- package/out/recipes/country-balanced.d.ts.map +1 -1
- package/out/recipes/country-balanced.js +58 -76
- package/out/recipes/country-balanced.js.map +1 -1
- package/out/recipes/house-venue.d.ts +8 -6
- package/out/recipes/house-venue.d.ts.map +1 -1
- package/out/recipes/house-venue.js +33 -14
- package/out/recipes/house-venue.js.map +1 -1
- package/out/recipes/intersection.d.ts +20 -20
- package/out/recipes/intersection.d.ts.map +1 -1
- package/out/recipes/intersection.js +67 -55
- package/out/recipes/intersection.js.map +1 -1
- package/out/recipes/po/box/cedex/au-nz.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/au-nz.js +3 -3
- package/out/recipes/po/box/cedex/au-nz.js.map +1 -1
- package/out/recipes/po/box/cedex/ca.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/ca.js +2 -2
- package/out/recipes/po/box/cedex/ca.js.map +1 -1
- package/out/recipes/po/box/cedex/fr.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/fr.js +3 -3
- package/out/recipes/po/box/cedex/fr.js.map +1 -1
- package/out/recipes/po/box/cedex/phrases.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/phrases.js +7 -6
- package/out/recipes/po/box/cedex/phrases.js.map +1 -1
- package/out/recipes/po/box/cedex/recipe.d.ts +1 -1
- package/out/recipes/po/box/cedex/recipe.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/recipe.js +27 -16
- package/out/recipes/po/box/cedex/recipe.js.map +1 -1
- package/out/recipes/po/box/cedex/sources.d.ts +20 -14
- package/out/recipes/po/box/cedex/sources.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/sources.js +2 -2
- package/out/recipes/po/box/cedex/sources.js.map +1 -1
- package/out/recipes/po/box/cedex/us.d.ts.map +1 -1
- package/out/recipes/po/box/cedex/us.js +5 -2
- package/out/recipes/po/box/cedex/us.js.map +1 -1
- package/out/recipes/po/box.d.ts +18 -0
- package/out/recipes/po/box.d.ts.map +1 -0
- package/out/recipes/po/{box/index.js → box.js} +37 -19
- package/out/recipes/po/box.js.map +1 -0
- package/out/recipes/scaffold.d.ts +223 -141
- package/out/recipes/scaffold.d.ts.map +1 -1
- package/out/recipes/scaffold.js +75 -65
- package/out/recipes/scaffold.js.map +1 -1
- package/out/recipes/sources.d.ts +178 -0
- package/out/recipes/sources.d.ts.map +1 -0
- package/out/recipes/sources.js +361 -0
- package/out/recipes/sources.js.map +1 -0
- package/out/recipes/street/affix.d.ts +20 -50
- package/out/recipes/street/affix.d.ts.map +1 -1
- package/out/recipes/street/affix.js +45 -133
- package/out/recipes/street/affix.js.map +1 -1
- package/out/recipes/street/bare.d.ts +9 -7
- package/out/recipes/street/bare.d.ts.map +1 -1
- package/out/recipes/street/bare.js +27 -16
- package/out/recipes/street/bare.js.map +1 -1
- package/out/recipes/street.d.ts +6 -4
- package/out/recipes/street.d.ts.map +1 -1
- package/out/recipes/street.js +32 -9
- package/out/recipes/street.js.map +1 -1
- package/out/recipes/sub/venue/context.d.ts +12 -9
- package/out/recipes/sub/venue/context.d.ts.map +1 -1
- package/out/recipes/sub/venue/context.js +23 -17
- package/out/recipes/sub/venue/context.js.map +1 -1
- package/out/recipes/sub/venue/render.d.ts +58 -0
- package/out/recipes/sub/venue/render.d.ts.map +1 -0
- package/out/recipes/sub/venue/render.js +118 -0
- package/out/recipes/sub/venue/render.js.map +1 -0
- package/out/recipes/sub/venue/sources.d.ts +53 -93
- package/out/recipes/sub/venue/sources.d.ts.map +1 -1
- package/out/recipes/sub/venue/sources.js +57 -197
- package/out/recipes/sub/venue/sources.js.map +1 -1
- package/out/recipes/sub/venue.d.ts +173 -0
- package/out/recipes/sub/venue.d.ts.map +1 -0
- package/out/recipes/sub/venue.js +558 -0
- package/out/recipes/sub/venue.js.map +1 -0
- package/out/recipes/trailing-region.d.ts +9 -61
- package/out/recipes/trailing-region.d.ts.map +1 -1
- package/out/recipes/trailing-region.js +61 -86
- package/out/recipes/trailing-region.js.map +1 -1
- package/out/recipes/unit/sources.d.ts +28 -0
- package/out/recipes/unit/sources.d.ts.map +1 -0
- package/out/recipes/unit/sources.js +30 -0
- package/out/recipes/unit/sources.js.map +1 -0
- package/out/recipes/unit.d.ts +30 -17
- package/out/recipes/unit.d.ts.map +1 -1
- package/out/recipes/unit.js +90 -79
- package/out/recipes/unit.js.map +1 -1
- package/out/recipes/venue.d.ts +119 -0
- package/out/recipes/venue.d.ts.map +1 -0
- package/out/recipes/venue.js +245 -0
- package/out/recipes/venue.js.map +1 -0
- package/out/recipes.d.ts +26 -0
- package/out/recipes.d.ts.map +1 -0
- package/out/{recipes/index.js → recipes.js} +16 -12
- package/out/recipes.js.map +1 -0
- package/out/registers.d.ts +279 -0
- package/out/registers.d.ts.map +1 -0
- package/out/registers.js +275 -0
- package/out/registers.js.map +1 -0
- package/out/ro/adapters/retea-scolara/adapter.d.ts +114 -0
- package/out/ro/adapters/retea-scolara/adapter.d.ts.map +1 -0
- package/out/ro/adapters/retea-scolara/adapter.js +209 -0
- package/out/ro/adapters/retea-scolara/adapter.js.map +1 -0
- package/out/ro/tools/fetch/retea-scolara.d.ts +69 -0
- package/out/ro/tools/fetch/retea-scolara.d.ts.map +1 -0
- package/out/ro/tools/fetch/retea-scolara.js +117 -0
- package/out/ro/tools/fetch/retea-scolara.js.map +1 -0
- package/out/runner.d.ts +121 -60
- package/out/runner.d.ts.map +1 -1
- package/out/runner.js +130 -56
- package/out/runner.js.map +1 -1
- package/out/sg/recipes/register.d.ts +18 -32
- package/out/sg/recipes/register.d.ts.map +1 -1
- package/out/sg/recipes/register.js +45 -50
- package/out/sg/recipes/register.js.map +1 -1
- package/out/sg/tools/fetch/acra.d.ts +11 -14
- package/out/sg/tools/fetch/acra.d.ts.map +1 -1
- package/out/sg/tools/fetch/acra.js +18 -21
- package/out/sg/tools/fetch/acra.js.map +1 -1
- package/out/si/recipes/bare-village.d.ts +12 -13
- package/out/si/recipes/bare-village.d.ts.map +1 -1
- package/out/si/recipes/bare-village.js +31 -17
- package/out/si/recipes/bare-village.js.map +1 -1
- package/out/sk/adapters/inspire/adapter.d.ts +119 -0
- package/out/sk/adapters/inspire/adapter.d.ts.map +1 -0
- package/out/sk/adapters/inspire/adapter.js +318 -0
- package/out/sk/adapters/inspire/adapter.js.map +1 -0
- package/out/sk/tools/fetch/inspire.d.ts +196 -0
- package/out/sk/tools/fetch/inspire.d.ts.map +1 -0
- package/out/sk/tools/fetch/inspire.js +281 -0
- package/out/sk/tools/fetch/inspire.js.map +1 -0
- package/out/source-register/effective-manifest.d.ts +355 -0
- package/out/source-register/effective-manifest.d.ts.map +1 -0
- package/out/source-register/effective-manifest.js +355 -0
- package/out/source-register/effective-manifest.js.map +1 -0
- package/out/source-register/register.d.ts +79 -0
- package/out/source-register/register.d.ts.map +1 -0
- package/out/source-register/register.js +400 -0
- package/out/source-register/register.js.map +1 -0
- package/out/source-register/training-manifest.d.ts +111 -0
- package/out/source-register/training-manifest.d.ts.map +1 -0
- package/out/source-register/training-manifest.js +120 -0
- package/out/source-register/training-manifest.js.map +1 -0
- package/out/source-register/types.d.ts +538 -0
- package/out/source-register/types.d.ts.map +1 -0
- package/out/source-register/types.js +263 -0
- package/out/source-register/types.js.map +1 -0
- package/out/source-register.d.ts +19 -0
- package/out/source-register.d.ts.map +1 -0
- package/out/source-register.js +16 -0
- package/out/source-register.js.map +1 -0
- package/out/south-asia/recipes/register.d.ts +20 -17
- package/out/south-asia/recipes/register.d.ts.map +1 -1
- package/out/south-asia/recipes/register.js +44 -24
- package/out/south-asia/recipes/register.js.map +1 -1
- package/out/subvenue/harvest.d.ts +117 -0
- package/out/subvenue/harvest.d.ts.map +1 -0
- package/out/subvenue/harvest.js +172 -0
- package/out/subvenue/harvest.js.map +1 -0
- package/out/subvenue/promotions.d.ts +65 -0
- package/out/subvenue/promotions.d.ts.map +1 -0
- package/out/{tools/sub/venue → subvenue}/promotions.js +15 -55
- package/out/subvenue/promotions.js.map +1 -0
- package/out/subvenue/surfaces.d.ts +39 -0
- package/out/subvenue/surfaces.d.ts.map +1 -0
- package/out/subvenue/surfaces.js +75 -0
- package/out/subvenue/surfaces.js.map +1 -0
- package/out/subvenue/table.d.ts +212 -0
- package/out/subvenue/table.d.ts.map +1 -0
- package/out/subvenue/table.js +94 -0
- package/out/subvenue/table.js.map +1 -0
- package/out/surfaces/locale.d.ts +113 -0
- package/out/surfaces/locale.d.ts.map +1 -0
- package/out/surfaces/locale.js +138 -0
- package/out/surfaces/locale.js.map +1 -0
- package/out/synthesizers/anchor-absorption.d.ts +22 -30
- package/out/synthesizers/anchor-absorption.d.ts.map +1 -1
- package/out/synthesizers/anchor-absorption.js +30 -85
- package/out/synthesizers/anchor-absorption.js.map +1 -1
- package/out/synthesizers/boundary-stress.d.ts +18 -49
- package/out/synthesizers/boundary-stress.d.ts.map +1 -1
- package/out/synthesizers/boundary-stress.js +45 -142
- package/out/synthesizers/boundary-stress.js.map +1 -1
- package/out/synthesizers/house-venue.d.ts +23 -25
- package/out/synthesizers/house-venue.d.ts.map +1 -1
- package/out/synthesizers/house-venue.js +47 -118
- package/out/synthesizers/house-venue.js.map +1 -1
- package/out/synthesizers/no-street.d.ts +7 -37
- package/out/synthesizers/no-street.d.ts.map +1 -1
- package/out/synthesizers/no-street.js +55 -111
- package/out/synthesizers/no-street.js.map +1 -1
- package/out/synthesizers/po-box.d.ts +48 -45
- package/out/synthesizers/po-box.d.ts.map +1 -1
- package/out/synthesizers/po-box.js +57 -97
- package/out/synthesizers/po-box.js.map +1 -1
- package/out/synthesizers/tail.d.ts +36 -0
- package/out/synthesizers/tail.d.ts.map +1 -0
- package/out/synthesizers/tail.js +32 -0
- package/out/synthesizers/tail.js.map +1 -0
- package/out/synthesizers/utils.d.ts +33 -129
- package/out/synthesizers/utils.d.ts.map +1 -1
- package/out/synthesizers/utils.js +71 -167
- package/out/synthesizers/utils.js.map +1 -1
- package/out/test-kit/corpus-recipe.d.ts +29 -23
- package/out/test-kit/corpus-recipe.d.ts.map +1 -1
- package/out/test-kit/corpus-recipe.js +28 -13
- package/out/test-kit/corpus-recipe.js.map +1 -1
- package/out/test-kit.d.ts +63 -0
- package/out/test-kit.d.ts.map +1 -0
- package/out/test-kit.js +88 -0
- package/out/test-kit.js.map +1 -0
- package/out/tools/align-canonical.d.ts +7 -0
- package/out/tools/align-canonical.d.ts.map +1 -0
- package/out/tools/align-canonical.js +52 -0
- package/out/tools/align-canonical.js.map +1 -0
- package/out/tools/audit.d.ts +19 -11
- package/out/tools/audit.d.ts.map +1 -1
- package/out/tools/audit.js +89 -97
- package/out/tools/audit.js.map +1 -1
- package/out/tools/corpus-stats.d.ts +24 -15
- package/out/tools/corpus-stats.d.ts.map +1 -1
- package/out/tools/corpus-stats.js +34 -30
- package/out/tools/corpus-stats.js.map +1 -1
- package/out/tools/fetch/atom.d.ts +115 -0
- package/out/tools/fetch/atom.d.ts.map +1 -0
- package/out/tools/fetch/atom.js +83 -0
- package/out/tools/fetch/atom.js.map +1 -0
- package/out/tools/fetch/cordis.d.ts +124 -0
- package/out/tools/fetch/cordis.d.ts.map +1 -0
- package/out/tools/fetch/cordis.js +210 -0
- package/out/tools/fetch/cordis.js.map +1 -0
- package/out/tools/fetch/download/manifest.d.ts +27 -18
- package/out/tools/fetch/download/manifest.d.ts.map +1 -1
- package/out/tools/fetch/download/manifest.js +22 -14
- package/out/tools/fetch/download/manifest.js.map +1 -1
- package/out/tools/fetch/download/network.d.ts +48 -27
- package/out/tools/fetch/download/network.d.ts.map +1 -1
- package/out/tools/fetch/download/network.js +26 -16
- package/out/tools/fetch/download/network.js.map +1 -1
- package/out/tools/fetch/download/retry.d.ts +16 -15
- package/out/tools/fetch/download/retry.d.ts.map +1 -1
- package/out/tools/fetch/download/retry.js +28 -28
- package/out/tools/fetch/download/retry.js.map +1 -1
- package/out/tools/fetch/{download/index.d.ts → download.d.ts} +1 -1
- package/out/tools/fetch/download.d.ts.map +1 -0
- package/out/tools/fetch/{download/index.js → download.js} +1 -1
- package/out/tools/fetch/download.js.map +1 -0
- package/out/tools/fetch/geonames/dump.d.ts +51 -32
- package/out/tools/fetch/geonames/dump.d.ts.map +1 -1
- package/out/tools/fetch/geonames/dump.js +54 -43
- package/out/tools/fetch/geonames/dump.js.map +1 -1
- package/out/tools/fetch/geonames/postal.d.ts +14 -49
- package/out/tools/fetch/geonames/postal.d.ts.map +1 -1
- package/out/tools/fetch/geonames/postal.js +17 -56
- package/out/tools/fetch/geonames/postal.js.map +1 -1
- package/out/tools/fetch/gleif.d.ts +138 -0
- package/out/tools/fetch/gleif.d.ts.map +1 -0
- package/out/tools/fetch/gleif.js +222 -0
- package/out/tools/fetch/gleif.js.map +1 -0
- package/out/tools/fetch/header.d.ts +43 -0
- package/out/tools/fetch/header.d.ts.map +1 -0
- package/out/tools/fetch/header.js +61 -0
- package/out/tools/fetch/header.js.map +1 -0
- package/out/tools/fetch/inspire-addresses.d.ts +254 -0
- package/out/tools/fetch/inspire-addresses.d.ts.map +1 -0
- package/out/tools/fetch/inspire-addresses.js +277 -0
- package/out/tools/fetch/inspire-addresses.js.map +1 -0
- package/out/tools/fetch/openaddresses.d.ts +1 -4
- package/out/tools/fetch/openaddresses.d.ts.map +1 -1
- package/out/tools/fetch/openaddresses.js +20 -99
- package/out/tools/fetch/openaddresses.js.map +1 -1
- package/out/tools/fetch/ourairports.d.ts +6 -33
- package/out/tools/fetch/ourairports.d.ts.map +1 -1
- package/out/tools/fetch/ourairports.js +14 -47
- package/out/tools/fetch/ourairports.js.map +1 -1
- package/out/tools/fetch/ppd.d.ts +4 -3
- package/out/tools/fetch/ppd.d.ts.map +1 -1
- package/out/tools/fetch/ppd.js +10 -7
- package/out/tools/fetch/ppd.js.map +1 -1
- package/out/tools/fetch/vlaanderen-ad.d.ts +131 -0
- package/out/tools/fetch/vlaanderen-ad.d.ts.map +1 -0
- package/out/tools/fetch/vlaanderen-ad.js +293 -0
- package/out/tools/fetch/vlaanderen-ad.js.map +1 -0
- package/out/tools/fetch/wfs-harvest.d.ts +420 -0
- package/out/tools/fetch/wfs-harvest.d.ts.map +1 -0
- package/out/tools/fetch/wfs-harvest.js +525 -0
- package/out/tools/fetch/wfs-harvest.js.map +1 -0
- package/out/tools/fetch/wikidata-subvenue.d.ts +32 -100
- package/out/tools/fetch/wikidata-subvenue.d.ts.map +1 -1
- package/out/tools/fetch/wikidata-subvenue.js +27 -122
- package/out/tools/fetch/wikidata-subvenue.js.map +1 -1
- package/out/tools/fetch/zip-archive.d.ts +54 -0
- package/out/tools/fetch/zip-archive.d.ts.map +1 -0
- package/out/tools/fetch/zip-archive.js +58 -0
- package/out/tools/fetch/zip-archive.js.map +1 -0
- package/out/tools/fetch.d.ts +99 -0
- package/out/tools/fetch.d.ts.map +1 -0
- package/out/tools/fetch.js +95 -0
- package/out/tools/fetch.js.map +1 -0
- package/out/tools/golden/expand.d.ts +28 -13
- package/out/tools/golden/expand.d.ts.map +1 -1
- package/out/tools/golden/expand.js +51 -37
- package/out/tools/golden/expand.js.map +1 -1
- package/out/tools/golden/promote.d.ts +13 -8
- package/out/tools/golden/promote.d.ts.map +1 -1
- package/out/tools/golden/promote.js +38 -30
- package/out/tools/golden/promote.js.map +1 -1
- package/out/tools/golden/relabel-street/directory.d.ts +25 -10
- package/out/tools/golden/relabel-street/directory.d.ts.map +1 -1
- package/out/tools/golden/relabel-street/directory.js +44 -32
- package/out/tools/golden/relabel-street/directory.js.map +1 -1
- package/out/tools/golden/relabel-street/row.d.ts +18 -69
- package/out/tools/golden/relabel-street/row.d.ts.map +1 -1
- package/out/tools/golden/relabel-street/row.js +19 -77
- package/out/tools/golden/relabel-street/row.js.map +1 -1
- package/out/tools/golden/{relabel-street/index.d.ts → relabel-street.d.ts} +1 -1
- package/out/tools/golden/relabel-street.d.ts.map +1 -0
- package/out/tools/golden/{relabel-street/index.js → relabel-street.js} +1 -1
- package/out/tools/golden/relabel-street.js.map +1 -0
- package/out/tools/ingest-csv.d.ts +19 -15
- package/out/tools/ingest-csv.d.ts.map +1 -1
- package/out/tools/ingest-csv.js +42 -46
- package/out/tools/ingest-csv.js.map +1 -1
- package/out/tools/jsonl-to-parquet.d.ts +15 -28
- package/out/tools/jsonl-to-parquet.d.ts.map +1 -1
- package/out/tools/jsonl-to-parquet.js +49 -91
- package/out/tools/jsonl-to-parquet.js.map +1 -1
- package/out/tools/lint/recipe-output/vocab.d.ts +82 -0
- package/out/tools/lint/recipe-output/vocab.d.ts.map +1 -0
- package/out/tools/lint/{slice → recipe-output}/vocab.js +54 -69
- package/out/tools/lint/recipe-output/vocab.js.map +1 -0
- package/out/tools/lint/recipe-output.d.ts +73 -0
- package/out/tools/lint/recipe-output.d.ts.map +1 -0
- package/out/tools/lint/{slice/index.js → recipe-output.js} +93 -96
- package/out/tools/lint/recipe-output.js.map +1 -0
- package/out/tools/migrate/overlay-parquet.d.ts +30 -0
- package/out/tools/migrate/overlay-parquet.d.ts.map +1 -0
- package/out/tools/migrate/overlay-parquet.js +141 -0
- package/out/tools/migrate/overlay-parquet.js.map +1 -0
- package/out/tools/migrate/recipe-output.d.ts +35 -0
- package/out/tools/migrate/recipe-output.d.ts.map +1 -0
- package/out/tools/migrate/recipe-output.js +124 -0
- package/out/tools/migrate/recipe-output.js.map +1 -0
- package/out/tools/migrate/source-names.d.ts +52 -0
- package/out/tools/migrate/source-names.d.ts.map +1 -0
- package/out/tools/migrate/source-names.js +105 -0
- package/out/tools/migrate/source-names.js.map +1 -0
- package/out/tools/overlay/kryptonite.d.ts +33 -0
- package/out/tools/overlay/kryptonite.d.ts.map +1 -0
- package/out/tools/{slice → overlay}/kryptonite.js +39 -29
- package/out/tools/overlay/kryptonite.js.map +1 -0
- package/out/tools/overlay/manifest.d.ts +143 -0
- package/out/tools/overlay/manifest.d.ts.map +1 -0
- package/out/tools/overlay/manifest.js +261 -0
- package/out/tools/overlay/manifest.js.map +1 -0
- package/out/tools/overlay/merge-source.d.ts +74 -0
- package/out/tools/overlay/merge-source.d.ts.map +1 -0
- package/out/tools/overlay/merge-source.js +63 -0
- package/out/tools/overlay/merge-source.js.map +1 -0
- package/out/tools/overlay/split-slice.d.ts +66 -0
- package/out/tools/overlay/split-slice.d.ts.map +1 -0
- package/out/tools/overlay/split-slice.js +78 -0
- package/out/tools/overlay/split-slice.js.map +1 -0
- package/out/tools/overlay/translit.d.ts +55 -0
- package/out/tools/overlay/translit.d.ts.map +1 -0
- package/out/tools/{slice → overlay}/translit.js +61 -49
- package/out/tools/overlay/translit.js.map +1 -0
- package/out/tools/overture-subvenue.d.ts +17 -76
- package/out/tools/overture-subvenue.d.ts.map +1 -1
- package/out/tools/overture-subvenue.js +7 -74
- package/out/tools/overture-subvenue.js.map +1 -1
- package/out/tools/postcode-triples.d.ts +78 -127
- package/out/tools/postcode-triples.d.ts.map +1 -1
- package/out/tools/postcode-triples.js +200 -193
- package/out/tools/postcode-triples.js.map +1 -1
- package/out/tools/source-register/build.d.ts +147 -0
- package/out/tools/source-register/build.d.ts.map +1 -0
- package/out/tools/source-register/build.js +517 -0
- package/out/tools/source-register/build.js.map +1 -0
- package/out/tools/sub/venue/head-nouns.d.ts +9 -38
- package/out/tools/sub/venue/head-nouns.d.ts.map +1 -1
- package/out/tools/sub/venue/head-nouns.js +37 -74
- package/out/tools/sub/venue/head-nouns.js.map +1 -1
- package/out/tools/sub/venue/lexicon.d.ts +53 -84
- package/out/tools/sub/venue/lexicon.d.ts.map +1 -1
- package/out/tools/sub/venue/lexicon.js +42 -90
- package/out/tools/sub/venue/lexicon.js.map +1 -1
- package/out/tools/sub/venue/wikidata.d.ts +8 -6
- package/out/tools/sub/venue/wikidata.d.ts.map +1 -1
- package/out/tools/sub/venue/wikidata.js +12 -9
- package/out/tools/sub/venue/wikidata.js.map +1 -1
- package/out/tw/tools/fetch/gcis.d.ts +9 -3
- package/out/tw/tools/fetch/gcis.d.ts.map +1 -1
- package/out/tw/tools/fetch/gcis.js +19 -13
- package/out/tw/tools/fetch/gcis.js.map +1 -1
- package/out/types.d.ts +271 -101
- package/out/types.d.ts.map +1 -1
- package/out/types.js +133 -9
- package/out/types.js.map +1 -1
- package/out/us/adapters/fcc-bdc/adapter.d.ts +18 -36
- package/out/us/adapters/fcc-bdc/adapter.d.ts.map +1 -1
- package/out/us/adapters/fcc-bdc/adapter.js +25 -38
- package/out/us/adapters/fcc-bdc/adapter.js.map +1 -1
- package/out/us/adapters/state/hi-schools/adapter.d.ts +12 -11
- package/out/us/adapters/state/hi-schools/adapter.d.ts.map +1 -1
- package/out/us/adapters/state/hi-schools/adapter.js +26 -16
- package/out/us/adapters/state/hi-schools/adapter.js.map +1 -1
- package/out/us/adapters/state/hi-schools/workbook.d.ts +8 -3
- package/out/us/adapters/state/hi-schools/workbook.d.ts.map +1 -1
- package/out/us/adapters/state/hi-schools/workbook.js +3 -1
- package/out/us/adapters/state/hi-schools/workbook.js.map +1 -1
- package/out/us/adapters/state/ia-contractors/adapter.d.ts +13 -6
- package/out/us/adapters/state/ia-contractors/adapter.d.ts.map +1 -1
- package/out/us/adapters/state/ia-contractors/adapter.js +27 -14
- package/out/us/adapters/state/ia-contractors/adapter.js.map +1 -1
- package/out/us/adapters/state/ny-notaries/adapter.d.ts +7 -6
- package/out/us/adapters/state/ny-notaries/adapter.d.ts.map +1 -1
- package/out/us/adapters/state/ny-notaries/adapter.js +24 -22
- package/out/us/adapters/state/ny-notaries/adapter.js.map +1 -1
- package/out/us/adapters/state/tx-notaries/adapter.d.ts +8 -7
- package/out/us/adapters/state/tx-notaries/adapter.d.ts.map +1 -1
- package/out/us/adapters/state/tx-notaries/adapter.js +21 -14
- package/out/us/adapters/state/tx-notaries/adapter.js.map +1 -1
- package/out/us/adapters/tiger/adapter.d.ts +10 -34
- package/out/us/adapters/tiger/adapter.d.ts.map +1 -1
- package/out/us/adapters/tiger/adapter.js +18 -42
- package/out/us/adapters/tiger/adapter.js.map +1 -1
- package/out/us/adapters/tiger/street-decompose.d.ts +6 -13
- package/out/us/adapters/tiger/street-decompose.d.ts.map +1 -1
- package/out/us/adapters/tiger/street-decompose.js +7 -17
- package/out/us/adapters/tiger/street-decompose.js.map +1 -1
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts +26 -20
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.js +41 -29
- package/out/us/adapters/usgov/hrsa-fqhc/adapter.js.map +1 -1
- package/out/us/adapters/usgov/imls-pls/adapter.d.ts +8 -7
- package/out/us/adapters/usgov/imls-pls/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/imls-pls/adapter.js +25 -18
- package/out/us/adapters/usgov/imls-pls/adapter.js.map +1 -1
- package/out/us/adapters/usgov/irs-bmf/adapter.d.ts +11 -10
- package/out/us/adapters/usgov/irs-bmf/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/irs-bmf/adapter.js +32 -22
- package/out/us/adapters/usgov/irs-bmf/adapter.js.map +1 -1
- package/out/us/adapters/usgov/nad/adapter.d.ts +11 -31
- package/out/us/adapters/usgov/nad/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/nad/adapter.js +57 -111
- package/out/us/adapters/usgov/nad/adapter.js.map +1 -1
- package/out/us/adapters/usgov/nppes/adapter.d.ts +12 -22
- package/out/us/adapters/usgov/nppes/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/nppes/adapter.js +62 -32
- package/out/us/adapters/usgov/nppes/adapter.js.map +1 -1
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts +16 -15
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.d.ts.map +1 -1
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js +38 -28
- package/out/us/adapters/usgov/samhsa-treatment-locator/adapter.js.map +1 -1
- package/out/us/fips-state.d.ts +19 -10
- package/out/us/fips-state.d.ts.map +1 -1
- package/out/us/fips-state.js +17 -8
- package/out/us/fips-state.js.map +1 -1
- package/out/{synthesizers → us/synthesizers}/intersection.d.ts +10 -8
- package/out/us/synthesizers/intersection.d.ts.map +1 -0
- package/out/{synthesizers → us/synthesizers}/intersection.js +46 -35
- package/out/us/synthesizers/intersection.js.map +1 -0
- package/out/{synthesizers → us/synthesizers}/street.d.ts +19 -12
- package/out/us/synthesizers/street.d.ts.map +1 -0
- package/out/{synthesizers → us/synthesizers}/street.js +45 -38
- package/out/us/synthesizers/street.js.map +1 -0
- package/out/us/tools/fetch/hrsa.d.ts +3 -3
- package/out/us/tools/fetch/hrsa.d.ts.map +1 -1
- package/out/us/tools/fetch/hrsa.js +6 -7
- package/out/us/tools/fetch/hrsa.js.map +1 -1
- package/out/us/tools/fetch/imls-pls.d.ts +5 -16
- package/out/us/tools/fetch/imls-pls.d.ts.map +1 -1
- package/out/us/tools/fetch/imls-pls.js +17 -34
- package/out/us/tools/fetch/imls-pls.js.map +1 -1
- package/out/us/tools/fetch/nad.d.ts +22 -10
- package/out/us/tools/fetch/nad.d.ts.map +1 -1
- package/out/us/tools/fetch/nad.js +30 -25
- package/out/us/tools/fetch/nad.js.map +1 -1
- package/out/us/tools/fetch/nppes.d.ts +6 -16
- package/out/us/tools/fetch/nppes.d.ts.map +1 -1
- package/out/us/tools/fetch/nppes.js +24 -36
- package/out/us/tools/fetch/nppes.js.map +1 -1
- package/out/us/tools/fetch/state/hi-schools.d.ts +9 -5
- package/out/us/tools/fetch/state/hi-schools.d.ts.map +1 -1
- package/out/us/tools/fetch/state/hi-schools.js +16 -14
- package/out/us/tools/fetch/state/hi-schools.js.map +1 -1
- package/out/us/tools/fetch/state/sources.d.ts +8 -7
- package/out/us/tools/fetch/state/sources.d.ts.map +1 -1
- package/out/us/tools/fetch/state/sources.js +8 -9
- package/out/us/tools/fetch/state/sources.js.map +1 -1
- package/out/us/tools/fetch/tiger-full.d.ts +1 -14
- package/out/us/tools/fetch/tiger-full.d.ts.map +1 -1
- package/out/us/tools/fetch/tiger-full.js +16 -55
- package/out/us/tools/fetch/tiger-full.js.map +1 -1
- package/out/utils/align.d.ts +26 -19
- package/out/utils/align.d.ts.map +1 -1
- package/out/utils/align.js +32 -47
- package/out/utils/align.js.map +1 -1
- package/out/utils/cooccurrence-stats.d.ts +58 -0
- package/out/utils/cooccurrence-stats.d.ts.map +1 -0
- package/out/utils/cooccurrence-stats.js +62 -0
- package/out/utils/cooccurrence-stats.js.map +1 -0
- package/out/utils/golden.d.ts +21 -31
- package/out/utils/golden.d.ts.map +1 -1
- package/out/utils/golden.js +30 -46
- package/out/utils/golden.js.map +1 -1
- package/out/utils/license.d.ts +159 -22
- package/out/utils/license.d.ts.map +1 -1
- package/out/utils/license.js +156 -26
- package/out/utils/license.js.map +1 -1
- package/out/utils/split.d.ts +66 -70
- package/out/utils/split.d.ts.map +1 -1
- package/out/utils/split.js +162 -69
- package/out/utils/split.js.map +1 -1
- package/out/utils/tokenize.d.ts +15 -44
- package/out/utils/tokenize.d.ts.map +1 -1
- package/out/utils/tokenize.js +18 -31
- package/out/utils/tokenize.js.map +1 -1
- package/out/utils/wof-json.d.ts +88 -62
- package/out/utils/wof-json.d.ts.map +1 -1
- package/out/utils/wof-json.js +77 -56
- package/out/utils/wof-json.js.map +1 -1
- package/out/{utils/index.js → utils.d.ts} +1 -2
- package/out/utils.d.ts.map +1 -0
- package/out/{utils/index.d.ts → utils.js} +1 -2
- package/out/utils.js.map +1 -0
- package/out/ve/recipes/reviewed-postcode-tail.d.ts +25 -7
- package/out/ve/recipes/reviewed-postcode-tail.d.ts.map +1 -1
- package/out/ve/recipes/reviewed-postcode-tail.js +33 -12
- package/out/ve/recipes/reviewed-postcode-tail.js.map +1 -1
- package/package.json +45 -488
- package/lib/adapters/index.ts +0 -160
- package/lib/adapters/synth-po-box/adapter.ts +0 -204
- package/lib/adapters/utils/index.ts +0 -307
- package/lib/recipes/bare/postcode/index.ts +0 -327
- package/lib/recipes/sub/venue/index.ts +0 -997
- package/lib/synthesizers/locale.ts +0 -261
- package/lib/test-kit/index.ts +0 -100
- package/lib/tools/align-slice.ts +0 -68
- package/lib/tools/fetch/index.ts +0 -174
- package/lib/tools/gb-title-case.ts +0 -69
- package/lib/tools/index.ts +0 -28
- package/lib/tools/lint/slice/vocab.ts +0 -376
- package/lib/tools/overlay-manifest.ts +0 -215
- package/lib/tools/slice/translit.ts +0 -218
- package/lib/tools/sub/venue/harvest.ts +0 -234
- package/lib/tools/sub/venue/surfaces.ts +0 -95
- package/lib/tools/sub/venue/table.ts +0 -281
- package/lib/utils/parquet.ts +0 -582
- package/out/adapters/index.d.ts +0 -51
- package/out/adapters/index.d.ts.map +0 -1
- package/out/adapters/index.js +0 -97
- package/out/adapters/index.js.map +0 -1
- package/out/adapters/synth-po-box/adapter.d.ts +0 -67
- package/out/adapters/synth-po-box/adapter.d.ts.map +0 -1
- package/out/adapters/synth-po-box/adapter.js.map +0 -1
- package/out/adapters/utils/index.d.ts +0 -191
- package/out/adapters/utils/index.d.ts.map +0 -1
- package/out/adapters/utils/index.js +0 -206
- package/out/adapters/utils/index.js.map +0 -1
- package/out/fr/adapters/ban/street-decompose.d.ts.map +0 -1
- package/out/fr/adapters/ban/street-decompose.js.map +0 -1
- package/out/no/recipes/street/index.d.ts +0 -18
- package/out/no/recipes/street/index.d.ts.map +0 -1
- package/out/no/recipes/street/index.js.map +0 -1
- package/out/recipes/bare/postcode/index.d.ts +0 -62
- package/out/recipes/bare/postcode/index.d.ts.map +0 -1
- package/out/recipes/bare/postcode/index.js.map +0 -1
- package/out/recipes/index.d.ts +0 -24
- package/out/recipes/index.d.ts.map +0 -1
- package/out/recipes/index.js.map +0 -1
- package/out/recipes/po/box/index.d.ts +0 -17
- package/out/recipes/po/box/index.d.ts.map +0 -1
- package/out/recipes/po/box/index.js.map +0 -1
- package/out/recipes/sub/venue/index.d.ts +0 -270
- package/out/recipes/sub/venue/index.d.ts.map +0 -1
- package/out/recipes/sub/venue/index.js +0 -728
- package/out/recipes/sub/venue/index.js.map +0 -1
- package/out/synthesizers/intersection.d.ts.map +0 -1
- package/out/synthesizers/intersection.js.map +0 -1
- package/out/synthesizers/locale.d.ts +0 -116
- package/out/synthesizers/locale.d.ts.map +0 -1
- package/out/synthesizers/locale.js +0 -150
- package/out/synthesizers/locale.js.map +0 -1
- package/out/synthesizers/street.d.ts.map +0 -1
- package/out/synthesizers/street.js.map +0 -1
- package/out/test-kit/index.d.ts +0 -48
- package/out/test-kit/index.d.ts.map +0 -1
- package/out/test-kit/index.js +0 -78
- package/out/test-kit/index.js.map +0 -1
- package/out/tools/align-slice.d.ts +0 -7
- package/out/tools/align-slice.d.ts.map +0 -1
- package/out/tools/align-slice.js +0 -55
- package/out/tools/align-slice.js.map +0 -1
- package/out/tools/fetch/download/index.d.ts.map +0 -1
- package/out/tools/fetch/download/index.js.map +0 -1
- package/out/tools/fetch/index.d.ts +0 -171
- package/out/tools/fetch/index.d.ts.map +0 -1
- package/out/tools/fetch/index.js +0 -170
- package/out/tools/fetch/index.js.map +0 -1
- package/out/tools/gb-title-case.d.ts +0 -2
- package/out/tools/gb-title-case.d.ts.map +0 -1
- package/out/tools/gb-title-case.js +0 -65
- package/out/tools/gb-title-case.js.map +0 -1
- package/out/tools/golden/relabel-street/index.d.ts.map +0 -1
- package/out/tools/golden/relabel-street/index.js.map +0 -1
- package/out/tools/index.d.ts +0 -28
- package/out/tools/index.d.ts.map +0 -1
- package/out/tools/index.js +0 -28
- package/out/tools/index.js.map +0 -1
- package/out/tools/lint/slice/index.d.ts +0 -93
- package/out/tools/lint/slice/index.d.ts.map +0 -1
- package/out/tools/lint/slice/index.js.map +0 -1
- package/out/tools/lint/slice/vocab.d.ts +0 -90
- package/out/tools/lint/slice/vocab.d.ts.map +0 -1
- package/out/tools/lint/slice/vocab.js.map +0 -1
- package/out/tools/overlay-manifest.d.ts +0 -89
- package/out/tools/overlay-manifest.d.ts.map +0 -1
- package/out/tools/overlay-manifest.js +0 -131
- package/out/tools/overlay-manifest.js.map +0 -1
- package/out/tools/slice/kryptonite.d.ts +0 -32
- package/out/tools/slice/kryptonite.d.ts.map +0 -1
- package/out/tools/slice/kryptonite.js.map +0 -1
- package/out/tools/slice/translit.d.ts +0 -51
- package/out/tools/slice/translit.d.ts.map +0 -1
- package/out/tools/slice/translit.js.map +0 -1
- package/out/tools/sub/venue/harvest.d.ts +0 -100
- package/out/tools/sub/venue/harvest.d.ts.map +0 -1
- package/out/tools/sub/venue/harvest.js +0 -168
- package/out/tools/sub/venue/harvest.js.map +0 -1
- package/out/tools/sub/venue/promotions.d.ts +0 -94
- package/out/tools/sub/venue/promotions.d.ts.map +0 -1
- package/out/tools/sub/venue/promotions.js.map +0 -1
- package/out/tools/sub/venue/surfaces.d.ts +0 -45
- package/out/tools/sub/venue/surfaces.d.ts.map +0 -1
- package/out/tools/sub/venue/surfaces.js +0 -77
- package/out/tools/sub/venue/surfaces.js.map +0 -1
- package/out/tools/sub/venue/table.d.ts +0 -229
- package/out/tools/sub/venue/table.d.ts.map +0 -1
- package/out/tools/sub/venue/table.js +0 -108
- package/out/tools/sub/venue/table.js.map +0 -1
- package/out/utils/index.d.ts.map +0 -1
- package/out/utils/index.js.map +0 -1
- package/out/utils/parquet.d.ts +0 -178
- package/out/utils/parquet.d.ts.map +0 -1
- package/out/utils/parquet.js +0 -371
- package/out/utils/parquet.js.map +0 -1
- package/out/utils/slice-stats.d.ts +0 -52
- package/out/utils/slice-stats.d.ts.map +0 -1
- package/out/utils/slice-stats.js +0 -58
- package/out/utils/slice-stats.js.map +0 -1
- /package/lib/tools/fetch/{download/index.ts → download.ts} +0 -0
- /package/lib/tools/golden/{relabel-street/index.ts → relabel-street.ts} +0 -0
|
@@ -3,56 +3,24 @@
|
|
|
3
3
|
* @license AGPL-3.0
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
6
|
+
* Extract `(postcode, locality, region, country)` tuples for the `trailing-region` recipe.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* `$MAILWOMAN_DATA_ROOT/corpus/tuples/trailing-region-structured-tuples.jsonl` — but the code that produced it did
|
|
10
|
-
* not, so a note describing the join was the only record and it did not match what the databases contain. That is the
|
|
11
|
-
* reason this file exists: the slice is unbuildable for a new country without it.
|
|
12
|
-
*
|
|
13
|
-
* ## Two sources, because one route does not reach every country
|
|
14
|
-
*
|
|
15
|
-
* - **`postalcode-intl.db`** carries a real `parent_id` that resolves in the admin gazetteer. Measured share of rows
|
|
16
|
-
* with a parent: NL 97.5%, FR 90.7%, DE 66.1%, ES 34.9%, IT 27.4%; of those, 93.8–100% land on a `locality` or
|
|
17
|
-
* `localadmin`, and the region comes from that place's own ancestry. It is the ONLY slice with this — every
|
|
18
|
-
* `postalcode-geonames-*` and `postalcode-<cc>-overture.db` row reads `parent_id = 0`.
|
|
19
|
-
* - **GeoNames postal exports** carry the place and admin1 NAMES in columns 3 and 4, so there is nothing to join.
|
|
20
|
-
* `mailwoman corpus fetch geonames-postal` puts them on disk.
|
|
21
|
-
*
|
|
22
|
-
* A nearest-locality-centroid join was measured as the general fallback and REJECTED: scored against the `parent_id`
|
|
23
|
-
* truth, it agreed NL 81.1% / DE 44.7% / ES 35.1% / FR 29.0% / IT 13.5%. A locality's centroid sits at its middle, so
|
|
24
|
-
* an edge postcode is routinely nearer a neighbouring town's centroid. Do not reach for it again.
|
|
25
|
-
*
|
|
26
|
-
* ## The hub cap is PER COUNTRY, because a pooled one is a mixture
|
|
27
|
-
*
|
|
28
|
-
* A few localities act as catch-all parents — `Schwedt/Oder` claims 9,222 DE postcodes against a DE median of 1. Left
|
|
29
|
-
* in, a handful of places dominate the slice. But the distribution differs so much by country that one threshold is
|
|
30
|
-
* not one rule: a p99 pooled across the five countries lands at 522, which keeps 100% of ES and IT, 83% of FR, 49% of
|
|
31
|
-
* NL and 19% of DE.
|
|
32
|
-
*
|
|
33
|
-
* So the bound is a QUOTA and not a threshold. A threshold DELETES a locality that exceeds it, which removes exactly
|
|
34
|
-
* the largest cities — the places a parser most needs to have seen. A quota keeps every locality and bounds how many
|
|
35
|
-
* of its postcodes ride along, which is the balance the cap was reaching for without the deletion.
|
|
36
|
-
*
|
|
37
|
-
* ## Placement is data, not a formatting choice
|
|
38
|
-
*
|
|
39
|
-
* Each tuple is stamped with its country's {@link PostcodePlacement}. The same digits change tag with position, so a
|
|
40
|
-
* tuple that does not carry its placement teaches whichever convention the recipe happens to default to — see the
|
|
41
|
-
* recipe's header for the measurement.
|
|
8
|
+
* Each tuple is stamped with its country's {@link PostcodePlacement}, because the same digits change tag with position.
|
|
42
9
|
*/
|
|
43
10
|
|
|
44
11
|
import { officialLanguagesAlpha3, regionLanguagesAlpha3 } from "@mailwoman/codex/country"
|
|
45
12
|
import { foldName } from "@mailwoman/codex/normalize"
|
|
46
13
|
import { dataRootPath } from "@mailwoman/core/data-root"
|
|
47
|
-
import {
|
|
14
|
+
import { assertPathExists } from "@mailwoman/core/fs/readers/stat"
|
|
15
|
+
import { wofDatabasePath } from "@mailwoman/resolver-wof-sqlite/paths"
|
|
48
16
|
import type { WOFDatabase } from "@mailwoman/resolver-wof-sqlite/schema"
|
|
49
17
|
import { DatabaseClient } from "@mailwoman/sqlite/client"
|
|
50
|
-
import {
|
|
18
|
+
import { PathBuilder, type PathBuilderLike } from "path-ts"
|
|
51
19
|
import { TSVSpliterator } from "spliterator"
|
|
52
20
|
|
|
53
21
|
import { GEONAMES_POSTAL_COLUMNS } from "#adapters/geonames/postal/adapter"
|
|
22
|
+
import { escapeSQLString } from "#parquet/duckdb"
|
|
54
23
|
import type { PostcodePlacement } from "#recipes/scaffold"
|
|
55
|
-
import { escapeSQLString } from "#utils/parquet"
|
|
56
24
|
|
|
57
25
|
/**
|
|
58
26
|
* One extracted tuple, in the shape `readTuples` yields and the recipe consumes.
|
|
@@ -60,12 +28,11 @@ import { escapeSQLString } from "#utils/parquet"
|
|
|
60
28
|
export interface PostcodeTriple {
|
|
61
29
|
postcode: string
|
|
62
30
|
/**
|
|
63
|
-
* The segment before the locality, when the source has one.
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* with the venue and the street both gone, and 11 of its 25 regressions were venue-led rows across seven countries.
|
|
31
|
+
* The segment before the locality, when the source has one.
|
|
32
|
+
*
|
|
33
|
+
* A recipe output whose every row begins with the locality teaches that the first segment is the locality.
|
|
67
34
|
*/
|
|
68
|
-
dependentLocality
|
|
35
|
+
dependentLocality: string | null
|
|
69
36
|
locality: string
|
|
70
37
|
region: string
|
|
71
38
|
country: string
|
|
@@ -75,21 +42,27 @@ export interface PostcodeTriple {
|
|
|
75
42
|
}
|
|
76
43
|
|
|
77
44
|
/**
|
|
78
|
-
*
|
|
45
|
+
* The GeoNames postal column that contains the locality for a country.
|
|
79
46
|
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
|
|
47
|
+
* `admin2` is the default.
|
|
48
|
+
* For the US it is the inverse, because column 3 is the city and admin2 the county,
|
|
49
|
+
* so taking the default would train counties as cities.
|
|
50
|
+
*/
|
|
51
|
+
export type GeonamesLocalityColumn = "place" | "admin2"
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Records where a country writes the postcode.
|
|
55
|
+
* It also records the locale tag in its rows.
|
|
84
56
|
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* writes it; and ZA's `14 Long St, Green Point, Cape Town, 8001` carries no REGION, which this slice requires — a fact
|
|
88
|
-
* its GeoNames export agrees with, at 100% place and 0% admin1.
|
|
57
|
+
* A country is in this table only when a gauntlet board row attests its surface, because extracting
|
|
58
|
+
* an absent country with the wrong placement teaches a convention that country does not use.
|
|
89
59
|
*/
|
|
90
|
-
export const POSTCODE_CONVENTIONS: ReadonlyMap<
|
|
91
|
-
|
|
92
|
-
|
|
60
|
+
export const POSTCODE_CONVENTIONS: ReadonlyMap<
|
|
61
|
+
string,
|
|
62
|
+
{ placement: PostcodePlacement; locale: string; localityColumn?: GeonamesLocalityColumn }
|
|
63
|
+
> = new Map([
|
|
64
|
+
// `Rue de l'Église, 3, 29217 Plougonvelin, Bretagne, France` and its siblings in
|
|
65
|
+
// the structured slices attest this leading placement.
|
|
93
66
|
["FR", { placement: "leading", locale: "fr-FR" }],
|
|
94
67
|
["DE", { placement: "leading", locale: "de-DE" }],
|
|
95
68
|
["ES", { placement: "leading", locale: "es-ES" }],
|
|
@@ -97,35 +70,39 @@ export const POSTCODE_CONVENTIONS: ReadonlyMap<string, { placement: PostcodePlac
|
|
|
97
70
|
["NL", { placement: "leading", locale: "nl-NL" }],
|
|
98
71
|
["PT", { placement: "leading", locale: "pt-PT" }],
|
|
99
72
|
["MX", { placement: "leading", locale: "es-MX" }],
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
// placement is what makes the absence legible.
|
|
73
|
+
// No postcode source on disk and GeoNames does not publish VE, so this entry yields no row.
|
|
74
|
+
// It is here because the placement makes the absence legible.
|
|
103
75
|
["VE", { placement: "after_locality", locale: "es-VE" }],
|
|
104
|
-
// `12 MG Road, Indiranagar, Bengaluru, Karnataka 560038, India` — three `in_*` rows,
|
|
105
|
-
//
|
|
76
|
+
// `12 MG Road, Indiranagar, Bengaluru, Karnataka 560038, India` — three `in_*` rows,
|
|
77
|
+
// the one trailing placement with real data behind it.
|
|
106
78
|
["IN", { placement: "after_region", locale: "en-IN" }],
|
|
79
|
+
// Attested by the four `us_city_state_postcode` board rows; `localityColumn` keeps it from training counties.
|
|
80
|
+
["US", { placement: "after_region", locale: "en-US", localityColumn: "place" }],
|
|
81
|
+
// The two `br_*` rows list locality, region and CEP in that order.
|
|
82
|
+
// The default `admin2` column is right here, because BR's export writes the
|
|
83
|
+
// municipality in column 3 and admin2 alike.
|
|
84
|
+
["BR", { placement: "after_region", locale: "pt-BR" }],
|
|
107
85
|
])
|
|
108
86
|
|
|
109
87
|
/**
|
|
110
88
|
* How many postcodes one locality may contribute.
|
|
111
89
|
*
|
|
112
|
-
* A quota rather than a cutoff
|
|
113
|
-
* postcodes contributes this many and stays in the slice.
|
|
90
|
+
* A quota rather than a cutoff: it bounds repetition without deleting a locality.
|
|
114
91
|
*/
|
|
115
92
|
export const DEFAULT_LOCALITY_QUOTA = 24
|
|
116
93
|
|
|
117
94
|
/**
|
|
118
95
|
* Take at most `quota` tuples per locality, in the order they arrive.
|
|
119
96
|
*
|
|
120
|
-
*
|
|
121
|
-
* across runs, so the same quota selects the same rows.
|
|
97
|
+
* Both readers walk their source in id/file order.
|
|
98
|
+
* That order is stable across runs, so the same quota selects the same rows.
|
|
122
99
|
*/
|
|
123
|
-
export function applyLocalityQuota(
|
|
124
|
-
triples: readonly
|
|
100
|
+
export function applyLocalityQuota<T extends { cc: string; locality: string }>(
|
|
101
|
+
triples: readonly T[],
|
|
125
102
|
quota: number = DEFAULT_LOCALITY_QUOTA
|
|
126
|
-
):
|
|
103
|
+
): T[] {
|
|
127
104
|
const seen = new Map<string, number>()
|
|
128
|
-
const kept:
|
|
105
|
+
const kept: T[] = []
|
|
129
106
|
|
|
130
107
|
for (const triple of triples) {
|
|
131
108
|
const key = `${triple.cc} ${triple.locality}`
|
|
@@ -141,41 +118,62 @@ export function applyLocalityQuota(
|
|
|
141
118
|
}
|
|
142
119
|
|
|
143
120
|
/**
|
|
144
|
-
* Take at most `budget` tuples per
|
|
145
|
-
*
|
|
146
|
-
* A per-locality quota bounds how often one place repeats; it cannot bound a country. IN has 128,152 distinct
|
|
147
|
-
* localities, so even at a quota of ONE it contributes 63,533 rows against 39,790 from the other seven combined — the
|
|
148
|
-
* slice would teach the trailing surface as an Indian fact rather than a general one, and at 103,323 rows it would take
|
|
149
|
-
* 30% of an 8,000-step run's sample budget at three reps per row.
|
|
121
|
+
* Take at most `budget` tuples per country, in the order they arrive.
|
|
150
122
|
*
|
|
151
|
-
* Applied
|
|
152
|
-
*
|
|
123
|
+
* Applied after {@link applyLocalityQuota}, and spent BY region in rounds so a cap
|
|
124
|
+
* smaller than the source still reaches every region rather than one corner.
|
|
125
|
+
* `subKey` adds a second round-robin dimension so the budget spreads across `(region, subKey)`.
|
|
153
126
|
*/
|
|
154
|
-
export function applyCountryBudget(
|
|
155
|
-
triples: readonly
|
|
156
|
-
budget: number | ReadonlyMap<string, number
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
const
|
|
127
|
+
export function applyCountryBudget<T extends { cc: string; region?: string }>(
|
|
128
|
+
triples: readonly T[],
|
|
129
|
+
budget: number | ReadonlyMap<string, number>,
|
|
130
|
+
subKey?: (triple: T) => string
|
|
131
|
+
): T[] {
|
|
132
|
+
const byRegion = new Map<string, T[]>()
|
|
133
|
+
const order: string[] = []
|
|
160
134
|
|
|
161
135
|
for (const triple of triples) {
|
|
162
136
|
const cap = typeof budget === "number" ? budget : budget.get(triple.cc)
|
|
163
137
|
|
|
164
138
|
if (cap === undefined) continue
|
|
165
139
|
|
|
166
|
-
const
|
|
140
|
+
const key = `${triple.cc} ${triple.region ?? ""}${subKey ? ` ${subKey(triple)}` : ""}`
|
|
141
|
+
const bucket = byRegion.get(key)
|
|
167
142
|
|
|
168
|
-
if (
|
|
143
|
+
if (bucket) {
|
|
144
|
+
bucket.push(triple)
|
|
145
|
+
} else {
|
|
146
|
+
byRegion.set(key, [triple])
|
|
147
|
+
order.push(key)
|
|
148
|
+
}
|
|
149
|
+
}
|
|
169
150
|
|
|
170
|
-
|
|
171
|
-
|
|
151
|
+
const spent = new Map<string, number>()
|
|
152
|
+
const kept: T[] = []
|
|
153
|
+
const deepest = Math.max(0, ...[...byRegion.values()].map((bucket) => bucket.length))
|
|
154
|
+
|
|
155
|
+
for (let round = 0; round < deepest; round++) {
|
|
156
|
+
for (const key of order) {
|
|
157
|
+
const triple = byRegion.get(key)![round]
|
|
158
|
+
|
|
159
|
+
if (!triple) continue
|
|
160
|
+
|
|
161
|
+
const cap = typeof budget === "number" ? budget : budget.get(triple.cc)!
|
|
162
|
+
const n = spent.get(triple.cc) ?? 0
|
|
163
|
+
|
|
164
|
+
if (n >= cap) continue
|
|
165
|
+
|
|
166
|
+
spent.set(triple.cc, n + 1)
|
|
167
|
+
kept.push(triple)
|
|
168
|
+
}
|
|
172
169
|
}
|
|
173
170
|
|
|
174
171
|
return kept
|
|
175
172
|
}
|
|
176
173
|
|
|
177
174
|
/**
|
|
178
|
-
* A place's preferred names in the languages its addresses are written in,
|
|
175
|
+
* A place's preferred names in the languages its addresses are written in,
|
|
176
|
+
* read from the gazetteer's `names` table.
|
|
179
177
|
*/
|
|
180
178
|
interface PreferredNames {
|
|
181
179
|
/**
|
|
@@ -189,19 +187,18 @@ interface PreferredNames {
|
|
|
189
187
|
}
|
|
190
188
|
|
|
191
189
|
/**
|
|
192
|
-
* The surfaces a
|
|
193
|
-
* co-official languages, then the gazetteer's own `spr.name`
|
|
190
|
+
* The surfaces a region is written as: its preferred names in the official language(s),
|
|
191
|
+
* then the region's co-official languages, then the gazetteer's own `spr.name`
|
|
192
|
+
* (the English exonym), deduplicated with order kept.
|
|
194
193
|
*
|
|
195
|
-
* `spr.name`
|
|
196
|
-
*
|
|
197
|
-
* Balears`, and every province with its accent gone (`Cordoba`, `Leon`). A Spanish user writes `Islas Baleares` or
|
|
198
|
-
* `Illes Balears`; the exonym stays as ONE surface among them because a user may write it too.
|
|
194
|
+
* An input that uses only `spr.name` teaches stripped exonyms (`Balearic Islands`, `Cordoba`)
|
|
195
|
+
* against the forms a user writes.
|
|
199
196
|
*/
|
|
200
197
|
export function regionWrittenForms(sprName: string, names: PreferredNames): string[] {
|
|
201
198
|
const out: string[] = []
|
|
202
199
|
|
|
203
|
-
for (const raw of [...names.official, ...names.coOfficial, sprName]) {
|
|
204
|
-
const name = raw.replace(PROVINCE_GENERIC, "")
|
|
200
|
+
for (const raw of [...names.official, ...names.coOfficial, ...sprName.split(BILINGUAL_JOINED)]) {
|
|
201
|
+
const name = raw.trim().replace(PROVINCE_GENERIC, "")
|
|
205
202
|
|
|
206
203
|
if (name && !out.includes(name)) {
|
|
207
204
|
out.push(name)
|
|
@@ -212,16 +209,21 @@ export function regionWrittenForms(sprName: string, names: PreferredNames): stri
|
|
|
212
209
|
}
|
|
213
210
|
|
|
214
211
|
/**
|
|
215
|
-
* The
|
|
216
|
-
*
|
|
217
|
-
*
|
|
212
|
+
* The separator Who's On First joins a region's two co-official names with.
|
|
213
|
+
*
|
|
214
|
+
* Spaces are required on both sides, because a slash with no surrounding spaces appears inside single names.
|
|
215
|
+
*/
|
|
216
|
+
const BILINGUAL_JOINED = / \/ /
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* The provincial generic Who's On First keeps in a province's Catalan and Asturian
|
|
220
|
+
* preferred names, dropped so the surface dedupes against the Castilian one.
|
|
218
221
|
*/
|
|
219
222
|
const PROVINCE_GENERIC = /^prov[ií]ncia (?:de |d')/iu
|
|
220
223
|
|
|
221
224
|
/**
|
|
222
|
-
* The surface a
|
|
223
|
-
*
|
|
224
|
-
* a fan-out: the region carries the multiplicity and the locality would multiply it.
|
|
225
|
+
* The surface a locality is written as: the official-language preferred name matching
|
|
226
|
+
* `spr.name` folded, else the first official-language name, else `spr.name`.
|
|
225
227
|
*/
|
|
226
228
|
export function localityWrittenForm(sprName: string, names: PreferredNames): string {
|
|
227
229
|
const folded = foldName(sprName)
|
|
@@ -230,31 +232,25 @@ export function localityWrittenForm(sprName: string, names: PreferredNames): str
|
|
|
230
232
|
}
|
|
231
233
|
|
|
232
234
|
/**
|
|
233
|
-
* Read triples out of `postalcode-intl.db` by following each postcode's `parent_id`
|
|
234
|
-
* place's ancestry to a region.
|
|
235
|
-
*
|
|
236
|
-
* A postcode whose parent does not resolve, or whose parent has no region ancestor, is DROPPED rather than emitted with
|
|
237
|
-
* a blank — the recipe already skips a tuple with no region, and a blank here would hide how much of the source is
|
|
238
|
-
* actually reachable.
|
|
235
|
+
* Read triples out of `postalcode-intl.db` by following each postcode's `parent_id`
|
|
236
|
+
* into the admin gazetteer and that place's ancestry to a region.
|
|
239
237
|
*
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
* official languages plus the province's co-official ones — and never from the names table's own language list, whose
|
|
243
|
-
* "preferred" name in a language not spoken in the province is often the parent community's (`Zamora` → `Castella i
|
|
244
|
-
* Lleó`).
|
|
238
|
+
* A postcode whose parent does not resolve, or whose parent has no region ancestor,
|
|
239
|
+
* is dropped rather than emitted with a blank.
|
|
245
240
|
*/
|
|
246
241
|
export async function readTriplesFromParentJoin(
|
|
247
242
|
countries: readonly string[],
|
|
248
|
-
options: { postcodeDB?:
|
|
243
|
+
options: { postcodeDB?: PathBuilderLike; adminDB?: PathBuilderLike } = {}
|
|
249
244
|
): Promise<PostcodeTriple[]> {
|
|
250
|
-
const postcodeDB = options.postcodeDB ??
|
|
251
|
-
const adminDB = options.adminDB ??
|
|
245
|
+
const postcodeDB = options.postcodeDB ?? wofDatabasePath("postalcode-intl.db")
|
|
246
|
+
const adminDB = options.adminDB ?? wofDatabasePath("admin-global-priority-importance.db")
|
|
252
247
|
|
|
253
|
-
|
|
248
|
+
await assertPathExists(postcodeDB, `readTriplesFromParentJoin: no postcode database at ${postcodeDB}`)
|
|
249
|
+
await assertPathExists(adminDB, `readTriplesFromParentJoin: no admin gazetteer at ${adminDB}`)
|
|
254
250
|
|
|
255
251
|
using db = new DatabaseClient<WOFDatabase>(adminDB, { readOnly: true })
|
|
256
252
|
|
|
257
|
-
db.exec(`ATTACH DATABASE '${escapeSQLString(postcodeDB)}' AS pc`)
|
|
253
|
+
db.exec(`ATTACH DATABASE '${escapeSQLString(postcodeDB.toString())}' AS pc`)
|
|
258
254
|
|
|
259
255
|
const statement = db.prepare(`
|
|
260
256
|
SELECT p.name AS postcode, a.id AS locality_id, a.name AS locality, r.id AS region_id, r.name AS region,
|
|
@@ -269,15 +265,74 @@ export async function readTriplesFromParentJoin(
|
|
|
269
265
|
ORDER BY p.id
|
|
270
266
|
`)
|
|
271
267
|
|
|
268
|
+
const surfaces = createSurfaceReader(db)
|
|
269
|
+
const out: PostcodeTriple[] = []
|
|
270
|
+
|
|
271
|
+
for (const cc of countries) {
|
|
272
|
+
const convention = POSTCODE_CONVENTIONS.get(cc)
|
|
273
|
+
|
|
274
|
+
if (!convention) continue
|
|
275
|
+
|
|
276
|
+
for (const row of statement.all(cc) as Array<{
|
|
277
|
+
postcode: string | null
|
|
278
|
+
locality_id: number
|
|
279
|
+
locality: string | null
|
|
280
|
+
region_id: number
|
|
281
|
+
region: string | null
|
|
282
|
+
country: string | null
|
|
283
|
+
}>) {
|
|
284
|
+
if (!row.postcode || !row.locality || !row.region) continue
|
|
285
|
+
|
|
286
|
+
const locality = surfaces.locality(cc, row.locality_id, row.locality)
|
|
287
|
+
|
|
288
|
+
for (const region of surfaces.region(cc, row.region_id, row.region)) {
|
|
289
|
+
out.push({
|
|
290
|
+
postcode: row.postcode,
|
|
291
|
+
dependentLocality: null,
|
|
292
|
+
locality,
|
|
293
|
+
region,
|
|
294
|
+
country: row.country ?? "",
|
|
295
|
+
cc,
|
|
296
|
+
locale: convention.locale,
|
|
297
|
+
postcodePlacement: convention.placement,
|
|
298
|
+
})
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
return out
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Reads the surfaces a place is written as against one open admin gazetteer, caching each
|
|
308
|
+
* place's preferred names by id so a region met once per locality is read once in total.
|
|
309
|
+
*/
|
|
310
|
+
interface SurfaceReader {
|
|
311
|
+
/**
|
|
312
|
+
* Every surface the region is written as, in the order {@link regionWrittenForms} defines.
|
|
313
|
+
*/
|
|
314
|
+
region: (cc: string, id: number, sprName: string) => string[]
|
|
315
|
+
/**
|
|
316
|
+
* The one surface the locality is written as.
|
|
317
|
+
*
|
|
318
|
+
* See {@link localityWrittenForm} for why it is one and not a fan-out.
|
|
319
|
+
*/
|
|
320
|
+
locality: (cc: string, id: number, sprName: string) => string
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Bind {@link regionWrittenForms} and {@link localityWrittenForm} to an open gazetteer.
|
|
325
|
+
*
|
|
326
|
+
* The languages come from the codex instead of the names table's language list.
|
|
327
|
+
* The table's "preferred" name may use a language not spoken in the region and may refer to the parent.
|
|
328
|
+
*/
|
|
329
|
+
function createSurfaceReader(db: DatabaseClient<WOFDatabase>): SurfaceReader {
|
|
272
330
|
const preferredStatement = db.prepare(
|
|
273
331
|
`SELECT language, name FROM names WHERE id = ? AND privateuse = 'preferred' AND language IS NOT NULL ORDER BY language, name`
|
|
274
332
|
)
|
|
275
333
|
|
|
276
334
|
const preferredByID = new Map<number, Map<string, string[]>>()
|
|
277
335
|
|
|
278
|
-
/**
|
|
279
|
-
* Preferred names of one place, grouped by language, read once per id.
|
|
280
|
-
*/
|
|
281
336
|
const preferredNames = (id: number): Map<string, string[]> => {
|
|
282
337
|
let byLanguage = preferredByID.get(id)
|
|
283
338
|
|
|
@@ -300,53 +355,82 @@ export async function readTriplesFromParentJoin(
|
|
|
300
355
|
const namesIn = (byLanguage: Map<string, string[]>, languages: readonly string[]): string[] =>
|
|
301
356
|
languages.flatMap((language) => byLanguage.get(language) ?? [])
|
|
302
357
|
|
|
303
|
-
|
|
358
|
+
return {
|
|
359
|
+
region(cc, id, sprName) {
|
|
360
|
+
const officialLanguages = officialLanguagesAlpha3(cc)
|
|
361
|
+
const official = namesIn(preferredNames(id), officialLanguages)
|
|
362
|
+
// The co-official table is keyed by the region's name in the first official language.
|
|
363
|
+
// A region the names table has no such name for is looked up by its `spr.name`,
|
|
364
|
+
// which for a monolingual country is the same string.
|
|
365
|
+
const regionLanguages = regionLanguagesAlpha3(cc, official[0] ?? sprName)
|
|
366
|
+
const coOfficialLanguages = regionLanguages.filter((language) => !officialLanguages.includes(language))
|
|
367
|
+
|
|
368
|
+
return regionWrittenForms(sprName, { official, coOfficial: namesIn(preferredNames(id), coOfficialLanguages) })
|
|
369
|
+
},
|
|
370
|
+
locality(cc, id, sprName) {
|
|
371
|
+
const official = namesIn(preferredNames(id), officialLanguagesAlpha3(cc))
|
|
372
|
+
|
|
373
|
+
return localityWrittenForm(sprName, { official, coOfficial: [] })
|
|
374
|
+
},
|
|
375
|
+
}
|
|
376
|
+
}
|
|
304
377
|
|
|
305
|
-
|
|
306
|
-
|
|
378
|
+
/**
|
|
379
|
+
* One extracted `(locality, region, country)` pair, carrying no postcode.
|
|
380
|
+
*/
|
|
381
|
+
export type AdminPair = Omit<PostcodeTriple, "postcode" | "postcodePlacement">
|
|
307
382
|
|
|
308
|
-
|
|
383
|
+
/**
|
|
384
|
+
* Read `(locality, region, country)` pairs for a country straight from the
|
|
385
|
+
* admin gazetteer, with no postcode.
|
|
386
|
+
*
|
|
387
|
+
* Produces one pair per region surface, following {@link readTriplesFromParentJoin}.
|
|
388
|
+
* The reader synthesizes no postcode.
|
|
389
|
+
*/
|
|
390
|
+
export async function readPairsFromAdmin(
|
|
391
|
+
countries: readonly string[],
|
|
392
|
+
options: { adminDB?: PathBuilderLike; locale?: (cc: string) => string } = {}
|
|
393
|
+
): Promise<AdminPair[]> {
|
|
394
|
+
const adminDB = options.adminDB ?? wofDatabasePath("admin-global-priority-importance.db")
|
|
309
395
|
|
|
310
|
-
|
|
396
|
+
await assertPathExists(adminDB, `readPairsFromAdmin: no admin gazetteer at ${adminDB}`)
|
|
397
|
+
|
|
398
|
+
using db = new DatabaseClient<WOFDatabase>(adminDB, { readOnly: true })
|
|
399
|
+
|
|
400
|
+
const statement = db.prepare(`
|
|
401
|
+
SELECT a.id AS locality_id, a.name AS locality, r.id AS region_id, r.name AS region, c.name AS country
|
|
402
|
+
FROM spr a
|
|
403
|
+
JOIN ancestors anc ON anc.id = a.id AND anc.ancestor_placetype = 'region'
|
|
404
|
+
JOIN spr r ON r.id = anc.ancestor_id
|
|
405
|
+
JOIN ancestors cnc ON cnc.id = a.id AND cnc.ancestor_placetype = 'country'
|
|
406
|
+
JOIN spr c ON c.id = cnc.ancestor_id
|
|
407
|
+
WHERE a.country = ? AND a.placetype IN ('locality', 'localadmin') AND a.is_current != 0 AND a.is_deprecated = 0
|
|
408
|
+
ORDER BY a.id
|
|
409
|
+
`)
|
|
410
|
+
|
|
411
|
+
const surfaces = createSurfaceReader(db)
|
|
412
|
+
const out: AdminPair[] = []
|
|
413
|
+
|
|
414
|
+
for (const cc of countries) {
|
|
415
|
+
const locale = options.locale?.(cc) ?? "und"
|
|
311
416
|
|
|
312
417
|
for (const row of statement.all(cc) as Array<{
|
|
313
|
-
postcode: string | null
|
|
314
418
|
locality_id: number
|
|
315
419
|
locality: string | null
|
|
316
420
|
region_id: number
|
|
317
421
|
region: string | null
|
|
318
422
|
country: string | null
|
|
319
423
|
}>) {
|
|
320
|
-
if (!row.
|
|
321
|
-
|
|
322
|
-
const regionOfficial = namesIn(preferredNames(row.region_id), officialLanguages)
|
|
323
|
-
// The co-official table is keyed by the region's name in the first official language; a region the names
|
|
324
|
-
// table has no such name for is looked up by its `spr.name`, which for a monolingual country is the same string.
|
|
325
|
-
const regionLanguages = regionLanguagesAlpha3(cc, regionOfficial[0] ?? row.region)
|
|
326
|
-
const regionCoOfficialLanguages = regionLanguages.filter((language) => !officialLanguages.includes(language))
|
|
424
|
+
if (!row.locality || !row.region) continue
|
|
327
425
|
|
|
328
|
-
const
|
|
329
|
-
official: regionOfficial,
|
|
330
|
-
coOfficial: namesIn(preferredNames(row.region_id), regionCoOfficialLanguages),
|
|
331
|
-
}
|
|
426
|
+
const locality = surfaces.locality(cc, row.locality_id, row.locality)
|
|
332
427
|
|
|
333
|
-
const
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
428
|
+
for (const region of surfaces.region(cc, row.region_id, row.region)) {
|
|
429
|
+
// A pair whose region repeats its locality adds no signal about the boundary this recipe measures.
|
|
430
|
+
// The recipe drops that pair, so filtering it here keeps the country budget for rows that remain.
|
|
431
|
+
if (region === locality) continue
|
|
337
432
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
for (const region of regionWrittenForms(row.region, regionNames)) {
|
|
341
|
-
out.push({
|
|
342
|
-
postcode: row.postcode,
|
|
343
|
-
locality,
|
|
344
|
-
region,
|
|
345
|
-
country: row.country ?? "",
|
|
346
|
-
cc,
|
|
347
|
-
locale: convention.locale,
|
|
348
|
-
postcodePlacement: convention.placement,
|
|
349
|
-
})
|
|
433
|
+
out.push({ dependentLocality: null, locality, region, country: row.country ?? "", cc, locale })
|
|
350
434
|
}
|
|
351
435
|
}
|
|
352
436
|
}
|
|
@@ -355,22 +439,22 @@ export async function readTriplesFromParentJoin(
|
|
|
355
439
|
}
|
|
356
440
|
|
|
357
441
|
/**
|
|
358
|
-
* A predicate answering whether a name is a
|
|
442
|
+
* A predicate answering whether a name is a locality the admin gazetteer knows, for one country.
|
|
359
443
|
*
|
|
360
|
-
* The parent-join reader
|
|
361
|
-
*
|
|
362
|
-
*
|
|
363
|
-
* is PT 75%, IN 62%, **MX 41%**. The Mexican misses are colonias — `Zona Centro`, `San Fernando INFONAVIT`, `FOVISSSTE
|
|
364
|
-
* 3a Sección` — and a row teaching one of those as `locality` trains the locality/dependent_locality boundary in the
|
|
365
|
-
* wrong direction. Dropping the row instead costs coverage and teaches nothing false, which is the better of the two.
|
|
444
|
+
* The parent-join reader supplies this field directly.
|
|
445
|
+
* The GeoNames reader requires this correction because treating a colonia as `locality`
|
|
446
|
+
* teaches the wrong locality/dependent_locality boundary.
|
|
366
447
|
*
|
|
367
|
-
*
|
|
368
|
-
*
|
|
448
|
+
* @throws When the gazetteer is not on disk, because a predicate that accepted every
|
|
449
|
+
* name would emit unfiltered rows as though the filter had run.
|
|
369
450
|
*/
|
|
370
|
-
export async function createKnownLocalityCheck(
|
|
371
|
-
|
|
451
|
+
export async function createKnownLocalityCheck(
|
|
452
|
+
country: string,
|
|
453
|
+
adminDB?: PathBuilderLike
|
|
454
|
+
): Promise<(name: string) => boolean> {
|
|
455
|
+
const path = adminDB ?? wofDatabasePath("admin-global-priority-importance.db")
|
|
372
456
|
|
|
373
|
-
|
|
457
|
+
await assertPathExists(path, `createKnownLocalityCheck: no admin gazetteer at ${path}`)
|
|
374
458
|
|
|
375
459
|
using db = new DatabaseClient<WOFDatabase>(path, { readOnly: true })
|
|
376
460
|
|
|
@@ -384,78 +468,65 @@ export async function createKnownLocalityCheck(country: string, adminDB?: string
|
|
|
384
468
|
}
|
|
385
469
|
}
|
|
386
470
|
|
|
387
|
-
// An empty set
|
|
388
|
-
//
|
|
471
|
+
// An empty set is a coverage fact about the gazetteer rather than a verdict on the source,
|
|
472
|
+
// so accept every name rather than dropping everything.
|
|
389
473
|
if (!names.size) return () => true
|
|
390
474
|
|
|
391
475
|
return (name: string) => names.has(name.toLowerCase())
|
|
392
476
|
}
|
|
393
477
|
|
|
394
478
|
/**
|
|
395
|
-
* Read triples straight out of a GeoNames `<CC>.txt` export
|
|
479
|
+
* Read triples straight out of a GeoNames `<CC>.txt` export, with no join.
|
|
396
480
|
*
|
|
397
|
-
*
|
|
398
|
-
*
|
|
399
|
-
* colonia inside `Cuauhtémoc`) and so is PT (`Abrigada` inside `Alenquer`). Reading column 3 as the locality is how the
|
|
400
|
-
* v4.8.0 slice came to teach street names as cities. So `admin2` is the locality, `admin1` the region, and column 3 the
|
|
401
|
-
* DEPENDENT locality — which is also the left context the slice needs.
|
|
481
|
+
* `admin2` supplies the locality, `admin1` supplies the region and column 3 supplies the dependent locality.
|
|
482
|
+
* A locality value from column 3 taught `Mahatma Gandhi Road` as a city.
|
|
402
483
|
*
|
|
403
|
-
*
|
|
404
|
-
*
|
|
484
|
+
* A country whose export lacks admin1 or admin2 yields zero from this reader.
|
|
485
|
+
* That result is correct and needs no fallback.
|
|
405
486
|
*
|
|
406
|
-
*
|
|
407
|
-
* | ---------- | --------: | -----: | -----: | ------------------------------- |
|
|
408
|
-
* | PT, MX, IN | 145k–207k | 100% | 100% | yes |
|
|
409
|
-
* | BD, LK | 1.3k–1.8k | 100% | 100% | yes |
|
|
410
|
-
* | PH | 2,317 | 88% | 88% | yes, 88% of rows |
|
|
411
|
-
* | PK | 2,563 | 100% | **0%** | NO — no city column |
|
|
412
|
-
* | TH | 903 | 100% | **1%** | NO — effectively no city column |
|
|
413
|
-
* | ID | 81,058 | **0%** | 0% | NO — no region either |
|
|
414
|
-
* | ZA | 3,920 | **0%** | — | NO |
|
|
415
|
-
*
|
|
416
|
-
* A country in the NO rows yields zero from this reader, and that is the correct outcome rather than a gap to route
|
|
417
|
-
* around: taking column 3 as the locality is what made the v4.8.0 slice train `Mahatma Gandhi Road` as a city. If one
|
|
418
|
-
* of them is wanted, it needs a city column from somewhere else, not a relaxed mapping.
|
|
419
|
-
*
|
|
420
|
-
* NOT PUBLISHED AT ALL by GeoNames, checked the same day: VE, VN, NP, MM, KH. Those are acquisition questions, and for
|
|
421
|
-
* VE specifically OpenAddresses 404s too — see the arc retrospective.
|
|
422
|
-
*
|
|
423
|
-
* Three source properties a caller cannot see from a row count, all handled here. Hyphen-format countries publish each
|
|
424
|
-
* code TWICE (`3750-000` and `3750000`, exactly 2.00× for PT and PL), so the first surface of a code wins and its twin
|
|
425
|
-
* is dropped. Some countries populate the place but not admin1 — ZA is 100% place, 0% region — which yields nothing
|
|
426
|
-
* this slice can use, so those rows are dropped rather than emitted with a blank region. And the "place name" is often
|
|
427
|
-
* a SUB-locality, which {@link createKnownLocalityCheck} filters.
|
|
487
|
+
* Hyphen-format countries publish each code twice, so the first surface of a code wins.
|
|
428
488
|
*/
|
|
429
489
|
export async function readTriplesFromGeonames(
|
|
430
490
|
country: string,
|
|
431
|
-
path:
|
|
491
|
+
path: PathBuilderLike,
|
|
432
492
|
countryName: string,
|
|
433
493
|
options: { isKnownLocality?: (name: string) => boolean } = {}
|
|
434
494
|
): Promise<PostcodeTriple[]> {
|
|
435
495
|
const convention = POSTCODE_CONVENTIONS.get(country)
|
|
436
496
|
|
|
437
|
-
if (!convention
|
|
497
|
+
if (!convention) return []
|
|
498
|
+
|
|
499
|
+
await assertPathExists(path, `readTriplesFromGeonames: no GeoNames postal export at ${path}`)
|
|
438
500
|
|
|
439
501
|
const isKnownLocality = options.isKnownLocality ?? (await createKnownLocalityCheck(country))
|
|
440
502
|
const out: PostcodeTriple[] = []
|
|
441
503
|
const seen = new Set<string>()
|
|
442
504
|
|
|
505
|
+
// Which column the city sits in is a property of the country's export —
|
|
506
|
+
// see {@link GeonamesLocalityColumn}; the other column becomes the dependent locality,
|
|
507
|
+
// a sub-locality for PT/MX/IN and a county for the US.
|
|
508
|
+
const localityIsPlace = convention.localityColumn === "place"
|
|
509
|
+
|
|
443
510
|
for await (const cells of TSVSpliterator.fromAsync(path, { header: false }) as AsyncIterable<string[]>) {
|
|
444
|
-
const postcode =
|
|
445
|
-
const
|
|
446
|
-
const
|
|
447
|
-
const
|
|
511
|
+
const postcode = cells[GEONAMES_POSTAL_COLUMNS.postcode] ?? ""
|
|
512
|
+
const place = cells[GEONAMES_POSTAL_COLUMNS.place] ?? ""
|
|
513
|
+
const admin2 = cells[GEONAMES_POSTAL_COLUMNS.admin2Name] ?? ""
|
|
514
|
+
const locality = localityIsPlace ? place : admin2
|
|
515
|
+
const dependentLocality = localityIsPlace ? "" : place
|
|
516
|
+
const region = cells[GEONAMES_POSTAL_COLUMNS.admin1Name] ?? ""
|
|
448
517
|
|
|
449
518
|
if (!postcode || !locality || !region) continue
|
|
450
519
|
|
|
451
|
-
// The check applies to the
|
|
452
|
-
//
|
|
520
|
+
// The check applies to the locality.
|
|
521
|
+
// For PT/MX/IN, the other column may hold a street or colonia.
|
|
522
|
+
// The reader emits that value as the dependent locality instead of dropping it.
|
|
453
523
|
if (!isKnownLocality(locality)) continue
|
|
454
524
|
|
|
455
|
-
// A dependent locality that merely repeats its parent teaches a doubled segment
|
|
525
|
+
// A dependent locality that merely repeats its parent teaches a doubled segment rather than a boundary.
|
|
456
526
|
const dep = dependentLocality && dependentLocality !== locality ? dependentLocality : ""
|
|
457
527
|
|
|
458
|
-
// The bare twin of a punctuated code
|
|
528
|
+
// The bare twin of a punctuated code adds no new fact.
|
|
529
|
+
// Both entries would double the country's weight.
|
|
459
530
|
const key = `${postcode.replaceAll("-", "")} ${locality} ${dep}`
|
|
460
531
|
|
|
461
532
|
if (seen.has(key)) continue
|
|
@@ -464,7 +535,7 @@ export async function readTriplesFromGeonames(
|
|
|
464
535
|
|
|
465
536
|
out.push({
|
|
466
537
|
postcode,
|
|
467
|
-
|
|
538
|
+
dependentLocality: dep || null,
|
|
468
539
|
locality,
|
|
469
540
|
region,
|
|
470
541
|
country: countryName,
|
|
@@ -480,8 +551,9 @@ export async function readTriplesFromGeonames(
|
|
|
480
551
|
/**
|
|
481
552
|
* Resolve a GeoNames export path under the standard fetch out-root.
|
|
482
553
|
*/
|
|
483
|
-
export function geonamesPostalPath(country: string, sourcesRoot?:
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
554
|
+
export function geonamesPostalPath(country: string, sourcesRoot?: PathBuilderLike): PathBuilder {
|
|
555
|
+
return PathBuilder.from(sourcesRoot ?? dataRootPath("corpus", "sources"))(
|
|
556
|
+
"geonames-postal",
|
|
557
|
+
`${country.toUpperCase()}.txt`
|
|
558
|
+
)
|
|
487
559
|
}
|